@basmilius/apple-companion-link 0.0.5 → 0.0.6
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.js +3 -3
- package/dist/index.js.map +3 -3
- package/dist/test.js +3 -3
- package/dist/test.js.map +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
`)),r--,r===0)throw Error("Device not found after serveral tries, aborting.");await M(t)}}static airplay(){return new k(ee)}static companionLink(){return new k(re)}static raop(){return new k(te)}}class F extends Number{size;constructor(e,r){super(e);this.size=r}}function U(e,r){return new F(e,r)}class V{value;constructor(e){this.value=e}}function D(e){return new V(e)}class N{value;constructor(e){this.value=e}}function me(e){return new N(e)}function y(e){let r=e.reduce((n,o)=>n+o.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function u(e){return Uint8Array.of(e)}function p(e,r){let t=new Uint8Array(r),s=BigInt(e);for(let n=0;n<r;n++)t[n]=Number(s&0xffn),s>>=8n;return t}function v(e){let r=e.reduce((n,o)=>n+o.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function I(e){return R(e,[])}function R(e,r){let t=null;if(e===null||e===void 0)t=u(4);else if(typeof e==="boolean")t=u(e?1:2);else if(e instanceof V){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),t=y([u(54),new Uint8Array(n)])}else if(e instanceof N){let n=e.value;if(n<40)t=u(8+n);else if(n<=255)t=v([u(48),p(n,1)]);else if(n<=65535)t=v([u(49),p(n,2)]);else if(n<=4294967295)t=v([u(50),p(n,4)]);else t=v([u(51),p(n,8)])}else if(typeof e==="number")if(!Number.isInteger(e)){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e,!0),t=y([u(54),new Uint8Array(n)])}else if(e<40)t=u(8+e);else if(e<=255)t=y([u(48),p(e,1)]);else if(e<=65535)t=y([u(49),p(e,2)]);else if(e<=4294967295)t=y([u(50),p(e,4)]);else t=y([u(51),p(e,8)]);else if(e instanceof F)t=y([u(48+Math.log2(e.size)),p(e.valueOf(),e.size)]);else if(typeof e==="string"){let n=new TextEncoder().encode(e),o=n.length;if(o<=32)t=y([u(64+o),n]);else if(o<=255)t=y([u(97),p(o,1),n]);else if(o<=65535)t=y([u(98),p(o,2),n]);else if(o<=16777215)t=y([u(99),p(o,3),n]);else t=y([u(100),p(o,4),n])}else if(e instanceof Uint8Array||Buffer.isBuffer(e)){let n=e instanceof Uint8Array?e:new Uint8Array(e),o=n.length;if(o<=32)t=y([u(112+o),n]);else if(o<=255)t=y([u(145),p(o,1),n]);else if(o<=65535)t=y([u(146),p(o,2),n]);else t=y([u(147),p(o,4),n])}else if(Array.isArray(e)){let n=y(e.map((i)=>R(i,r))),o=e.length;if(o<=15){if(t=y([u(208+o),n]),o>=15)t=y([t,u(3)])}else t=y([u(223),n,u(3)])}else if(typeof e==="object"){let n=Object.keys(e),o=n.length,i=[];for(let l of n)i.push(R(l,r)),i.push(R(e[l],r));let a;if(o<=15)a=u(224+o);else a=u(239);if(t=v([a,v(i)]),o>=15||r.some((l)=>l===t))t=v([t,u(129)])}else throw TypeError(typeof e);let s=r.findIndex((n)=>n.length===t.length&&n.every((o,i)=>o===t[i]));if(s>=0)if(s<33)t=u(160+s);else if(s<=255)t=y([u(193),p(s,1)]);else if(s<=65535)t=y([u(194),p(s,2)]);else if(s<=4294967295)t=y([u(195),p(s,4)]);else t=y([u(196),p(s,8)]);else if(t.length>1)r.push(t);return t}function $(e){return B(e,[])}function pe(e,r){if(e.length<r)throw TypeError(`Not enough data: need ${r} bytes, have ${e.length}`)}function E(e,r,t){pe(e.subarray(r),t);let s=0n;for(let n=t-1;n>=0;n--)s=s<<8n|BigInt(e[r+n]);return Number(s)}function B(e,r){if(e.length===0)throw TypeError("No data to unpack");let t=e[0],s=!0,n,o;if(t===1)n=!0,o=e.subarray(1);else if(t===2)n=!1,o=e.subarray(1);else if(t===4)n=null,o=e.subarray(1);else if(t===5)n=e.subarray(1,17),o=e.subarray(17);else if(t===6)n=E(e,1,8),o=e.subarray(9);else if(t>=8&&t<=47)n=t-8,o=e.subarray(1);else if(t===53)n=new DataView(e.buffer,e.byteOffset+1,4).getFloat32(0,!0),o=e.subarray(5);else if(t===54)n=new DataView(e.buffer,e.byteOffset+1,8).getFloat64(0,!0),o=e.subarray(9);else if((t&240)===48){let i=2**(t&15),a=E(e,1,i);n=U(a,i),o=e.subarray(1+i)}else if(t>=64&&t<=96){let i=t-64;n=new TextDecoder().decode(e.subarray(1,1+i)),o=e.subarray(1+i)}else if(t>=97&&t<=100){let i=t&15,a=E(e,1,i);n=new TextDecoder().decode(e.subarray(1+i,1+i+a)),o=e.subarray(1+i+a)}else if(t>=112&&t<=144){let i=t-112;n=e.subarray(1,1+i),o=e.subarray(1+i)}else if(t>=145&&t<=148){let i=1<<(t&15)-1,a=E(e,1,i),l=1+i;n=e.subarray(l,l+a),o=e.subarray(l+a)}else if((t&240)===208){let i=t&15,a=e.subarray(1),l=[];if(i===15){while(a[0]!==3){let[m,d]=B(a,r);l.push(m),a=d}a=a.subarray(1)}else for(let m=0;m<i;m++){let[d,P]=B(a,r);l.push(d),a=P}n=l,o=a,s=!1}else if((t&224)===224){let i=t&15,a=e.subarray(1),l={};if(i===15){while(a[0]!==3){let[m,d]=B(a,r),[P,K]=B(d,r);l[m]=P,a=K}a=a.subarray(1)}else for(let m=0;m<i;m++){let[d,P]=B(a,r),[K,Q]=B(P,r);l[d]=K,a=Q}n=l,o=a,s=!1}else if(t>=160&&t<=192){let i=t-160;if(i>=r.length)throw TypeError(`Reference index ${i} out of range`);n=r[i],o=e.subarray(1),s=!1}else if(t>=193&&t<=196){let i=t-192,a=E(e,1,i);if(a>=r.length)throw TypeError(`UID ${a} out of range`);n=r[a],o=e.subarray(1+i),s=!1}else throw TypeError(`Unknown tag 0x${t.toString(16)}`);if(s)r.push(n);return[n,o]}import{parse as q}from"@plist/binary.parse";import{serialize as he}from"@plist/binary.serialize";var z={TransientPairing:16},H={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},_={M1:1,M2:2,M3:3,M4:4,M5:5,M6:6},c={Method:0,Identifier:1,Salt:2,PublicKey:3,Proof:4,EncryptedData:5,State:6,Error:7,BackOff:8,Certificate:9,Signature:10,Permissions:11,FragmentData:12,FragmentLast:13,Name:17,Flags:19};function T(e){if(e.has(c.BackOff)){let r=e.get(c.BackOff),t=r.readUintLE(0,r.length);throw Error(`Device is busy, try again in ${t} seconds.`)}if(e.has(c.Error))throw Error(`Device returned an error code: ${e.get(c.Error).readUint8()}`);throw console.error(e),Error("Invalid response")}function w(e){let r=[];for(let[t,s]of e){let n;if(typeof s==="number")n=Buffer.from([s]);else n=s;let o=0;do{let i=Math.min(n.length-o,255);if(r.push(t,i),i>0)for(let a=0;a<i;a++)r.push(n[o+a]);o+=i}while(o<n.length)}return Buffer.from(r)}function C(e){let r=new Map,t=0;while(t<e.length){let s=e[t++],n=e[t++],o=new Uint8Array(e).slice(t,t+n);t+=n;let i=r.get(s);if(i)r.set(s,Buffer.concat([i,o]));else r.set(s,Buffer.from(o))}return r}import{randomInt as we}from"node:crypto";import{Socket as _e}from"node:net";import{createCipher as ge,createDecipher as xe}from"chacha";var ne=12;function b(e,r,t,s,n){r=se(r);let o=xe(e,r);t&&o.setAAD(t),o.setAuthTag(n);let i=o._update(s);return o._final(),i}function A(e,r,t,s){r=se(r);let n=ge(e,r);t&&n.setAAD(t);let o=n._update(s);n._final();let i=n.getAuthTag();return{ciphertext:o,authTag:i}}function se(e){if(e.length>=ne)return e;return Buffer.concat([Buffer.alloc(ne-e.length,0),e])}import{randomBytes as de}from"node:crypto";import{x25519 as oe}from"@noble/curves/ed25519.js";function W(){let e=de(32);return{publicKey:oe.getPublicKey(e),secretKey:e}}function X(e,r){return oe.getSharedSecret(e,r)}import{hkdfSync as Pe}from"node:crypto";function x(e){return Buffer.from(Pe(e.hash,e.key,e.salt,e.info,e.length))}class O extends EventTarget{get address(){return this.#r}get port(){return this.#e}#r;#e;constructor(e,r){super();this.#r=e,this.#e=r}async connect(){}}var Y=4;class G extends O{get isEncrypted(){return!!this.#n&&!!this.#o}#r;#e={};#t=Buffer.alloc(0);#s;#n;#a;#o;#i;constructor(e,r){super(e,r);this.#i=we(0,65536),this.onClose=this.onClose.bind(this),this.onConnect=this.onConnect.bind(this),this.onData=this.onData.bind(this),this.onEnd=this.onEnd.bind(this),this.onError=this.onError.bind(this),this.#r=new _e,this.#r.on("close",this.onClose),this.#r.on("connect",this.onConnect),this.#r.on("data",this.onData),this.#r.on("end",this.onEnd),this.#r.on("error",this.onError)}async connect(){return g(`Connecting to ${this.address}:${this.port}...`),await new Promise((e)=>{this.#r.connect({host:this.address,port:this.port,keepAlive:!0},e)})}async disconnect(){this.#r.destroy()}async enableEncryption(e,r){this.#n=e,this.#o=r,this.#s=0,this.#a=0}async exchange(e,r){let t=this.#i;return new Promise((s,n)=>{if(ve.includes(e))this.#e[-1]=s;else this.#e[t]=s;this.send(e,r).catch(n)})}async send(e,r){let t=this.#i++;r._x??=U(t,8);let s=Buffer.from(I(r)),n=s.byteLength;if(this.isEncrypted&&n>0)n+=16;let o=Buffer.alloc(4);o.writeUint8(e,0),o.writeUintBE(n,1,3);let i;if(this.isEncrypted){let a=Buffer.alloc(12);a.writeBigUInt64LE(BigInt(this.#a++),0);let l=A(this.#o,a,o,s);i=Buffer.concat([o,l.ciphertext,l.authTag])}else i=Buffer.concat([o,s]);return g("Send data frame",this.isEncrypted,Buffer.from(i).toString("hex"),r),new Promise((a,l)=>{this.#r.write(i,(m)=>m&&l(m)),a()})}async onClose(){g(`Connection closed from ${this.address}:${this.port}`)}async onConnect(){g(`Connected to ${this.address}:${this.port}`)}async onData(e){this.#t=Buffer.concat([this.#t,e]);while(this.#t.byteLength>=Y){let r=this.#t.subarray(0,Y),t=r.readUintBE(1,3),s=Y+t;if(this.#t.byteLength<s){g(`Not enough data yet, waiting on the next frame.. needed=${s} available=${this.#t.byteLength} receivedLength=${e.byteLength}`);return}g(`Frame found length=${s} availableLength=${this.#t.byteLength} receivedLength=${e.byteLength}`);let n=Buffer.from(this.#t.subarray(0,s));this.#t=this.#t.subarray(s),g(`Handle frame, ${this.#t.byteLength} bytes left...`);let i=(await this.#c(n)).subarray(4,s);await this.#f(r,i)}}async onEnd(){g("Connection ended")}async onError(e){g("Error received",e)}async#c(e){if(!this.isEncrypted)return e;let r=e.subarray(0,4),t=r.readUintBE(1,3),s=e.subarray(4,4+t),n=s.subarray(s.byteLength-16),o=s.subarray(0,s.byteLength-16),i=Buffer.alloc(12);i.writeBigUint64LE(BigInt(this.#s++),0);let a=b(this.#n,i,r,o,n);return Buffer.concat([r,a,n])}async#f(e,r){let t=e.readInt8();if(!Se.includes(t))g("Packet not handled, no opack frame.");if([r]=$(r),g("Decoded OPACK",{header:e,payload:r}),"_x"in r){let s=r._x;if(s in this.#e)(this.#e[s]??null)?.([e,r]),delete this.#e[s];else if("_i"in r)this.dispatchEvent(new CustomEvent(r._i,{detail:r._c}));else{let n=r._c,o=Object.keys(n).map((i)=>i.substring(0,-3));for(let i of o)this.dispatchEvent(new CustomEvent(i,{detail:n[i]}))}}else if(this.#e[-1])(this.#e[-1]??null)?.([e,r]),delete this.#e[-1];else g("No handler for message",[e,r])}}var f={Unknown:0,Noop:1,PS_Start:3,PS_Next:4,PV_Start:5,PV_Next:6,U_OPACK:7,E_OPACK:8,P_OPACK:9,PA_Request:10,PA_Response:11,SessionStartRequest:16,SessionStartResponse:17,SessionData:18,FamilyIdentityRequest:32,FamilyIdentityResponse:33,FamilyIdentityUpdate:34},h={Event:1,Request:2,Response:3},Se=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next,f.U_OPACK,f.E_OPACK,f.P_OPACK],ve=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next];import{randomInt as Be}from"node:crypto";class L{#r;#e;constructor(e,r){this.#r=e,this.#e=r}async fetchMediaControlStatus(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchMediaControlStatus",_t:h.Request,_c:{}})}async fetchNowPlayingInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchCurrentNowPlayingInfoEvent",_t:h.Request,_c:{}})}async fetchSupportedActions(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSupportedActionsEvent",_t:h.Request,_c:{}})}async getAttentionState(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchAttentionState",_t:h.Request,_c:{}}),{_c:r}=S(e);switch(r.state){case 1:return"asleep";case 2:return"screensaver";case 3:return"awake";case 4:return"idle";default:return"unknown"}}async getLaunchableApps(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchLaunchableApplicationsEvent",_t:h.Request,_c:{}}),{_c:r}=S(e);return Object.entries(r).map(([t,s])=>({bundleId:t,name:s}))}async getSiriRemoteInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSiriRemoteInfo",_t:h.Request,_c:{}});return q(Buffer.from(e._c.SiriRemoteInfoKey).buffer)}async getUserAccounts(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchUserAccountsEvent",_t:h.Request,_c:{}}),{_c:r}=S(e);return Object.entries(r).map(([t,s])=>({accountId:t,name:s}))}async hidCommand(e,r=!1){await this.#e.exchange(f.E_OPACK,{_i:"_hidC",_t:h.Request,_c:{_hBtS:r?1:2,_hidC:Ce[e]}})}async launchApp(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:h.Request,_c:{_bundleID:e}})}async launchUrl(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:h.Request,_c:{_urlS:e}})}async mediaControlCommand(e,r){let[,t]=await this.#e.exchange(f.E_OPACK,{_i:"_mcc",_t:h.Request,_c:{_mcc:be[e],...r||{}}});return S(t)}async pressButton(e,r="SingleTap",t=500){switch(r){case"DoubleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1),await this.hidCommand(e,!0),await this.hidCommand(e,!1);break;case"Hold":await this.hidCommand(e,!0),await M(t),await this.hidCommand(e,!1);break;case"SingleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1);break}}async switchUserAccount(e){await this.#e.exchange(f.E_OPACK,{_i:"SwitchUserAccountEvent",_t:h.Request,_c:{SwitchAccountID:e}})}async _subscribe(e,r){this.#e.addEventListener(e,r),await this.#e.send(f.E_OPACK,{_i:"_interest",_t:h.Event,_c:{_regEvents:[e]}})}async _unsubscribe(e,r){if(r)this.#e.removeEventListener(e,r);await this.#e.send(f.E_OPACK,{_i:"_interest",_t:h.Event,_c:{_deregEvents:[e]}})}async _sessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_sessionStart",_t:h.Request,_c:{_srvT:"com.apple.tvremoteservices",_sid:Be(0,4294967295)}});return S(e)}async _systemInfo(e){let[,r]=await this.#e.exchange(f.E_OPACK,{_i:"_systemInfo",_t:h.Request,_c:{_bf:0,_cf:512,_clFl:128,_i:"cafecafecafe",_idsID:e.toString(),_pubID:"FF:70:79:61:74:76",_sf:256,_sv:"170.18",model:"iPhone10,6",name:"Bas Companion Link"}});return S(r)}async _touchStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_touchStart",_t:h.Request,_c:{_height:D(1000),_tFl:0,_width:D(1000)}});return S(e)}async _tvrcSessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"TVRCSessionStart",_t:h.Request,_btHP:!1,_inUseProc:"tvremoted",_c:{}});return S(e)}}var Ce={Up:1,Down:2,Left:3,Right:4,Menu:5,Select:6,Home:7,VolumeUp:8,VolumeDown:9,Siri:10,Screensaver:11,Sleep:12,Wake:13,PlayPause:14,ChannelIncrement:15,ChannelDecrement:16,Guide:17,PageUp:18,PageDown:19},be={Play:1,Pause:2,NextTrack:3,PreviousTrack:4,GetVolume:5,SetVolume:6,SkipBy:7,FastForwardBegin:8,FastForwardEnd:9,RewindBegin:10,RewindEnd:11,GetCaptionSettings:12,SetCaptionSettings:13};function S(e){if(typeof e==="object")return e;throw g("Expected an object.",{obj:e}),Error("Expected an object.")}import{SRP as ie,SrpClient as Ae}from"fast-srp-hap";import{v4 as ke}from"uuid";import Z from"tweetnacl";class ae{get name(){return this.#r}get pairingId(){return this.#e}#r;#e;#t;#s;#n;#a;#o;constructor(e,r){this.#t=e,this.#s=r,this.#r="Bas Companion Link",this.#e=Buffer.from(ke().toUpperCase())}async start(){let e=Z.sign.keyPair();this.#n=Buffer.from(e.publicKey),this.#a=Buffer.from(e.secretKey)}async pin(e){let r=await this.m1(),t=await this.m2(r,await e()),s=await this.m3(t),n=await this.m4(s),o=await this.m5(n),i=await this.m6(n,o);if(!i)throw Error("Pairing failed, could not get accessory keys.");return i}async transient(){let e=await this.m1([[c.Flags,z.TransientPairing]]),r=await this.m2(e),t=await this.m3(r),s=await this.m4(t),n=x({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Read-Encryption-Key")}),o=x({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Write-Encryption-Key")});return{pairingId:this.#e,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:o}}async m1(e=[]){let[,r]=await this.#s.exchange(f.PS_Start,{_pd:w([[c.Method,H.PairSetup],[c.State,_.M1],...e]),_pwTy:1}),t=this.#i(r),s=t.get(c.PublicKey),n=t.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,r=j){let t=await ie.genKey(32);this.#o=new Ae(ie.params.hap,e.salt,Buffer.from("Pair-Setup"),Buffer.from(r),t,!0),this.#o.setB(e.publicKey);let s=this.#o.computeA(),n=this.#o.computeM1();return{publicKey:s,proof:n}}async m3(e){let[,r]=await this.#s.exchange(f.PS_Next,{_pd:w([[c.State,_.M3],[c.PublicKey,e.publicKey],[c.Proof,e.proof]]),_pwTy:1});return{serverProof:this.#i(r).get(c.Proof)}}async m4(e){return this.#o.checkM2(e.serverProof),{sharedSecret:this.#o.computeK()}}async m5(e){let r=x({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Controller-Sign-Salt","utf8"),info:Buffer.from("Pair-Setup-Controller-Sign-Info","utf8")}),t=x({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Encrypt-Salt","utf8"),info:Buffer.from("Pair-Setup-Encrypt-Info","utf8")}),s=Buffer.concat([r,this.#e,this.#n]),n=Z.sign.detached(s,this.#a),o=w([[c.Identifier,this.#e],[c.PublicKey,this.#n],[c.Signature,Buffer.from(n)],[c.Name,Buffer.from(I({name:this.#r}))]]),{authTag:i,ciphertext:a}=A(t,Buffer.from("PS-Msg05"),null,o),l=Buffer.concat([a,i]),[,m]=await this.#s.exchange(f.PS_Next,{_pd:w([[c.State,_.M5],[c.EncryptedData,l]]),_pwTy:1}),P=this.#i(m).get(c.EncryptedData),K=P.subarray(0,-16);return{authTag:P.subarray(-16),data:K,sessionKey:t}}async m6(e,r){let t=b(r.sessionKey,Buffer.from("PS-Msg06"),null,r.data,r.authTag),s=C(t),n=s.get(c.Identifier),o=s.get(c.PublicKey),i=s.get(c.Signature),a=x({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Accessory-Sign-Salt"),info:Buffer.from("Pair-Setup-Accessory-Sign-Info")}),l=Buffer.concat([a,n,o]);if(!Z.sign.detached.verify(l,i,o))throw Error("Invalid accessory signature.");return{accessoryIdentifier:n.toString(),accessoryLongTermPublicKey:o,pairingId:this.#e,publicKey:this.#n,secretKey:this.#a}}#i(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=C(e._pd);if(r.has(c.Error))T(r);return g("Decoded TLV",r),r}}import ce from"tweetnacl";class fe{#r;#e;#t;constructor(e,r){this.#r=e,this.#e=r,this.#t=W()}async start(e){let r=await this.#s(),t=await this.#n(e.accessoryIdentifier,e.accessoryLongTermPublicKey,r);return await this.#a(e.pairingId,e.secretKey,t),await this.#o(t)}async#s(){let[,e]=await this.#e.exchange(f.PV_Start,{_pd:w([[c.State,_.M1],[c.PublicKey,Buffer.from(this.#t.publicKey)]]),_auTy:4}),r=this.#i(e),t=r.get(c.PublicKey);return{encryptedData:r.get(c.EncryptedData),serverPublicKey:t}}async#n(e,r,t){let s=Buffer.from(X(this.#t.secretKey,t.serverPublicKey)),n=x({hash:"sha512",key:s,length:32,salt:Buffer.from("Pair-Verify-Encrypt-Salt"),info:Buffer.from("Pair-Verify-Encrypt-Info")}),o=t.encryptedData.subarray(0,-16),i=t.encryptedData.subarray(-16),a=b(n,Buffer.from("PV-Msg02"),null,o,i),l=C(a),m=l.get(c.Identifier),d=l.get(c.Signature);if(m.toString()!==e)throw Error(`Invalid accessory identifier. Expected ${m.toString()} to be ${e}.`);let P=Buffer.concat([t.serverPublicKey,m,this.#t.publicKey]);if(!ce.sign.detached.verify(P,d,r))throw Error("Invalid accessory signature.");return{serverEphemeralPublicKey:t.serverPublicKey,sessionKey:n,sharedSecret:s}}async#a(e,r,t){let s=Buffer.concat([this.#t.publicKey,e,t.serverEphemeralPublicKey]),n=Buffer.from(ce.sign.detached(s,r)),o=w([[c.Identifier,e],[c.Signature,n]]),{authTag:i,ciphertext:a}=A(t.sessionKey,Buffer.from("PV-Msg03"),null,o),l=Buffer.concat([a,i]),[,m]=await this.#e.exchange(f.PV_Next,{_pd:w([[c.State,_.M3],[c.EncryptedData,l]]),_auTy:4});return console.log(this.#i(m)),{}}async#o(e){let r=x({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ServerEncrypt-main")}),t=x({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ClientEncrypt-main")});return{accessoryToControllerKey:r,controllerToAccessoryKey:t}}#i(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=C(e._pd);if(r.has(c.Error))T(r);return g("Decoded TLV",r),r}}class J{get api(){return this.#r}get socket(){return this.#t}get pairing(){return this.#s}get verify(){return this.#n}#r;#e;#t;#s;#n;constructor(e){this.#e=e,this.#t=new G(e.address,e.service.port),this.#r=new L(this,this.#t),this.#s=new ae(this,this.#t),this.#n=new fe(this,this.#t)}async connect(){await this.#t.connect()}}export{he as serializeBinaryPlist,q as parseBinaryPlist,U as opackSizedInt,me as opackInt,D as opackFloat,w as encodeTlv,I as encodeOPack,C as decodeTlv,$ as decodeOPack,T as bailTlv,c as TlvValue,_ as TlvState,H as TlvMethod,z as TlvFlags,k as Discovery,J as CompanionLink};
|
|
1
|
+
import ue from"node-dns-sd";import{createInterface as le}from"node:readline";var Ke=le({input:process.stdin,output:process.stdout});function x(...e){console.debug("[debug]",...e)}async function M(e){return new Promise((r)=>setTimeout(r,e))}var j="3939";var ee="_airplay._tcp.local",re="_companion-link._tcp.local",te="_raop._tcp.local";class k{#r;constructor(e){this.#r=e}async find(){return await ue.discover({name:this.#r})}async findUntil(e,r=10,t=1000){while(r>0){let s=await this.find(),n=s.find((o)=>o.fqdn===e);if(n)return n;if(console.log(),console.log(`Device not found, retrying in ${t}ms...`),console.log(s.map((o)=>` ● ${o.fqdn}`).join(`
|
|
2
|
+
`)),r--,r===0)throw Error("Device not found after serveral tries, aborting.");await M(t)}}static airplay(){return new k(ee)}static companionLink(){return new k(re)}static raop(){return new k(te)}}class F extends Number{size;constructor(e,r){super(e);this.size=r}}function U(e,r){return new F(e,r)}class V{value;constructor(e){this.value=e}}function D(e){return new V(e)}class N{value;constructor(e){this.value=e}}function ye(e){return new N(e)}function y(e){let r=e.reduce((n,o)=>n+o.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function l(e){return Uint8Array.of(e)}function p(e,r){let t=new Uint8Array(r),s=BigInt(e);for(let n=0;n<r;n++)t[n]=Number(s&0xffn),s>>=8n;return t}function B(e){let r=e.reduce((n,o)=>n+o.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function I(e){return R(e,[])}function R(e,r){let t=null;if(e===null||e===void 0)t=l(4);else if(typeof e==="boolean")t=l(e?1:2);else if(e instanceof V){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),t=y([l(54),new Uint8Array(n)])}else if(e instanceof N){let n=e.value;if(n<40)t=l(8+n);else if(n<=255)t=B([l(48),p(n,1)]);else if(n<=65535)t=B([l(49),p(n,2)]);else if(n<=4294967295)t=B([l(50),p(n,4)]);else t=B([l(51),p(n,8)])}else if(typeof e==="number")if(!Number.isInteger(e)){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e,!0),t=y([l(54),new Uint8Array(n)])}else if(e<40)t=l(8+e);else if(e<=255)t=y([l(48),p(e,1)]);else if(e<=65535)t=y([l(49),p(e,2)]);else if(e<=4294967295)t=y([l(50),p(e,4)]);else t=y([l(51),p(e,8)]);else if(e instanceof F)t=y([l(48+Math.log2(e.size)),p(e.valueOf(),e.size)]);else if(typeof e==="string"){let n=new TextEncoder().encode(e),o=n.length;if(o<=32)t=y([l(64+o),n]);else if(o<=255)t=y([l(97),p(o,1),n]);else if(o<=65535)t=y([l(98),p(o,2),n]);else if(o<=16777215)t=y([l(99),p(o,3),n]);else t=y([l(100),p(o,4),n])}else if(e instanceof Uint8Array||Buffer.isBuffer(e)){let n=e instanceof Uint8Array?e:new Uint8Array(e),o=n.length;if(o<=32)t=y([l(112+o),n]);else if(o<=255)t=y([l(145),p(o,1),n]);else if(o<=65535)t=y([l(146),p(o,2),n]);else t=y([l(147),p(o,4),n])}else if(Array.isArray(e)){let n=y(e.map((i)=>R(i,r))),o=e.length;if(o<=15){if(t=y([l(208+o),n]),o>=15)t=y([t,l(3)])}else t=y([l(223),n,l(3)])}else if(typeof e==="object"){let n=Object.keys(e),o=n.length,i=[];for(let u of n)i.push(R(u,r)),i.push(R(e[u],r));let a;if(o<=15)a=l(224+o);else a=l(239);if(t=B([a,B(i)]),o>=15||r.some((u)=>u===t))t=B([t,l(129)])}else throw TypeError(typeof e);let s=r.findIndex((n)=>n.length===t.length&&n.every((o,i)=>o===t[i]));if(s>=0)if(s<33)t=l(160+s);else if(s<=255)t=y([l(193),p(s,1)]);else if(s<=65535)t=y([l(194),p(s,2)]);else if(s<=4294967295)t=y([l(195),p(s,4)]);else t=y([l(196),p(s,8)]);else if(t.length>1)r.push(t);return t}function $(e){return v(e,[])}function me(e,r){if(e.length<r)throw TypeError(`Not enough data: need ${r} bytes, have ${e.length}`)}function E(e,r,t){me(e.subarray(r),t);let s=0n;for(let n=t-1;n>=0;n--)s=s<<8n|BigInt(e[r+n]);return Number(s)}function v(e,r){if(e.length===0)throw TypeError("No data to unpack");let t=e[0],s=!0,n,o;if(t===1)n=!0,o=e.subarray(1);else if(t===2)n=!1,o=e.subarray(1);else if(t===4)n=null,o=e.subarray(1);else if(t===5)n=e.subarray(1,17),o=e.subarray(17);else if(t===6)n=E(e,1,8),o=e.subarray(9);else if(t>=8&&t<=47)n=t-8,o=e.subarray(1);else if(t===53)n=new DataView(e.buffer,e.byteOffset+1,4).getFloat32(0,!0),o=e.subarray(5);else if(t===54)n=new DataView(e.buffer,e.byteOffset+1,8).getFloat64(0,!0),o=e.subarray(9);else if((t&240)===48){let i=2**(t&15),a=E(e,1,i);n=U(a,i),o=e.subarray(1+i)}else if(t>=64&&t<=96){let i=t-64;n=new TextDecoder().decode(e.subarray(1,1+i)),o=e.subarray(1+i)}else if(t>=97&&t<=100){let i=t&15,a=E(e,1,i);n=new TextDecoder().decode(e.subarray(1+i,1+i+a)),o=e.subarray(1+i+a)}else if(t>=112&&t<=144){let i=t-112;n=e.subarray(1,1+i),o=e.subarray(1+i)}else if(t>=145&&t<=148){let i=1<<(t&15)-1,a=E(e,1,i),u=1+i;n=e.subarray(u,u+a),o=e.subarray(u+a)}else if((t&240)===208){let i=t&15,a=e.subarray(1),u=[];if(i===15){while(a[0]!==3){let[m,P]=v(a,r);u.push(m),a=P}a=a.subarray(1)}else for(let m=0;m<i;m++){let[P,d]=v(a,r);u.push(P),a=d}n=u,o=a,s=!1}else if((t&224)===224){let i=t&15,a=e.subarray(1),u={};if(i===15){while(a[0]!==3){let[m,P]=v(a,r),[d,K]=v(P,r);u[m]=d,a=K}a=a.subarray(1)}else for(let m=0;m<i;m++){let[P,d]=v(a,r),[K,Q]=v(d,r);u[P]=K,a=Q}n=u,o=a,s=!1}else if(t>=160&&t<=192){let i=t-160;if(i>=r.length)throw TypeError(`Reference index ${i} out of range`);n=r[i],o=e.subarray(1),s=!1}else if(t>=193&&t<=196){let i=t-192,a=E(e,1,i);if(a>=r.length)throw TypeError(`UID ${a} out of range`);n=r[a],o=e.subarray(1+i),s=!1}else throw TypeError(`Unknown tag 0x${t.toString(16)}`);if(s)r.push(n);return[n,o]}import{parse as q}from"@plist/binary.parse";import{serialize as pe}from"@plist/binary.serialize";var z={TransientPairing:16},H={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},_={M1:1,M2:2,M3:3,M4:4,M5:5,M6:6},c={Method:0,Identifier:1,Salt:2,PublicKey:3,Proof:4,EncryptedData:5,State:6,Error:7,BackOff:8,Certificate:9,Signature:10,Permissions:11,FragmentData:12,FragmentLast:13,Name:17,Flags:19};function T(e){if(e.has(c.BackOff)){let r=e.get(c.BackOff),t=r.readUintLE(0,r.length);throw Error(`Device is busy, try again in ${t} seconds.`)}if(e.has(c.Error))throw Error(`Device returned an error code: ${e.get(c.Error).readUint8()}`);throw console.error(e),Error("Invalid response")}function w(e){let r=[];for(let[t,s]of e){let n;if(typeof s==="number")n=Buffer.from([s]);else n=s;let o=0;do{let i=Math.min(n.length-o,255);if(r.push(t,i),i>0)for(let a=0;a<i;a++)r.push(n[o+a]);o+=i}while(o<n.length)}return Buffer.from(r)}function C(e){let r=new Map,t=0;while(t<e.length){let s=e[t++],n=e[t++],o=new Uint8Array(e).slice(t,t+n);t+=n;let i=r.get(s);if(i)r.set(s,Buffer.concat([i,o]));else r.set(s,Buffer.from(o))}return r}import{randomInt as de}from"node:crypto";import{Socket as we}from"node:net";import{createCipher as he,createDecipher as xe}from"chacha";var ne=12;function A(e,r,t,s,n){r=se(r);let o=xe(e,r);t&&o.setAAD(t),o.setAuthTag(n);let i=o._update(s);return o._final(),i}function b(e,r,t,s){r=se(r);let n=he(e,r);t&&n.setAAD(t);let o=n._update(s);n._final();let i=n.getAuthTag();return{ciphertext:o,authTag:i}}function se(e){if(e.length>=ne)return e;return Buffer.concat([Buffer.alloc(ne-e.length,0),e])}import{randomBytes as ge}from"node:crypto";import{x25519 as oe}from"@noble/curves/ed25519.js";function W(){let e=ge(32);return{publicKey:oe.getPublicKey(e),secretKey:e}}function X(e,r){return oe.getSharedSecret(e,r)}import{hkdfSync as Pe}from"node:crypto";function g(e){return Buffer.from(Pe(e.hash,e.key,e.salt,e.info,e.length))}class O extends EventTarget{get address(){return this.#r}get port(){return this.#e}#r;#e;constructor(e,r){super();this.#r=e,this.#e=r}async connect(){}}var Y=4;class G extends O{get isEncrypted(){return!!this.#n&&!!this.#o}#r;#e={};#t=Buffer.alloc(0);#s;#n;#a;#o;#i;constructor(e,r){super(e,r);this.#i=de(0,65536),this.onClose=this.onClose.bind(this),this.onConnect=this.onConnect.bind(this),this.onData=this.onData.bind(this),this.onEnd=this.onEnd.bind(this),this.onError=this.onError.bind(this),this.#r=new we,this.#r.on("close",this.onClose),this.#r.on("connect",this.onConnect),this.#r.on("data",this.onData),this.#r.on("end",this.onEnd),this.#r.on("error",this.onError)}async connect(){return x(`Connecting to ${this.address}:${this.port}...`),await new Promise((e)=>{this.#r.connect({host:this.address,port:this.port,keepAlive:!0},e)})}async disconnect(){this.#r.destroy()}async enableEncryption(e,r){this.#n=e,this.#o=r,this.#s=0,this.#a=0}async exchange(e,r){let t=this.#i;return new Promise((s,n)=>{if(Se.includes(e))this.#e[-1]=s;else this.#e[t]=s;this.send(e,r).catch(n)})}async send(e,r){let t=this.#i++;r._x??=U(t,8);let s=Buffer.from(I(r)),n=s.byteLength;if(this.isEncrypted&&n>0)n+=16;let o=Buffer.alloc(4);o.writeUint8(e,0),o.writeUintBE(n,1,3);let i;if(this.isEncrypted){let a=Buffer.alloc(12);a.writeBigUInt64LE(BigInt(this.#a++),0);let u=b(this.#o,a,o,s);i=Buffer.concat([o,u.ciphertext,u.authTag])}else i=Buffer.concat([o,s]);return x("Send data frame",this.isEncrypted,Buffer.from(i).toString("hex"),r),new Promise((a,u)=>{this.#r.write(i,(m)=>m&&u(m)),a()})}async onClose(){x(`Connection closed from ${this.address}:${this.port}`)}async onConnect(){x(`Connected to ${this.address}:${this.port}`)}async onData(e){this.#t=Buffer.concat([this.#t,e]);while(this.#t.byteLength>=Y){let r=this.#t.subarray(0,Y),t=r.readUintBE(1,3),s=Y+t;if(this.#t.byteLength<s){x(`Not enough data yet, waiting on the next frame.. needed=${s} available=${this.#t.byteLength} receivedLength=${e.byteLength}`);return}x(`Frame found length=${s} availableLength=${this.#t.byteLength} receivedLength=${e.byteLength}`);let n=Buffer.from(this.#t.subarray(0,s));this.#t=this.#t.subarray(s),x(`Handle frame, ${this.#t.byteLength} bytes left...`);let i=(await this.#c(n)).subarray(4,s);await this.#f(r,i)}}async onEnd(){x("Connection ended")}async onError(e){x("Error received",e)}async#c(e){if(!this.isEncrypted)return e;let r=e.subarray(0,4),t=r.readUintBE(1,3),s=e.subarray(4,4+t),n=s.subarray(s.byteLength-16),o=s.subarray(0,s.byteLength-16),i=Buffer.alloc(12);i.writeBigUint64LE(BigInt(this.#s++),0);let a=A(this.#n,i,r,o,n);return Buffer.concat([r,a,n])}async#f(e,r){let t=e.readInt8();if(!_e.includes(t))x("Packet not handled, no opack frame.");if([r]=$(r),x("Decoded OPACK",{header:e,payload:r}),"_x"in r){let s=r._x;if(s in this.#e)(this.#e[s]??null)?.([e,r]),delete this.#e[s];else if("_i"in r)this.dispatchEvent(new CustomEvent(r._i,{detail:r._c}));else{let n=r._c,o=Object.keys(n).map((i)=>i.substring(0,-3));for(let i of o)this.dispatchEvent(new CustomEvent(i,{detail:n[i]}))}}else if(this.#e[-1])(this.#e[-1]??null)?.([e,r]),delete this.#e[-1];else x("No handler for message",[e,r])}}var f={Unknown:0,Noop:1,PS_Start:3,PS_Next:4,PV_Start:5,PV_Next:6,U_OPACK:7,E_OPACK:8,P_OPACK:9,PA_Request:10,PA_Response:11,SessionStartRequest:16,SessionStartResponse:17,SessionData:18,FamilyIdentityRequest:32,FamilyIdentityResponse:33,FamilyIdentityUpdate:34},h={Event:1,Request:2,Response:3},_e=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next,f.U_OPACK,f.E_OPACK,f.P_OPACK],Se=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next];import{randomInt as Be}from"node:crypto";class L{#r;#e;constructor(e,r){this.#r=e,this.#e=r}async fetchMediaControlStatus(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchMediaControlStatus",_t:h.Request,_c:{}})}async fetchNowPlayingInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchCurrentNowPlayingInfoEvent",_t:h.Request,_c:{}})}async fetchSupportedActions(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSupportedActionsEvent",_t:h.Request,_c:{}})}async getAttentionState(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchAttentionState",_t:h.Request,_c:{}}),{_c:r}=S(e);switch(r.state){case 1:return"asleep";case 2:return"screensaver";case 3:return"awake";case 4:return"idle";default:return"unknown"}}async getLaunchableApps(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchLaunchableApplicationsEvent",_t:h.Request,_c:{}}),{_c:r}=S(e);return Object.entries(r).map(([t,s])=>({bundleId:t,name:s}))}async getSiriRemoteInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSiriRemoteInfo",_t:h.Request,_c:{}});return q(Buffer.from(e._c.SiriRemoteInfoKey).buffer)}async getUserAccounts(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchUserAccountsEvent",_t:h.Request,_c:{}}),{_c:r}=S(e);return Object.entries(r).map(([t,s])=>({accountId:t,name:s}))}async hidCommand(e,r=!1){await this.#e.exchange(f.E_OPACK,{_i:"_hidC",_t:h.Request,_c:{_hBtS:r?1:2,_hidC:ve[e]}})}async launchApp(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:h.Request,_c:{_bundleID:e}})}async launchUrl(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:h.Request,_c:{_urlS:e}})}async mediaControlCommand(e,r){let[,t]=await this.#e.exchange(f.E_OPACK,{_i:"_mcc",_t:h.Request,_c:{_mcc:Ce[e],...r||{}}});return S(t)}async pressButton(e,r="SingleTap",t=500){switch(r){case"DoubleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1),await this.hidCommand(e,!0),await this.hidCommand(e,!1);break;case"Hold":await this.hidCommand(e,!0),await M(t),await this.hidCommand(e,!1);break;case"SingleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1);break}}async switchUserAccount(e){await this.#e.exchange(f.E_OPACK,{_i:"SwitchUserAccountEvent",_t:h.Request,_c:{SwitchAccountID:e}})}async _subscribe(e,r){this.#e.addEventListener(e,r),await this.#e.send(f.E_OPACK,{_i:"_interest",_t:h.Event,_c:{_regEvents:[e]}})}async _unsubscribe(e,r){if(r)this.#e.removeEventListener(e,r);await this.#e.send(f.E_OPACK,{_i:"_interest",_t:h.Event,_c:{_deregEvents:[e]}})}async _sessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_sessionStart",_t:h.Request,_c:{_srvT:"com.apple.tvremoteservices",_sid:Be(0,4294967295)}});return S(e)}async _systemInfo(e){let[,r]=await this.#e.exchange(f.E_OPACK,{_i:"_systemInfo",_t:h.Request,_c:{_bf:0,_cf:512,_clFl:128,_i:"cafecafecafe",_idsID:e.toString(),_pubID:"FF:70:79:61:74:76",_sf:256,_sv:"170.18",model:"iPhone10,6",name:"Bas Companion Link"}});return S(r)}async _touchStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_touchStart",_t:h.Request,_c:{_height:D(1000),_tFl:0,_width:D(1000)}});return S(e)}async _tvrcSessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"TVRCSessionStart",_t:h.Request,_btHP:!1,_inUseProc:"tvremoted",_c:{}});return S(e)}}var ve={Up:1,Down:2,Left:3,Right:4,Menu:5,Select:6,Home:7,VolumeUp:8,VolumeDown:9,Siri:10,Screensaver:11,Sleep:12,Wake:13,PlayPause:14,ChannelIncrement:15,ChannelDecrement:16,Guide:17,PageUp:18,PageDown:19},Ce={Play:1,Pause:2,NextTrack:3,PreviousTrack:4,GetVolume:5,SetVolume:6,SkipBy:7,FastForwardBegin:8,FastForwardEnd:9,RewindBegin:10,RewindEnd:11,GetCaptionSettings:12,SetCaptionSettings:13};function S(e){if(typeof e==="object")return e;throw x("Expected an object.",{obj:e}),Error("Expected an object.")}import{SRP as ie,SrpClient as Ae}from"fast-srp-hap";import{v4 as be}from"uuid";import Z from"tweetnacl";class ae{get name(){return this.#r}get pairingId(){return this.#e}#r;#e;#t;#s;#n;#a;#o;constructor(e,r){this.#t=e,this.#s=r,this.#r="Bas Companion Link",this.#e=Buffer.from(be().toUpperCase())}async start(){let e=Z.sign.keyPair();this.#n=Buffer.from(e.publicKey),this.#a=Buffer.from(e.secretKey)}async pin(e){let r=await this.m1(),t=await this.m2(r,await e()),s=await this.m3(t),n=await this.m4(s),o=await this.m5(n),i=await this.m6(n,o);if(!i)throw Error("Pairing failed, could not get accessory keys.");return i}async transient(){let e=await this.m1([[c.Flags,z.TransientPairing]]),r=await this.m2(e),t=await this.m3(r),s=await this.m4(t),n=g({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Read-Encryption-Key")}),o=g({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Write-Encryption-Key")});return{pairingId:this.#e,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:o}}async m1(e=[]){let[,r]=await this.#s.exchange(f.PS_Start,{_pd:w([[c.Method,H.PairSetup],[c.State,_.M1],...e]),_pwTy:1}),t=this.#i(r),s=t.get(c.PublicKey),n=t.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,r=j){let t=await ie.genKey(32);this.#o=new Ae(ie.params.hap,e.salt,Buffer.from("Pair-Setup"),Buffer.from(r),t,!0),this.#o.setB(e.publicKey);let s=this.#o.computeA(),n=this.#o.computeM1();return{publicKey:s,proof:n}}async m3(e){let[,r]=await this.#s.exchange(f.PS_Next,{_pd:w([[c.State,_.M3],[c.PublicKey,e.publicKey],[c.Proof,e.proof]]),_pwTy:1});return{serverProof:this.#i(r).get(c.Proof)}}async m4(e){return this.#o.checkM2(e.serverProof),{sharedSecret:this.#o.computeK()}}async m5(e){let r=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Controller-Sign-Salt","utf8"),info:Buffer.from("Pair-Setup-Controller-Sign-Info","utf8")}),t=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Encrypt-Salt","utf8"),info:Buffer.from("Pair-Setup-Encrypt-Info","utf8")}),s=Buffer.concat([r,this.#e,this.#n]),n=Z.sign.detached(s,this.#a),o=w([[c.Identifier,this.#e],[c.PublicKey,this.#n],[c.Signature,Buffer.from(n)],[c.Name,Buffer.from(I({name:this.#r}))]]),{authTag:i,ciphertext:a}=b(t,Buffer.from("PS-Msg05"),null,o),u=Buffer.concat([a,i]),[,m]=await this.#s.exchange(f.PS_Next,{_pd:w([[c.State,_.M5],[c.EncryptedData,u]]),_pwTy:1}),d=this.#i(m).get(c.EncryptedData),K=d.subarray(0,-16);return{authTag:d.subarray(-16),data:K,sessionKey:t}}async m6(e,r){let t=A(r.sessionKey,Buffer.from("PS-Msg06"),null,r.data,r.authTag),s=C(t),n=s.get(c.Identifier),o=s.get(c.PublicKey),i=s.get(c.Signature),a=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Accessory-Sign-Salt"),info:Buffer.from("Pair-Setup-Accessory-Sign-Info")}),u=Buffer.concat([a,n,o]);if(!Z.sign.detached.verify(u,i,o))throw Error("Invalid accessory signature.");return{accessoryIdentifier:n.toString(),accessoryLongTermPublicKey:o,pairingId:this.#e,publicKey:this.#n,secretKey:this.#a}}#i(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=C(e._pd);if(r.has(c.Error))T(r);return x("Decoded TLV",r),r}}import ce from"tweetnacl";class fe{#r;#e;#t;constructor(e,r){this.#r=e,this.#e=r,this.#t=W()}async start(e){let r=await this.#s(),t=await this.#n(e.accessoryIdentifier,e.accessoryLongTermPublicKey,r);return await this.#a(e.pairingId,e.secretKey,t),await this.#o(t)}async#s(){let[,e]=await this.#e.exchange(f.PV_Start,{_pd:w([[c.State,_.M1],[c.PublicKey,Buffer.from(this.#t.publicKey)]]),_auTy:4}),r=this.#i(e),t=r.get(c.PublicKey);return{encryptedData:r.get(c.EncryptedData),serverPublicKey:t}}async#n(e,r,t){let s=Buffer.from(X(this.#t.secretKey,t.serverPublicKey)),n=g({hash:"sha512",key:s,length:32,salt:Buffer.from("Pair-Verify-Encrypt-Salt"),info:Buffer.from("Pair-Verify-Encrypt-Info")}),o=t.encryptedData.subarray(0,-16),i=t.encryptedData.subarray(-16),a=A(n,Buffer.from("PV-Msg02"),null,o,i),u=C(a),m=u.get(c.Identifier),P=u.get(c.Signature);if(m.toString()!==e)throw Error(`Invalid accessory identifier. Expected ${m.toString()} to be ${e}.`);let d=Buffer.concat([t.serverPublicKey,m,this.#t.publicKey]);if(!ce.sign.detached.verify(d,P,r))throw Error("Invalid accessory signature.");return{serverEphemeralPublicKey:t.serverPublicKey,sessionKey:n,sharedSecret:s}}async#a(e,r,t){let s=Buffer.concat([this.#t.publicKey,e,t.serverEphemeralPublicKey]),n=Buffer.from(ce.sign.detached(s,r)),o=w([[c.Identifier,e],[c.Signature,n]]),{authTag:i,ciphertext:a}=b(t.sessionKey,Buffer.from("PV-Msg03"),null,o),u=Buffer.concat([a,i]),[,m]=await this.#e.exchange(f.PV_Next,{_pd:w([[c.State,_.M3],[c.EncryptedData,u]]),_auTy:4});return console.log(this.#i(m)),{}}async#o(e){let r=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ServerEncrypt-main")}),t=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ClientEncrypt-main")});return{accessoryToControllerKey:r,controllerToAccessoryKey:t}}#i(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=C(e._pd);if(r.has(c.Error))T(r);return x("Decoded TLV",r),r}}class J{get api(){return this.#r}get socket(){return this.#t}get pairing(){return this.#s}get verify(){return this.#n}#r;#e;#t;#s;#n;constructor(e){this.#e=e,this.#t=new G(e.address,e.service.port),this.#r=new L(this,this.#t),this.#s=new ae(this,this.#t),this.#n=new fe(this,this.#t)}async connect(){await this.#t.connect()}}export{pe as serializeBinaryPlist,q as parseBinaryPlist,U as opackSizedInt,ye as opackInt,D as opackFloat,w as encodeTlv,I as encodeOPack,C as decodeTlv,$ as decodeOPack,T as bailTlv,c as TlvValue,_ as TlvState,H as TlvMethod,z as TlvFlags,k as Discovery,J as CompanionLink};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=7517CEBBA266A57D64756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"sources": ["../src/discovery/discovery.ts", "../src/cli.ts", "../src/const.ts", "../src/encoding/opack.ts", "../src/encoding/plist.ts", "../src/encoding/tlv8.ts", "../src/socket/companionLink.ts", "../src/crypto/chacha20.ts", "../src/crypto/curve25519.ts", "../src/crypto/hkdf.ts", "../src/socket/base.ts", "../src/protocol/api/companionLink.ts", "../src/protocol/pairing/companionLink.ts", "../src/protocol/verify/companionLink.ts", "../src/protocol/companionLink.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import mdns, { Result } from 'node-dns-sd';\nimport { waitFor } from '@/cli';\nimport { AIRPLAY_SERVICE, COMPANION_LINK_SERVICE, RAOP_SERVICE } from '@/const';\n\nexport default class Discovery {\n readonly #service: string;\n\n constructor(service: string) {\n this.#service = service;\n }\n\n async find(): Promise<Result[]> {\n return await mdns.discover({\n name: this.#service\n });\n }\n\n async findUntil(fqdn: string, tries: number = 10, timeout: number = 1000): Promise<Result> {\n while (tries > 0) {\n const devices = await this.find();\n const device = devices.find(device => device.fqdn === fqdn);\n\n if (device) {\n return device;\n }\n\n console.log();\n console.log(`Device not found, retrying in ${timeout}ms...`);\n console.log(devices.map(d => ` ● ${d.fqdn}`).join('\\n'));\n\n tries--;\n\n if (tries === 0) {\n throw new Error('Device not found after serveral tries, aborting.');\n }\n\n await waitFor(timeout);\n }\n }\n\n static airplay(): Discovery {\n return new Discovery(AIRPLAY_SERVICE);\n }\n\n static companionLink(): Discovery {\n return new Discovery(COMPANION_LINK_SERVICE);\n }\n\n static raop(): Discovery {\n return new Discovery(RAOP_SERVICE);\n }\n}\n",
|
|
6
|
-
"import { createInterface } from 'node:readline';\
|
|
6
|
+
"import { createInterface } from 'node:readline';\n// import { styleText } from 'node:util';\n\nconst stdin = createInterface({\n input: process.stdin,\n output: process.stdout\n});\n\nexport function debug(...data: any[]): void {\n // console.debug(styleText('cyan', '[debug]'), ...data);\n console.debug('[debug]', ...data);\n}\n\nexport async function prompt(message: string): Promise<string> {\n return await new Promise<string>(resolve => stdin.question(`${message}: `, resolve));\n}\n\nexport async function waitFor(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n",
|
|
7
7
|
"export const AIRPLAY_TRANSIENT_PIN = '3939';\n\nexport const HTTP_TIMEOUT = 15000;\n\nexport const AIRPLAY_SERVICE = '_airplay._tcp.local';\nexport const COMPANION_LINK_SERVICE = '_companion-link._tcp.local';\nexport const RAOP_SERVICE = '_raop._tcp.local';\n",
|
|
8
8
|
"type Packed = Uint8Array;\ntype ObjectList = Packed[];\n\nclass SizedInt extends Number {\n size: number;\n\n constructor(value: number, size: number) {\n super(value);\n this.size = size;\n }\n}\n\nconst _SIZED_INT_TYPES: Record<number, typeof SizedInt> = {};\n\nexport function sizedInt(value: number, size: number): SizedInt {\n return new SizedInt(value, size);\n}\n\nclass OPACKFloat {\n value: number;\n\n constructor(value: number) {\n this.value = value;\n }\n}\n\nexport function float(value: number) {\n return new OPACKFloat(value);\n}\n\nclass OPACKInt {\n value: number;\n\n constructor(value: number) {\n this.value = value;\n }\n}\n\nexport function int(value: number) {\n return new OPACKInt(value);\n}\n\nfunction concat(arr: Uint8Array[]): Uint8Array {\n const total = arr.reduce((s, a) => s + a.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const a of arr) {\n out.set(a, off);\n off += a.length;\n }\n return out;\n}\n\nfunction u8(b: number) {\n return Uint8Array.of(b);\n}\n\nfunction uintToLEBytes(value: number | bigint, byteLen: number): Uint8Array {\n const out = new Uint8Array(byteLen);\n let v = BigInt(value);\n for (let i = 0; i < byteLen; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction concatUint8Arrays(arrays: Uint8Array[]): Uint8Array {\n const total = arrays.reduce((sum, a) => sum + a.length, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const a of arrays) {\n out.set(a, offset);\n offset += a.length;\n }\n return out;\n}\n\nexport function pack(data: any): Uint8Array {\n return _pack(data, []);\n}\n\nfunction _pack(data: any, objectList: ObjectList): Uint8Array {\n let packed: Uint8Array | null = null;\n\n if (data === null || data === undefined) packed = u8(0x04);\n else if (typeof data === 'boolean') packed = u8(data ? 0x01 : 0x02);\n else if (data instanceof OPACKFloat) {\n const buf = new ArrayBuffer(8);\n new DataView(buf).setFloat64(0, data.value, true);\n packed = concat([u8(0x36), new Uint8Array(buf)]);\n } else if (data instanceof OPACKInt) {\n const val = data.value;\n if (val < 0x28) packed = u8(0x08 + val);\n else if (val <= 0xff) packed = concatUint8Arrays([u8(0x30), uintToLEBytes(val, 1)]);\n else if (val <= 0xffff) packed = concatUint8Arrays([u8(0x31), uintToLEBytes(val, 2)]);\n else if (val <= 0xffffffff) packed = concatUint8Arrays([u8(0x32), uintToLEBytes(val, 4)]);\n else packed = concatUint8Arrays([u8(0x33), uintToLEBytes(val, 8)]);\n } else if (typeof data === 'number') {\n if (!Number.isInteger(data)) {\n const buf = new ArrayBuffer(8);\n new DataView(buf).setFloat64(0, data, true);\n packed = concat([u8(0x36), new Uint8Array(buf)]);\n } else {\n if (data < 0x28) packed = u8(0x08 + data);\n else if (data <= 0xff) packed = concat([u8(0x30), uintToLEBytes(data, 1)]);\n else if (data <= 0xffff) packed = concat([u8(0x31), uintToLEBytes(data, 2)]);\n else if (data <= 0xffffffff) packed = concat([u8(0x32), uintToLEBytes(data, 4)]);\n else packed = concat([u8(0x33), uintToLEBytes(data, 8)]);\n }\n } else if (data instanceof SizedInt) {\n packed = concat([u8(0x30 + Math.log2(data.size)), uintToLEBytes(data.valueOf(), data.size)]);\n } else if (typeof data === 'string') {\n const b = new TextEncoder().encode(data);\n const len = b.length;\n if (len <= 0x20) packed = concat([u8(0x40 + len), b]);\n else if (len <= 0xff) packed = concat([u8(0x61), uintToLEBytes(len, 1), b]);\n else if (len <= 0xffff) packed = concat([u8(0x62), uintToLEBytes(len, 2), b]);\n else if (len <= 0xffffff) packed = concat([u8(0x63), uintToLEBytes(len, 3), b]);\n else packed = concat([u8(0x64), uintToLEBytes(len, 4), b]);\n } else if (data instanceof Uint8Array || Buffer.isBuffer(data)) {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n const len = bytes.length;\n if (len <= 0x20) packed = concat([u8(0x70 + len), bytes]);\n else if (len <= 0xff) packed = concat([u8(0x91), uintToLEBytes(len, 1), bytes]);\n else if (len <= 0xffff) packed = concat([u8(0x92), uintToLEBytes(len, 2), bytes]);\n else packed = concat([u8(0x93), uintToLEBytes(len, 4), bytes]);\n } else if (Array.isArray(data)) {\n const body = concat(data.map(d => _pack(d, objectList)));\n const len = data.length;\n if (len <= 0x0f) {\n packed = concat([u8(0xd0 + len), body]);\n if (len >= 0x0f) packed = concat([packed, u8(0x03)]);\n } else packed = concat([u8(0xdf), body, u8(0x03)]);\n } else if (typeof data === 'object') {\n const keys = Object.keys(data);\n const len = keys.length;\n const pairs: Uint8Array[] = [];\n for (const k of keys) {\n pairs.push(_pack(k, objectList));\n pairs.push(_pack((data as any)[k], objectList));\n }\n let header: Uint8Array;\n if (len <= 0x0f) {\n header = u8(0xE0 + len);\n } else {\n header = u8(0xEF);\n }\n packed = concatUint8Arrays([header, concatUint8Arrays(pairs)]);\n // terminator\n if (len >= 0x0f || objectList.some(v => v === packed)) {\n packed = concatUint8Arrays([packed, u8(0x81)]);\n }\n } else throw new TypeError(typeof data + '');\n\n // Object reuse\n const idx = objectList.findIndex(v => v.length === packed!.length && v.every((x, i) => x === packed![i]));\n if (idx >= 0) {\n if (idx < 0x21) packed = u8(0xA0 + idx);\n else if (idx <= 0xff) packed = concat([u8(0xC1), uintToLEBytes(idx, 1)]);\n else if (idx <= 0xffff) packed = concat([u8(0xC2), uintToLEBytes(idx, 2)]);\n else if (idx <= 0xffffffff) packed = concat([u8(0xC3), uintToLEBytes(idx, 4)]);\n else packed = concat([u8(0xC4), uintToLEBytes(idx, 8)]);\n } else if (packed!.length > 1) objectList.push(packed!);\n\n return packed!;\n}\n\n/* UNPACK */\nexport function unpack(data: Uint8Array): [any, Uint8Array] {\n return _unpack(data, []);\n}\n\nfunction ensureAvailable(buf: Uint8Array, need: number) {\n if (buf.length < need) throw new TypeError(`Not enough data: need ${need} bytes, have ${buf.length}`);\n}\n\nfunction readLittleEndian(buf: Uint8Array, offset: number, len: number) {\n ensureAvailable(buf.subarray(offset), len);\n let v = 0n;\n for (let i = len - 1; i >= 0; i--) v = (v << 8n) | BigInt(buf[offset + i]);\n return Number(v);\n}\n\nfunction _unpack(data: Uint8Array, objectList: any[]): [any, Uint8Array] {\n if (data.length === 0) throw new TypeError('No data to unpack');\n const tag = data[0];\n let addToObjectList = true;\n let value: any;\n let rest: Uint8Array;\n\n // simple tokens\n if (tag === 0x01) { value = true; rest = data.subarray(1); }\n else if (tag === 0x02) { value = false; rest = data.subarray(1); }\n else if (tag === 0x04) { value = null; rest = data.subarray(1); }\n else if (tag === 0x05) {\n value = data.subarray(1, 17);\n rest = data.subarray(17);\n }\n else if (tag === 0x06) {\n value = readLittleEndian(data, 1, 8);\n rest = data.subarray(9);\n }\n else if (tag >= 0x08 && tag <= 0x2f) {\n value = tag - 8;\n rest = data.subarray(1);\n }\n else if (tag === 0x35) {\n const view = new DataView(data.buffer, data.byteOffset + 1, 4);\n value = view.getFloat32(0, true);\n rest = data.subarray(5);\n }\n else if (tag === 0x36) {\n const view = new DataView(data.buffer, data.byteOffset + 1, 8);\n value = view.getFloat64(0, true);\n rest = data.subarray(9);\n }\n else if ((tag & 0xF0) === 0x30) {\n const noOfBytes = 2 ** (tag & 0xF);\n const val = readLittleEndian(data, 1, noOfBytes);\n value = sizedInt(val, noOfBytes);\n rest = data.subarray(1 + noOfBytes);\n }\n else if (tag >= 0x40 && tag <= 0x60) {\n const length = tag - 0x40;\n value = new TextDecoder().decode(data.subarray(1, 1 + length));\n rest = data.subarray(1 + length);\n }\n else if (tag >= 0x61 && tag <= 0x64) {\n const lenBytes = tag & 0xF;\n const length = readLittleEndian(data, 1, lenBytes);\n value = new TextDecoder().decode(data.subarray(1 + lenBytes, 1 + lenBytes + length));\n rest = data.subarray(1 + lenBytes + length);\n }\n else if (tag >= 0x70 && tag <= 0x90) {\n const length = tag - 0x70;\n value = data.subarray(1, 1 + length);\n rest = data.subarray(1 + length);\n }\n else if (tag >= 0x91 && tag <= 0x94) {\n const noOfBytes = 1 << ((tag & 0xF) - 1);\n const length = readLittleEndian(data, 1, noOfBytes);\n const start = 1 + noOfBytes;\n value = data.subarray(start, start + length);\n rest = data.subarray(start + length);\n }\n else if ((tag & 0xF0) === 0xD0) {\n const count = tag & 0xF;\n let ptr = data.subarray(1);\n const arr: any[] = [];\n if (count === 0xF) {\n while (ptr[0] !== 0x03) {\n const [v, r] = _unpack(ptr, objectList);\n arr.push(v);\n ptr = r;\n }\n ptr = ptr.subarray(1);\n } else {\n for (let i = 0; i < count; i++) {\n const [v, r] = _unpack(ptr, objectList);\n arr.push(v);\n ptr = r;\n }\n }\n value = arr;\n rest = ptr;\n addToObjectList = false;\n }\n else if ((tag & 0xE0) === 0xE0) {\n const count = tag & 0xF;\n let ptr = data.subarray(1);\n const obj: Record<string, any> = {};\n if (count === 0xF) {\n while (ptr[0] !== 0x03) {\n const [k, r1] = _unpack(ptr, objectList);\n const [v, r2] = _unpack(r1, objectList);\n obj[k] = v;\n ptr = r2;\n }\n ptr = ptr.subarray(1);\n } else {\n for (let i = 0; i < count; i++) {\n const [k, r1] = _unpack(ptr, objectList);\n const [v, r2] = _unpack(r1, objectList);\n obj[k] = v;\n ptr = r2;\n }\n }\n value = obj;\n rest = ptr;\n addToObjectList = false;\n }\n else if (tag >= 0xA0 && tag <= 0xC0) {\n const idx = tag - 0xA0;\n if (idx >= objectList.length) throw new TypeError(`Reference index ${idx} out of range`);\n value = objectList[idx];\n rest = data.subarray(1);\n addToObjectList = false;\n }\n else if (tag >= 0xC1 && tag <= 0xC4) {\n const len = tag - 0xC0;\n const uid = readLittleEndian(data, 1, len);\n if (uid >= objectList.length) throw new TypeError(`UID ${uid} out of range`);\n value = objectList[uid];\n rest = data.subarray(1 + len);\n addToObjectList = false;\n }\n else {\n throw new TypeError(`Unknown tag 0x${tag.toString(16)}`);\n }\n\n if (addToObjectList) objectList.push(value);\n return [value, rest];\n}\n",
|
|
9
9
|
"export { parse } from '@plist/binary.parse';\nexport { serialize } from '@plist/binary.serialize';\n",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"import tweetnacl, { type BoxKeyPair } from 'tweetnacl';\nimport { debug } from '@/cli';\nimport { decryptChacha20, encryptChacha20, generateCurve25519KeyPair, generateCurve25519SharedSecKey, hkdf } from '@/crypto';\nimport { bailTlv, decodeTlv, encodeTlv, TlvState, TlvValue } from '@/encoding';\nimport { CompanionLinkFrameType, CompanionLinkSocket } from '@/socket';\nimport CompanionLink from '../companionLink';\n\nexport default class {\n readonly #protocol: CompanionLink;\n readonly #socket: CompanionLinkSocket;\n readonly #ephemeralKeyPair: BoxKeyPair;\n\n constructor(protocol: CompanionLink, socket: CompanionLinkSocket) {\n this.#protocol = protocol;\n this.#socket = socket;\n this.#ephemeralKeyPair = generateCurve25519KeyPair();\n }\n\n async start(credentials: Credentials): Promise<AccessoryKeys> {\n const m1 = await this.#m1();\n const m2 = await this.#m2(credentials.accessoryIdentifier, credentials.accessoryLongTermPublicKey, m1);\n\n await this.#m3(credentials.pairingId, credentials.secretKey, m2);\n\n return await this.#m4(m2);\n }\n\n async #m1(): Promise<M1> {\n const [, response] = await this.#socket.exchange(CompanionLinkFrameType.PV_Start, {\n _pd: encodeTlv([\n [TlvValue.State, TlvState.M1],\n [TlvValue.PublicKey, Buffer.from(this.#ephemeralKeyPair.publicKey)]\n ]),\n _auTy: 4\n });\n\n const data = this.#tlv(response);\n const serverPublicKey = data.get(TlvValue.PublicKey);\n const encryptedData = data.get(TlvValue.EncryptedData);\n\n return {\n encryptedData,\n serverPublicKey\n };\n }\n\n async #m2(localAccessoryIdentifier: string, longTermPublicKey: Buffer, m1: M1): Promise<M2> {\n const sharedSecret = Buffer.from(generateCurve25519SharedSecKey(\n this.#ephemeralKeyPair.secretKey,\n m1.serverPublicKey\n ));\n\n const sessionKey = hkdf({\n hash: 'sha512',\n key: sharedSecret,\n length: 32,\n salt: Buffer.from('Pair-Verify-Encrypt-Salt'),\n info: Buffer.from('Pair-Verify-Encrypt-Info')\n });\n\n const encryptedData = m1.encryptedData.subarray(0, -16);\n const encryptedTag = m1.encryptedData.subarray(-16);\n\n const data = decryptChacha20(sessionKey, Buffer.from('PV-Msg02'), null, encryptedData, encryptedTag);\n const tlv = decodeTlv(data);\n\n const accessoryIdentifier = tlv.get(TlvValue.Identifier);\n const accessorySignature = tlv.get(TlvValue.Signature);\n\n if (accessoryIdentifier.toString() !== localAccessoryIdentifier) {\n throw new Error(`Invalid accessory identifier. Expected ${accessoryIdentifier.toString()} to be ${localAccessoryIdentifier}.`);\n }\n\n const accessoryInfo = Buffer.concat([\n m1.serverPublicKey,\n accessoryIdentifier,\n this.#ephemeralKeyPair.publicKey\n ]);\n\n if (!tweetnacl.sign.detached.verify(accessoryInfo, accessorySignature, longTermPublicKey)) {\n throw new Error('Invalid accessory signature.');\n }\n\n return {\n serverEphemeralPublicKey: m1.serverPublicKey,\n sessionKey,\n sharedSecret\n };\n }\n\n async #m3(pairingId: Buffer, secretKey: Buffer, m2: M2): Promise<M3> {\n const iosDeviceInfo = Buffer.concat([\n this.#ephemeralKeyPair.publicKey,\n pairingId,\n m2.serverEphemeralPublicKey\n ]);\n\n const iosDeviceSignature = Buffer.from(tweetnacl.sign.detached(iosDeviceInfo, secretKey));\n\n const innerTlv = encodeTlv([\n [TlvValue.Identifier, pairingId],\n [TlvValue.Signature, iosDeviceSignature]\n ]);\n\n const {authTag, ciphertext} = encryptChacha20(m2.sessionKey, Buffer.from('PV-Msg03'), null, innerTlv);\n const encrypted = Buffer.concat([ciphertext, authTag]);\n\n const [, response] = await this.#socket.exchange(CompanionLinkFrameType.PV_Next, {\n _pd: encodeTlv([\n [TlvValue.State, TlvState.M3],\n [TlvValue.EncryptedData, encrypted]\n ]),\n _auTy: 4\n });\n\n console.log(this.#tlv(response));\n\n return {};\n }\n\n async #m4(m2: M2): Promise<AccessoryKeys> {\n const accessoryToControllerKey = hkdf({\n hash: 'sha512',\n key: m2.sharedSecret,\n length: 32,\n salt: Buffer.alloc(0),\n info: Buffer.from('ServerEncrypt-main')\n });\n\n const controllerToAccessoryKey = hkdf({\n hash: 'sha512',\n key: m2.sharedSecret,\n length: 32,\n salt: Buffer.alloc(0),\n info: Buffer.from('ClientEncrypt-main')\n });\n\n return {\n accessoryToControllerKey,\n controllerToAccessoryKey\n };\n }\n\n #tlv(response: unknown): Map<number, Buffer> {\n if (typeof response !== 'object' || response === null) {\n throw new Error('Invalid response from receiver.');\n }\n\n const data = decodeTlv(response['_pd']);\n\n if (data.has(TlvValue.Error)) {\n bailTlv(data);\n }\n\n debug('Decoded TLV', data);\n\n return data;\n }\n}\n\ntype Credentials = {\n readonly accessoryIdentifier: string;\n readonly accessoryLongTermPublicKey: Buffer;\n readonly pairingId: Buffer;\n readonly publicKey: Buffer;\n readonly secretKey: Buffer;\n};\n\ntype M1 = {\n readonly encryptedData: Buffer;\n readonly serverPublicKey: Buffer;\n};\n\ntype M2 = {\n readonly serverEphemeralPublicKey: Buffer;\n readonly sessionKey: Buffer;\n readonly sharedSecret: Buffer;\n};\n\ntype M3 = {};\n\ntype AccessoryKeys = {\n readonly accessoryToControllerKey: Buffer;\n readonly controllerToAccessoryKey: Buffer;\n};\n",
|
|
19
19
|
"import { Result } from 'node-dns-sd';\nimport { CompanionLinkSocket } from '@/socket';\nimport Api from './api/companionLink';\nimport Pairing from './pairing/companionLink';\nimport Verify from './verify/companionLink';\n\nexport default class CompanionLink {\n get api(): Api {\n return this.#api;\n }\n\n get socket(): CompanionLinkSocket {\n return this.#socket;\n }\n\n get pairing(): Pairing {\n return this.#pairing;\n }\n\n get verify(): Verify {\n return this.#verify;\n }\n\n readonly #api: Api;\n readonly #device: Result;\n readonly #socket: CompanionLinkSocket;\n readonly #pairing: Pairing;\n readonly #verify: Verify;\n\n constructor(device: Result) {\n this.#device = device;\n this.#socket = new CompanionLinkSocket(device.address, device.service.port);\n this.#api = new Api(this, this.#socket);\n this.#pairing = new Pairing(this, this.#socket);\n this.#verify = new Verify(this, this.#socket);\n }\n\n async connect(): Promise<void> {\n await this.#socket.connect();\n }\n}\n"
|
|
20
20
|
],
|
|
21
|
-
"mappings": "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",
|
|
22
|
-
"debugId": "
|
|
21
|
+
"mappings": "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",
|
|
22
|
+
"debugId": "7517CEBBA266A57D64756E2164756E21",
|
|
23
23
|
"names": []
|
|
24
24
|
}
|
package/dist/test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{createInterface as le}from"node:readline";
|
|
2
|
-
`)),r--,r===0)throw Error("Device not found after serveral tries, aborting.");await U(t)}}static airplay(){return new S(re)}static companionLink(){return new S(te)}static raop(){return new S(ne)}}class N extends Number{size;constructor(e,r){super(e);this.size=r}}function O(e,r){return new N(e,r)}class q{value;constructor(e){this.value=e}}function F(e){return new q(e)}class ${value;constructor(e){this.value=e}}function pe(e){return new $(e)}function y(e){let r=e.reduce((n,i)=>n+i.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function u(e){return Uint8Array.of(e)}function h(e,r){let t=new Uint8Array(r),s=BigInt(e);for(let n=0;n<r;n++)t[n]=Number(s&0xffn),s>>=8n;return t}function C(e){let r=e.reduce((n,i)=>n+i.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function I(e){return D(e,[])}function D(e,r){let t=null;if(e===null||e===void 0)t=u(4);else if(typeof e==="boolean")t=u(e?1:2);else if(e instanceof q){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),t=y([u(54),new Uint8Array(n)])}else if(e instanceof $){let n=e.value;if(n<40)t=u(8+n);else if(n<=255)t=C([u(48),h(n,1)]);else if(n<=65535)t=C([u(49),h(n,2)]);else if(n<=4294967295)t=C([u(50),h(n,4)]);else t=C([u(51),h(n,8)])}else if(typeof e==="number")if(!Number.isInteger(e)){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e,!0),t=y([u(54),new Uint8Array(n)])}else if(e<40)t=u(8+e);else if(e<=255)t=y([u(48),h(e,1)]);else if(e<=65535)t=y([u(49),h(e,2)]);else if(e<=4294967295)t=y([u(50),h(e,4)]);else t=y([u(51),h(e,8)]);else if(e instanceof N)t=y([u(48+Math.log2(e.size)),h(e.valueOf(),e.size)]);else if(typeof e==="string"){let n=new TextEncoder().encode(e),i=n.length;if(i<=32)t=y([u(64+i),n]);else if(i<=255)t=y([u(97),h(i,1),n]);else if(i<=65535)t=y([u(98),h(i,2),n]);else if(i<=16777215)t=y([u(99),h(i,3),n]);else t=y([u(100),h(i,4),n])}else if(e instanceof Uint8Array||Buffer.isBuffer(e)){let n=e instanceof Uint8Array?e:new Uint8Array(e),i=n.length;if(i<=32)t=y([u(112+i),n]);else if(i<=255)t=y([u(145),h(i,1),n]);else if(i<=65535)t=y([u(146),h(i,2),n]);else t=y([u(147),h(i,4),n])}else if(Array.isArray(e)){let n=y(e.map((o)=>D(o,r))),i=e.length;if(i<=15){if(t=y([u(208+i),n]),i>=15)t=y([t,u(3)])}else t=y([u(223),n,u(3)])}else if(typeof e==="object"){let n=Object.keys(e),i=n.length,o=[];for(let l of n)o.push(D(l,r)),o.push(D(e[l],r));let a;if(i<=15)a=u(224+i);else a=u(239);if(t=C([a,C(o)]),i>=15||r.some((l)=>l===t))t=C([t,u(129)])}else throw TypeError(typeof e);let s=r.findIndex((n)=>n.length===t.length&&n.every((i,o)=>i===t[o]));if(s>=0)if(s<33)t=u(160+s);else if(s<=255)t=y([u(193),h(s,1)]);else if(s<=65535)t=y([u(194),h(s,2)]);else if(s<=4294967295)t=y([u(195),h(s,4)]);else t=y([u(196),h(s,8)]);else if(t.length>1)r.push(t);return t}function z(e){return A(e,[])}function he(e,r){if(e.length<r)throw TypeError(`Not enough data: need ${r} bytes, have ${e.length}`)}function T(e,r,t){he(e.subarray(r),t);let s=0n;for(let n=t-1;n>=0;n--)s=s<<8n|BigInt(e[r+n]);return Number(s)}function A(e,r){if(e.length===0)throw TypeError("No data to unpack");let t=e[0],s=!0,n,i;if(t===1)n=!0,i=e.subarray(1);else if(t===2)n=!1,i=e.subarray(1);else if(t===4)n=null,i=e.subarray(1);else if(t===5)n=e.subarray(1,17),i=e.subarray(17);else if(t===6)n=T(e,1,8),i=e.subarray(9);else if(t>=8&&t<=47)n=t-8,i=e.subarray(1);else if(t===53)n=new DataView(e.buffer,e.byteOffset+1,4).getFloat32(0,!0),i=e.subarray(5);else if(t===54)n=new DataView(e.buffer,e.byteOffset+1,8).getFloat64(0,!0),i=e.subarray(9);else if((t&240)===48){let o=2**(t&15),a=T(e,1,o);n=O(a,o),i=e.subarray(1+o)}else if(t>=64&&t<=96){let o=t-64;n=new TextDecoder().decode(e.subarray(1,1+o)),i=e.subarray(1+o)}else if(t>=97&&t<=100){let o=t&15,a=T(e,1,o);n=new TextDecoder().decode(e.subarray(1+o,1+o+a)),i=e.subarray(1+o+a)}else if(t>=112&&t<=144){let o=t-112;n=e.subarray(1,1+o),i=e.subarray(1+o)}else if(t>=145&&t<=148){let o=1<<(t&15)-1,a=T(e,1,o),l=1+o;n=e.subarray(l,l+a),i=e.subarray(l+a)}else if((t&240)===208){let o=t&15,a=e.subarray(1),l=[];if(o===15){while(a[0]!==3){let[p,P]=A(a,r);l.push(p),a=P}a=a.subarray(1)}else for(let p=0;p<o;p++){let[P,d]=A(a,r);l.push(P),a=d}n=l,i=a,s=!1}else if((t&224)===224){let o=t&15,a=e.subarray(1),l={};if(o===15){while(a[0]!==3){let[p,P]=A(a,r),[d,E]=A(P,r);l[p]=d,a=E}a=a.subarray(1)}else for(let p=0;p<o;p++){let[P,d]=A(a,r),[E,j]=A(d,r);l[P]=E,a=j}n=l,i=a,s=!1}else if(t>=160&&t<=192){let o=t-160;if(o>=r.length)throw TypeError(`Reference index ${o} out of range`);n=r[o],i=e.subarray(1),s=!1}else if(t>=193&&t<=196){let o=t-192,a=T(e,1,o);if(a>=r.length)throw TypeError(`UID ${a} out of range`);n=r[a],i=e.subarray(1+o),s=!1}else throw TypeError(`Unknown tag 0x${t.toString(16)}`);if(s)r.push(n);return[n,i]}import{parse as H}from"@plist/binary.parse";import{serialize as xe}from"@plist/binary.serialize";var W={TransientPairing:16},X={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},B={M1:1,M2:2,M3:3,M4:4,M5:5,M6:6},c={Method:0,Identifier:1,Salt:2,PublicKey:3,Proof:4,EncryptedData:5,State:6,Error:7,BackOff:8,Certificate:9,Signature:10,Permissions:11,FragmentData:12,FragmentLast:13,Name:17,Flags:19};function M(e){if(e.has(c.BackOff)){let r=e.get(c.BackOff),t=r.readUintLE(0,r.length);throw Error(`Device is busy, try again in ${t} seconds.`)}if(e.has(c.Error))throw Error(`Device returned an error code: ${e.get(c.Error).readUint8()}`);throw console.error(e),Error("Invalid response")}function w(e){let r=[];for(let[t,s]of e){let n;if(typeof s==="number")n=Buffer.from([s]);else n=s;let i=0;do{let o=Math.min(n.length-i,255);if(r.push(t,o),o>0)for(let a=0;a<o;a++)r.push(n[i+a]);i+=o}while(i<n.length)}return Buffer.from(r)}function b(e){let r=new Map,t=0;while(t<e.length){let s=e[t++],n=e[t++],i=new Uint8Array(e).slice(t,t+n);t+=n;let o=r.get(s);if(o)r.set(s,Buffer.concat([o,i]));else r.set(s,Buffer.from(i))}return r}import{randomInt as _e}from"node:crypto";import{Socket as Se}from"node:net";import{createCipher as ge,createDecipher as Pe}from"chacha";var se=12;function k(e,r,t,s,n){r=ie(r);let i=Pe(e,r);t&&i.setAAD(t),i.setAuthTag(n);let o=i._update(s);return i._final(),o}function K(e,r,t,s){r=ie(r);let n=ge(e,r);t&&n.setAAD(t);let i=n._update(s);n._final();let o=n.getAuthTag();return{ciphertext:i,authTag:o}}function ie(e){if(e.length>=se)return e;return Buffer.concat([Buffer.alloc(se-e.length,0),e])}import{randomBytes as de}from"node:crypto";import{x25519 as oe}from"@noble/curves/ed25519.js";function Y(){let e=de(32);return{publicKey:oe.getPublicKey(e),secretKey:e}}function G(e,r){return oe.getSharedSecret(e,r)}import{hkdfSync as we}from"node:crypto";function g(e){return Buffer.from(we(e.hash,e.key,e.salt,e.info,e.length))}class L extends EventTarget{get address(){return this.#r}get port(){return this.#e}#r;#e;constructor(e,r){super();this.#r=e,this.#e=r}async connect(){}}var Z=4;class J extends L{get isEncrypted(){return!!this.#n&&!!this.#i}#r;#e={};#t=Buffer.alloc(0);#s;#n;#a;#i;#o;constructor(e,r){super(e,r);this.#o=_e(0,65536),this.onClose=this.onClose.bind(this),this.onConnect=this.onConnect.bind(this),this.onData=this.onData.bind(this),this.onEnd=this.onEnd.bind(this),this.onError=this.onError.bind(this),this.#r=new Se,this.#r.on("close",this.onClose),this.#r.on("connect",this.onConnect),this.#r.on("data",this.onData),this.#r.on("end",this.onEnd),this.#r.on("error",this.onError)}async connect(){return m(`Connecting to ${this.address}:${this.port}...`),await new Promise((e)=>{this.#r.connect({host:this.address,port:this.port,keepAlive:!0},e)})}async disconnect(){this.#r.destroy()}async enableEncryption(e,r){this.#n=e,this.#i=r,this.#s=0,this.#a=0}async exchange(e,r){let t=this.#o;return new Promise((s,n)=>{if(ve.includes(e))this.#e[-1]=s;else this.#e[t]=s;this.send(e,r).catch(n)})}async send(e,r){let t=this.#o++;r._x??=O(t,8);let s=Buffer.from(I(r)),n=s.byteLength;if(this.isEncrypted&&n>0)n+=16;let i=Buffer.alloc(4);i.writeUint8(e,0),i.writeUintBE(n,1,3);let o;if(this.isEncrypted){let a=Buffer.alloc(12);a.writeBigUInt64LE(BigInt(this.#a++),0);let l=K(this.#i,a,i,s);o=Buffer.concat([i,l.ciphertext,l.authTag])}else o=Buffer.concat([i,s]);return m("Send data frame",this.isEncrypted,Buffer.from(o).toString("hex"),r),new Promise((a,l)=>{this.#r.write(o,(p)=>p&&l(p)),a()})}async onClose(){m(`Connection closed from ${this.address}:${this.port}`)}async onConnect(){m(`Connected to ${this.address}:${this.port}`)}async onData(e){this.#t=Buffer.concat([this.#t,e]);while(this.#t.byteLength>=Z){let r=this.#t.subarray(0,Z),t=r.readUintBE(1,3),s=Z+t;if(this.#t.byteLength<s){m(`Not enough data yet, waiting on the next frame.. needed=${s} available=${this.#t.byteLength} receivedLength=${e.byteLength}`);return}m(`Frame found length=${s} availableLength=${this.#t.byteLength} receivedLength=${e.byteLength}`);let n=Buffer.from(this.#t.subarray(0,s));this.#t=this.#t.subarray(s),m(`Handle frame, ${this.#t.byteLength} bytes left...`);let o=(await this.#c(n)).subarray(4,s);await this.#f(r,o)}}async onEnd(){m("Connection ended")}async onError(e){m("Error received",e)}async#c(e){if(!this.isEncrypted)return e;let r=e.subarray(0,4),t=r.readUintBE(1,3),s=e.subarray(4,4+t),n=s.subarray(s.byteLength-16),i=s.subarray(0,s.byteLength-16),o=Buffer.alloc(12);o.writeBigUint64LE(BigInt(this.#s++),0);let a=k(this.#n,o,r,i,n);return Buffer.concat([r,a,n])}async#f(e,r){let t=e.readInt8();if(!Be.includes(t))m("Packet not handled, no opack frame.");if([r]=z(r),m("Decoded OPACK",{header:e,payload:r}),"_x"in r){let s=r._x;if(s in this.#e)(this.#e[s]??null)?.([e,r]),delete this.#e[s];else if("_i"in r)this.dispatchEvent(new CustomEvent(r._i,{detail:r._c}));else{let n=r._c,i=Object.keys(n).map((o)=>o.substring(0,-3));for(let o of i)this.dispatchEvent(new CustomEvent(o,{detail:n[o]}))}}else if(this.#e[-1])(this.#e[-1]??null)?.([e,r]),delete this.#e[-1];else m("No handler for message",[e,r])}}var f={Unknown:0,Noop:1,PS_Start:3,PS_Next:4,PV_Start:5,PV_Next:6,U_OPACK:7,E_OPACK:8,P_OPACK:9,PA_Request:10,PA_Response:11,SessionStartRequest:16,SessionStartResponse:17,SessionData:18,FamilyIdentityRequest:32,FamilyIdentityResponse:33,FamilyIdentityUpdate:34},x={Event:1,Request:2,Response:3},Be=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next,f.U_OPACK,f.E_OPACK,f.P_OPACK],ve=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next];import{randomInt as Ce}from"node:crypto";class V{#r;#e;constructor(e,r){this.#r=e,this.#e=r}async fetchMediaControlStatus(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchMediaControlStatus",_t:x.Request,_c:{}})}async fetchNowPlayingInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchCurrentNowPlayingInfoEvent",_t:x.Request,_c:{}})}async fetchSupportedActions(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSupportedActionsEvent",_t:x.Request,_c:{}})}async getAttentionState(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchAttentionState",_t:x.Request,_c:{}}),{_c:r}=v(e);switch(r.state){case 1:return"asleep";case 2:return"screensaver";case 3:return"awake";case 4:return"idle";default:return"unknown"}}async getLaunchableApps(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchLaunchableApplicationsEvent",_t:x.Request,_c:{}}),{_c:r}=v(e);return Object.entries(r).map(([t,s])=>({bundleId:t,name:s}))}async getSiriRemoteInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSiriRemoteInfo",_t:x.Request,_c:{}});return H(Buffer.from(e._c.SiriRemoteInfoKey).buffer)}async getUserAccounts(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchUserAccountsEvent",_t:x.Request,_c:{}}),{_c:r}=v(e);return Object.entries(r).map(([t,s])=>({accountId:t,name:s}))}async hidCommand(e,r=!1){await this.#e.exchange(f.E_OPACK,{_i:"_hidC",_t:x.Request,_c:{_hBtS:r?1:2,_hidC:Ae[e]}})}async launchApp(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:x.Request,_c:{_bundleID:e}})}async launchUrl(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:x.Request,_c:{_urlS:e}})}async mediaControlCommand(e,r){let[,t]=await this.#e.exchange(f.E_OPACK,{_i:"_mcc",_t:x.Request,_c:{_mcc:be[e],...r||{}}});return v(t)}async pressButton(e,r="SingleTap",t=500){switch(r){case"DoubleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1),await this.hidCommand(e,!0),await this.hidCommand(e,!1);break;case"Hold":await this.hidCommand(e,!0),await U(t),await this.hidCommand(e,!1);break;case"SingleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1);break}}async switchUserAccount(e){await this.#e.exchange(f.E_OPACK,{_i:"SwitchUserAccountEvent",_t:x.Request,_c:{SwitchAccountID:e}})}async _subscribe(e,r){this.#e.addEventListener(e,r),await this.#e.send(f.E_OPACK,{_i:"_interest",_t:x.Event,_c:{_regEvents:[e]}})}async _unsubscribe(e,r){if(r)this.#e.removeEventListener(e,r);await this.#e.send(f.E_OPACK,{_i:"_interest",_t:x.Event,_c:{_deregEvents:[e]}})}async _sessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_sessionStart",_t:x.Request,_c:{_srvT:"com.apple.tvremoteservices",_sid:Ce(0,4294967295)}});return v(e)}async _systemInfo(e){let[,r]=await this.#e.exchange(f.E_OPACK,{_i:"_systemInfo",_t:x.Request,_c:{_bf:0,_cf:512,_clFl:128,_i:"cafecafecafe",_idsID:e.toString(),_pubID:"FF:70:79:61:74:76",_sf:256,_sv:"170.18",model:"iPhone10,6",name:"Bas Companion Link"}});return v(r)}async _touchStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_touchStart",_t:x.Request,_c:{_height:F(1000),_tFl:0,_width:F(1000)}});return v(e)}async _tvrcSessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"TVRCSessionStart",_t:x.Request,_btHP:!1,_inUseProc:"tvremoted",_c:{}});return v(e)}}var Ae={Up:1,Down:2,Left:3,Right:4,Menu:5,Select:6,Home:7,VolumeUp:8,VolumeDown:9,Siri:10,Screensaver:11,Sleep:12,Wake:13,PlayPause:14,ChannelIncrement:15,ChannelDecrement:16,Guide:17,PageUp:18,PageDown:19},be={Play:1,Pause:2,NextTrack:3,PreviousTrack:4,GetVolume:5,SetVolume:6,SkipBy:7,FastForwardBegin:8,FastForwardEnd:9,RewindBegin:10,RewindEnd:11,GetCaptionSettings:12,SetCaptionSettings:13};function v(e){if(typeof e==="object")return e;throw m("Expected an object.",{obj:e}),Error("Expected an object.")}import{SRP as ae,SrpClient as ke}from"fast-srp-hap";import{v4 as Ke}from"uuid";import Q from"tweetnacl";class ce{get name(){return this.#r}get pairingId(){return this.#e}#r;#e;#t;#s;#n;#a;#i;constructor(e,r){this.#t=e,this.#s=r,this.#r="Bas Companion Link",this.#e=Buffer.from(Ke().toUpperCase())}async start(){let e=Q.sign.keyPair();this.#n=Buffer.from(e.publicKey),this.#a=Buffer.from(e.secretKey)}async pin(e){let r=await this.m1(),t=await this.m2(r,await e()),s=await this.m3(t),n=await this.m4(s),i=await this.m5(n),o=await this.m6(n,i);if(!o)throw Error("Pairing failed, could not get accessory keys.");return o}async transient(){let e=await this.m1([[c.Flags,W.TransientPairing]]),r=await this.m2(e),t=await this.m3(r),s=await this.m4(t),n=g({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Read-Encryption-Key")}),i=g({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Write-Encryption-Key")});return{pairingId:this.#e,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:i}}async m1(e=[]){let[,r]=await this.#s.exchange(f.PS_Start,{_pd:w([[c.Method,X.PairSetup],[c.State,B.M1],...e]),_pwTy:1}),t=this.#o(r),s=t.get(c.PublicKey),n=t.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,r=ee){let t=await ae.genKey(32);this.#i=new ke(ae.params.hap,e.salt,Buffer.from("Pair-Setup"),Buffer.from(r),t,!0),this.#i.setB(e.publicKey);let s=this.#i.computeA(),n=this.#i.computeM1();return{publicKey:s,proof:n}}async m3(e){let[,r]=await this.#s.exchange(f.PS_Next,{_pd:w([[c.State,B.M3],[c.PublicKey,e.publicKey],[c.Proof,e.proof]]),_pwTy:1});return{serverProof:this.#o(r).get(c.Proof)}}async m4(e){return this.#i.checkM2(e.serverProof),{sharedSecret:this.#i.computeK()}}async m5(e){let r=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Controller-Sign-Salt","utf8"),info:Buffer.from("Pair-Setup-Controller-Sign-Info","utf8")}),t=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Encrypt-Salt","utf8"),info:Buffer.from("Pair-Setup-Encrypt-Info","utf8")}),s=Buffer.concat([r,this.#e,this.#n]),n=Q.sign.detached(s,this.#a),i=w([[c.Identifier,this.#e],[c.PublicKey,this.#n],[c.Signature,Buffer.from(n)],[c.Name,Buffer.from(I({name:this.#r}))]]),{authTag:o,ciphertext:a}=K(t,Buffer.from("PS-Msg05"),null,i),l=Buffer.concat([a,o]),[,p]=await this.#s.exchange(f.PS_Next,{_pd:w([[c.State,B.M5],[c.EncryptedData,l]]),_pwTy:1}),d=this.#o(p).get(c.EncryptedData),E=d.subarray(0,-16);return{authTag:d.subarray(-16),data:E,sessionKey:t}}async m6(e,r){let t=k(r.sessionKey,Buffer.from("PS-Msg06"),null,r.data,r.authTag),s=b(t),n=s.get(c.Identifier),i=s.get(c.PublicKey),o=s.get(c.Signature),a=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Accessory-Sign-Salt"),info:Buffer.from("Pair-Setup-Accessory-Sign-Info")}),l=Buffer.concat([a,n,i]);if(!Q.sign.detached.verify(l,o,i))throw Error("Invalid accessory signature.");return{accessoryIdentifier:n.toString(),accessoryLongTermPublicKey:i,pairingId:this.#e,publicKey:this.#n,secretKey:this.#a}}#o(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=b(e._pd);if(r.has(c.Error))M(r);return m("Decoded TLV",r),r}}import fe from"tweetnacl";class ue{#r;#e;#t;constructor(e,r){this.#r=e,this.#e=r,this.#t=Y()}async start(e){let r=await this.#s(),t=await this.#n(e.accessoryIdentifier,e.accessoryLongTermPublicKey,r);return await this.#a(e.pairingId,e.secretKey,t),await this.#i(t)}async#s(){let[,e]=await this.#e.exchange(f.PV_Start,{_pd:w([[c.State,B.M1],[c.PublicKey,Buffer.from(this.#t.publicKey)]]),_auTy:4}),r=this.#o(e),t=r.get(c.PublicKey);return{encryptedData:r.get(c.EncryptedData),serverPublicKey:t}}async#n(e,r,t){let s=Buffer.from(G(this.#t.secretKey,t.serverPublicKey)),n=g({hash:"sha512",key:s,length:32,salt:Buffer.from("Pair-Verify-Encrypt-Salt"),info:Buffer.from("Pair-Verify-Encrypt-Info")}),i=t.encryptedData.subarray(0,-16),o=t.encryptedData.subarray(-16),a=k(n,Buffer.from("PV-Msg02"),null,i,o),l=b(a),p=l.get(c.Identifier),P=l.get(c.Signature);if(p.toString()!==e)throw Error(`Invalid accessory identifier. Expected ${p.toString()} to be ${e}.`);let d=Buffer.concat([t.serverPublicKey,p,this.#t.publicKey]);if(!fe.sign.detached.verify(d,P,r))throw Error("Invalid accessory signature.");return{serverEphemeralPublicKey:t.serverPublicKey,sessionKey:n,sharedSecret:s}}async#a(e,r,t){let s=Buffer.concat([this.#t.publicKey,e,t.serverEphemeralPublicKey]),n=Buffer.from(fe.sign.detached(s,r)),i=w([[c.Identifier,e],[c.Signature,n]]),{authTag:o,ciphertext:a}=K(t.sessionKey,Buffer.from("PV-Msg03"),null,i),l=Buffer.concat([a,o]),[,p]=await this.#e.exchange(f.PV_Next,{_pd:w([[c.State,B.M3],[c.EncryptedData,l]]),_auTy:4});return console.log(this.#o(p)),{}}async#i(e){let r=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ServerEncrypt-main")}),t=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ClientEncrypt-main")});return{accessoryToControllerKey:r,controllerToAccessoryKey:t}}#o(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=b(e._pd);if(r.has(c.Error))M(r);return m("Decoded TLV",r),r}}class R{get api(){return this.#r}get socket(){return this.#t}get pairing(){return this.#s}get verify(){return this.#n}#r;#e;#t;#s;#n;constructor(e){this.#e=e,this.#t=new J(e.address,e.service.port),this.#r=new V(this,this.#t),this.#s=new ce(this,this.#t),this.#n=new ue(this,this.#t)}async connect(){await this.#t.connect()}}var Ee=S.companionLink(),Te=await Ee.findUntil("Woonkamer TV._companion-link._tcp.local"),_=new R(Te);await _.connect();async function Ie(){let e={accessoryIdentifier:"7EEEA518-06CC-486C-A8B8-4A07CDBE6267",accessoryLongTermPublicKey:Buffer.from("cfb3fb0e0eb494d9058d5051c94400b35251e3faad66542b9551a1496570628d","hex"),pairingId:Buffer.from("31343733314638332d334438422d344242362d393530302d433544464243383737443735","hex"),publicKey:Buffer.from("4b7707b544e9c3b7a3609d0c9f7c9f013a71b415568bff597013d65e14d88918","hex"),secretKey:Buffer.from("3933f2526014609fc437d2b0c7968b476f3ee0fd2d836fc5e97971fbd26adae04b7707b544e9c3b7a3609d0c9f7c9f013a71b415568bff597013d65e14d88918","hex")},r=await _.verify.start(e);await _.socket.enableEncryption(r.accessoryToControllerKey,r.controllerToAccessoryKey),await _.api._systemInfo(e.pairingId),await _.api._touchStart(),await _.api._sessionStart(),await _.api._tvrcSessionStart(),await _.api._unsubscribe("_iMC"),await _.api._subscribe("TVSystemStatus",(t)=>m(t))}await Ie();
|
|
1
|
+
import{createInterface as le}from"node:readline";var Me=le({input:process.stdin,output:process.stdout});function m(...e){console.debug("[debug]",...e)}async function U(e){return new Promise((r)=>setTimeout(r,e))}import ye from"node-dns-sd";var ee="3939";var re="_airplay._tcp.local",te="_companion-link._tcp.local",ne="_raop._tcp.local";class S{#r;constructor(e){this.#r=e}async find(){return await ye.discover({name:this.#r})}async findUntil(e,r=10,t=1000){while(r>0){let s=await this.find(),n=s.find((i)=>i.fqdn===e);if(n)return n;if(console.log(),console.log(`Device not found, retrying in ${t}ms...`),console.log(s.map((i)=>` ● ${i.fqdn}`).join(`
|
|
2
|
+
`)),r--,r===0)throw Error("Device not found after serveral tries, aborting.");await U(t)}}static airplay(){return new S(re)}static companionLink(){return new S(te)}static raop(){return new S(ne)}}class N extends Number{size;constructor(e,r){super(e);this.size=r}}function O(e,r){return new N(e,r)}class q{value;constructor(e){this.value=e}}function L(e){return new q(e)}class z{value;constructor(e){this.value=e}}function me(e){return new z(e)}function y(e){let r=e.reduce((n,i)=>n+i.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function u(e){return Uint8Array.of(e)}function p(e,r){let t=new Uint8Array(r),s=BigInt(e);for(let n=0;n<r;n++)t[n]=Number(s&0xffn),s>>=8n;return t}function v(e){let r=e.reduce((n,i)=>n+i.length,0),t=new Uint8Array(r),s=0;for(let n of e)t.set(n,s),s+=n.length;return t}function I(e){return D(e,[])}function D(e,r){let t=null;if(e===null||e===void 0)t=u(4);else if(typeof e==="boolean")t=u(e?1:2);else if(e instanceof q){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),t=y([u(54),new Uint8Array(n)])}else if(e instanceof z){let n=e.value;if(n<40)t=u(8+n);else if(n<=255)t=v([u(48),p(n,1)]);else if(n<=65535)t=v([u(49),p(n,2)]);else if(n<=4294967295)t=v([u(50),p(n,4)]);else t=v([u(51),p(n,8)])}else if(typeof e==="number")if(!Number.isInteger(e)){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e,!0),t=y([u(54),new Uint8Array(n)])}else if(e<40)t=u(8+e);else if(e<=255)t=y([u(48),p(e,1)]);else if(e<=65535)t=y([u(49),p(e,2)]);else if(e<=4294967295)t=y([u(50),p(e,4)]);else t=y([u(51),p(e,8)]);else if(e instanceof N)t=y([u(48+Math.log2(e.size)),p(e.valueOf(),e.size)]);else if(typeof e==="string"){let n=new TextEncoder().encode(e),i=n.length;if(i<=32)t=y([u(64+i),n]);else if(i<=255)t=y([u(97),p(i,1),n]);else if(i<=65535)t=y([u(98),p(i,2),n]);else if(i<=16777215)t=y([u(99),p(i,3),n]);else t=y([u(100),p(i,4),n])}else if(e instanceof Uint8Array||Buffer.isBuffer(e)){let n=e instanceof Uint8Array?e:new Uint8Array(e),i=n.length;if(i<=32)t=y([u(112+i),n]);else if(i<=255)t=y([u(145),p(i,1),n]);else if(i<=65535)t=y([u(146),p(i,2),n]);else t=y([u(147),p(i,4),n])}else if(Array.isArray(e)){let n=y(e.map((o)=>D(o,r))),i=e.length;if(i<=15){if(t=y([u(208+i),n]),i>=15)t=y([t,u(3)])}else t=y([u(223),n,u(3)])}else if(typeof e==="object"){let n=Object.keys(e),i=n.length,o=[];for(let l of n)o.push(D(l,r)),o.push(D(e[l],r));let a;if(i<=15)a=u(224+i);else a=u(239);if(t=v([a,v(o)]),i>=15||r.some((l)=>l===t))t=v([t,u(129)])}else throw TypeError(typeof e);let s=r.findIndex((n)=>n.length===t.length&&n.every((i,o)=>i===t[o]));if(s>=0)if(s<33)t=u(160+s);else if(s<=255)t=y([u(193),p(s,1)]);else if(s<=65535)t=y([u(194),p(s,2)]);else if(s<=4294967295)t=y([u(195),p(s,4)]);else t=y([u(196),p(s,8)]);else if(t.length>1)r.push(t);return t}function $(e){return A(e,[])}function he(e,r){if(e.length<r)throw TypeError(`Not enough data: need ${r} bytes, have ${e.length}`)}function T(e,r,t){he(e.subarray(r),t);let s=0n;for(let n=t-1;n>=0;n--)s=s<<8n|BigInt(e[r+n]);return Number(s)}function A(e,r){if(e.length===0)throw TypeError("No data to unpack");let t=e[0],s=!0,n,i;if(t===1)n=!0,i=e.subarray(1);else if(t===2)n=!1,i=e.subarray(1);else if(t===4)n=null,i=e.subarray(1);else if(t===5)n=e.subarray(1,17),i=e.subarray(17);else if(t===6)n=T(e,1,8),i=e.subarray(9);else if(t>=8&&t<=47)n=t-8,i=e.subarray(1);else if(t===53)n=new DataView(e.buffer,e.byteOffset+1,4).getFloat32(0,!0),i=e.subarray(5);else if(t===54)n=new DataView(e.buffer,e.byteOffset+1,8).getFloat64(0,!0),i=e.subarray(9);else if((t&240)===48){let o=2**(t&15),a=T(e,1,o);n=O(a,o),i=e.subarray(1+o)}else if(t>=64&&t<=96){let o=t-64;n=new TextDecoder().decode(e.subarray(1,1+o)),i=e.subarray(1+o)}else if(t>=97&&t<=100){let o=t&15,a=T(e,1,o);n=new TextDecoder().decode(e.subarray(1+o,1+o+a)),i=e.subarray(1+o+a)}else if(t>=112&&t<=144){let o=t-112;n=e.subarray(1,1+o),i=e.subarray(1+o)}else if(t>=145&&t<=148){let o=1<<(t&15)-1,a=T(e,1,o),l=1+o;n=e.subarray(l,l+a),i=e.subarray(l+a)}else if((t&240)===208){let o=t&15,a=e.subarray(1),l=[];if(o===15){while(a[0]!==3){let[h,P]=A(a,r);l.push(h),a=P}a=a.subarray(1)}else for(let h=0;h<o;h++){let[P,w]=A(a,r);l.push(P),a=w}n=l,i=a,s=!1}else if((t&224)===224){let o=t&15,a=e.subarray(1),l={};if(o===15){while(a[0]!==3){let[h,P]=A(a,r),[w,E]=A(P,r);l[h]=w,a=E}a=a.subarray(1)}else for(let h=0;h<o;h++){let[P,w]=A(a,r),[E,j]=A(w,r);l[P]=E,a=j}n=l,i=a,s=!1}else if(t>=160&&t<=192){let o=t-160;if(o>=r.length)throw TypeError(`Reference index ${o} out of range`);n=r[o],i=e.subarray(1),s=!1}else if(t>=193&&t<=196){let o=t-192,a=T(e,1,o);if(a>=r.length)throw TypeError(`UID ${a} out of range`);n=r[a],i=e.subarray(1+o),s=!1}else throw TypeError(`Unknown tag 0x${t.toString(16)}`);if(s)r.push(n);return[n,i]}import{parse as H}from"@plist/binary.parse";import{serialize as pe}from"@plist/binary.serialize";var W={TransientPairing:16},X={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},B={M1:1,M2:2,M3:3,M4:4,M5:5,M6:6},c={Method:0,Identifier:1,Salt:2,PublicKey:3,Proof:4,EncryptedData:5,State:6,Error:7,BackOff:8,Certificate:9,Signature:10,Permissions:11,FragmentData:12,FragmentLast:13,Name:17,Flags:19};function M(e){if(e.has(c.BackOff)){let r=e.get(c.BackOff),t=r.readUintLE(0,r.length);throw Error(`Device is busy, try again in ${t} seconds.`)}if(e.has(c.Error))throw Error(`Device returned an error code: ${e.get(c.Error).readUint8()}`);throw console.error(e),Error("Invalid response")}function d(e){let r=[];for(let[t,s]of e){let n;if(typeof s==="number")n=Buffer.from([s]);else n=s;let i=0;do{let o=Math.min(n.length-i,255);if(r.push(t,o),o>0)for(let a=0;a<o;a++)r.push(n[i+a]);i+=o}while(i<n.length)}return Buffer.from(r)}function b(e){let r=new Map,t=0;while(t<e.length){let s=e[t++],n=e[t++],i=new Uint8Array(e).slice(t,t+n);t+=n;let o=r.get(s);if(o)r.set(s,Buffer.concat([o,i]));else r.set(s,Buffer.from(i))}return r}import{randomInt as de}from"node:crypto";import{Socket as _e}from"node:net";import{createCipher as xe,createDecipher as ge}from"chacha";var se=12;function k(e,r,t,s,n){r=ie(r);let i=ge(e,r);t&&i.setAAD(t),i.setAuthTag(n);let o=i._update(s);return i._final(),o}function K(e,r,t,s){r=ie(r);let n=xe(e,r);t&&n.setAAD(t);let i=n._update(s);n._final();let o=n.getAuthTag();return{ciphertext:i,authTag:o}}function ie(e){if(e.length>=se)return e;return Buffer.concat([Buffer.alloc(se-e.length,0),e])}import{randomBytes as Pe}from"node:crypto";import{x25519 as oe}from"@noble/curves/ed25519.js";function Y(){let e=Pe(32);return{publicKey:oe.getPublicKey(e),secretKey:e}}function G(e,r){return oe.getSharedSecret(e,r)}import{hkdfSync as we}from"node:crypto";function g(e){return Buffer.from(we(e.hash,e.key,e.salt,e.info,e.length))}class F extends EventTarget{get address(){return this.#r}get port(){return this.#e}#r;#e;constructor(e,r){super();this.#r=e,this.#e=r}async connect(){}}var Z=4;class J extends F{get isEncrypted(){return!!this.#n&&!!this.#i}#r;#e={};#t=Buffer.alloc(0);#s;#n;#a;#i;#o;constructor(e,r){super(e,r);this.#o=de(0,65536),this.onClose=this.onClose.bind(this),this.onConnect=this.onConnect.bind(this),this.onData=this.onData.bind(this),this.onEnd=this.onEnd.bind(this),this.onError=this.onError.bind(this),this.#r=new _e,this.#r.on("close",this.onClose),this.#r.on("connect",this.onConnect),this.#r.on("data",this.onData),this.#r.on("end",this.onEnd),this.#r.on("error",this.onError)}async connect(){return m(`Connecting to ${this.address}:${this.port}...`),await new Promise((e)=>{this.#r.connect({host:this.address,port:this.port,keepAlive:!0},e)})}async disconnect(){this.#r.destroy()}async enableEncryption(e,r){this.#n=e,this.#i=r,this.#s=0,this.#a=0}async exchange(e,r){let t=this.#o;return new Promise((s,n)=>{if(Be.includes(e))this.#e[-1]=s;else this.#e[t]=s;this.send(e,r).catch(n)})}async send(e,r){let t=this.#o++;r._x??=O(t,8);let s=Buffer.from(I(r)),n=s.byteLength;if(this.isEncrypted&&n>0)n+=16;let i=Buffer.alloc(4);i.writeUint8(e,0),i.writeUintBE(n,1,3);let o;if(this.isEncrypted){let a=Buffer.alloc(12);a.writeBigUInt64LE(BigInt(this.#a++),0);let l=K(this.#i,a,i,s);o=Buffer.concat([i,l.ciphertext,l.authTag])}else o=Buffer.concat([i,s]);return m("Send data frame",this.isEncrypted,Buffer.from(o).toString("hex"),r),new Promise((a,l)=>{this.#r.write(o,(h)=>h&&l(h)),a()})}async onClose(){m(`Connection closed from ${this.address}:${this.port}`)}async onConnect(){m(`Connected to ${this.address}:${this.port}`)}async onData(e){this.#t=Buffer.concat([this.#t,e]);while(this.#t.byteLength>=Z){let r=this.#t.subarray(0,Z),t=r.readUintBE(1,3),s=Z+t;if(this.#t.byteLength<s){m(`Not enough data yet, waiting on the next frame.. needed=${s} available=${this.#t.byteLength} receivedLength=${e.byteLength}`);return}m(`Frame found length=${s} availableLength=${this.#t.byteLength} receivedLength=${e.byteLength}`);let n=Buffer.from(this.#t.subarray(0,s));this.#t=this.#t.subarray(s),m(`Handle frame, ${this.#t.byteLength} bytes left...`);let o=(await this.#c(n)).subarray(4,s);await this.#f(r,o)}}async onEnd(){m("Connection ended")}async onError(e){m("Error received",e)}async#c(e){if(!this.isEncrypted)return e;let r=e.subarray(0,4),t=r.readUintBE(1,3),s=e.subarray(4,4+t),n=s.subarray(s.byteLength-16),i=s.subarray(0,s.byteLength-16),o=Buffer.alloc(12);o.writeBigUint64LE(BigInt(this.#s++),0);let a=k(this.#n,o,r,i,n);return Buffer.concat([r,a,n])}async#f(e,r){let t=e.readInt8();if(!Se.includes(t))m("Packet not handled, no opack frame.");if([r]=$(r),m("Decoded OPACK",{header:e,payload:r}),"_x"in r){let s=r._x;if(s in this.#e)(this.#e[s]??null)?.([e,r]),delete this.#e[s];else if("_i"in r)this.dispatchEvent(new CustomEvent(r._i,{detail:r._c}));else{let n=r._c,i=Object.keys(n).map((o)=>o.substring(0,-3));for(let o of i)this.dispatchEvent(new CustomEvent(o,{detail:n[o]}))}}else if(this.#e[-1])(this.#e[-1]??null)?.([e,r]),delete this.#e[-1];else m("No handler for message",[e,r])}}var f={Unknown:0,Noop:1,PS_Start:3,PS_Next:4,PV_Start:5,PV_Next:6,U_OPACK:7,E_OPACK:8,P_OPACK:9,PA_Request:10,PA_Response:11,SessionStartRequest:16,SessionStartResponse:17,SessionData:18,FamilyIdentityRequest:32,FamilyIdentityResponse:33,FamilyIdentityUpdate:34},x={Event:1,Request:2,Response:3},Se=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next,f.U_OPACK,f.E_OPACK,f.P_OPACK],Be=[f.PS_Start,f.PS_Next,f.PV_Start,f.PV_Next];import{randomInt as Ce}from"node:crypto";class V{#r;#e;constructor(e,r){this.#r=e,this.#e=r}async fetchMediaControlStatus(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchMediaControlStatus",_t:x.Request,_c:{}})}async fetchNowPlayingInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchCurrentNowPlayingInfoEvent",_t:x.Request,_c:{}})}async fetchSupportedActions(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSupportedActionsEvent",_t:x.Request,_c:{}})}async getAttentionState(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchAttentionState",_t:x.Request,_c:{}}),{_c:r}=C(e);switch(r.state){case 1:return"asleep";case 2:return"screensaver";case 3:return"awake";case 4:return"idle";default:return"unknown"}}async getLaunchableApps(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchLaunchableApplicationsEvent",_t:x.Request,_c:{}}),{_c:r}=C(e);return Object.entries(r).map(([t,s])=>({bundleId:t,name:s}))}async getSiriRemoteInfo(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchSiriRemoteInfo",_t:x.Request,_c:{}});return H(Buffer.from(e._c.SiriRemoteInfoKey).buffer)}async getUserAccounts(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"FetchUserAccountsEvent",_t:x.Request,_c:{}}),{_c:r}=C(e);return Object.entries(r).map(([t,s])=>({accountId:t,name:s}))}async hidCommand(e,r=!1){await this.#e.exchange(f.E_OPACK,{_i:"_hidC",_t:x.Request,_c:{_hBtS:r?1:2,_hidC:ve[e]}})}async launchApp(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:x.Request,_c:{_bundleID:e}})}async launchUrl(e){await this.#e.exchange(f.E_OPACK,{_i:"_launchApp",_t:x.Request,_c:{_urlS:e}})}async mediaControlCommand(e,r){let[,t]=await this.#e.exchange(f.E_OPACK,{_i:"_mcc",_t:x.Request,_c:{_mcc:Ae[e],...r||{}}});return C(t)}async pressButton(e,r="SingleTap",t=500){switch(r){case"DoubleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1),await this.hidCommand(e,!0),await this.hidCommand(e,!1);break;case"Hold":await this.hidCommand(e,!0),await U(t),await this.hidCommand(e,!1);break;case"SingleTap":await this.hidCommand(e,!0),await this.hidCommand(e,!1);break}}async switchUserAccount(e){await this.#e.exchange(f.E_OPACK,{_i:"SwitchUserAccountEvent",_t:x.Request,_c:{SwitchAccountID:e}})}async _subscribe(e,r){this.#e.addEventListener(e,r),await this.#e.send(f.E_OPACK,{_i:"_interest",_t:x.Event,_c:{_regEvents:[e]}})}async _unsubscribe(e,r){if(r)this.#e.removeEventListener(e,r);await this.#e.send(f.E_OPACK,{_i:"_interest",_t:x.Event,_c:{_deregEvents:[e]}})}async _sessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_sessionStart",_t:x.Request,_c:{_srvT:"com.apple.tvremoteservices",_sid:Ce(0,4294967295)}});return C(e)}async _systemInfo(e){let[,r]=await this.#e.exchange(f.E_OPACK,{_i:"_systemInfo",_t:x.Request,_c:{_bf:0,_cf:512,_clFl:128,_i:"cafecafecafe",_idsID:e.toString(),_pubID:"FF:70:79:61:74:76",_sf:256,_sv:"170.18",model:"iPhone10,6",name:"Bas Companion Link"}});return C(r)}async _touchStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"_touchStart",_t:x.Request,_c:{_height:L(1000),_tFl:0,_width:L(1000)}});return C(e)}async _tvrcSessionStart(){let[,e]=await this.#e.exchange(f.E_OPACK,{_i:"TVRCSessionStart",_t:x.Request,_btHP:!1,_inUseProc:"tvremoted",_c:{}});return C(e)}}var ve={Up:1,Down:2,Left:3,Right:4,Menu:5,Select:6,Home:7,VolumeUp:8,VolumeDown:9,Siri:10,Screensaver:11,Sleep:12,Wake:13,PlayPause:14,ChannelIncrement:15,ChannelDecrement:16,Guide:17,PageUp:18,PageDown:19},Ae={Play:1,Pause:2,NextTrack:3,PreviousTrack:4,GetVolume:5,SetVolume:6,SkipBy:7,FastForwardBegin:8,FastForwardEnd:9,RewindBegin:10,RewindEnd:11,GetCaptionSettings:12,SetCaptionSettings:13};function C(e){if(typeof e==="object")return e;throw m("Expected an object.",{obj:e}),Error("Expected an object.")}import{SRP as ae,SrpClient as be}from"fast-srp-hap";import{v4 as ke}from"uuid";import Q from"tweetnacl";class ce{get name(){return this.#r}get pairingId(){return this.#e}#r;#e;#t;#s;#n;#a;#i;constructor(e,r){this.#t=e,this.#s=r,this.#r="Bas Companion Link",this.#e=Buffer.from(ke().toUpperCase())}async start(){let e=Q.sign.keyPair();this.#n=Buffer.from(e.publicKey),this.#a=Buffer.from(e.secretKey)}async pin(e){let r=await this.m1(),t=await this.m2(r,await e()),s=await this.m3(t),n=await this.m4(s),i=await this.m5(n),o=await this.m6(n,i);if(!o)throw Error("Pairing failed, could not get accessory keys.");return o}async transient(){let e=await this.m1([[c.Flags,W.TransientPairing]]),r=await this.m2(e),t=await this.m3(r),s=await this.m4(t),n=g({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Read-Encryption-Key")}),i=g({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Write-Encryption-Key")});return{pairingId:this.#e,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:i}}async m1(e=[]){let[,r]=await this.#s.exchange(f.PS_Start,{_pd:d([[c.Method,X.PairSetup],[c.State,B.M1],...e]),_pwTy:1}),t=this.#o(r),s=t.get(c.PublicKey),n=t.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,r=ee){let t=await ae.genKey(32);this.#i=new be(ae.params.hap,e.salt,Buffer.from("Pair-Setup"),Buffer.from(r),t,!0),this.#i.setB(e.publicKey);let s=this.#i.computeA(),n=this.#i.computeM1();return{publicKey:s,proof:n}}async m3(e){let[,r]=await this.#s.exchange(f.PS_Next,{_pd:d([[c.State,B.M3],[c.PublicKey,e.publicKey],[c.Proof,e.proof]]),_pwTy:1});return{serverProof:this.#o(r).get(c.Proof)}}async m4(e){return this.#i.checkM2(e.serverProof),{sharedSecret:this.#i.computeK()}}async m5(e){let r=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Controller-Sign-Salt","utf8"),info:Buffer.from("Pair-Setup-Controller-Sign-Info","utf8")}),t=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Encrypt-Salt","utf8"),info:Buffer.from("Pair-Setup-Encrypt-Info","utf8")}),s=Buffer.concat([r,this.#e,this.#n]),n=Q.sign.detached(s,this.#a),i=d([[c.Identifier,this.#e],[c.PublicKey,this.#n],[c.Signature,Buffer.from(n)],[c.Name,Buffer.from(I({name:this.#r}))]]),{authTag:o,ciphertext:a}=K(t,Buffer.from("PS-Msg05"),null,i),l=Buffer.concat([a,o]),[,h]=await this.#s.exchange(f.PS_Next,{_pd:d([[c.State,B.M5],[c.EncryptedData,l]]),_pwTy:1}),w=this.#o(h).get(c.EncryptedData),E=w.subarray(0,-16);return{authTag:w.subarray(-16),data:E,sessionKey:t}}async m6(e,r){let t=k(r.sessionKey,Buffer.from("PS-Msg06"),null,r.data,r.authTag),s=b(t),n=s.get(c.Identifier),i=s.get(c.PublicKey),o=s.get(c.Signature),a=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.from("Pair-Setup-Accessory-Sign-Salt"),info:Buffer.from("Pair-Setup-Accessory-Sign-Info")}),l=Buffer.concat([a,n,i]);if(!Q.sign.detached.verify(l,o,i))throw Error("Invalid accessory signature.");return{accessoryIdentifier:n.toString(),accessoryLongTermPublicKey:i,pairingId:this.#e,publicKey:this.#n,secretKey:this.#a}}#o(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=b(e._pd);if(r.has(c.Error))M(r);return m("Decoded TLV",r),r}}import fe from"tweetnacl";class ue{#r;#e;#t;constructor(e,r){this.#r=e,this.#e=r,this.#t=Y()}async start(e){let r=await this.#s(),t=await this.#n(e.accessoryIdentifier,e.accessoryLongTermPublicKey,r);return await this.#a(e.pairingId,e.secretKey,t),await this.#i(t)}async#s(){let[,e]=await this.#e.exchange(f.PV_Start,{_pd:d([[c.State,B.M1],[c.PublicKey,Buffer.from(this.#t.publicKey)]]),_auTy:4}),r=this.#o(e),t=r.get(c.PublicKey);return{encryptedData:r.get(c.EncryptedData),serverPublicKey:t}}async#n(e,r,t){let s=Buffer.from(G(this.#t.secretKey,t.serverPublicKey)),n=g({hash:"sha512",key:s,length:32,salt:Buffer.from("Pair-Verify-Encrypt-Salt"),info:Buffer.from("Pair-Verify-Encrypt-Info")}),i=t.encryptedData.subarray(0,-16),o=t.encryptedData.subarray(-16),a=k(n,Buffer.from("PV-Msg02"),null,i,o),l=b(a),h=l.get(c.Identifier),P=l.get(c.Signature);if(h.toString()!==e)throw Error(`Invalid accessory identifier. Expected ${h.toString()} to be ${e}.`);let w=Buffer.concat([t.serverPublicKey,h,this.#t.publicKey]);if(!fe.sign.detached.verify(w,P,r))throw Error("Invalid accessory signature.");return{serverEphemeralPublicKey:t.serverPublicKey,sessionKey:n,sharedSecret:s}}async#a(e,r,t){let s=Buffer.concat([this.#t.publicKey,e,t.serverEphemeralPublicKey]),n=Buffer.from(fe.sign.detached(s,r)),i=d([[c.Identifier,e],[c.Signature,n]]),{authTag:o,ciphertext:a}=K(t.sessionKey,Buffer.from("PV-Msg03"),null,i),l=Buffer.concat([a,o]),[,h]=await this.#e.exchange(f.PV_Next,{_pd:d([[c.State,B.M3],[c.EncryptedData,l]]),_auTy:4});return console.log(this.#o(h)),{}}async#i(e){let r=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ServerEncrypt-main")}),t=g({hash:"sha512",key:e.sharedSecret,length:32,salt:Buffer.alloc(0),info:Buffer.from("ClientEncrypt-main")});return{accessoryToControllerKey:r,controllerToAccessoryKey:t}}#o(e){if(typeof e!=="object"||e===null)throw Error("Invalid response from receiver.");let r=b(e._pd);if(r.has(c.Error))M(r);return m("Decoded TLV",r),r}}class R{get api(){return this.#r}get socket(){return this.#t}get pairing(){return this.#s}get verify(){return this.#n}#r;#e;#t;#s;#n;constructor(e){this.#e=e,this.#t=new J(e.address,e.service.port),this.#r=new V(this,this.#t),this.#s=new ce(this,this.#t),this.#n=new ue(this,this.#t)}async connect(){await this.#t.connect()}}var Ke=S.companionLink(),Ee=await Ke.findUntil("Woonkamer TV._companion-link._tcp.local"),_=new R(Ee);await _.connect();async function Te(){let e={accessoryIdentifier:"7EEEA518-06CC-486C-A8B8-4A07CDBE6267",accessoryLongTermPublicKey:Buffer.from("cfb3fb0e0eb494d9058d5051c94400b35251e3faad66542b9551a1496570628d","hex"),pairingId:Buffer.from("31343733314638332d334438422d344242362d393530302d433544464243383737443735","hex"),publicKey:Buffer.from("4b7707b544e9c3b7a3609d0c9f7c9f013a71b415568bff597013d65e14d88918","hex"),secretKey:Buffer.from("3933f2526014609fc437d2b0c7968b476f3ee0fd2d836fc5e97971fbd26adae04b7707b544e9c3b7a3609d0c9f7c9f013a71b415568bff597013d65e14d88918","hex")},r=await _.verify.start(e);await _.socket.enableEncryption(r.accessoryToControllerKey,r.controllerToAccessoryKey),await _.api._systemInfo(e.pairingId),await _.api._touchStart(),await _.api._sessionStart(),await _.api._tvrcSessionStart(),await _.api._unsubscribe("_iMC"),await _.api._subscribe("TVSystemStatus",(t)=>m(t))}await Te();
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=36FCB96673F9FF6164756E2164756E21
|
|
5
5
|
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli.ts", "../src/discovery/discovery.ts", "../src/const.ts", "../src/encoding/opack.ts", "../src/encoding/plist.ts", "../src/encoding/tlv8.ts", "../src/socket/companionLink.ts", "../src/crypto/chacha20.ts", "../src/crypto/curve25519.ts", "../src/crypto/hkdf.ts", "../src/socket/base.ts", "../src/protocol/api/companionLink.ts", "../src/protocol/pairing/companionLink.ts", "../src/protocol/verify/companionLink.ts", "../src/protocol/companionLink.ts", "../src/test.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { createInterface } from 'node:readline';\
|
|
5
|
+
"import { createInterface } from 'node:readline';\n// import { styleText } from 'node:util';\n\nconst stdin = createInterface({\n input: process.stdin,\n output: process.stdout\n});\n\nexport function debug(...data: any[]): void {\n // console.debug(styleText('cyan', '[debug]'), ...data);\n console.debug('[debug]', ...data);\n}\n\nexport async function prompt(message: string): Promise<string> {\n return await new Promise<string>(resolve => stdin.question(`${message}: `, resolve));\n}\n\nexport async function waitFor(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n",
|
|
6
6
|
"import mdns, { Result } from 'node-dns-sd';\nimport { waitFor } from '@/cli';\nimport { AIRPLAY_SERVICE, COMPANION_LINK_SERVICE, RAOP_SERVICE } from '@/const';\n\nexport default class Discovery {\n readonly #service: string;\n\n constructor(service: string) {\n this.#service = service;\n }\n\n async find(): Promise<Result[]> {\n return await mdns.discover({\n name: this.#service\n });\n }\n\n async findUntil(fqdn: string, tries: number = 10, timeout: number = 1000): Promise<Result> {\n while (tries > 0) {\n const devices = await this.find();\n const device = devices.find(device => device.fqdn === fqdn);\n\n if (device) {\n return device;\n }\n\n console.log();\n console.log(`Device not found, retrying in ${timeout}ms...`);\n console.log(devices.map(d => ` ● ${d.fqdn}`).join('\\n'));\n\n tries--;\n\n if (tries === 0) {\n throw new Error('Device not found after serveral tries, aborting.');\n }\n\n await waitFor(timeout);\n }\n }\n\n static airplay(): Discovery {\n return new Discovery(AIRPLAY_SERVICE);\n }\n\n static companionLink(): Discovery {\n return new Discovery(COMPANION_LINK_SERVICE);\n }\n\n static raop(): Discovery {\n return new Discovery(RAOP_SERVICE);\n }\n}\n",
|
|
7
7
|
"export const AIRPLAY_TRANSIENT_PIN = '3939';\n\nexport const HTTP_TIMEOUT = 15000;\n\nexport const AIRPLAY_SERVICE = '_airplay._tcp.local';\nexport const COMPANION_LINK_SERVICE = '_companion-link._tcp.local';\nexport const RAOP_SERVICE = '_raop._tcp.local';\n",
|
|
8
8
|
"type Packed = Uint8Array;\ntype ObjectList = Packed[];\n\nclass SizedInt extends Number {\n size: number;\n\n constructor(value: number, size: number) {\n super(value);\n this.size = size;\n }\n}\n\nconst _SIZED_INT_TYPES: Record<number, typeof SizedInt> = {};\n\nexport function sizedInt(value: number, size: number): SizedInt {\n return new SizedInt(value, size);\n}\n\nclass OPACKFloat {\n value: number;\n\n constructor(value: number) {\n this.value = value;\n }\n}\n\nexport function float(value: number) {\n return new OPACKFloat(value);\n}\n\nclass OPACKInt {\n value: number;\n\n constructor(value: number) {\n this.value = value;\n }\n}\n\nexport function int(value: number) {\n return new OPACKInt(value);\n}\n\nfunction concat(arr: Uint8Array[]): Uint8Array {\n const total = arr.reduce((s, a) => s + a.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const a of arr) {\n out.set(a, off);\n off += a.length;\n }\n return out;\n}\n\nfunction u8(b: number) {\n return Uint8Array.of(b);\n}\n\nfunction uintToLEBytes(value: number | bigint, byteLen: number): Uint8Array {\n const out = new Uint8Array(byteLen);\n let v = BigInt(value);\n for (let i = 0; i < byteLen; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction concatUint8Arrays(arrays: Uint8Array[]): Uint8Array {\n const total = arrays.reduce((sum, a) => sum + a.length, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const a of arrays) {\n out.set(a, offset);\n offset += a.length;\n }\n return out;\n}\n\nexport function pack(data: any): Uint8Array {\n return _pack(data, []);\n}\n\nfunction _pack(data: any, objectList: ObjectList): Uint8Array {\n let packed: Uint8Array | null = null;\n\n if (data === null || data === undefined) packed = u8(0x04);\n else if (typeof data === 'boolean') packed = u8(data ? 0x01 : 0x02);\n else if (data instanceof OPACKFloat) {\n const buf = new ArrayBuffer(8);\n new DataView(buf).setFloat64(0, data.value, true);\n packed = concat([u8(0x36), new Uint8Array(buf)]);\n } else if (data instanceof OPACKInt) {\n const val = data.value;\n if (val < 0x28) packed = u8(0x08 + val);\n else if (val <= 0xff) packed = concatUint8Arrays([u8(0x30), uintToLEBytes(val, 1)]);\n else if (val <= 0xffff) packed = concatUint8Arrays([u8(0x31), uintToLEBytes(val, 2)]);\n else if (val <= 0xffffffff) packed = concatUint8Arrays([u8(0x32), uintToLEBytes(val, 4)]);\n else packed = concatUint8Arrays([u8(0x33), uintToLEBytes(val, 8)]);\n } else if (typeof data === 'number') {\n if (!Number.isInteger(data)) {\n const buf = new ArrayBuffer(8);\n new DataView(buf).setFloat64(0, data, true);\n packed = concat([u8(0x36), new Uint8Array(buf)]);\n } else {\n if (data < 0x28) packed = u8(0x08 + data);\n else if (data <= 0xff) packed = concat([u8(0x30), uintToLEBytes(data, 1)]);\n else if (data <= 0xffff) packed = concat([u8(0x31), uintToLEBytes(data, 2)]);\n else if (data <= 0xffffffff) packed = concat([u8(0x32), uintToLEBytes(data, 4)]);\n else packed = concat([u8(0x33), uintToLEBytes(data, 8)]);\n }\n } else if (data instanceof SizedInt) {\n packed = concat([u8(0x30 + Math.log2(data.size)), uintToLEBytes(data.valueOf(), data.size)]);\n } else if (typeof data === 'string') {\n const b = new TextEncoder().encode(data);\n const len = b.length;\n if (len <= 0x20) packed = concat([u8(0x40 + len), b]);\n else if (len <= 0xff) packed = concat([u8(0x61), uintToLEBytes(len, 1), b]);\n else if (len <= 0xffff) packed = concat([u8(0x62), uintToLEBytes(len, 2), b]);\n else if (len <= 0xffffff) packed = concat([u8(0x63), uintToLEBytes(len, 3), b]);\n else packed = concat([u8(0x64), uintToLEBytes(len, 4), b]);\n } else if (data instanceof Uint8Array || Buffer.isBuffer(data)) {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n const len = bytes.length;\n if (len <= 0x20) packed = concat([u8(0x70 + len), bytes]);\n else if (len <= 0xff) packed = concat([u8(0x91), uintToLEBytes(len, 1), bytes]);\n else if (len <= 0xffff) packed = concat([u8(0x92), uintToLEBytes(len, 2), bytes]);\n else packed = concat([u8(0x93), uintToLEBytes(len, 4), bytes]);\n } else if (Array.isArray(data)) {\n const body = concat(data.map(d => _pack(d, objectList)));\n const len = data.length;\n if (len <= 0x0f) {\n packed = concat([u8(0xd0 + len), body]);\n if (len >= 0x0f) packed = concat([packed, u8(0x03)]);\n } else packed = concat([u8(0xdf), body, u8(0x03)]);\n } else if (typeof data === 'object') {\n const keys = Object.keys(data);\n const len = keys.length;\n const pairs: Uint8Array[] = [];\n for (const k of keys) {\n pairs.push(_pack(k, objectList));\n pairs.push(_pack((data as any)[k], objectList));\n }\n let header: Uint8Array;\n if (len <= 0x0f) {\n header = u8(0xE0 + len);\n } else {\n header = u8(0xEF);\n }\n packed = concatUint8Arrays([header, concatUint8Arrays(pairs)]);\n // terminator\n if (len >= 0x0f || objectList.some(v => v === packed)) {\n packed = concatUint8Arrays([packed, u8(0x81)]);\n }\n } else throw new TypeError(typeof data + '');\n\n // Object reuse\n const idx = objectList.findIndex(v => v.length === packed!.length && v.every((x, i) => x === packed![i]));\n if (idx >= 0) {\n if (idx < 0x21) packed = u8(0xA0 + idx);\n else if (idx <= 0xff) packed = concat([u8(0xC1), uintToLEBytes(idx, 1)]);\n else if (idx <= 0xffff) packed = concat([u8(0xC2), uintToLEBytes(idx, 2)]);\n else if (idx <= 0xffffffff) packed = concat([u8(0xC3), uintToLEBytes(idx, 4)]);\n else packed = concat([u8(0xC4), uintToLEBytes(idx, 8)]);\n } else if (packed!.length > 1) objectList.push(packed!);\n\n return packed!;\n}\n\n/* UNPACK */\nexport function unpack(data: Uint8Array): [any, Uint8Array] {\n return _unpack(data, []);\n}\n\nfunction ensureAvailable(buf: Uint8Array, need: number) {\n if (buf.length < need) throw new TypeError(`Not enough data: need ${need} bytes, have ${buf.length}`);\n}\n\nfunction readLittleEndian(buf: Uint8Array, offset: number, len: number) {\n ensureAvailable(buf.subarray(offset), len);\n let v = 0n;\n for (let i = len - 1; i >= 0; i--) v = (v << 8n) | BigInt(buf[offset + i]);\n return Number(v);\n}\n\nfunction _unpack(data: Uint8Array, objectList: any[]): [any, Uint8Array] {\n if (data.length === 0) throw new TypeError('No data to unpack');\n const tag = data[0];\n let addToObjectList = true;\n let value: any;\n let rest: Uint8Array;\n\n // simple tokens\n if (tag === 0x01) { value = true; rest = data.subarray(1); }\n else if (tag === 0x02) { value = false; rest = data.subarray(1); }\n else if (tag === 0x04) { value = null; rest = data.subarray(1); }\n else if (tag === 0x05) {\n value = data.subarray(1, 17);\n rest = data.subarray(17);\n }\n else if (tag === 0x06) {\n value = readLittleEndian(data, 1, 8);\n rest = data.subarray(9);\n }\n else if (tag >= 0x08 && tag <= 0x2f) {\n value = tag - 8;\n rest = data.subarray(1);\n }\n else if (tag === 0x35) {\n const view = new DataView(data.buffer, data.byteOffset + 1, 4);\n value = view.getFloat32(0, true);\n rest = data.subarray(5);\n }\n else if (tag === 0x36) {\n const view = new DataView(data.buffer, data.byteOffset + 1, 8);\n value = view.getFloat64(0, true);\n rest = data.subarray(9);\n }\n else if ((tag & 0xF0) === 0x30) {\n const noOfBytes = 2 ** (tag & 0xF);\n const val = readLittleEndian(data, 1, noOfBytes);\n value = sizedInt(val, noOfBytes);\n rest = data.subarray(1 + noOfBytes);\n }\n else if (tag >= 0x40 && tag <= 0x60) {\n const length = tag - 0x40;\n value = new TextDecoder().decode(data.subarray(1, 1 + length));\n rest = data.subarray(1 + length);\n }\n else if (tag >= 0x61 && tag <= 0x64) {\n const lenBytes = tag & 0xF;\n const length = readLittleEndian(data, 1, lenBytes);\n value = new TextDecoder().decode(data.subarray(1 + lenBytes, 1 + lenBytes + length));\n rest = data.subarray(1 + lenBytes + length);\n }\n else if (tag >= 0x70 && tag <= 0x90) {\n const length = tag - 0x70;\n value = data.subarray(1, 1 + length);\n rest = data.subarray(1 + length);\n }\n else if (tag >= 0x91 && tag <= 0x94) {\n const noOfBytes = 1 << ((tag & 0xF) - 1);\n const length = readLittleEndian(data, 1, noOfBytes);\n const start = 1 + noOfBytes;\n value = data.subarray(start, start + length);\n rest = data.subarray(start + length);\n }\n else if ((tag & 0xF0) === 0xD0) {\n const count = tag & 0xF;\n let ptr = data.subarray(1);\n const arr: any[] = [];\n if (count === 0xF) {\n while (ptr[0] !== 0x03) {\n const [v, r] = _unpack(ptr, objectList);\n arr.push(v);\n ptr = r;\n }\n ptr = ptr.subarray(1);\n } else {\n for (let i = 0; i < count; i++) {\n const [v, r] = _unpack(ptr, objectList);\n arr.push(v);\n ptr = r;\n }\n }\n value = arr;\n rest = ptr;\n addToObjectList = false;\n }\n else if ((tag & 0xE0) === 0xE0) {\n const count = tag & 0xF;\n let ptr = data.subarray(1);\n const obj: Record<string, any> = {};\n if (count === 0xF) {\n while (ptr[0] !== 0x03) {\n const [k, r1] = _unpack(ptr, objectList);\n const [v, r2] = _unpack(r1, objectList);\n obj[k] = v;\n ptr = r2;\n }\n ptr = ptr.subarray(1);\n } else {\n for (let i = 0; i < count; i++) {\n const [k, r1] = _unpack(ptr, objectList);\n const [v, r2] = _unpack(r1, objectList);\n obj[k] = v;\n ptr = r2;\n }\n }\n value = obj;\n rest = ptr;\n addToObjectList = false;\n }\n else if (tag >= 0xA0 && tag <= 0xC0) {\n const idx = tag - 0xA0;\n if (idx >= objectList.length) throw new TypeError(`Reference index ${idx} out of range`);\n value = objectList[idx];\n rest = data.subarray(1);\n addToObjectList = false;\n }\n else if (tag >= 0xC1 && tag <= 0xC4) {\n const len = tag - 0xC0;\n const uid = readLittleEndian(data, 1, len);\n if (uid >= objectList.length) throw new TypeError(`UID ${uid} out of range`);\n value = objectList[uid];\n rest = data.subarray(1 + len);\n addToObjectList = false;\n }\n else {\n throw new TypeError(`Unknown tag 0x${tag.toString(16)}`);\n }\n\n if (addToObjectList) objectList.push(value);\n return [value, rest];\n}\n",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"import { Result } from 'node-dns-sd';\nimport { CompanionLinkSocket } from '@/socket';\nimport Api from './api/companionLink';\nimport Pairing from './pairing/companionLink';\nimport Verify from './verify/companionLink';\n\nexport default class CompanionLink {\n get api(): Api {\n return this.#api;\n }\n\n get socket(): CompanionLinkSocket {\n return this.#socket;\n }\n\n get pairing(): Pairing {\n return this.#pairing;\n }\n\n get verify(): Verify {\n return this.#verify;\n }\n\n readonly #api: Api;\n readonly #device: Result;\n readonly #socket: CompanionLinkSocket;\n readonly #pairing: Pairing;\n readonly #verify: Verify;\n\n constructor(device: Result) {\n this.#device = device;\n this.#socket = new CompanionLinkSocket(device.address, device.service.port);\n this.#api = new Api(this, this.#socket);\n this.#pairing = new Pairing(this, this.#socket);\n this.#verify = new Verify(this, this.#socket);\n }\n\n async connect(): Promise<void> {\n await this.#socket.connect();\n }\n}\n",
|
|
20
20
|
"import { write } from 'bun';\nimport { debug, prompt, waitFor } from '@/cli';\nimport { Discovery } from '@/discovery';\nimport { parseBinaryPlist } from '@/encoding';\nimport { CompanionLink } from '@/protocol';\n\nconst discovery = Discovery.companionLink();\nconst device = await discovery.findUntil('Woonkamer TV._companion-link._tcp.local');\n\nconst protocol = new CompanionLink(device);\nawait protocol.connect();\n\nasync function pair(): Promise<void> {\n await protocol.pairing.start();\n const credentials = await protocol.pairing.pin(async () => await prompt('Enter PIN'));\n\n console.log({\n accessoryIdentifier: credentials.accessoryIdentifier,\n accessoryLongTermPublicKey: credentials.accessoryLongTermPublicKey.toString('hex'),\n pairingId: credentials.pairingId.toString('hex'),\n publicKey: credentials.publicKey.toString('hex'),\n secretKey: credentials.secretKey.toString('hex')\n });\n}\n\nasync function verify(): Promise<void> {\n const credentials = {\n accessoryIdentifier: '7EEEA518-06CC-486C-A8B8-4A07CDBE6267',\n accessoryLongTermPublicKey: Buffer.from('cfb3fb0e0eb494d9058d5051c94400b35251e3faad66542b9551a1496570628d', 'hex'),\n pairingId: Buffer.from('31343733314638332d334438422d344242362d393530302d433544464243383737443735', 'hex'),\n publicKey: Buffer.from('4b7707b544e9c3b7a3609d0c9f7c9f013a71b415568bff597013d65e14d88918', 'hex'),\n secretKey: Buffer.from('3933f2526014609fc437d2b0c7968b476f3ee0fd2d836fc5e97971fbd26adae04b7707b544e9c3b7a3609d0c9f7c9f013a71b415568bff597013d65e14d88918', 'hex')\n };\n\n const keys = await protocol.verify.start(credentials);\n\n await protocol.socket.enableEncryption(\n keys.accessoryToControllerKey,\n keys.controllerToAccessoryKey\n );\n\n await protocol.api._systemInfo(credentials.pairingId);\n await protocol.api._touchStart();\n await protocol.api._sessionStart();\n await protocol.api._tvrcSessionStart();\n\n await protocol.api._unsubscribe('_iMC');\n await protocol.api._subscribe('TVSystemStatus', (e: CustomEvent) => debug(e));\n\n // await protocol.api._subscribe('NowPlayingInfo', handleNowPlayingInfo);\n // await protocol.api.fetchNowPlayingInfo();\n\n // await protocol.api._subscribe('SupportedActions', (e: CustomEvent) => debug(e));\n // await protocol.api.fetchSupportedActions();\n\n // await protocol.api._subscribe('PushSiriRemoteInfo', (e: CustomEvent) => debug(e));\n // const data = await protocol.api.getSiriRemoteInfo();\n // debug(data);\n\n // await protocol.api._subscribe('MediaControlStatus', (e: CustomEvent) => debug(e));\n // const data = await protocol.api.fetchMediaControlStatus();\n // debug(data);\n\n // debug('Attention state', await protocol.api.getAttentionState());\n // debug('Launchable apps', await protocol.api.getLaunchableApps());\n // debug('Available user accounts', await protocol.api.getUserAccounts());\n\n // await protocol.api.launchApp('com.apple.TVMusic');\n // await protocol.api.launchUrl('nflx://www.netflix.com/title/70291117');\n // await protocol.api.switchUserAccount('71A6CA15-5268-4820-9DD8-1C53F980C149');\n\n // await protocol.api.pressButton('Select');\n // await protocol.api.pressButton('VolumeDown');\n\n // await protocol.api.mediaControlCommand('Pause');\n // await waitFor(2000);\n // await protocol.api.mediaControlCommand('Play');\n\n // await protocol.api.pressButton('PageUp');\n\n // await protocol.api.pressButton('Sleep');\n // await protocol.api.pressButton('Wake');\n\n // await protocol.api.mediaControlCommand('GetVolume');\n\n // await protocol.api.pressButton('Menu');\n\n // await protocol.api.launchUrl('https://play.hbomax.com/video/watch/330677a5-aff2-4270-b19e-d67b021adfaf/be45824d-2c34-4d7f-9fac-2380c8e46123');\n}\n\nasync function handleNowPlayingInfo(evt: CustomEvent): Promise<void> {\n const {detail: {NowPlayingInfoKey}} = evt;\n const buffer = NowPlayingInfoKey.buffer.slice(\n NowPlayingInfoKey.byteOffset,\n NowPlayingInfoKey.byteOffset + NowPlayingInfoKey.byteLength\n );\n\n try {\n const nowPlaying = parseBinaryPlist(buffer) as any;\n console.log('NowPlayingInfoKey', {nowPlaying});\n } catch (err) {\n console.error(err);\n // console.error(Buffer.from(buffer).toString());\n }\n\n // if (!nowPlaying.$objects[15]) {\n // try {\n // await write('./artwork.png', nowPlaying.$objects[14]);\n // } catch (_) {\n // }\n // }\n //\n // if (nowPlaying.$objects[4]) {\n // debug(`Now playing ${nowPlaying.$objects[8]} on Apple TV.`);\n // } else {\n // debug('Not playing?');\n // }\n //\n // // debug(nowPlaying);\n // // debug('Keys', nowPlaying.$objects[1]);\n // // debug('Image data is placeholder', nowPlaying.$objects[15]);\n // // debug('metadata', nowPlaying.$objects[6]);\n // debug('playback state', nowPlaying.$objects[4]);\n}\n\n// await pair();\nawait verify();\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "36FCB96673F9FF6164756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|