@basmilius/apple-common 0.0.50 → 0.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- export * from "./crypto";
2
- export * from "./discovery";
3
- export * from "./encoding";
4
- export * from "./net";
5
- export * from "./cli";
6
- export * from "./const";
1
+ export { v4 as uuid } from "uuid";
2
+ export { decryptChacha20, encryptChacha20, generateCurve25519SharedSecKey, generateCurve25519KeyPair, hkdf } from "./crypto";
3
+ export { type DiscoveryResult, Discovery } from "./discovery";
4
+ export { bailTlv, encodeTlv, decodeTlv, TlvFlags, TlvMethod, TlvState, TlvValue, parseBinaryPlist, serializeBinaryPlist, decodeOPack, encodeOPack, opackFloat, opackInt, opackSizedInt } from "./encoding";
5
+ export { getLocalIP, getMacAddress, BaseSocket, TimingServer } from "./net";
6
+ export { debug, disableDebug, enableDebug, prompt, waitFor } from "./cli";
7
+ export { AIRPLAY_SERVICE, AIRPLAY_TRANSIENT_PIN, COMPANION_LINK_SERVICE, HTTP_TIMEOUT, RAOP_SERVICE } from "./const";
7
8
  export { type AccessoryCredentials, type AccessoryKeys, AccessoryPair, AccessoryVerify } from "./pairing";
8
9
  export { uint16ToBE, uint53ToLE } from "./utils";
