@basmilius/apple-common 0.0.70 → 0.0.71

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/const.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const AIRPLAY_TRANSIENT_PIN = "3939";
2
- export declare const HTTP_TIMEOUT = 5e3;
2
+ export declare const HTTP_TIMEOUT = 1750;
3
3
  export declare const AIRPLAY_SERVICE = "_airplay._tcp.local";
4
4
  export declare const COMPANION_LINK_SERVICE = "_companion-link._tcp.local";
5
5
  export declare const RAOP_SERVICE = "_raop._tcp.local";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import{v4 as Vr}from"uuid";import{createCipher as pe,createDecipher as de}from"chacha";var Z=12;function E(e,t,r,s,n){t=J(t);let o=de(e,t);r&&o.setAAD(r),o.setAuthTag(n);let i=o._update(s);return o._final(),i}function S(e,t,r,s){t=J(t);let n=pe(e,t);r&&n.setAAD(r);let o=n._update(s);n._final();let i=n.getAuthTag();return{ciphertext:o,authTag:i}}function J(e){if(e.length>=Z)return e;return Buffer.concat([Buffer.alloc(Z-e.length,0),e])}import Q from"tweetnacl";function T(){let e=Q.box.keyPair();return{publicKey:e.publicKey,secretKey:e.secretKey}}function F(e,t){return Q.scalarMult(e,t)}import{hkdfSync as he}from"node:crypto";function h(e){return Buffer.from(he(e.hash,e.key,e.salt,e.info,e.length))}import Pe from"node-dns-sd";import{createInterface as xe}from"node:readline";var j=xe({input:process.stdin,output:process.stdout});async function ge(e){return await new Promise((t)=>j.question(`${e}: `,t))}async function V(e){return new Promise((t)=>setTimeout(t,e))}class ee{#e=[];all(){this.#e=["error","info","net","raw","warn"]}disable(e){if(this.#e.includes(e))this.#e.splice(this.#e.indexOf(e),1)}enable(e){if(!this.#e.includes(e))this.#e.push(e)}isEnabled(e){return this.#e.includes(e)}error(...e){this.isEnabled("error")&&console.error("\x1B[31m[error]\x1B[39m",...e)}info(...e){this.isEnabled("info")&&console.info("\x1B[32m[info]\x1B[39m",...e)}net(...e){this.isEnabled("net")&&console.info("\x1B[33m[net]\x1B[39m",...e)}raw(...e){this.isEnabled("raw")&&console.log("\x1B[34m[raw]\x1B[39m",...e)}warn(...e){this.isEnabled("warn")&&console.warn("\x1B[33m[warn]\x1B[39m",...e)}}var g=new ee;var N="3939",be=5000,O="_airplay._tcp.local",q="_companion-link._tcp.local",$="_raop._tcp.local";class P{#e;constructor(e){this.#e=e}async find(){return await Pe.discover({name:this.#e})}async findUntil(e,t=10,r=1000){while(t>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 ${r}ms...`),console.log(s.map((o)=>` ● ${o.fqdn}`).join(`
1
+ import{v4 as Vr}from"uuid";import{createCipher as pe,createDecipher as de}from"chacha";var Z=12;function E(e,t,r,s,n){t=J(t);let o=de(e,t);r&&o.setAAD(r),o.setAuthTag(n);let i=o._update(s);return o._final(),i}function S(e,t,r,s){t=J(t);let n=pe(e,t);r&&n.setAAD(r);let o=n._update(s);n._final();let i=n.getAuthTag();return{ciphertext:o,authTag:i}}function J(e){if(e.length>=Z)return e;return Buffer.concat([Buffer.alloc(Z-e.length,0),e])}import Q from"tweetnacl";function T(){let e=Q.box.keyPair();return{publicKey:e.publicKey,secretKey:e.secretKey}}function F(e,t){return Q.scalarMult(e,t)}import{hkdfSync as he}from"node:crypto";function h(e){return Buffer.from(he(e.hash,e.key,e.salt,e.info,e.length))}import Pe from"node-dns-sd";import{createInterface as xe}from"node:readline";var j=xe({input:process.stdin,output:process.stdout});async function ge(e){return await new Promise((t)=>j.question(`${e}: `,t))}async function V(e){return new Promise((t)=>setTimeout(t,e))}class ee{#e=[];all(){this.#e=["error","info","net","raw","warn"]}disable(e){if(this.#e.includes(e))this.#e.splice(this.#e.indexOf(e),1)}enable(e){if(!this.#e.includes(e))this.#e.push(e)}isEnabled(e){return this.#e.includes(e)}error(...e){this.isEnabled("error")&&console.error("\x1B[31m[error]\x1B[39m",...e)}info(...e){this.isEnabled("info")&&console.info("\x1B[32m[info]\x1B[39m",...e)}net(...e){this.isEnabled("net")&&console.info("\x1B[33m[net]\x1B[39m",...e)}raw(...e){this.isEnabled("raw")&&console.log("\x1B[34m[raw]\x1B[39m",...e)}warn(...e){this.isEnabled("warn")&&console.warn("\x1B[33m[warn]\x1B[39m",...e)}}var g=new ee;var N="3939",be=1750,O="_airplay._tcp.local",q="_companion-link._tcp.local",$="_raop._tcp.local";class P{#e;constructor(e){this.#e=e}async find(){return await Pe.discover({name:this.#e})}async findUntil(e,t=10,r=1000){while(t>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 ${r}ms...`),console.log(s.map((o)=>` ● ${o.fqdn}`).join(`
2
2
  `)),t--,t===0)throw Error("Device not found after serveral tries, aborting.");await V(r)}}static airplay(){return new P(O)}static companionLink(){return new P(q)}static raop(){return new P($)}}class z extends Number{size;constructor(e,t){super(e);this.size=t}}function L(e,t){return new z(e,t)}class H{value;constructor(e){this.value=e}}function re(e){return new H(e)}class X{value;constructor(e){this.value=e}}function te(e){return new X(e)}function l(e){let t=e.reduce((n,o)=>n+o.length,0),r=new Uint8Array(t),s=0;for(let n of e)r.set(n,s),s+=n.length;return r}function f(e){return Uint8Array.of(e)}function y(e,t){let r=new Uint8Array(t),s=BigInt(e);for(let n=0;n<t;n++)r[n]=Number(s&0xffn),s>>=8n;return r}function v(e){let t=e.reduce((n,o)=>n+o.length,0),r=new Uint8Array(t),s=0;for(let n of e)r.set(n,s),s+=n.length;return r}function U(e){return M(e,[])}function M(e,t){let r=null;if(e===null||e===void 0)r=f(4);else if(typeof e==="boolean")r=f(e?1:2);else if(e instanceof H){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),r=l([f(54),new Uint8Array(n)])}else if(e instanceof X){let n=e.value;if(n<40)r=f(8+n);else if(n<=255)r=v([f(48),y(n,1)]);else if(n<=65535)r=v([f(49),y(n,2)]);else if(n<=4294967295)r=v([f(50),y(n,4)]);else r=v([f(51),y(n,8)])}else if(typeof e==="number")if(!Number.isInteger(e)){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e,!0),r=l([f(54),new Uint8Array(n)])}else if(e<40)r=f(8+e);else if(e<=255)r=l([f(48),y(e,1)]);else if(e<=65535)r=l([f(49),y(e,2)]);else if(e<=4294967295)r=l([f(50),y(e,4)]);else r=l([f(51),y(e,8)]);else if(e instanceof z)r=l([f(48+Math.log2(e.size)),y(e.valueOf(),e.size)]);else if(typeof e==="string"){let n=new TextEncoder().encode(e),o=n.length;if(o<=32)r=l([f(64+o),n]);else if(o<=255)r=l([f(97),y(o,1),n]);else if(o<=65535)r=l([f(98),y(o,2),n]);else if(o<=16777215)r=l([f(99),y(o,3),n]);else r=l([f(100),y(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)r=l([f(112+o),n]);else if(o<=255)r=l([f(145),y(o,1),n]);else if(o<=65535)r=l([f(146),y(o,2),n]);else r=l([f(147),y(o,4),n])}else if(Array.isArray(e)){let n=l(e.map((i)=>M(i,t))),o=e.length;if(o<=15){if(r=l([f(208+o),n]),o>=15)r=l([r,f(3)])}else r=l([f(223),n,f(3)])}else if(typeof e==="object"){let n=Object.keys(e),o=n.length,i=[];for(let u of n)i.push(M(u,t)),i.push(M(e[u],t));let a;if(o<=15)a=f(224+o);else a=f(239);if(r=v([a,v(i)]),o>=15||t.some((u)=>u===r))r=v([r,f(129)])}else throw TypeError(typeof e);let s=t.findIndex((n)=>n.length===r.length&&n.every((o,i)=>o===r[i]));if(s>=0)if(s<33)r=f(160+s);else if(s<=255)r=l([f(193),y(s,1)]);else if(s<=65535)r=l([f(194),y(s,2)]);else if(s<=4294967295)r=l([f(195),y(s,4)]);else r=l([f(196),y(s,8)]);else if(r.length>1)t.push(r);return r}function ne(e){return w(e,[])}function ve(e,t){if(e.length<t)throw TypeError(`Not enough data: need ${t} bytes, have ${e.length}`)}function A(e,t,r){ve(e.subarray(t),r);let s=0n;for(let n=r-1;n>=0;n--)s=s<<8n|BigInt(e[t+n]);return Number(s)}function w(e,t){if(e.length===0)throw TypeError("No data to unpack");let r=e[0],s=!0,n,o;if(r===1)n=!0,o=e.subarray(1);else if(r===2)n=!1,o=e.subarray(1);else if(r===4)n=null,o=e.subarray(1);else if(r===5)n=e.subarray(1,17),o=e.subarray(17);else if(r===6)n=A(e,1,8),o=e.subarray(9);else if(r>=8&&r<=47)n=r-8,o=e.subarray(1);else if(r===53)n=new DataView(e.buffer,e.byteOffset+1,4).getFloat32(0,!0),o=e.subarray(5);else if(r===54)n=new DataView(e.buffer,e.byteOffset+1,8).getFloat64(0,!0),o=e.subarray(9);else if((r&240)===48){let i=2**(r&15),a=A(e,1,i);n=L(a,i),o=e.subarray(1+i)}else if(r>=64&&r<=96){let i=r-64;n=new TextDecoder().decode(e.subarray(1,1+i)),o=e.subarray(1+i)}else if(r>=97&&r<=100){let i=r&15,a=A(e,1,i);n=new TextDecoder().decode(e.subarray(1+i,1+i+a)),o=e.subarray(1+i+a)}else if(r>=112&&r<=144){let i=r-112;n=e.subarray(1,1+i),o=e.subarray(1+i)}else if(r>=145&&r<=148){let i=1<<(r&15)-1,a=A(e,1,i),u=1+i;n=e.subarray(u,u+a),o=e.subarray(u+a)}else if((r&240)===208){let i=r&15,a=e.subarray(1),u=[];if(i===15){while(a[0]!==3){let[m,p]=w(a,t);u.push(m),a=p}a=a.subarray(1)}else for(let m=0;m<i;m++){let[p,d]=w(a,t);u.push(p),a=d}n=u,o=a,s=!1}else if((r&224)===224){let i=r&15,a=e.subarray(1),u={};if(i===15){while(a[0]!==3){let[m,p]=w(a,t),[d,I]=w(p,t);u[m]=d,a=I}a=a.subarray(1)}else for(let m=0;m<i;m++){let[p,d]=w(a,t),[I,W]=w(d,t);u[p]=I,a=W}n=u,o=a,s=!1}else if(r>=160&&r<=192){let i=r-160;if(i>=t.length)throw TypeError(`Reference index ${i} out of range`);n=t[i],o=e.subarray(1),s=!1}else if(r>=193&&r<=196){let i=r-192,a=A(e,1,i);if(a>=t.length)throw TypeError(`UID ${a} out of range`);n=t[a],o=e.subarray(1+i),s=!1}else throw TypeError(`Unknown tag 0x${r.toString(16)}`);if(s)t.push(n);return[n,o]}import{parse as oe}from"@plist/binary.parse";import{serialize as se}from"@plist/binary.serialize";var k={TransientPairing:16},_={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 C(e){if(e.has(c.BackOff)){let t=e.get(c.BackOff),r=t.readUintLE(0,t.length);throw Error(`Device is busy, try again in ${r} seconds.`)}if(e.has(c.Error))throw Error(`Device returned an error code: ${e.get(c.Error).readUint8()}`);throw g.error(e),Error("Invalid response")}function x(e){let t=[];for(let[r,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(t.push(r,i),i>0)for(let a=0;a<i;a++)t.push(n[o+a]);o+=i}while(o<n.length)}return Buffer.from(t)}function B(e){let t=new Map,r=0;while(r<e.length){let s=e[r++],n=e[r++],o=new Uint8Array(e).slice(r,r+n);r+=n;let i=t.get(s);if(i)t.set(s,Buffer.concat([i,o]));else t.set(s,Buffer.from(o))}return t}import{networkInterfaces as we}from"node:os";function Y(){let e=we();for(let t of Object.keys(e)){let r=e[t];if(!r)continue;for(let s of r){if(s.internal||s.family!=="IPv4")continue;if(s.address&&s.address!=="127.0.0.1")return s.address}}return null}import{networkInterfaces as Be}from"node:os";function G(){let e=Be();for(let t of Object.keys(e)){let r=e[t];if(!r)continue;for(let s of r){if(s.internal||s.family!=="IPv4")continue;if(s.mac&&s.mac!=="00:00:00:00:00:00")return s.mac.toUpperCase()}}return"00:00:00:00:00:00"}import{EventEmitter as Ie}from"node:events";class D extends Ie{get address(){return this.#e}get port(){return this.#r}#e;#r;constructor(e,t){super();this.#e=e,this.#r=t}async connect(){}async disconnect(){}async onClose(){this.emit("close")}async onConnect(){this.emit("connect")}async onError(e){this.emit("error",e)}async onTimeout(){this.emit("timeout")}}import{createSocket as Ae}from"node:dgram";var Ee=0x83AA7E80n;function ie(){let e=Se()/1000n,t=e/1000000n,r=e-t*1000000n;return t+Ee<<32n|(r<<32n)/1000000n}function Se(){return process.hrtime.bigint()}function ae(e){return[Number(e>>32n),Number(e&0xFFFFFFFFn)]}function ce(e){return{proto:e.readUInt8(0),type:e.readUInt8(1),seqno:e.readUInt16BE(2),padding:e.readUInt32BE(4),reftime_sec:e.readUInt32BE(8),reftime_frac:e.readUInt32BE(12),recvtime_sec:e.readUInt32BE(16),recvtime_frac:e.readUInt32BE(20),sendtime_sec:e.readUInt32BE(24),sendtime_frac:e.readUInt32BE(28)}}function fe(e){let t=Buffer.alloc(32);return t.writeUInt8(e.proto,0),t.writeUInt8(e.type,1),t.writeUInt16BE(e.seqno,2),t.writeUInt32BE(e.padding,4),t.writeUInt32BE(e.reftime_sec,8),t.writeUInt32BE(e.reftime_frac,12),t.writeUInt32BE(e.recvtime_sec,16),t.writeUInt32BE(e.recvtime_frac,20),t.writeUInt32BE(e.sendtime_sec,24),t.writeUInt32BE(e.sendtime_frac,28),t}class ue{get port(){return this.#r}#e;#r=0;constructor(){this.#e=Ae("udp4"),this.#e.on("error",(e)=>this.#t(e)),this.#e.on("message",(e,t)=>this.#s(e,t))}async close(){this.#e.close(),this.#r=0}async listen(){return new Promise((e)=>{this.#e.once("listening",()=>this.#n()),this.#e.bind(0,e)})}async#t(e){g.error("Timing server error",e)}async#n(){let{port:e}=this.#e.address();this.#r=e}async#s(e,t){let r=ce(e),s=ie(),[n,o]=ae(s);g.info(`Timing server ntp=${s} receivedSeconds=${n} receivedFraction=${o}`);let i=fe({proto:r.proto,type:211,seqno:r.seqno,padding:0,reftime_sec:r.sendtime_sec,reftime_frac:r.sendtime_frac,recvtime_sec:n,recvtime_frac:o,sendtime_sec:n,sendtime_frac:o});this.#e.send(i,t.port,t.address)}}import{SRP as le,SrpClient as Ke}from"fast-srp-hap";import{v4 as Te}from"uuid";import K from"tweetnacl";class ye{#e;#r;#t;#n;#s;#o;constructor(e){this.#e="basmilius/apple-protocols",this.#r=Buffer.from(Te().toUpperCase()),this.#t=e}async start(){let e=K.sign.keyPair();this.#n=Buffer.from(e.publicKey),this.#s=Buffer.from(e.secretKey)}async pin(e){let t=await this.m1(),r=await this.m2(t,await e()),s=await this.m3(r),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,k.TransientPairing]]),t=await this.m2(e),r=await this.m3(t),s=await this.m4(r),n=h({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Read-Encryption-Key")}),o=h({hash:"sha512",key:s.sharedSecret,length:32,salt:Buffer.from("Control-Salt"),info:Buffer.from("Control-Write-Encryption-Key")});return{pairingId:this.#r,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:o}}async m1(e=[]){let t=await this.#t("m1",x([[c.Method,_.PairSetup],[c.State,b.M1],...e])),r=R(t),s=r.get(c.PublicKey),n=r.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,t=N){let r=await le.genKey(32);this.#o=new Ke(le.params.hap,e.salt,Buffer.from("Pair-Setup"),Buffer.from(t),r,!0),this.#o.setB(e.publicKey);let s=this.#o.computeA(),n=this.#o.computeM1();return{publicKey:s,proof:n}}async m3(e){let t=await this.#t("m3",x([[c.State,b.M3],[c.PublicKey,e.publicKey],[c.Proof,e.proof]]));return{serverProof:R(t).get(c.Proof)}}async m4(e){return this.#o.checkM2(e.serverProof),{sharedSecret:this.#o.computeK()}}async m5(e){let t=h({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")}),r=h({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([t,this.#r,this.#n]),n=K.sign.detached(s,this.#s),o=x([[c.Identifier,this.#r],[c.PublicKey,this.#n],[c.Signature,Buffer.from(n)],[c.Name,Buffer.from(U({name:this.#e}))]]),{authTag:i,ciphertext:a}=S(r,Buffer.from("PS-Msg05"),null,o),u=Buffer.concat([a,i]),m=await this.#t("m5",x([[c.State,b.M5],[c.EncryptedData,u]])),d=R(m).get(c.EncryptedData),I=d.subarray(0,-16);return{authTag:d.subarray(-16),data:I,sessionKey:r}}async m6(e,t){let r=E(t.sessionKey,Buffer.from("PS-Msg06"),null,t.data,t.authTag),s=B(r),n=s.get(c.Identifier),o=s.get(c.PublicKey),i=s.get(c.Signature),a=h({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(!K.sign.detached.verify(u,i,o))throw Error("Invalid accessory signature.");return{accessoryIdentifier:n.toString(),accessoryLongTermPublicKey:o,pairingId:this.#r,publicKey:this.#n,secretKey:this.#s}}}class me{#e;#r;constructor(e){this.#e=T(),this.#r=e}async start(e){let t=await this.#t(),r=await this.#n(e.accessoryIdentifier,e.accessoryLongTermPublicKey,t);return await this.#s(e.pairingId,e.secretKey,r),await this.#o(r,e.pairingId)}async#t(){let e=await this.#r("m1",x([[c.State,b.M1],[c.PublicKey,Buffer.from(this.#e.publicKey)]])),t=R(e),r=t.get(c.PublicKey);return{encryptedData:t.get(c.EncryptedData),serverPublicKey:r}}async#n(e,t,r){let s=Buffer.from(F(this.#e.secretKey,r.serverPublicKey)),n=h({hash:"sha512",key:s,length:32,salt:Buffer.from("Pair-Verify-Encrypt-Salt"),info:Buffer.from("Pair-Verify-Encrypt-Info")}),o=r.encryptedData.subarray(0,-16),i=r.encryptedData.subarray(-16),a=E(n,Buffer.from("PV-Msg02"),null,o,i),u=B(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([r.serverPublicKey,m,this.#e.publicKey]);if(!K.sign.detached.verify(d,p,t))throw Error("Invalid accessory signature.");return{serverEphemeralPublicKey:r.serverPublicKey,sessionKey:n,sharedSecret:s}}async#s(e,t,r){let s=Buffer.concat([this.#e.publicKey,e,r.serverEphemeralPublicKey]),n=Buffer.from(K.sign.detached(s,t)),o=x([[c.Identifier,e],[c.Signature,n]]),{authTag:i,ciphertext:a}=S(r.sessionKey,Buffer.from("PV-Msg03"),null,o),u=Buffer.concat([a,i]);return await this.#r("m3",x([[c.State,b.M3],[c.EncryptedData,u]])),{}}async#o(e,t){return{accessoryToControllerKey:Buffer.alloc(0),controllerToAccessoryKey:Buffer.alloc(0),pairingId:t,sharedSecret:e.sharedSecret}}}function R(e){let t=B(e);if(t.has(c.Error))C(t);return g.raw("Decoded TLV",t),t}function Fe(e){let t=Buffer.alloc(2);return t.writeUInt16BE(e,0),t}function Me(e){let[t,r]=Ue(e),s=Buffer.alloc(8);return s.writeUInt32LE(r,0),s.writeUInt32LE(t,4),s}function Ue(e){if(e<=-1||e>9007199254740991)throw Error("Number out of range.");if(Math.floor(e)!==e)throw Error("Number is not an integer.");let s=0,n=e&4294967295,o=n<0?(e&2147483647)+2147483648:n;if(e>4294967295)s=(e-o)/4294967296;return[s,o]}export{V as waitFor,Vr as uuid,Me as uint53ToLE,Fe as uint16ToBE,se as serializeBinaryPlist,g as reporter,ge as prompt,oe as parseBinaryPlist,L as opackSizedInt,te as opackInt,re as opackFloat,h as hkdf,G as getMacAddress,Y as getLocalIP,F as generateCurve25519SharedSecKey,T as generateCurve25519KeyPair,S as encryptChacha20,x as encodeTlv,U as encodeOPack,E as decryptChacha20,B as decodeTlv,ne as decodeOPack,j as cli,C as bailTlv,c as TlvValue,b as TlvState,_ as TlvMethod,k as TlvFlags,ue as TimingServer,$ as RAOP_SERVICE,be as HTTP_TIMEOUT,P as Discovery,q as COMPANION_LINK_SERVICE,D as BaseSocket,me as AccessoryVerify,ye as AccessoryPair,N as AIRPLAY_TRANSIENT_PIN,O as AIRPLAY_SERVICE};
3
3
 
4
- //# debugId=C50D07B959B5006364756E2164756E21
4
+ //# debugId=10D2433E619B6A9864756E2164756E21
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -8,7 +8,7 @@
8
8
  "import { hkdfSync } from 'node:crypto';\n\nexport default function (options: HKDFOptions): Buffer {\n return Buffer.from(hkdfSync(options.hash, options.key, options.salt, options.info, options.length));\n}\n\nexport type HKDFOptions = {\n readonly hash: string;\n readonly key: Buffer;\n readonly length: number;\n readonly salt: Buffer;\n readonly info: Buffer;\n};\n",
9
9
  "import mdns 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<DiscoveryResult[]> {\n return await mdns.discover({\n name: this.#service\n });\n }\n\n async findUntil(fqdn: string, tries: number = 10, timeout: number = 1000): Promise<DiscoveryResult> {\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\nexport type DiscoveryResult = {\n readonly fqdn: string;\n readonly address: string;\n readonly modelName: string;\n readonly familyName: string | null;\n readonly service: {\n readonly port: number;\n readonly protocol: 'tcp' | 'udp';\n readonly type: string;\n };\n readonly packet: {\n readonly address: string;\n readonly header: Record<string, number>;\n readonly questions: Array<any>;\n readonly answers: Array<any>;\n readonly authorities: Array<any>;\n readonly additionals: [];\n };\n readonly [key: string]: unknown;\n};\n",
10
10
  "import { createInterface, type Interface } from 'node:readline';\n\nexport const cli: Interface = createInterface({\n input: process.stdin,\n output: process.stdout\n});\n\nexport async function prompt(message: string): Promise<string> {\n return await new Promise<string>(resolve => cli.question(`${message}: `, resolve));\n}\n\nexport async function waitFor(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nclass Reporter {\n #enabled: DebugGroup[] = [];\n\n all(): void {\n this.#enabled = ['error', 'info', 'net', 'raw', 'warn'] as DebugGroup[];\n }\n\n disable(group: DebugGroup): void {\n if (this.#enabled.includes(group)) {\n this.#enabled.splice(this.#enabled.indexOf(group), 1);\n }\n }\n\n enable(group: DebugGroup): void {\n if (!this.#enabled.includes(group)) {\n this.#enabled.push(group);\n }\n }\n\n isEnabled(group: DebugGroup): boolean {\n return this.#enabled.includes(group);\n }\n\n error(...data: any[]): void {\n this.isEnabled('error') && console.error(`\\u001b[31m[error]\\u001b[39m`, ...data);\n }\n\n info(...data: any[]): void {\n this.isEnabled('info') && console.info(`\\u001b[32m[info]\\u001b[39m`, ...data);\n }\n\n net(...data: any[]): void {\n this.isEnabled('net') && console.info(`\\u001b[33m[net]\\u001b[39m`, ...data);\n }\n\n raw(...data: any[]): void {\n this.isEnabled('raw') && console.log(`\\u001b[34m[raw]\\u001b[39m`, ...data);\n }\n\n warn(...data: any[]): void {\n this.isEnabled('warn') && console.warn(`\\u001b[33m[warn]\\u001b[39m`, ...data);\n }\n}\n\nexport const reporter: Reporter = new Reporter();\n\ntype DebugGroup =\n | 'error'\n | 'info'\n | 'net'\n | 'raw'\n | 'warn';\n",
11
- "export const AIRPLAY_TRANSIENT_PIN = '3939';\n\nexport const HTTP_TIMEOUT = 5000;\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",
11
+ "export const AIRPLAY_TRANSIENT_PIN = '3939';\n\nexport const HTTP_TIMEOUT = 1750;\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",
12
12
  "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",
13
13
  "export { parse } from '@plist/binary.parse';\nexport { serialize } from '@plist/binary.serialize';\n",
14
14
  "import { reporter } from '../cli';\n\nexport const Flags = {\n TransientPairing: 0x10\n} as const;\n\nexport const Method = {\n PairSetup: 0x00,\n PairSetupWithAuth: 0x01,\n PairVerify: 0x02,\n AddPairing: 0x03,\n RemovePairing: 0x04,\n ListPairing: 0x05\n} as const;\n\nexport const State = {\n M1: 0x01,\n M2: 0x02,\n M3: 0x03,\n M4: 0x04,\n M5: 0x05,\n M6: 0x06\n} as const;\n\nexport const Value = {\n Method: 0x00,\n Identifier: 0x01,\n Salt: 0x02,\n PublicKey: 0x03,\n Proof: 0x04,\n EncryptedData: 0x05,\n State: 0x06,\n Error: 0x07,\n BackOff: 0x08,\n Certificate: 0x09,\n Signature: 0x0A,\n Permissions: 0x0B,\n FragmentData: 0x0C,\n FragmentLast: 0x0D,\n\n Name: 0x11,\n Flags: 0x13\n} as const;\n\nexport function bail(data: Map<number, Buffer>): never {\n if (data.has(Value.BackOff)) {\n const buffer = data.get(Value.BackOff);\n const time = buffer.readUintLE(0, buffer.length);\n\n throw new Error(`Device is busy, try again in ${time} seconds.`);\n }\n\n if (data.has(Value.Error)) {\n throw new Error(`Device returned an error code: ${data.get(Value.Error).readUint8()}`);\n }\n\n reporter.error(data);\n\n throw new Error('Invalid response');\n}\n\nexport function encode(entries: [number, number | Buffer][]): Buffer {\n const chunks: number[] = [];\n\n for (const [type, valueRaw] of entries) {\n let value: Buffer;\n\n if (typeof valueRaw === 'number') {\n value = Buffer.from([valueRaw]);\n } else {\n value = valueRaw;\n }\n\n let offset = 0;\n\n do {\n const len = Math.min(value.length - offset, 255);\n chunks.push(type, len);\n\n if (len > 0) {\n for (let i = 0; i < len; i++) {\n chunks.push(value[offset + i]);\n }\n }\n\n offset += len;\n } while (offset < value.length);\n }\n\n return Buffer.from(chunks);\n}\n\nexport function decode(buf: Buffer): Map<number, Buffer> {\n const map = new Map<number, Buffer>();\n let i = 0;\n\n while (i < buf.length) {\n const type = buf[i++];\n const len = buf[i++];\n\n const value = (new Uint8Array(buf)).slice(i, i + len);\n i += len;\n\n const existing = map.get(type);\n if (existing) {\n map.set(type, Buffer.concat([existing, value]));\n } else {\n map.set(type, Buffer.from(value));\n }\n }\n\n return map;\n}\n",
@@ -21,6 +21,6 @@
21
21
  "export function uint16ToBE(value: number): Buffer {\n const buffer = Buffer.alloc(2);\n buffer.writeUInt16BE(value, 0);\n\n return buffer;\n}\n\nexport function uint53ToLE(value: number): Buffer {\n const [upper, lower] = splitUInt53(value);\n const buffer = Buffer.alloc(8);\n buffer.writeUInt32LE(lower, 0);\n buffer.writeUInt32LE(upper, 4);\n\n return buffer;\n}\n\nfunction splitUInt53(number: number): [number, number] {\n const MAX_UINT32 = 0x00000000FFFFFFFF;\n const MAX_INT53 = 0x001FFFFFFFFFFFFF;\n\n if (number <= -1 || number > MAX_INT53) {\n throw new Error('Number out of range.');\n }\n\n if (Math.floor(number) !== number) {\n throw new Error('Number is not an integer.');\n }\n\n let upper: number = 0;\n const signbit = number & 0xFFFFFFFF;\n const lower = signbit < 0 ? (number & 0x7FFFFFFF) + 0x80000000 : signbit;\n\n if (number > MAX_UINT32) {\n upper = (number - lower) / (MAX_UINT32 + 1);\n }\n\n return [upper, lower];\n}\n"
22
22
  ],
23
23
  "mappings": "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",
24
- "debugId": "C50D07B959B5006364756E2164756E21",
24
+ "debugId": "10D2433E619B6A9864756E2164756E21",
25
25
  "names": []
26
26
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@basmilius/apple-common",
3
3
  "description": "Common features shared across various apple protocol packages.",
4
- "version": "0.0.70",
4
+ "version": "0.0.71",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": {