9
- export { v4 as uuid } from "uuid";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import{createCipher as ae,createDecipher as fe}from"chacha";var z=12;function E(e,t,r,s,n){t=H(t);let o=fe(e,t);r&&o.setAAD(r),o.setAuthTag(n);let i=o._update(s);return o._final(),i}function A(e,t,r,s){t=H(t);let n=ae(e,t);r&&n.setAAD(r);let o=n._update(s);n._final();let i=n.getAuthTag();return{ciphertext:o,authTag:i}}function H(e){if(e.length>=z)return e;return Buffer.concat([Buffer.alloc(z-e.length,0),e])}import{randomBytes as ce}from"node:crypto";import{x25519 as L}from"@noble/curves/ed25519.js";function M(){let e=ce(32);return{publicKey:L.getPublicKey(e),secretKey:e}}function T(e,t){return L.getSharedSecret(e,t)}import{hkdfSync as ue}from"node:crypto";function x(e){return Buffer.from(ue(e.hash,e.key,e.salt,e.info,e.length))}import me from"node-dns-sd";import{createInterface as le}from"node:readline";var ye=le({input:process.stdin,output:process.stdout}),k=!1;function He(){k=!1}function Le(){k=!0}function K(...e){k&&console.debug("\x1B[36m[debug]\x1B[39m",...e)}async function Xe(e){return await new Promise((t)=>ye.question(`${e}: `,t))}async function X(e){return new Promise((t)=>setTimeout(t,e))}var Y="3939",We=5000,W="_airplay._tcp.local",Z="_companion-link._tcp.local",J="_raop._tcp.local";class B{#e;constructor(e){this.#e=e}async find(){return await me.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
- `)),t--,t===0)throw Error("Device not found after serveral tries, aborting.");await X(r)}}static airplay(){return new B(W)}static companionLink(){return new B(Z)}static raop(){return new B(J)}}class _ extends Number{size;constructor(e,t){super(e);this.size=t}}function Q(e,t){return new _(e,t)}class C{value;constructor(e){this.value=e}}function pe(e){return new C(e)}class D{value;constructor(e){this.value=e}}function de(e){return new D(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 g(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 R(e){return F(e,[])}function F(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 C){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),r=l([f(54),new Uint8Array(n)])}else if(e instanceof D){let n=e.value;if(n<40)r=f(8+n);else if(n<=255)r=g([f(48),y(n,1)]);else if(n<=65535)r=g([f(49),y(n,2)]);else if(n<=4294967295)r=g([f(50),y(n,4)]);else r=g([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 _)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)=>F(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(F(u,t)),i.push(F(e[u],t));let a;if(o<=15)a=f(224+o);else a=f(239);if(r=g([a,g(i)]),o>=15||t.some((u)=>u===r))r=g([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 xe(e){return b(e,[])}function he(e,t){if(e.length<t)throw TypeError(`Not enough data: need ${t} bytes, have ${e.length}`)}function w(e,t,r){he(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 b(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=w(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=w(e,1,i);n=Q(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=w(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=w(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]=b(a,t);u.push(m),a=p}a=a.subarray(1)}else for(let m=0;m<i;m++){let[p,d]=b(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]=b(a,t),[d,v]=b(p,t);u[m]=d,a=v}a=a.subarray(1)}else for(let m=0;m<i;m++){let[p,d]=b(a,t),[v,$]=b(d,t);u[p]=v,a=$}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=w(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 ge}from"@plist/binary.parse";import{serialize as be}from"@plist/binary.serialize";var V={TransientPairing:16},N={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},P={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 O(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 console.error(e),Error("Invalid response")}function h(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 S(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 Pe}from"node:os";function G(){let e=Pe();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 j(){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 null}import{EventEmitter as ve}from"node:events";class q extends ve{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)}}import{createSocket as Ie}from"node:dgram";var we=0x83AA7E80n;function ee(){let e=Se()/1000n,t=e/1000000n,r=e-t*1000000n;return t+we<<32n|(r<<32n)/1000000n}function Se(){return process.hrtime.bigint()}function re(e){return[Number(e>>32n),Number(e&0xFFFFFFFFn)]}function te(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 ne(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 Ee{get port(){return this.#r}#e;#r=0;constructor(){this.#e=Ie("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){console.error("Timing server error",e)}async#n(){let{port:e}=this.#e.address();this.#r=e}async#s(e,t){let r=te(e),s=ee(),[n,o]=re(s);K(`Timing server ntp=${s} receivedSeconds=${n} receivedFraction=${o}`);let i=ne({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 oe,SrpClient as Ae}from"fast-srp-hap";import{v4 as Ke}from"uuid";import I from"tweetnacl";class se{#e;#r;#t;#n;#s;#o;constructor(e){this.#e="basmilius/apple-protocols",this.#r=Buffer.from(Ke().toUpperCase()),this.#t=e}async start(){let e=I.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,V.TransientPairing]]),t=await this.m2(e),r=await this.m3(t),s=await this.m4(r),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.#r,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:o}}async m1(e=[]){let t=await this.#t("m1",h([[c.Method,N.PairSetup],[c.State,P.M1],...e])),r=U(t),s=r.get(c.PublicKey),n=r.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,t=Y){let r=await oe.genKey(32);this.#o=new Ae(oe.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",h([[c.State,P.M3],[c.PublicKey,e.publicKey],[c.Proof,e.proof]]));return{serverProof:U(t).get(c.Proof)}}async m4(e){return this.#o.checkM2(e.serverProof),{sharedSecret:this.#o.computeK()}}async m5(e){let t=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")}),r=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([t,this.#r,this.#n]),n=I.sign.detached(s,this.#s),o=h([[c.Identifier,this.#r],[c.PublicKey,this.#n],[c.Signature,Buffer.from(n)],[c.Name,Buffer.from(R({name:this.#e}))]]),{authTag:i,ciphertext:a}=A(r,Buffer.from("PS-Msg05"),null,o),u=Buffer.concat([a,i]),m=await this.#t("m5",h([[c.State,P.M5],[c.EncryptedData,u]])),d=U(m).get(c.EncryptedData),v=d.subarray(0,-16);return{authTag:d.subarray(-16),data:v,sessionKey:r}}async m6(e,t){let r=E(t.sessionKey,Buffer.from("PS-Msg06"),null,t.data,t.authTag),s=S(r),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")}),u=Buffer.concat([a,n,o]);if(!I.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 ie{#e;#r;constructor(e){this.#e=M(),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",h([[c.State,P.M1],[c.PublicKey,Buffer.from(this.#e.publicKey)]])),t=U(e),r=t.get(c.PublicKey);return{encryptedData:t.get(c.EncryptedData),serverPublicKey:r}}async#n(e,t,r){let s=Buffer.from(T(this.#e.secretKey,r.serverPublicKey)),n=x({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=S(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(!I.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(I.sign.detached(s,t)),o=h([[c.Identifier,e],[c.Signature,n]]),{authTag:i,ciphertext:a}=A(r.sessionKey,Buffer.from("PV-Msg03"),null,o),u=Buffer.concat([a,i]);return await this.#r("m3",h([[c.State,P.M3],[c.EncryptedData,u]])),{}}async#o(e,t){return{accessoryToControllerKey:Buffer.alloc(0),controllerToAccessoryKey:Buffer.alloc(0),pairingId:t,sharedSecret:e.sharedSecret}}}function U(e){let t=S(e);if(t.has(c.Error))O(t);return K("Decoded TLV",t),t}function Fe(e){let t=Buffer.alloc(2);return t.writeUInt16BE(e,0),t}function Ue(e){let[t,r]=Me(e),s=Buffer.alloc(8);return s.writeUInt32LE(r,0),s.writeUInt32LE(t,4),s}function Me(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]}import{v4 as Zr}from"uuid";export{X as waitFor,Zr as uuid,Ue as uint53ToLE,Fe as uint16ToBE,be as serializeBinaryPlist,Xe as prompt,ge as parseBinaryPlist,Q as opackSizedInt,de as opackInt,pe as opackFloat,x as hkdf,j as getMacAddress,G as getLocalIP,T as generateCurve25519SharedSecKey,M as generateCurve25519KeyPair,A as encryptChacha20,h as encodeTlv,R as encodeOPack,Le as enableDebug,He as disableDebug,E as decryptChacha20,S as decodeTlv,xe as decodeOPack,K as debug,O as bailTlv,c as TlvValue,P as TlvState,N as TlvMethod,V as TlvFlags,Ee as TimingServer,J as RAOP_SERVICE,We as HTTP_TIMEOUT,B as Discovery,Z as COMPANION_LINK_SERVICE,q as BaseSocket,ie as AccessoryVerify,se as AccessoryPair,Y as AIRPLAY_TRANSIENT_PIN,W as AIRPLAY_SERVICE};
1
+ import{v4 as qr}from"uuid";import{createCipher as me,createDecipher as pe}from"chacha";var Q=12;function I(e,t,r,s,n){t=G(t);let o=pe(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=G(t);let n=me(e,t);r&&n.setAAD(r);let o=n._update(s);n._final();let i=n.getAuthTag();return{ciphertext:o,authTag:i}}function G(e){if(e.length>=Q)return e;return Buffer.concat([Buffer.alloc(Q-e.length,0),e])}import{randomBytes as de}from"node:crypto";import{x25519 as j}from"@noble/curves/ed25519.js";function T(){let e=de(32);return{publicKey:j.getPublicKey(e),secretKey:e}}function F(e,t){return j.getSharedSecret(e,t)}import{hkdfSync as xe}from"node:crypto";function x(e){return Buffer.from(xe(e.hash,e.key,e.salt,e.info,e.length))}import we from"node-dns-sd";import{createInterface as he}from"node:readline";var ge=he({input:process.stdin,output:process.stdout}),V=!1;function Pe(){V=!1}function be(){V=!0}function E(...e){V&&console.debug("\x1B[36m[debug]\x1B[39m",...e)}async function ve(e){return await new Promise((t)=>ge.question(`${e}: `,t))}async function N(e){return new Promise((t)=>setTimeout(t,e))}var O="3939",Be=5000,q="_airplay._tcp.local",$="_companion-link._tcp.local",z="_raop._tcp.local";class P{#e;constructor(e){this.#e=e}async find(){return await we.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
+ `)),t--,t===0)throw Error("Device not found after serveral tries, aborting.");await N(r)}}static airplay(){return new P(q)}static companionLink(){return new P($)}static raop(){return new P(z)}}class L extends Number{size;constructor(e,t){super(e);this.size=t}}function H(e,t){return new L(e,t)}class X{value;constructor(e){this.value=e}}function ee(e){return new X(e)}class Y{value;constructor(e){this.value=e}}function re(e){return new Y(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 b(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 X){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,e.value,!0),r=l([f(54),new Uint8Array(n)])}else if(e instanceof Y){let n=e.value;if(n<40)r=f(8+n);else if(n<=255)r=b([f(48),y(n,1)]);else if(n<=65535)r=b([f(49),y(n,2)]);else if(n<=4294967295)r=b([f(50),y(n,4)]);else r=b([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 L)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=b([a,b(i)]),o>=15||t.some((u)=>u===r))r=b([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 te(e){return v(e,[])}function Ie(e,t){if(e.length<t)throw TypeError(`Not enough data: need ${t} bytes, have ${e.length}`)}function A(e,t,r){Ie(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 v(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=H(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]=v(a,t);u.push(m),a=p}a=a.subarray(1)}else for(let m=0;m<i;m++){let[p,d]=v(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]=v(a,t),[d,w]=v(p,t);u[m]=d,a=w}a=a.subarray(1)}else for(let m=0;m<i;m++){let[p,d]=v(a,t),[w,J]=v(d,t);u[p]=w,a=J}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 ne}from"@plist/binary.parse";import{serialize as oe}from"@plist/binary.serialize";var k={TransientPairing:16},_={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},g={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 console.error(e),Error("Invalid response")}function h(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 Se}from"node:os";function W(){let e=Se();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 Ee}from"node:os";function Z(){let e=Ee();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 null}import{EventEmitter as Ae}from"node:events";class D extends Ae{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 Fe}from"node:dgram";var Ke=0x83AA7E80n;function se(){let e=Te()/1000n,t=e/1000000n,r=e-t*1000000n;return t+Ke<<32n|(r<<32n)/1000000n}function Te(){return process.hrtime.bigint()}function ie(e){return[Number(e>>32n),Number(e&0xFFFFFFFFn)]}function ae(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 ce(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 fe{get port(){return this.#r}#e;#r=0;constructor(){this.#e=Fe("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){console.error("Timing server error",e)}async#n(){let{port:e}=this.#e.address();this.#r=e}async#s(e,t){let r=ae(e),s=se(),[n,o]=ie(s);E(`Timing server ntp=${s} receivedSeconds=${n} receivedFraction=${o}`);let i=ce({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 ue,SrpClient as Me}from"fast-srp-hap";import{v4 as Ue}from"uuid";import K from"tweetnacl";class le{#e;#r;#t;#n;#s;#o;constructor(e){this.#e="basmilius/apple-protocols",this.#r=Buffer.from(Ue().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=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.#r,sharedSecret:s.sharedSecret,accessoryToControllerKey:n,controllerToAccessoryKey:o}}async m1(e=[]){let t=await this.#t("m1",h([[c.Method,_.PairSetup],[c.State,g.M1],...e])),r=R(t),s=r.get(c.PublicKey),n=r.get(c.Salt);return{publicKey:s,salt:n}}async m2(e,t=O){let r=await ue.genKey(32);this.#o=new Me(ue.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",h([[c.State,g.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=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")}),r=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([t,this.#r,this.#n]),n=K.sign.detached(s,this.#s),o=h([[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",h([[c.State,g.M5],[c.EncryptedData,u]])),d=R(m).get(c.EncryptedData),w=d.subarray(0,-16);return{authTag:d.subarray(-16),data:w,sessionKey:r}}async m6(e,t){let r=I(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=x({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 ye{#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",h([[c.State,g.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=x({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=I(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=h([[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",h([[c.State,g.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 E("Decoded TLV",t),t}function ke(e){let t=Buffer.alloc(2);return t.writeUInt16BE(e,0),t}function _e(e){let[t,r]=Ce(e),s=Buffer.alloc(8);return s.writeUInt32LE(r,0),s.writeUInt32LE(t,4),s}function Ce(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{N as waitFor,qr as uuid,_e as uint53ToLE,ke as uint16ToBE,oe as serializeBinaryPlist,ve as prompt,ne as parseBinaryPlist,H as opackSizedInt,re as opackInt,ee as opackFloat,x as hkdf,Z as getMacAddress,W as getLocalIP,F as generateCurve25519SharedSecKey,T as generateCurve25519KeyPair,S as encryptChacha20,h as encodeTlv,U as encodeOPack,be as enableDebug,Pe as disableDebug,I as decryptChacha20,B as decodeTlv,te as decodeOPack,E as debug,C as bailTlv,c as TlvValue,g as TlvState,_ as TlvMethod,k as TlvFlags,fe as TimingServer,z as RAOP_SERVICE,Be as HTTP_TIMEOUT,P as Discovery,$ as COMPANION_LINK_SERVICE,D as BaseSocket,ye as AccessoryVerify,le as AccessoryPair,O as AIRPLAY_TRANSIENT_PIN,q as AIRPLAY_SERVICE};
3
3
 
4
- //# debugId=91D8BC650392A13764756E2164756E21
4
+ //# debugId=5EDD16C00C3CBAEC64756E2164756E21
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/crypto/chacha20.ts", "../src/crypto/curve25519.ts", "../src/crypto/hkdf.ts", "../src/discovery/discovery.ts", "../src/cli.ts", "../src/const.ts", "../src/encoding/opack.ts", "../src/encoding/plist.ts", "../src/encoding/tlv8.ts", "../src/net/getLocalIP.ts", "../src/net/getMacAddress.ts", "../src/net/socket.ts", "../src/net/timing.ts", "../src/ntp.ts", "../src/pairing.ts", "../src/utils.ts", "../src/index.ts"],
3
+ "sources": ["../src/index.ts", "../src/crypto/chacha20.ts", "../src/crypto/curve25519.ts", "../src/crypto/hkdf.ts", "../src/discovery/discovery.ts", "../src/cli.ts", "../src/const.ts", "../src/encoding/opack.ts", "../src/encoding/plist.ts", "../src/encoding/tlv8.ts", "../src/net/getLocalIP.ts", "../src/net/getMacAddress.ts", "../src/net/socket.ts", "../src/net/timing.ts", "../src/ntp.ts", "../src/pairing.ts", "../src/utils.ts"],
4
4
  "sourcesContent": [
5
+ "export {\n v4 as uuid\n} from 'uuid';\n\nexport {\n decryptChacha20,\n encryptChacha20,\n\n generateCurve25519SharedSecKey,\n generateCurve25519KeyPair,\n\n hkdf\n} from './crypto';\n\nexport {\n type DiscoveryResult,\n Discovery\n} from './discovery';\n\nexport {\n bailTlv,\n encodeTlv,\n decodeTlv,\n TlvFlags,\n TlvMethod,\n TlvState,\n TlvValue,\n\n parseBinaryPlist,\n serializeBinaryPlist,\n\n decodeOPack,\n encodeOPack,\n opackFloat,\n opackInt,\n opackSizedInt\n} from './encoding';\n\nexport {\n getLocalIP,\n getMacAddress,\n BaseSocket,\n TimingServer\n} from './net';\n\nexport {\n debug,\n disableDebug,\n enableDebug,\n prompt,\n waitFor\n} from './cli';\n\nexport {\n AIRPLAY_SERVICE,\n AIRPLAY_TRANSIENT_PIN,\n COMPANION_LINK_SERVICE,\n HTTP_TIMEOUT,\n RAOP_SERVICE\n} from './const';\n\nexport {\n type AccessoryCredentials,\n type AccessoryKeys,\n AccessoryPair,\n AccessoryVerify\n} from './pairing';\n\nexport {\n uint16ToBE,\n uint53ToLE\n} from './utils';\n",
5
6
  "import { createCipher, createDecipher } from 'chacha';\n\nconst AUTH_TAG_LENGTH = 16;\nconst NONCE_LENGTH = 12;\n\nexport function decrypt(key: Buffer, nonce: Buffer, add: Buffer | null, ciphertext: Buffer, authTag: Buffer): Buffer {\n nonce = padNonce(nonce);\n\n const decipher = createDecipher(key, nonce);\n add && decipher.setAAD(add);\n decipher.setAuthTag(authTag);\n\n const plaintext = decipher._update(ciphertext);\n decipher._final();\n\n return plaintext;\n}\n\nexport function encrypt(key: Buffer, nonce: Buffer, aad: Buffer | null, plaintext: Buffer): EncryptedData {\n nonce = padNonce(nonce);\n\n const cipher = createCipher(key, nonce);\n aad && cipher.setAAD(aad);\n\n const ciphertext = cipher._update(plaintext);\n cipher._final();\n\n const authTag = cipher.getAuthTag();\n\n return {\n ciphertext: ciphertext,\n authTag: authTag\n };\n}\n\nexport function padNonce(nonce: Buffer): Buffer {\n if (nonce.length >= NONCE_LENGTH) {\n return nonce;\n }\n\n return Buffer.concat([\n Buffer.alloc(NONCE_LENGTH - nonce.length, 0),\n nonce\n ]);\n}\n\n// NOTE\n// Uncomment when Bun supports chacha20-poly1305 out of box.\n//\n// import { createCipheriv, createDecipheriv } from 'node:crypto';\n//\n// export function decrypt(key: Buffer, nonce: Buffer, aad: Buffer | null, ciphertext: Buffer, authTag: Buffer): Buffer {\n// if (nonce.length < NONCE_LENGTH) {\n// nonce = Buffer.concat([\n// Buffer.alloc(NONCE_LENGTH - nonce.length, 0),\n// nonce\n// ]);\n// }\n//\n// const decipher = createDecipheriv('chacha20-poly1305', key, nonce, {authTagLength: AUTH_TAG_LENGTH});\n// aad && decipher.setAAD(aad, {plaintextLength: ciphertext.length});\n// decipher.setAuthTag(authTag);\n//\n// const plaintext = decipher.update(ciphertext);\n// decipher.final();\n//\n// return plaintext;\n// }\n//\n// export function encrypt(key: Buffer, nonce: Buffer, aad: Buffer | null, plaintext: Buffer): EncryptedData {\n// if (nonce.length < NONCE_LENGTH) {\n// nonce = Buffer.concat([\n// Buffer.alloc(NONCE_LENGTH - nonce.length, 0),\n// nonce\n// ]);\n// }\n//\n// const cipher = createCipheriv('chacha20-poly1305', key, nonce, {authTagLength: AUTH_TAG_LENGTH});\n// aad && cipher.setAAD(aad, {plaintextLength: plaintext.length});\n//\n// const ciphertext = cipher.update(plaintext);\n// cipher.final();\n//\n// const authTag = cipher.getAuthTag();\n//\n// return {\n// ciphertext: ciphertext,\n// authTag: authTag\n// };\n// }\n\nexport type EncryptedData = {\n readonly ciphertext: Buffer;\n readonly authTag: Buffer;\n};\n",
6
7
  "import { randomBytes } from 'node:crypto';\nimport { x25519 } from '@noble/curves/ed25519.js';\n\nexport function generateKeyPair(): KeyPair {\n const secretKey = randomBytes(32);\n const publicKey = x25519.getPublicKey(secretKey);\n\n return {\n publicKey,\n secretKey\n };\n}\n\nexport function generateSharedSecKey(priKey: Uint8Array, pubKey: Uint8Array): Uint8Array {\n return x25519.getSharedSecret(priKey, pubKey);\n}\n\ninterface KeyPair {\n readonly publicKey: Uint8Array;\n readonly secretKey: Uint8Array;\n}\n",
7
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",
@@ -13,14 +14,13 @@
13
14
  "export 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 console.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",
14
15
  "import { networkInterfaces } from 'node:os';\n\nexport default function (): string {\n const interfaces = networkInterfaces();\n\n for (const name of Object.keys(interfaces)) {\n const iface = interfaces[name];\n\n if (!iface) {\n continue;\n }\n\n for (const net of iface) {\n if (net.internal || net.family !== 'IPv4') {\n continue;\n }\n\n if (net.address && net.address !== '127.0.0.1') {\n return net.address;\n }\n }\n }\n\n return null;\n}\n",
15
16
  "import { networkInterfaces } from 'node:os';\n\nexport default function (): string {\n const interfaces = networkInterfaces();\n\n for (const name of Object.keys(interfaces)) {\n const iface = interfaces[name];\n\n if (!iface) {\n continue;\n }\n\n for (const net of iface) {\n if (net.internal || net.family !== 'IPv4') {\n continue;\n }\n\n if (net.mac && net.mac !== '00:00:00:00:00:00') {\n return net.mac.toUpperCase();\n }\n }\n }\n\n return null;\n}\n",
16
- "import { EventEmitter } from 'node:events';\n\ntype EventMap = {\n close: [];\n connect: [];\n error: [Error];\n};\n\nexport default class BaseSocket<T extends Record<string, any>> extends EventEmitter<T | EventMap> {\n get address(): string {\n return this.#address;\n }\n\n get port(): number {\n return this.#port;\n }\n\n readonly #address: string;\n readonly #port: number;\n\n constructor(address: string, port: number) {\n super();\n this.#address = address;\n this.#port = port;\n }\n\n async connect(): Promise<void> {\n }\n\n async disconnect(): Promise<void> {\n }\n\n async onClose(): Promise<void> {\n this.emit('close');\n }\n\n async onConnect(): Promise<void> {\n this.emit('connect');\n }\n\n async onError(err: Error): Promise<void> {\n this.emit('error', err);\n }\n}\n",
17
+ "import { EventEmitter } from 'node:events';\n\ntype EventMap = {\n close: [];\n connect: [];\n error: [Error];\n timeout: [];\n};\n\nexport default class BaseSocket<T extends Record<string, any>> extends EventEmitter<T | EventMap> {\n get address(): string {\n return this.#address;\n }\n\n get port(): number {\n return this.#port;\n }\n\n readonly #address: string;\n readonly #port: number;\n\n constructor(address: string, port: number) {\n super();\n this.#address = address;\n this.#port = port;\n }\n\n async connect(): Promise<void> {\n }\n\n async disconnect(): Promise<void> {\n }\n\n async onClose(): Promise<void> {\n this.emit('close');\n }\n\n async onConnect(): Promise<void> {\n this.emit('connect');\n }\n\n async onError(err: Error): Promise<void> {\n this.emit('error', err);\n }\n\n async onTimeout(): Promise<void> {\n this.emit('timeout');\n }\n}\n",
17
18
  "import { createSocket, RemoteInfo, Socket } from 'node:dgram';\nimport { debug } from '../cli';\nimport { decode, encode, now, toParts } from '../ntp';\n\nexport default class {\n get port(): number {\n return this.#port;\n }\n\n readonly #socket: Socket;\n #port: number = 0;\n\n constructor() {\n this.#socket = createSocket('udp4');\n this.#socket.on('error', err => this.#onError(err));\n this.#socket.on('message', (data, info) => this.#onMessage(data, info));\n }\n\n async close(): Promise<void> {\n this.#socket.close();\n this.#port = 0;\n }\n\n async listen(): Promise<void> {\n return new Promise<void>(resolve => {\n this.#socket.once('listening', () => this.#onListening());\n this.#socket.bind(0, resolve);\n });\n }\n\n async #onError(err: Error): Promise<void> {\n console.error('Timing server error', err);\n }\n\n async #onListening(): Promise<void> {\n const {port} = this.#socket.address();\n this.#port = port;\n }\n\n async #onMessage(data: Buffer, info: RemoteInfo): Promise<void> {\n const request = decode(data);\n const ntp = now();\n const [receivedSeconds, receivedFraction] = toParts(ntp);\n\n debug(`Timing server ntp=${ntp} receivedSeconds=${receivedSeconds} receivedFraction=${receivedFraction}`);\n\n const response = encode({\n proto: request.proto,\n type: 0x53 | 0x80,\n seqno: request.seqno,\n padding: 0,\n reftime_sec: request.sendtime_sec,\n reftime_frac: request.sendtime_frac,\n recvtime_sec: receivedSeconds,\n recvtime_frac: receivedFraction,\n sendtime_sec: receivedSeconds,\n sendtime_frac: receivedFraction\n });\n\n this.#socket.send(response, info.port, info.address);\n }\n}\n",
18
19
  "const EPOCH = 0x83AA7E80n;\n\nexport function now(): bigint {\n const now = ns() / 1000n;\n const seconds = now / 1_000_000n;\n const frac = now - seconds * 1_000_000n;\n\n return ((seconds + EPOCH) << 32n) | ((frac << 32n) / 1_000_000n);\n}\n\nexport function ns(): bigint {\n return process.hrtime.bigint();\n}\n\nexport function toParts(ntp: bigint): [number, number] {\n return [\n Number(ntp >> 32n),\n Number(ntp & 0xFFFFFFFFn)\n ];\n}\n\nexport function decode(buffer: Buffer): PacketFields {\n return {\n proto: buffer.readUInt8(0),\n type: buffer.readUInt8(1),\n seqno: buffer.readUInt16BE(2),\n padding: buffer.readUInt32BE(4),\n reftime_sec: buffer.readUInt32BE(8),\n reftime_frac: buffer.readUInt32BE(12),\n recvtime_sec: buffer.readUInt32BE(16),\n recvtime_frac: buffer.readUInt32BE(20),\n sendtime_sec: buffer.readUInt32BE(24),\n sendtime_frac: buffer.readUInt32BE(28)\n };\n}\n\nexport function encode(fields: PacketFields): Buffer {\n const buffer = Buffer.alloc(32);\n\n buffer.writeUInt8(fields.proto, 0);\n buffer.writeUInt8(fields.type, 1);\n buffer.writeUInt16BE(fields.seqno, 2);\n buffer.writeUInt32BE(fields.padding, 4);\n buffer.writeUInt32BE(fields.reftime_sec, 8);\n buffer.writeUInt32BE(fields.reftime_frac, 12);\n buffer.writeUInt32BE(fields.recvtime_sec, 16);\n buffer.writeUInt32BE(fields.recvtime_frac, 20);\n buffer.writeUInt32BE(fields.sendtime_sec, 24);\n buffer.writeUInt32BE(fields.sendtime_frac, 28);\n\n return buffer;\n}\n\nexport type PacketFields = {\n proto: number;\n type: number;\n seqno: number;\n padding: number;\n reftime_sec: number;\n reftime_frac: number;\n recvtime_sec: number;\n recvtime_frac: number;\n sendtime_sec: number;\n sendtime_frac: number;\n};\n",
19
20
  "import { SRP, SrpClient } from 'fast-srp-hap';\nimport { v4 as uuid } from 'uuid';\nimport tweetnacl, { type BoxKeyPair } from 'tweetnacl';\nimport { debug } from './cli';\nimport { AIRPLAY_TRANSIENT_PIN } from './const';\nimport { decryptChacha20, encryptChacha20, generateCurve25519KeyPair, generateCurve25519SharedSecKey, hkdf } from './crypto';\nimport { bailTlv, decodeTlv, encodeOPack, encodeTlv, TlvFlags, TlvMethod, TlvState, TlvValue } from './encoding';\n\nexport class AccessoryPair {\n readonly #name: string;\n readonly #pairingId: Buffer;\n readonly #requestHandler: RequestHandler;\n #publicKey: Buffer;\n #secretKey: Buffer;\n #srp: SrpClient;\n\n constructor(requestHandler: RequestHandler) {\n this.#name = 'basmilius/apple-protocols';\n this.#pairingId = Buffer.from(uuid().toUpperCase());\n this.#requestHandler = requestHandler;\n }\n\n async start(): Promise<void> {\n const keyPair = tweetnacl.sign.keyPair();\n this.#publicKey = Buffer.from(keyPair.publicKey);\n this.#secretKey = Buffer.from(keyPair.secretKey);\n }\n\n async pin(askPin: () => Promise<string>): Promise<AccessoryCredentials> {\n const m1 = await this.m1();\n const m2 = await this.m2(m1, await askPin());\n const m3 = await this.m3(m2);\n const m4 = await this.m4(m3);\n const m5 = await this.m5(m4);\n const m6 = await this.m6(m4, m5);\n\n if (!m6) {\n throw new Error('Pairing failed, could not get accessory keys.');\n }\n\n return m6;\n }\n\n async transient(): Promise<AccessoryKeys> {\n const m1 = await this.m1([[TlvValue.Flags, TlvFlags.TransientPairing]]);\n const m2 = await this.m2(m1);\n const m3 = await this.m3(m2);\n const m4 = await this.m4(m3);\n\n const accessoryToControllerKey = hkdf({\n hash: 'sha512',\n key: m4.sharedSecret,\n length: 32,\n salt: Buffer.from('Control-Salt'),\n info: Buffer.from('Control-Read-Encryption-Key')\n });\n\n const controllerToAccessoryKey = hkdf({\n hash: 'sha512',\n key: m4.sharedSecret,\n length: 32,\n salt: Buffer.from('Control-Salt'),\n info: Buffer.from('Control-Write-Encryption-Key')\n });\n\n return {\n pairingId: this.#pairingId,\n sharedSecret: m4.sharedSecret,\n accessoryToControllerKey,\n controllerToAccessoryKey\n };\n }\n\n async m1(additionalTlv: [number, number | Buffer][] = []): Promise<PairM1> {\n const response = await this.#requestHandler('m1', encodeTlv([\n [TlvValue.Method, TlvMethod.PairSetup],\n [TlvValue.State, TlvState.M1],\n ...additionalTlv\n ]));\n\n const data = tlv(response);\n const publicKey = data.get(TlvValue.PublicKey);\n const salt = data.get(TlvValue.Salt);\n\n return {publicKey, salt};\n }\n\n async m2(m1: PairM1, pin: string = AIRPLAY_TRANSIENT_PIN): Promise<PairM2> {\n const srpKey = await SRP.genKey(32);\n\n this.#srp = new SrpClient(SRP.params.hap, m1.salt, Buffer.from('Pair-Setup'), Buffer.from(pin), srpKey, true);\n this.#srp.setB(m1.publicKey);\n\n const publicKey = this.#srp.computeA();\n const proof = this.#srp.computeM1();\n\n return {publicKey, proof};\n }\n\n async m3(m2: PairM2): Promise<PairM3> {\n const response = await this.#requestHandler('m3', encodeTlv([\n [TlvValue.State, TlvState.M3],\n [TlvValue.PublicKey, m2.publicKey],\n [TlvValue.Proof, m2.proof]\n ]));\n\n const data = tlv(response);\n const serverProof = data.get(TlvValue.Proof);\n\n return {serverProof};\n }\n\n async m4(m3: PairM3): Promise<PairM4> {\n this.#srp.checkM2(m3.serverProof);\n\n const sharedSecret = this.#srp.computeK();\n\n return {sharedSecret};\n }\n\n async m5(m4: PairM4): Promise<PairM5> {\n const iosDeviceX = hkdf({\n hash: 'sha512',\n key: m4.sharedSecret,\n length: 32,\n salt: Buffer.from('Pair-Setup-Controller-Sign-Salt', 'utf8'),\n info: Buffer.from('Pair-Setup-Controller-Sign-Info', 'utf8')\n });\n\n const sessionKey = hkdf({\n hash: 'sha512',\n key: m4.sharedSecret,\n length: 32,\n salt: Buffer.from('Pair-Setup-Encrypt-Salt', 'utf8'),\n info: Buffer.from('Pair-Setup-Encrypt-Info', 'utf8')\n });\n\n const deviceInfo = Buffer.concat([\n iosDeviceX,\n this.#pairingId,\n this.#publicKey\n ]);\n\n const signature = tweetnacl.sign.detached(deviceInfo, this.#secretKey);\n\n const innerTlv = encodeTlv([\n [TlvValue.Identifier, this.#pairingId],\n [TlvValue.PublicKey, this.#publicKey],\n [TlvValue.Signature, Buffer.from(signature)],\n [TlvValue.Name, Buffer.from(encodeOPack({\n name: this.#name\n }))]\n ]);\n\n const {authTag, ciphertext} = encryptChacha20(sessionKey, Buffer.from('PS-Msg05'), null, innerTlv);\n const encrypted = Buffer.concat([ciphertext, authTag]);\n\n const response = await this.#requestHandler('m5', encodeTlv([\n [TlvValue.State, TlvState.M5],\n [TlvValue.EncryptedData, encrypted]\n ]));\n\n const data = tlv(response);\n const encryptedDataRaw = data.get(TlvValue.EncryptedData);\n const encryptedData = encryptedDataRaw.subarray(0, -16);\n const encryptedTag = encryptedDataRaw.subarray(-16);\n\n return {\n authTag: encryptedTag,\n data: encryptedData,\n sessionKey\n };\n }\n\n async m6(m4: PairM4, m5: PairM5): Promise<AccessoryCredentials> {\n const data = decryptChacha20(m5.sessionKey, Buffer.from('PS-Msg06'), null, m5.data, m5.authTag);\n const tlv = decodeTlv(data);\n\n const accessoryIdentifier = tlv.get(TlvValue.Identifier);\n const accessoryLongTermPublicKey = tlv.get(TlvValue.PublicKey);\n const accessorySignature = tlv.get(TlvValue.Signature);\n\n const accessoryX = hkdf({\n hash: 'sha512',\n key: m4.sharedSecret,\n length: 32,\n salt: Buffer.from('Pair-Setup-Accessory-Sign-Salt'),\n info: Buffer.from('Pair-Setup-Accessory-Sign-Info')\n });\n\n const accessoryInfo = Buffer.concat([\n accessoryX,\n accessoryIdentifier,\n accessoryLongTermPublicKey\n ]);\n\n if (!tweetnacl.sign.detached.verify(accessoryInfo, accessorySignature, accessoryLongTermPublicKey)) {\n throw new Error('Invalid accessory signature.');\n }\n\n return {\n accessoryIdentifier: accessoryIdentifier.toString(),\n accessoryLongTermPublicKey: accessoryLongTermPublicKey,\n pairingId: this.#pairingId,\n publicKey: this.#publicKey,\n secretKey: this.#secretKey\n };\n }\n}\n\nexport class AccessoryVerify {\n readonly #ephemeralKeyPair: BoxKeyPair;\n readonly #requestHandler: RequestHandler;\n\n constructor(requestHandler: RequestHandler) {\n this.#ephemeralKeyPair = generateCurve25519KeyPair();\n this.#requestHandler = requestHandler;\n }\n\n async start(credentials: AccessoryCredentials): 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, credentials.pairingId);\n }\n\n async #m1(): Promise<VerifyM1> {\n const response = await this.#requestHandler('m1', encodeTlv([\n [TlvValue.State, TlvState.M1],\n [TlvValue.PublicKey, Buffer.from(this.#ephemeralKeyPair.publicKey)]\n ]));\n\n const data = 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: VerifyM1): Promise<VerifyM2> {\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: VerifyM2): Promise<VerifyM3> {\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 await this.#requestHandler('m3', encodeTlv([\n [TlvValue.State, TlvState.M3],\n [TlvValue.EncryptedData, encrypted]\n ]));\n\n return {};\n }\n\n async #m4(m2: VerifyM2, pairingId: Buffer): Promise<AccessoryKeys> {\n return {\n accessoryToControllerKey: Buffer.alloc(0),\n controllerToAccessoryKey: Buffer.alloc(0),\n pairingId,\n sharedSecret: m2.sharedSecret\n };\n }\n}\n\nfunction tlv(buffer: Buffer): Map<number, Buffer> {\n const data = decodeTlv(buffer);\n\n if (data.has(TlvValue.Error)) {\n bailTlv(data);\n }\n\n debug('Decoded TLV', data);\n\n return data;\n}\n\ntype RequestHandler = (step: 'm1' | 'm3' | 'm5', data: Buffer) => Promise<Buffer>;\n\ntype PairM1 = {\n readonly publicKey: Buffer;\n readonly salt: Buffer;\n}\n\ntype PairM2 = {\n readonly publicKey: Buffer;\n readonly proof: Buffer;\n};\n\ntype PairM3 = {\n readonly serverProof: Buffer;\n};\n\ntype PairM4 = {\n readonly sharedSecret: Buffer;\n};\n\ntype PairM5 = {\n readonly authTag: Buffer;\n readonly data: Buffer;\n readonly sessionKey: Buffer;\n};\n\ntype VerifyM1 = {\n readonly encryptedData: Buffer;\n readonly serverPublicKey: Buffer;\n};\n\ntype VerifyM2 = {\n readonly serverEphemeralPublicKey: Buffer;\n readonly sessionKey: Buffer;\n readonly sharedSecret: Buffer;\n};\n\ntype VerifyM3 = {};\n\nexport type AccessoryCredentials = {\n readonly accessoryIdentifier: string;\n readonly accessoryLongTermPublicKey: Buffer;\n readonly pairingId: Buffer;\n readonly publicKey: Buffer;\n readonly secretKey: Buffer;\n};\n\nexport type AccessoryKeys = {\n readonly pairingId: Buffer;\n readonly sharedSecret: Buffer;\n readonly accessoryToControllerKey: Buffer;\n readonly controllerToAccessoryKey: Buffer;\n};\n",
20
- "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",
21
- "export * from './crypto';\nexport * from './discovery';\nexport * from './encoding';\nexport * from './net';\n\nexport * from './cli';\nexport * from './const';\n\nexport {\n type AccessoryCredentials,\n type AccessoryKeys,\n AccessoryPair,\n AccessoryVerify\n} from './pairing';\n\nexport {\n uint16ToBE,\n uint53ToLE\n} from './utils';\n\nexport { v4 as uuid } from 'uuid';\n"
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
- "mappings": "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",
24
- "debugId": "91D8BC650392A13764756E2164756E21",
23
+ "mappings": "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",
24
+ "debugId": "5EDD16C00C3CBAEC64756E2164756E21",
25
25
  "names": []
26
26
  }
@@ -3,6 +3,7 @@ type EventMap = {
3
3
  close: [];
4
4
  connect: [];
5
5
  error: [Error];
6
+ timeout: [];
6
7
  };
7
8
  export default class BaseSocket<T extends Record<string, any>> extends EventEmitter<T | EventMap> {
8
9
  #private;
@@ -14,4 +15,5 @@ export default class BaseSocket<T extends Record<string, any>> extends EventEmit
14
15
  onClose(): Promise<void>;
15
16
  onConnect(): Promise<void>;
16
17
  onError(err: Error): Promise<void>;
18
+ onTimeout(): Promise<void>;
17
19
  }
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.50",
4
+ "version": "0.0.52",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": {
@@ -48,7 +48,7 @@
48
48
  "uuid": "^13.0.0"
49
49
  },
50
50
  "devDependencies": {
51
- "@basmilius/tools": "^2.13.0",
52
- "@types/bun": "^1.3.1"
51
+ "@basmilius/tools": "^2.23.0",
52
+ "@types/bun": "^1.3.5"
53
53
  }
54
54
  }