@basmilius/apple-encoding 0.7.2 → 0.8.0

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.
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};export{t};
@@ -0,0 +1,231 @@
1
+ declare namespace daap_d_exports {
2
+ export { ContentCode, ContentCodeKey, DecodedTag, PlaybackStatus, TagType, TrackMetadata, decode$3 as decode, decodeTag, decodeToObject, decodeTrackMetadata, encodeContainer, encodePlaybackStatus, encodeTag, encodeTagWithSize, encodeTrackMetadata };
3
+ }
4
+ declare const ContentCode: {
5
+ readonly mlit: "dmap.listingitem";
6
+ readonly mlcl: "dmap.listing";
7
+ readonly msrv: "dmap.serverinforesponse";
8
+ readonly mcon: "dmap.container";
9
+ readonly miid: "dmap.itemid";
10
+ readonly minm: "dmap.itemname";
11
+ readonly mikd: "dmap.itemkind";
12
+ readonly mper: "dmap.persistentid";
13
+ readonly asal: "daap.songalbum";
14
+ readonly asar: "daap.songartist";
15
+ readonly asaa: "daap.songalbumartist";
16
+ readonly ascp: "daap.songcomposer";
17
+ readonly asgn: "daap.songgenre";
18
+ readonly astm: "daap.songtime";
19
+ readonly astn: "daap.songtracknumber";
20
+ readonly asdc: "daap.songdisccount";
21
+ readonly asdn: "daap.songdiscnumber";
22
+ readonly astc: "daap.songtrackcount";
23
+ readonly asyr: "daap.songyear";
24
+ readonly asbr: "daap.songbitrate";
25
+ readonly assr: "daap.songsamplerate";
26
+ readonly assz: "daap.songsize";
27
+ readonly caps: "daap.songplaystatus";
28
+ readonly cash: "daap.songshufflestate";
29
+ readonly carp: "daap.songrepeatstate";
30
+ readonly cavs: "daap.songvisiblestate";
31
+ readonly aePP: "com.apple.itunes.photo-properties";
32
+ };
33
+ declare const TagType: {
34
+ readonly mlit: 12;
35
+ readonly mlcl: 12;
36
+ readonly mcon: 12;
37
+ readonly msrv: 12;
38
+ readonly miid: 5;
39
+ readonly minm: 9;
40
+ readonly mikd: 1;
41
+ readonly mper: 7;
42
+ readonly asal: 9;
43
+ readonly asar: 9;
44
+ readonly asaa: 9;
45
+ readonly ascp: 9;
46
+ readonly asgn: 9;
47
+ readonly astm: 5;
48
+ readonly astn: 3;
49
+ readonly asdc: 3;
50
+ readonly asdn: 3;
51
+ readonly astc: 3;
52
+ readonly asyr: 3;
53
+ readonly asbr: 3;
54
+ readonly assr: 5;
55
+ readonly assz: 5;
56
+ readonly caps: 1;
57
+ readonly cash: 1;
58
+ readonly carp: 1;
59
+ readonly cavs: 1;
60
+ readonly aePP: 9;
61
+ };
62
+ declare function encodeTag(tag: string, value: Buffer | string | number | bigint): Buffer;
63
+ declare function encodeContainer(tag: string, content: Buffer): Buffer;
64
+ declare function encodePlaybackStatus(status: PlaybackStatus): Buffer;
65
+ declare function encodeTagWithSize(tag: string, value: number, byteSize: 1 | 2 | 4 | 8): Buffer;
66
+ declare function encodeTrackMetadata(metadata: TrackMetadata): Buffer;
67
+ declare function decode$3(buffer: Buffer): DecodedTag[];
68
+ declare function decodeTag(buffer: Buffer): [DecodedTag, Buffer] | null;
69
+ declare function decodeToObject(buffer: Buffer): Record<string, unknown>;
70
+ declare function decodeTrackMetadata(buffer: Buffer): TrackMetadata;
71
+ type ContentCodeKey = keyof typeof ContentCode;
72
+ type DecodedTag = {
73
+ readonly tag: string;
74
+ readonly length: number;
75
+ readonly value: Buffer;
76
+ };
77
+ type PlaybackStatus = {
78
+ readonly playing?: boolean;
79
+ readonly shuffle?: boolean;
80
+ readonly repeat?: "off" | "one" | "all";
81
+ };
82
+ type TrackMetadata = {
83
+ readonly title?: string;
84
+ readonly artist?: string;
85
+ readonly albumArtist?: string;
86
+ readonly album?: string;
87
+ readonly composer?: string;
88
+ readonly genre?: string;
89
+ readonly duration?: number;
90
+ readonly trackNumber?: number;
91
+ readonly trackCount?: number;
92
+ readonly discNumber?: number;
93
+ readonly discCount?: number;
94
+ readonly year?: number;
95
+ readonly bitrate?: number;
96
+ readonly sampleRate?: number;
97
+ readonly size?: number;
98
+ };
99
+ declare namespace ntp_d_exports {
100
+ export { PacketFields, decode$2 as decode, encode$2 as encode, now, ns, parts };
101
+ }
102
+ declare function now(): bigint;
103
+ declare function ns(): bigint;
104
+ declare function parts(ntp: bigint): [number, number];
105
+ declare function decode$2(buffer: Buffer): PacketFields;
106
+ declare function encode$2(fields: PacketFields): Buffer;
107
+ type PacketFields = {
108
+ readonly proto: number;
109
+ readonly type: number;
110
+ readonly seqno: number;
111
+ readonly padding: number;
112
+ readonly reftime_sec: number;
113
+ readonly reftime_frac: number;
114
+ readonly recvtime_sec: number;
115
+ readonly recvtime_frac: number;
116
+ readonly sendtime_sec: number;
117
+ readonly sendtime_frac: number;
118
+ };
119
+ declare namespace opack_d_exports {
120
+ export { decode$1 as decode, encode$1 as encode, float, int, sizedInteger };
121
+ }
122
+ declare class Float {
123
+ #private;
124
+ get value(): number;
125
+ constructor(value: number);
126
+ }
127
+ declare class Integer {
128
+ #private;
129
+ get value(): number;
130
+ constructor(value: number);
131
+ }
132
+ declare class SizedInteger {
133
+ #private;
134
+ get size(): number;
135
+ get value(): number;
136
+ constructor(value: number, size: number);
137
+ valueOf(): number;
138
+ }
139
+ declare function float(value: number): Float;
140
+ declare function int(value: number): Integer;
141
+ declare function sizedInteger(value: number, size: number): SizedInteger;
142
+ declare function decode$1(data: Uint8Array): any;
143
+ declare function encode$1(data: any): Uint8Array;
144
+ //#endregion
145
+ //#region ../../node_modules/.bun/@plist+common@1.1.0/node_modules/@plist/common/lib/cjs/types.d.ts
146
+ declare type Value$1 = null | string | number | bigint | boolean | ArrayBuffer | Date | Dictionary | Value$1[];
147
+ declare type Dictionary = {
148
+ [key: string]: Value$1;
149
+ };
150
+ //#endregion
151
+ //#region ../../node_modules/.bun/@plist+binary.parse@1.1.0/node_modules/@plist/binary.parse/lib/cjs/index.d.ts
152
+ declare const parse: (buffer: ArrayBuffer) => Value$1;
153
+ //#endregion
154
+ //#region ../../node_modules/.bun/@plist+binary.serialize@1.1.0/node_modules/@plist/binary.serialize/lib/cjs/index.d.ts
155
+ declare const serialize: (value: Value$1) => ArrayBufferLike;
156
+ declare namespace plist_d_exports {
157
+ export { parse, serialize };
158
+ }
159
+ declare namespace rtsp_d_exports {
160
+ export { Method$1 as Method, makeHeader, makeRequest, makeResponse };
161
+ }
162
+ type Method$1 = "GET" | "OPTIONS" | "POST" | "PUT" | "GET_PARAMETER" | "SET_PARAMETER" | "ANNOUNCE" | "FLUSH" | "RECORD" | "SETUP" | "TEARDOWN";
163
+ declare function makeHeader(method: Method$1, path: string, headers: HeadersInit, cseq: number, activeRemote: string, dacpId: string, sessionId: string): string;
164
+ declare function makeRequest(buffer: Buffer): HttpRequest | null;
165
+ declare function makeResponse(buffer: Buffer): HttpResponse | null;
166
+ type HttpRequest = {
167
+ readonly headers: Record<string, string>;
168
+ readonly method: Method$1;
169
+ readonly path: string;
170
+ readonly body: Buffer;
171
+ readonly requestLength: number;
172
+ };
173
+ type HttpResponse = {
174
+ readonly response: Response;
175
+ readonly responseLength: number;
176
+ };
177
+ declare namespace tlv8_d_exports {
178
+ export { ErrorCode, Flags, Method, State, Value, bail, decode, encode };
179
+ }
180
+ declare const Flags: {
181
+ readonly TransientPairing: 0x10;
182
+ };
183
+ declare const ErrorCode: {
184
+ readonly Unknown: 0x01;
185
+ readonly Authentication: 0x02;
186
+ readonly BackOff: 0x03;
187
+ readonly MaxPeers: 0x04;
188
+ readonly MaxTries: 0x05;
189
+ readonly Unavailable: 0x06;
190
+ readonly Busy: 0x07;
191
+ };
192
+ declare const Method: {
193
+ readonly PairSetup: 0x00;
194
+ readonly PairSetupWithAuth: 0x01;
195
+ readonly PairVerify: 0x02;
196
+ readonly AddPairing: 0x03;
197
+ readonly RemovePairing: 0x04;
198
+ readonly ListPairing: 0x05;
199
+ };
200
+ declare const State: {
201
+ readonly M1: 0x01;
202
+ readonly M2: 0x02;
203
+ readonly M3: 0x03;
204
+ readonly M4: 0x04;
205
+ readonly M5: 0x05;
206
+ readonly M6: 0x06;
207
+ };
208
+ declare const Value: {
209
+ readonly Method: 0x00;
210
+ readonly Identifier: 0x01;
211
+ readonly Salt: 0x02;
212
+ readonly PublicKey: 0x03;
213
+ readonly Proof: 0x04;
214
+ readonly EncryptedData: 0x05;
215
+ readonly State: 0x06;
216
+ readonly Error: 0x07;
217
+ readonly BackOff: 0x08;
218
+ readonly Certificate: 0x09;
219
+ readonly Signature: 0x0A;
220
+ readonly Permissions: 0x0B;
221
+ readonly FragmentData: 0x0C;
222
+ readonly FragmentLast: 0x0D;
223
+ readonly Name: 0x11;
224
+ readonly Flags: 0x13;
225
+ };
226
+ declare function bail(data: Map<number, Buffer>): never;
227
+ declare function encode(entries: [number, number | Buffer | Uint8Array][]): Buffer;
228
+ declare function decode(buf: Buffer): Map<number, Buffer>;
229
+ //#endregion
230
+ export { daap_d_exports as DAAP, ntp_d_exports as NTP, opack_d_exports as OPack, plist_d_exports as Plist, rtsp_d_exports as RTSP, tlv8_d_exports as TLV8 };
231
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":["Value","ArrayBuffer","Date","Dictionary","key","Value","parse","ArrayBuffer","buffer","Value","serialize","ArrayBufferLike","value"],"sources":["../src/daap.ts","../src/ntp.ts","../src/opack.ts","../../../node_modules/.bun/@plist+common@1.1.0/node_modules/@plist/common/lib/cjs/types.d.ts","../../../node_modules/.bun/@plist+binary.parse@1.1.0/node_modules/@plist/binary.parse/lib/cjs/index.d.ts","../../../node_modules/.bun/@plist+binary.serialize@1.1.0/node_modules/@plist/binary.serialize/lib/cjs/index.d.ts","../src/plist.ts","../src/rtsp.ts","../src/tlv8.ts"],"x_google_ignoreList":[3,4,5],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import{t as e}from"./chunk-0Lt9GpW0.mjs";var t=e({ContentCode:()=>n,TagType:()=>r,decode:()=>l,decodeTag:()=>u,decodeToObject:()=>d,decodeTrackMetadata:()=>f,encodeContainer:()=>a,encodePlaybackStatus:()=>o,encodeTag:()=>i,encodeTagWithSize:()=>s,encodeTrackMetadata:()=>c});const n={mlit:`dmap.listingitem`,mlcl:`dmap.listing`,msrv:`dmap.serverinforesponse`,mcon:`dmap.container`,miid:`dmap.itemid`,minm:`dmap.itemname`,mikd:`dmap.itemkind`,mper:`dmap.persistentid`,asal:`daap.songalbum`,asar:`daap.songartist`,asaa:`daap.songalbumartist`,ascp:`daap.songcomposer`,asgn:`daap.songgenre`,astm:`daap.songtime`,astn:`daap.songtracknumber`,asdc:`daap.songdisccount`,asdn:`daap.songdiscnumber`,astc:`daap.songtrackcount`,asyr:`daap.songyear`,asbr:`daap.songbitrate`,assr:`daap.songsamplerate`,assz:`daap.songsize`,caps:`daap.songplaystatus`,cash:`daap.songshufflestate`,carp:`daap.songrepeatstate`,cavs:`daap.songvisiblestate`,aePP:`com.apple.itunes.photo-properties`},r={mlit:12,mlcl:12,mcon:12,msrv:12,miid:5,minm:9,mikd:1,mper:7,asal:9,asar:9,asaa:9,ascp:9,asgn:9,astm:5,astn:3,asdc:3,asdn:3,astc:3,asyr:3,asbr:3,assr:5,assz:5,caps:1,cash:1,carp:1,cavs:1,aePP:9};function i(e,t){if(e.length!==4)throw Error(`Invalid DAAP tag: ${e}. Tags must be exactly 4 characters.`);let n=Buffer.from(e,`ascii`),r;typeof t==`string`?r=Buffer.from(t,`utf8`):typeof t==`bigint`?(r=Buffer.alloc(8),r.writeBigUInt64BE(t,0)):typeof t==`number`?t<=255&&t>=0?(r=Buffer.alloc(1),r.writeUInt8(t,0)):t<=65535&&t>=0?(r=Buffer.alloc(2),r.writeUInt16BE(t,0)):t<=4294967295&&t>=0?(r=Buffer.alloc(4),r.writeUInt32BE(t,0)):(r=Buffer.alloc(8),r.writeBigInt64BE(BigInt(t),0)):r=t;let i=Buffer.allocUnsafe(4);return i.writeUInt32BE(r.length,0),Buffer.concat([n,i,r])}function a(e,t){if(e.length!==4)throw Error(`Invalid DAAP tag: ${e}. Tags must be exactly 4 characters.`);let n=Buffer.from(e,`ascii`),r=Buffer.alloc(4);return r.writeUInt32BE(t.length,0),Buffer.concat([n,r,t])}function o(e){let t=[];if(e.playing!==void 0&&t.push(s(`caps`,e.playing?4:3,1)),e.shuffle!==void 0&&t.push(s(`cash`,e.shuffle?1:0,1)),e.repeat!==void 0){let n=0;e.repeat===`one`?n=1:e.repeat===`all`&&(n=2),t.push(s(`carp`,n,1))}return Buffer.concat(t)}function s(e,t,n){if(e.length!==4)throw Error(`Invalid DAAP tag: ${e}. Tags must be exactly 4 characters.`);let r=Buffer.from(e,`ascii`),i=Buffer.alloc(n);switch(n){case 1:i.writeUInt8(t,0);break;case 2:i.writeUInt16BE(t,0);break;case 4:i.writeUInt32BE(t,0);break;case 8:i.writeBigUInt64BE(BigInt(t),0);break}let a=Buffer.alloc(4);return a.writeUInt32BE(n,0),Buffer.concat([r,a,i])}function c(e){let t=[];return e.title!==void 0&&t.push(i(`minm`,e.title)),e.artist!==void 0&&t.push(i(`asar`,e.artist)),e.albumArtist!==void 0&&t.push(i(`asaa`,e.albumArtist)),e.album!==void 0&&t.push(i(`asal`,e.album)),e.composer!==void 0&&t.push(i(`ascp`,e.composer)),e.genre!==void 0&&t.push(i(`asgn`,e.genre)),e.duration!==void 0&&t.push(s(`astm`,Math.floor(e.duration*1e3),4)),e.trackNumber!==void 0&&t.push(s(`astn`,e.trackNumber,2)),e.trackCount!==void 0&&t.push(s(`astc`,e.trackCount,2)),e.discNumber!==void 0&&t.push(s(`asdn`,e.discNumber,2)),e.discCount!==void 0&&t.push(s(`asdc`,e.discCount,2)),e.year!==void 0&&t.push(s(`asyr`,e.year,2)),e.bitrate!==void 0&&t.push(s(`asbr`,e.bitrate,2)),e.sampleRate!==void 0&&t.push(s(`assr`,e.sampleRate,4)),e.size!==void 0&&t.push(s(`assz`,e.size,4)),a(`mlit`,Buffer.concat(t))}function l(e){let t=[],n=e;for(;n.length>0;){let e=u(n);if(!e)break;let[r,i]=e;t.push(r),n=i}return t}function u(e){if(e.length<8)return null;let t=e.subarray(0,4).toString(`ascii`),n=e.readUInt32BE(4);if(e.length<8+n)return null;let r=e.subarray(8,8+n),i=e.subarray(8+n);return[{tag:t,length:n,value:r},i]}function d(e){let t={},n=l(e);for(let{tag:e,value:i}of n){let n=r[e];n===void 0?t[e]=i:n===12?t[e]=d(i):n===9?t[e]=i.toString(`utf8`):n===1||n===2?t[e]=i.readUInt8(0):n===3||n===4?t[e]=i.readUInt16BE(0):n===5||n===6?t[e]=i.readUInt32BE(0):n===7||n===8?t[e]=i.readBigUInt64BE(0):t[e]=i}return t}function f(e){let t=d(e),n=t.mlit??t;return{title:n.minm,artist:n.asar,albumArtist:n.asaa,album:n.asal,composer:n.ascp,genre:n.asgn,duration:n.astm===void 0?void 0:n.astm/1e3,trackNumber:n.astn,trackCount:n.astc,discNumber:n.asdn,discCount:n.asdc,year:n.asyr,bitrate:n.asbr,sampleRate:n.assr,size:n.assz}}var p=e({decode:()=>_,encode:()=>v,now:()=>m,ns:()=>h,parts:()=>g});function m(){let e=h()/1000n,t=e/1000000n,n=e-t*1000000n;return t+2208988800n<<32n|(n<<32n)/1000000n}function h(){return process.hrtime.bigint()}function g(e){return[Number(e>>32n),Number(e&4294967295n)]}function _(e){if(e.length<24)throw RangeError(`NTP packet too small: expected at least 24 bytes, got ${e.length}`);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.length>=28?e.readUInt32BE(24):0,sendtime_frac:e.length>=32?e.readUInt32BE(28):0}}function v(e){let t=Buffer.allocUnsafe(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}var y=e({decode:()=>re,encode:()=>ie,float:()=>te,int:()=>ne,sizedInteger:()=>T});const b={TRUE:1,FALSE:2,TERMINATOR:3,NULL:4,UUID:5,TIMESTAMP:6,INT_BASE:8,INT_INLINE_MAX_VALUE:39,INT_MAX_INLINE:47,INT_1BYTE:48,INT_2BYTE:49,INT_4BYTE:50,INT_8BYTE:51,FLOAT32:53,FLOAT64:54,STR_BASE:64,STR_MAX_INLINE:96,STR_1BYTE_LEN:97,STR_2BYTE_LEN:98,STR_3BYTE_LEN:99,STR_4BYTE_LEN:100,BYTES_BASE:112,BYTES_MAX_INLINE:144,BYTES_1BYTE_LEN:145,BYTES_2BYTE_LEN:146,BYTES_4BYTE_LEN:147,REF_BASE:160,REF_MAX_INLINE:192,REF_1BYTE:193,REF_2BYTE:194,REF_4BYTE:195,REF_8BYTE:196,ARRAY_BASE:208,ARRAY_VARIABLE:223,DICT_BASE:224,DICT_VARIABLE:239,DICT_TERMINATOR:129},x=new TextDecoder,ee=new TextEncoder;var S=class{get value(){return this.#e}#e;constructor(e){this.#e=e}},C=class{get value(){return this.#e}#e;constructor(e){this.#e=e}},w=class{get size(){return this.#e}get value(){return this.#t}#e;#t;constructor(e,t){this.#e=t,this.#t=e}valueOf(){return this.#t}};function te(e){return new S(e)}function ne(e){return new C(e)}function T(e,t){return new w(e,t)}function re(e){return A(e,0,[]).value}function ie(e){return k(e,[])}function E(e){return Uint8Array.of(e)}function D(e,t){let n=new Uint8Array(t),r=BigInt(e);for(let e=0;e<t;e++)n[e]=Number(r&255n),r>>=8n;return n}function O(e,t,n){if(n===1)return e[t];if(n===2)return e[t]|e[t+1]<<8;if(n===4)return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24>>>0;{let r=0n;for(let i=n-1;i>=0;i--)r=r<<8n|BigInt(e[t+i]);return Number(r)}}function k(e,t){let n=null;if(e==null)n=E(b.NULL);else if(typeof e==`boolean`)n=E(e?b.TRUE:b.FALSE);else if(e instanceof S)n=new Uint8Array(9),n[0]=b.FLOAT64,new DataView(n.buffer,n.byteOffset+1,8).setFloat64(0,e.value,!0);else if(e instanceof C){let t=e.value;t<=b.INT_INLINE_MAX_VALUE?n=E(b.INT_BASE+t):t<=255?(n=new Uint8Array(2),n[0]=b.INT_1BYTE,n[1]=t):t<=65535?(n=new Uint8Array(3),n[0]=b.INT_2BYTE,n[1]=t&255,n[2]=t>>8&255):t<=4294967295?(n=new Uint8Array(5),n[0]=b.INT_4BYTE,n[1]=t&255,n[2]=t>>8&255,n[3]=t>>16&255,n[4]=t>>24&255):(n=new Uint8Array(9),n[0]=b.INT_8BYTE,n.set(D(t,8),1))}else if(typeof e==`number`)Number.isInteger(e)?e<=b.INT_INLINE_MAX_VALUE?n=E(b.INT_BASE+e):e<=255?(n=new Uint8Array(2),n[0]=b.INT_1BYTE,n[1]=e):e<=65535?(n=new Uint8Array(3),n[0]=b.INT_2BYTE,n[1]=e&255,n[2]=e>>8&255):e<=4294967295?(n=new Uint8Array(5),n[0]=b.INT_4BYTE,n[1]=e&255,n[2]=e>>8&255,n[3]=e>>16&255,n[4]=e>>24&255):(n=new Uint8Array(9),n[0]=b.INT_8BYTE,n.set(D(e,8),1)):(n=new Uint8Array(9),n[0]=b.FLOAT64,new DataView(n.buffer,n.byteOffset+1,8).setFloat64(0,e,!0));else if(e instanceof w){let t=e.size;if(n=new Uint8Array(t+1),n[0]=b.INT_1BYTE+(31-Math.clz32(t)),t===1)n[1]=e.valueOf();else if(t===2){let t=e.valueOf();n[1]=t&255,n[2]=t>>8&255}else if(t===4){let t=e.valueOf();n[1]=t&255,n[2]=t>>8&255,n[3]=t>>16&255,n[4]=t>>24&255}else n.set(D(e.valueOf(),8),1)}else if(typeof e==`string`){let t=ee.encode(e),r=t.length;r<=32?(n=new Uint8Array(1+r),n[0]=b.STR_BASE+r,n.set(t,1)):r<=255?(n=new Uint8Array(2+r),n[0]=b.STR_1BYTE_LEN,n[1]=r,n.set(t,2)):r<=65535?(n=new Uint8Array(3+r),n[0]=b.STR_2BYTE_LEN,n[1]=r&255,n[2]=r>>8&255,n.set(t,3)):r<=16777215?(n=new Uint8Array(4+r),n[0]=b.STR_3BYTE_LEN,n[1]=r&255,n[2]=r>>8&255,n[3]=r>>16&255,n.set(t,4)):(n=new Uint8Array(5+r),n[0]=b.STR_4BYTE_LEN,n[1]=r&255,n[2]=r>>8&255,n[3]=r>>16&255,n[4]=r>>24&255,n.set(t,5))}else if(e instanceof Uint8Array||Buffer.isBuffer(e)){let t=e instanceof Uint8Array?e:new Uint8Array(e),r=t.length;r<=32?(n=new Uint8Array(1+r),n[0]=b.BYTES_BASE+r,n.set(t,1)):r<=255?(n=new Uint8Array(2+r),n[0]=b.BYTES_1BYTE_LEN,n[1]=r,n.set(t,2)):r<=65535?(n=new Uint8Array(3+r),n[0]=b.BYTES_2BYTE_LEN,n[1]=r&255,n[2]=r>>8&255,n.set(t,3)):(n=new Uint8Array(5+r),n[0]=b.BYTES_4BYTE_LEN,n[1]=r&255,n[2]=r>>8&255,n[3]=r>>16&255,n[4]=r>>24&255,n.set(t,5))}else if(Array.isArray(e)){let r=e.map(e=>k(e,t)),i=r.reduce((e,t)=>e+t.length,0),a=e.length;if(a<15){n=new Uint8Array(1+i),n[0]=b.ARRAY_BASE+a;let e=1;for(let t of r)n.set(t,e),e+=t.length}else{n=new Uint8Array(2+i),n[0]=b.ARRAY_VARIABLE;let e=1;for(let t of r)n.set(t,e),e+=t.length;n[e]=b.TERMINATOR}}else if(typeof e==`object`){let r=Object.keys(e),i=r.length,a=[],o=0;for(let n of r){let r=k(n,t),i=k(e[n],t);a.push(r,i),o+=r.length+i.length}let s=i>=15;n=new Uint8Array(1+o+(s?1:0)),n[0]=i<=15?b.DICT_BASE+i:b.DICT_VARIABLE;let c=1;for(let e of a)n.set(e,c),c+=e.length;s&&(n[c]=b.DICT_TERMINATOR)}else throw TypeError(typeof e);let r=t.findIndex(e=>e.length===n.length&&e.every((e,t)=>e===n[t]));return r>=0?r<33?n=E(b.REF_BASE+r):r<=255?(n=new Uint8Array(2),n[0]=b.REF_1BYTE,n[1]=r):r<=65535?(n=new Uint8Array(3),n[0]=b.REF_2BYTE,n[1]=r&255,n[2]=r>>8&255):r<=4294967295?(n=new Uint8Array(5),n[0]=b.REF_4BYTE,n[1]=r&255,n[2]=r>>8&255,n[3]=r>>16&255,n[4]=r>>24&255):(n=new Uint8Array(9),n[0]=b.REF_8BYTE,n.set(D(r,8),1)):n.length>1&&t.push(n),n}function A(e,t,n){if(t>=e.length)throw TypeError(`No data to unpack`);let r=e[t],i=!0,a,o;if(r===b.TRUE)a=!0,o=t+1;else if(r===b.FALSE)a=!1,o=t+1;else if(r===b.NULL)a=null,o=t+1;else if(r===b.UUID)a=e.subarray(t+1,t+17),o=t+17;else if(r===b.TIMESTAMP)a=O(e,t+1,8),o=t+9;else if(r>=b.INT_BASE&&r<=b.INT_MAX_INLINE)a=r-b.INT_BASE,o=t+1;else if(r===b.FLOAT32)a=new DataView(e.buffer,e.byteOffset+t+1,4).getFloat32(0,!0),o=t+5;else if(r===b.FLOAT64)a=new DataView(e.buffer,e.byteOffset+t+1,8).getFloat64(0,!0),o=t+9;else if((r&240)===b.INT_1BYTE){let n=1<<(r&15);a=T(O(e,t+1,n),n),o=t+1+n}else if(r>=b.STR_BASE&&r<=b.STR_MAX_INLINE){let n=r-b.STR_BASE;a=x.decode(e.subarray(t+1,t+1+n)),o=t+1+n}else if(r>=b.STR_1BYTE_LEN&&r<=b.STR_4BYTE_LEN){let n=r&15,i=O(e,t+1,n),s=t+1+n;a=x.decode(e.subarray(s,s+i)),o=s+i}else if(r>=b.BYTES_BASE&&r<=b.BYTES_MAX_INLINE){let n=r-b.BYTES_BASE;a=e.subarray(t+1,t+1+n),o=t+1+n}else if(r>=b.BYTES_1BYTE_LEN&&r<=b.BYTES_4BYTE_LEN){let n=1<<(r&15)-1,i=O(e,t+1,n),s=t+1+n;a=e.subarray(s,s+i),o=s+i}else if((r&240)===b.ARRAY_BASE){let s=r&15,c=t+1;if(s===15){let t=[];for(;e[c]!==b.TERMINATOR;){let r=A(e,c,n);t.push(r.value),c=r.offset}c++,a=t}else{let t=Array(s);for(let r=0;r<s;r++){let i=A(e,c,n);t[r]=i.value,c=i.offset}a=t}o=c,i=!1}else if((r&240)===b.DICT_BASE){let s=r&15,c={},l=t+1;if(s===15){for(;e[l]!==b.TERMINATOR;){let t=A(e,l,n),r=A(e,t.offset,n);c[t.value]=r.value,l=r.offset}l++}else for(let t=0;t<s;t++){let t=A(e,l,n),r=A(e,t.offset,n);c[t.value]=r.value,l=r.offset}a=c,o=l,i=!1}else if(r>=b.REF_BASE&&r<=b.REF_MAX_INLINE){let e=r-b.REF_BASE;if(e>=n.length)throw TypeError(`Reference index ${e} out of range`);a=n[e],o=t+1,i=!1}else if(r>=b.REF_1BYTE&&r<=b.REF_8BYTE){let s=r-b.REF_MAX_INLINE,c=O(e,t+1,s);if(c>=n.length)throw TypeError(`UID ${c} out of range`);a=n[c],o=t+1+s,i=!1}else throw TypeError(`Unknown tag 0x${r.toString(16)}`);return i&&n.push(a),{value:a,offset:o}}const j=9783072e5,M=`bplist00`;var ae;(function(e){e[e.BINARY=0]=`BINARY`,e[e.XML=1]=`XML`,e[e.OPENSTEP=2]=`OPENSTEP`})(ae||={});const N=100*1e3*1e3,P=new TextDecoder(`utf-8`),oe=new TextDecoder(`utf-16`);function F(e,t=0){return new DataView(e).getFloat64(t,!1)}function se(e,t=0){return new DataView(e).getFloat32(t,!1)}function I(e,t=0){return new DataView(e).getUint8(t)}function ce(e,t=0){return new DataView(e).getUint16(t,!1)}function le(e,t=0){return new DataView(e).getUint32(t,!1)}function L(e,t=0){return new DataView(e).getBigUint64(t,!1)}function R(e){switch(e.byteLength){case 1:return I(e);case 2:return ce(e);case 4:return le(e);case 8:return L(e);case 16:return L(e,8)}throw Error(`Invalid unsigned int length: ${e.byteLength}`)}function z(e,t=0){return new DataView(e).getInt8(t)}function ue(e,t=0){return new DataView(e).getInt16(t,!1)}function B(e,t=0){return new DataView(e).getInt32(t,!1)}function V(e,t=0){return new DataView(e).getBigInt64(t,!1)}function H(e){switch(e.byteLength){case 1:return z(e);case 2:return ue(e);case 4:return B(e);case 8:return V(e);case 16:return L(e,8)}throw Error(`Invalid int length: ${e.byteLength}`)}function U(e){let t=new Uint8Array(e);for(let e=0;e<t.length;e+=2){let n=t[e];t[e]=t[e+1],t[e+1]=n}return t.buffer}const de=e=>{let t=e.slice(0,8);if(P.decode(t)!==M)throw Error(`Invalid binary plist. Expected '${M}' at offset 0.`);let n=e.slice(e.byteLength-32,e.byteLength),r=I(n,6),i=I(n,7),a=Number(L(n,8)),o=Number(L(n,16)),s=Number(L(n,24));if(a>32768)throw Error(`maxObjectCount exceeded`);let c=[];for(let t=0;t<a;t++){let n=e.slice(s+t*r,s+(t+1)*r);c[t]=Number(R(n))}function l(t){let n=c[t],r=I(e,n),a=(r&240)>>4,o=r&15;switch(a){case 0:return s();case 1:return u();case 8:return d();case 2:return f();case 3:return p();case 4:return m();case 5:return h();case 6:return h(!0);case 10:return g();case 13:return _();default:throw Error(`Unhandled type 0x`+a.toString(16))}function s(){switch(o){case 0:return null;case 8:return!1;case 9:return!0;case 15:return null;default:throw Error(`Unhandled simple type 0x`+a.toString(16))}}function u(){let t=2**o;if(t<N)return H(e.slice(n+1,n+1+t));throw Error(`Too little heap space available! Wanted to read `+t+` bytes, but only 100000000 are available.`)}function d(){let t=o+1;if(t<N)return{CF$UID:R(e.slice(n+1,n+1+t))};throw Error(`Too little heap space available! Wanted to read `+t+` bytes, but only 100000000 are available.`)}function f(){let t=2**o;if(t<N){let r=e.slice(n+1,n+1+t);if(t===4)return se(r);if(t===8)return F(r);throw Error(`Invalid real length: ${t}`)}else throw Error(`Too little heap space available! Wanted to read `+t+` bytes, but only 100000000 are available.`)}function p(){o!=3&&console.error(`Unknown date type :`+o+`. Parsing anyway...`);let t=e.slice(n+1,n+9);return new Date(j+1e3*F(t))}function m(){let t=1,r=o;if(o==15){let i=z(e,n+1),a=(i&240)/16;a!=1&&console.error(`0x4: UNEXPECTED LENGTH-INT TYPE! `+a);let o=2**(i&15);t=2+o,r=Number(R(e.slice(n+2,n+2+o)))}if(r<N)return e.slice(n+t,n+t+Number(r));throw Error(`Too little heap space available! Wanted to read `+r+` bytes, but only 100000000 are available.`)}function h(t=!1){let r=o,i=1;if(o==15){let t=I(e,n+1),a=(t&240)/16;a!=1&&console.error(`UNEXPECTED LENGTH-INT TYPE! `+a);let o=2**(t&15);i=2+o,r=Number(R(e.slice(n+2,n+2+o)))}if(r*=t?2:1,r<N){let a=e.slice(n+i,n+i+r);return t?(a=U(a),oe.decode(a)):P.decode(a)}throw Error(`Too little heap space available! Wanted to read `+r+` bytes, but only 100000000 are available.`)}function g(){let t=o,r=1;if(o==15){let i=I(e,n+1),a=(i&240)/16;a!=1&&console.error(`0xa: UNEXPECTED LENGTH-INT TYPE! `+a);let o=2**(i&15);r=2+o,t=Number(R(e.slice(n+2,n+2+o)))}if(t*i>N)throw Error(`Too little heap space available!`);let a=[];for(let o=0;o<t;o++)a[o]=l(Number(R(e.slice(n+r+o*i,n+r+(o+1)*i))));return a}function _(){let t=o,r=1;if(o==15){let i=I(e,n+1),a=(i&240)/16;a!=1&&console.error(`0xD: UNEXPECTED LENGTH-INT TYPE! `+a);let o=2**(i&15);r=2+o,t=Number(R(e.slice(n+2,n+2+o)))}if(t*2*i>N)throw Error(`Too little heap space available!`);let a={};for(let o=0;o<t;o++){let s=Number(R(e.slice(n+r+o*i,n+r+(o+1)*i))),c=Number(R(e.slice(n+r+t*i+o*i,n+r+t*i+(o+1)*i))),u=l(s);if(typeof u!=`string`)throw Error(`Invalid key type.`);if(u===`__proto__`)throw Error(`Attempted prototype pollution`);a[u]=l(c)}return a}}return l(o)},W=new TextEncoder,fe=new Uint8Array([0,0,0,0,0,0]),pe=e=>Uint8Array.from(e.match(/.{1,2}/g).map(e=>parseInt(e,16))),G=e=>!!e&&typeof e==`object`&&Object.keys(e).length==1&&typeof e.CF$UID==`number`,me=e=>{let t=new ArrayBuffer(e.length*2),n=new Uint16Array(t);for(let t=0,r=e.length;t<r;t++)n[t]=e.charCodeAt(t);return new Uint8Array(t)},K=(e,t)=>{let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n},q=(e,t,n)=>{let r=new Uint8Array(e.length+n),i=new DataView(r.buffer);switch(r.set(e),n){case 1:i.setUint8(e.length,Number(t));break;case 2:i.setUint16(e.length,Number(t),!1);break;case 4:i.setUint32(e.length,Number(t),!1);break;case 8:i.setBigUint64(e.length,BigInt(t),!1);break;default:throw Error(`Unsupported int size`)}return r},he=(e,t,n)=>{let r=new Uint8Array(e.length+n),i=new DataView(r.buffer);switch(r.set(e),n){case 1:i.setInt8(e.length,Number(t));break;case 2:i.setInt16(e.length,Number(t),!1);break;case 4:i.setInt32(e.length,Number(t),!1);break;case 8:i.setBigInt64(e.length,BigInt(t),!1);break;default:throw Error(`Unsupported int size`)}return r},J=(e,t)=>{let n=new Uint8Array(e.length+8),r=new DataView(n.buffer);return n.set(e),r.setFloat64(e.length,t),n},ge=e=>{let t=W.encode(M);e instanceof Array&&e.length===1&&(e=e[0]);let n=Y(e),r=xe(n.length),i=[],a,o;return s(),n.forEach((e,n)=>{i[n]=t.byteLength,e==null?t=q(t,0,1):u(e)}),l(),c(),t.buffer;function s(){let e={},t=0;n.forEach(n=>{n.id||(typeof n.value==`string`?e.hasOwnProperty(n.value)?(n.type=`stringref`,n.id=e[n.value]):e[n.value]=n.id=t++:n.id=t++)}),n=n.filter(e=>e.type!==`stringref`)}function c(){t=K(t,fe),t=K(t,new Uint8Array([a,r])),t=q(t,BigInt(n.length),8),t=q(t,BigInt(`0`),8),t=q(t,BigInt(o),8)}function l(){o=t.byteLength,a=be(o),i.forEach(e=>{t=q(t,e,a)})}function u(e){if(e.type===`primitive`){let t=e.value;switch(typeof t){case`number`:case`bigint`:p(t);break;case`string`:_(t);break;case`boolean`:g(t);break}t instanceof Date?d(t):t instanceof ArrayBuffer?v(t):G(t)&&m(t.CF$UID);return}switch(e.type){case`dict`:f(e);break;case`array`:h(e);break;default:throw Error(`unhandled entry type: `+e.type)}}function d(e){t=q(t,51,1);let n=(e.getTime()-j)/1e3;t=J(t,n)}function f(e){y(13,e.entryKeys.length),e.entryKeys.forEach(e=>{b(e.id)}),e.entryValues.forEach(e=>{b(e.id)})}function p(e){if(typeof e==`bigint`){let n=pe(e.toString(16).padStart(32,`0`).slice(0,32));t=q(t,20,1),t=K(t,n)}else Number.isInteger(e)?e<0?(t=q(t,19,1),t=he(t,e,8)):e<=255?(t=q(t,16,1),t=q(t,e,1)):e<=65535?(t=q(t,17,1),t=q(t,e,2)):e<=4294967295?(t=q(t,18,1),t=q(t,e,4)):(t=q(t,19,1),t=q(t,e,8)):(t=q(t,35,1),t=J(t,e))}function m(e){y(8,0),b(e)}function h(e){y(10,e.entries.length),e.entries.forEach(e=>{b(e.id)})}function g(e){t=q(t,e?9:8,1)}function _(e){if(x(e)){let n=me(e);y(6,n.length/2);for(let e=0;e<n.length;e+=2){let t=n[e+0];n[e+0]=n[e+1],n[e+1]=t}t=K(t,n)}else{let n=W.encode(e);y(5,n.length),t=K(t,n)}}function v(e){y(4,e.byteLength),t=K(t,new Uint8Array(e))}function y(e,n){n<15?t=q(t,(e<<4)+n,1):(t=q(t,(e<<4)+15,1),p(n))}function b(e){t=q(t,e,r)}function x(e){return W.encode(e).byteLength!=e.length}},_e=[`string`,`number`,`boolean`,`bigint`];function Y(e){if(_e.includes(typeof e)||e instanceof ArrayBuffer||e instanceof Date||G(e))return[{type:`primitive`,value:e}];if(typeof e==`object`&&e)return Array.isArray(e)?ve(e):ye(e);throw Error(`unhandled entry: `+e)}function ve(e){let t=e.map(Y);return[{type:`array`,value:void 0,entries:t.map(e=>e[0])},...t.flat()]}function ye(e){let t=Object.keys(e).map(Y).flat(1),n=Object.values(e).map(Y);return[{type:`dict`,value:void 0,entryKeys:t,entryValues:n.map(e=>e[0])},...t,...n.flat()]}function be(e){return e<256?1:e<65536?2:e<4294967296?4:8}function xe(e){return e<256?1:e<65536?2:4}var Se=e({parse:()=>de,serialize:()=>ge}),Ce=e({makeHeader:()=>we,makeRequest:()=>Te,makeResponse:()=>Ee});function we(e,t,n,r,i,a,o){let s=[];s.push(`${e} ${t} RTSP/1.0`),s.push(`CSeq: ${r}`),s.push(`Active-Remote: ${i}`),s.push(`Client-Instance: ${a}`),s.push(`DACP-ID: ${a}`),s.push(`User-Agent: AirPlay/320.20`),s.push(`X-Apple-ProtocolVersion: 1`),s.push(`X-Apple-Session-ID: ${o}`),s.push(`X-ProtocolVersion: 1`);for(let[e,t]of Object.entries(n))s.push(`${e}: ${t}`);return s.push(``),s.push(``),s.join(`\r
2
+ `)}function Te(e){let t=e.indexOf(`\r
3
+ \r
4
+ `),{headers:n,method:r,path:i}=De(e.subarray(0,t)),a=n[`Content-Length`]?Number(n[`Content-Length`]):0;isNaN(a)&&(a=0);let o=t+4+a;return e.byteLength<o?null:{headers:n,method:r,path:i,body:e.subarray(t+4,o),requestLength:o}}function Ee(e){let t=e.indexOf(`\r
5
+ \r
6
+ `),{headers:n,status:r,statusText:i}=Oe(e.subarray(0,t)),a=n[`Content-Length`]?Number(n[`Content-Length`]):0;isNaN(a)&&(a=0);let o=t+4+a;if(e.byteLength<o)return null;let s=e.subarray(t+4,o);return{response:new Response(s,{status:r,statusText:i,headers:n}),responseLength:o}}function X(e){let t={};for(let n=0;n<e.length;n++){let r=e[n].indexOf(`:`);if(r<=0)continue;let i=e[n].substring(0,r).trim();t[i]=e[n].substring(r+1).trim()}return t}function De(e){let t=e.toString(`utf8`).split(`\r
7
+ `),n=t[0].match(/^(\S+)\s+(\S+)\s+RTSP\/1\.0$/),r=n[1],i=n[2];return{headers:X(t.slice(1)),method:r,path:i}}function Oe(e){let t=e.toString(`utf8`).split(`\r
8
+ `),n=t[0].match(/(HTTP|RTSP)\/[\d.]+\s+(\d+)\s+(.+)/),r=Number(n[2]),i=n[3];return{headers:X(t.slice(1)),status:r,statusText:i}}var ke=e({ErrorCode:()=>Z,Flags:()=>Ae,Method:()=>je,State:()=>Q,Value:()=>$,bail:()=>Me,decode:()=>Pe,encode:()=>Ne});const Ae={TransientPairing:16},Z={Unknown:1,Authentication:2,BackOff:3,MaxPeers:4,MaxTries:5,Unavailable:6,Busy:7},je={PairSetup:0,PairSetupWithAuth:1,PairVerify:2,AddPairing:3,RemovePairing:4,ListPairing:5},Q={M1:1,M2:2,M3:3,M4:4,M5:5,M6:6},$={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 Me(e){if(e.has($.BackOff)){let t=e.get($.BackOff),n=t.readUintLE(0,t.length);throw Error(`Device is busy, try again in ${n} seconds.`)}if(e.has($.Error)){let t=Object.entries(Z).find(([t,n])=>n===e.get($.Error).readUint8());throw t?Error(`Device returned an error code: ${t[0]}`):Error(`Device returned an unknown error code: ${e.get($.Error).readUint8()}`)}throw Error(`Invalid response`)}function Ne(e){let t=0;for(let[,n]of e){let e=typeof n==`number`?1:n.length,r=Math.max(1,Math.ceil(e/255));t+=r*2+e}let n=Buffer.allocUnsafe(t),r=0;for(let[t,i]of e){let e,a;typeof i==`number`?(e=Buffer.allocUnsafe(1),e[0]=i,a=1):(e=i,a=e.length);let o=0;do{let i=Math.min(a-o,255);n[r++]=t,n[r++]=i,i>0&&(e instanceof Buffer?e.copy(n,r,o,o+i):n.set(e.subarray(o,o+i),r),r+=i),o+=i}while(o<a)}return n}function Pe(e){let t=new Map,n=0;for(;n<e.length;){let r=e[n++],i=e[n++],a=t.get(r);if(a){let o=Buffer.allocUnsafe(a.length+i);a.copy(o,0),e.copy(o,a.length,n,n+i),t.set(r,o)}else t.set(r,e.subarray(n,n+i));n+=i}return t}export{t as DAAP,p as NTP,y as OPack,Se as Plist,Ce as RTSP,ke as TLV8};
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["decode","EPOCH","decode","encode","#value","#size","decode","encode"],"sources":["../src/daap.ts","../src/ntp.ts","../src/opack.ts","../../../node_modules/.bun/@plist+common@1.1.0/node_modules/@plist/common/lib/esm/constants.js","../../../node_modules/.bun/@plist+binary.parse@1.1.0/node_modules/@plist/binary.parse/lib/esm/index.js","../../../node_modules/.bun/@plist+binary.serialize@1.1.0/node_modules/@plist/binary.serialize/lib/esm/index.js","../src/plist.ts","../src/rtsp.ts","../src/tlv8.ts"],"sourcesContent":["export const ContentCode = {\n // Container tags\n mlit: 'dmap.listingitem',\n mlcl: 'dmap.listing',\n msrv: 'dmap.serverinforesponse',\n mcon: 'dmap.container',\n\n // Item metadata\n miid: 'dmap.itemid',\n minm: 'dmap.itemname',\n mikd: 'dmap.itemkind',\n mper: 'dmap.persistentid',\n\n // Song metadata\n asal: 'daap.songalbum',\n asar: 'daap.songartist',\n asaa: 'daap.songalbumartist',\n ascp: 'daap.songcomposer',\n asgn: 'daap.songgenre',\n astm: 'daap.songtime',\n astn: 'daap.songtracknumber',\n asdc: 'daap.songdisccount',\n asdn: 'daap.songdiscnumber',\n astc: 'daap.songtrackcount',\n asyr: 'daap.songyear',\n asbr: 'daap.songbitrate',\n assr: 'daap.songsamplerate',\n assz: 'daap.songsize',\n\n // Playback status\n caps: 'daap.songplaystatus',\n cash: 'daap.songshufflestate',\n carp: 'daap.songrepeatstate',\n cavs: 'daap.songvisiblestate',\n\n // Album art\n aePP: 'com.apple.itunes.photo-properties'\n} as const;\n\nexport const TagType = {\n // 1 = byte, 2 = unsigned byte, 3 = short, 4 = unsigned short,\n // 5 = int, 6 = unsigned int, 7 = long, 8 = unsigned long,\n // 9 = string, 10 = date, 11 = version, 12 = container\n\n mlit: 12, // container\n mlcl: 12, // container\n mcon: 12, // container\n msrv: 12, // container\n\n miid: 5, // int\n minm: 9, // string\n mikd: 1, // byte\n mper: 7, // long\n\n asal: 9, // string\n asar: 9, // string\n asaa: 9, // string\n ascp: 9, // string\n asgn: 9, // string\n astm: 5, // int (milliseconds)\n astn: 3, // short\n asdc: 3, // short\n asdn: 3, // short\n astc: 3, // short\n asyr: 3, // short\n asbr: 3, // short\n assr: 5, // int\n assz: 5, // int\n\n caps: 1, // byte (play status)\n cash: 1, // byte (shuffle state)\n carp: 1, // byte (repeat state)\n cavs: 1, // byte (visible state)\n\n aePP: 9 // string\n} as const;\n\nexport function encodeTag(tag: string, value: Buffer | string | number | bigint): Buffer {\n if (tag.length !== 4) {\n throw new Error(`Invalid DAAP tag: ${tag}. Tags must be exactly 4 characters.`);\n }\n\n const tagBuffer = Buffer.from(tag, 'ascii');\n let valueBuffer: Buffer;\n\n if (typeof value === 'string') {\n valueBuffer = Buffer.from(value, 'utf8');\n } else if (typeof value === 'bigint') {\n valueBuffer = Buffer.alloc(8);\n valueBuffer.writeBigUInt64BE(value, 0);\n } else if (typeof value === 'number') {\n // Determine the smallest buffer size needed\n if (value <= 0xFF && value >= 0) {\n valueBuffer = Buffer.alloc(1);\n valueBuffer.writeUInt8(value, 0);\n } else if (value <= 0xFFFF && value >= 0) {\n valueBuffer = Buffer.alloc(2);\n valueBuffer.writeUInt16BE(value, 0);\n } else if (value <= 0xFFFFFFFF && value >= 0) {\n valueBuffer = Buffer.alloc(4);\n valueBuffer.writeUInt32BE(value, 0);\n } else {\n valueBuffer = Buffer.alloc(8);\n valueBuffer.writeBigInt64BE(BigInt(value), 0);\n }\n } else {\n valueBuffer = value;\n }\n\n const lengthBuffer = Buffer.allocUnsafe(4);\n lengthBuffer.writeUInt32BE(valueBuffer.length, 0);\n\n return Buffer.concat([tagBuffer, lengthBuffer, valueBuffer]);\n}\n\nexport function encodeContainer(tag: string, content: Buffer): Buffer {\n if (tag.length !== 4) {\n throw new Error(`Invalid DAAP tag: ${tag}. Tags must be exactly 4 characters.`);\n }\n\n const tagBuffer = Buffer.from(tag, 'ascii');\n const lengthBuffer = Buffer.alloc(4);\n lengthBuffer.writeUInt32BE(content.length, 0);\n\n return Buffer.concat([tagBuffer, lengthBuffer, content]);\n}\n\nexport function encodePlaybackStatus(status: PlaybackStatus): Buffer {\n const tags: Buffer[] = [];\n\n if (status.playing !== undefined) {\n tags.push(encodeTagWithSize('caps', status.playing ? 4 : 3, 1));\n }\n\n if (status.shuffle !== undefined) {\n tags.push(encodeTagWithSize('cash', status.shuffle ? 1 : 0, 1));\n }\n\n if (status.repeat !== undefined) {\n let repeatValue = 0;\n if (status.repeat === 'one') repeatValue = 1;\n else if (status.repeat === 'all') repeatValue = 2;\n tags.push(encodeTagWithSize('carp', repeatValue, 1));\n }\n\n return Buffer.concat(tags);\n}\n\nexport function encodeTagWithSize(tag: string, value: number, byteSize: 1 | 2 | 4 | 8): Buffer {\n if (tag.length !== 4) {\n throw new Error(`Invalid DAAP tag: ${tag}. Tags must be exactly 4 characters.`);\n }\n\n const tagBuffer = Buffer.from(tag, 'ascii');\n const valueBuffer = Buffer.alloc(byteSize);\n\n switch (byteSize) {\n case 1:\n valueBuffer.writeUInt8(value, 0);\n break;\n case 2:\n valueBuffer.writeUInt16BE(value, 0);\n break;\n case 4:\n valueBuffer.writeUInt32BE(value, 0);\n break;\n case 8:\n valueBuffer.writeBigUInt64BE(BigInt(value), 0);\n break;\n }\n\n const lengthBuffer = Buffer.alloc(4);\n lengthBuffer.writeUInt32BE(byteSize, 0);\n\n return Buffer.concat([tagBuffer, lengthBuffer, valueBuffer]);\n}\n\nexport function encodeTrackMetadata(metadata: TrackMetadata): Buffer {\n const tags: Buffer[] = [];\n\n if (metadata.title !== undefined) {\n tags.push(encodeTag('minm', metadata.title));\n }\n\n if (metadata.artist !== undefined) {\n tags.push(encodeTag('asar', metadata.artist));\n }\n\n if (metadata.albumArtist !== undefined) {\n tags.push(encodeTag('asaa', metadata.albumArtist));\n }\n\n if (metadata.album !== undefined) {\n tags.push(encodeTag('asal', metadata.album));\n }\n\n if (metadata.composer !== undefined) {\n tags.push(encodeTag('ascp', metadata.composer));\n }\n\n if (metadata.genre !== undefined) {\n tags.push(encodeTag('asgn', metadata.genre));\n }\n\n if (metadata.duration !== undefined) {\n // Duration in milliseconds\n tags.push(encodeTagWithSize('astm', Math.floor(metadata.duration * 1000), 4));\n }\n\n if (metadata.trackNumber !== undefined) {\n tags.push(encodeTagWithSize('astn', metadata.trackNumber, 2));\n }\n\n if (metadata.trackCount !== undefined) {\n tags.push(encodeTagWithSize('astc', metadata.trackCount, 2));\n }\n\n if (metadata.discNumber !== undefined) {\n tags.push(encodeTagWithSize('asdn', metadata.discNumber, 2));\n }\n\n if (metadata.discCount !== undefined) {\n tags.push(encodeTagWithSize('asdc', metadata.discCount, 2));\n }\n\n if (metadata.year !== undefined) {\n tags.push(encodeTagWithSize('asyr', metadata.year, 2));\n }\n\n if (metadata.bitrate !== undefined) {\n tags.push(encodeTagWithSize('asbr', metadata.bitrate, 2));\n }\n\n if (metadata.sampleRate !== undefined) {\n tags.push(encodeTagWithSize('assr', metadata.sampleRate, 4));\n }\n\n if (metadata.size !== undefined) {\n tags.push(encodeTagWithSize('assz', metadata.size, 4));\n }\n\n const content = Buffer.concat(tags);\n\n return encodeContainer('mlit', content);\n}\n\nexport function decode(buffer: Buffer): DecodedTag[] {\n const tags: DecodedTag[] = [];\n let remaining = buffer;\n\n while (remaining.length > 0) {\n const result = decodeTag(remaining);\n if (!result) break;\n\n const [tag, rest] = result;\n tags.push(tag);\n remaining = rest;\n }\n\n return tags;\n}\n\nexport function decodeTag(buffer: Buffer): [DecodedTag, Buffer] | null {\n if (buffer.length < 8) {\n return null;\n }\n\n const tag = buffer.subarray(0, 4).toString('ascii');\n const length = buffer.readUInt32BE(4);\n\n if (buffer.length < 8 + length) {\n return null;\n }\n\n const value = buffer.subarray(8, 8 + length);\n const remaining = buffer.subarray(8 + length);\n\n return [{tag, length, value}, remaining];\n}\n\nexport function decodeToObject(buffer: Buffer): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const tags = decode(buffer);\n\n for (const {tag, value} of tags) {\n const tagType = TagType[tag as keyof typeof TagType] as number | undefined;\n\n if (tagType === undefined) {\n // Unknown tag type - keep as buffer\n result[tag] = value;\n } else if (tagType === 12) {\n // Container - recurse\n result[tag] = decodeToObject(value);\n } else if (tagType === 9) {\n // String\n result[tag] = value.toString('utf8');\n } else if (tagType === 1 || tagType === 2) {\n // Byte\n result[tag] = value.readUInt8(0);\n } else if (tagType === 3 || tagType === 4) {\n // Short\n result[tag] = value.readUInt16BE(0);\n } else if (tagType === 5 || tagType === 6) {\n // Int\n result[tag] = value.readUInt32BE(0);\n } else if (tagType === 7 || tagType === 8) {\n // Long\n result[tag] = value.readBigUInt64BE(0);\n } else {\n // Unknown type - keep as buffer\n result[tag] = value;\n }\n }\n\n return result;\n}\n\nexport function decodeTrackMetadata(buffer: Buffer): TrackMetadata {\n const obj = decodeToObject(buffer);\n const mlit = (obj.mlit as Record<string, unknown>) ?? obj;\n\n return {\n title: mlit.minm as string | undefined,\n artist: mlit.asar as string | undefined,\n albumArtist: mlit.asaa as string | undefined,\n album: mlit.asal as string | undefined,\n composer: mlit.ascp as string | undefined,\n genre: mlit.asgn as string | undefined,\n duration: mlit.astm !== undefined ? (mlit.astm as number) / 1000 : undefined,\n trackNumber: mlit.astn as number | undefined,\n trackCount: mlit.astc as number | undefined,\n discNumber: mlit.asdn as number | undefined,\n discCount: mlit.asdc as number | undefined,\n year: mlit.asyr as number | undefined,\n bitrate: mlit.asbr as number | undefined,\n sampleRate: mlit.assr as number | undefined,\n size: mlit.assz as number | undefined\n };\n}\n\nexport type ContentCodeKey = keyof typeof ContentCode;\n\nexport type DecodedTag = {\n readonly tag: string;\n readonly length: number;\n readonly value: Buffer;\n};\n\nexport type PlaybackStatus = {\n readonly playing?: boolean;\n readonly shuffle?: boolean;\n readonly repeat?: 'off' | 'one' | 'all';\n};\n\nexport type TrackMetadata = {\n readonly title?: string;\n readonly artist?: string;\n readonly albumArtist?: string;\n readonly album?: string;\n readonly composer?: string;\n readonly genre?: string;\n readonly duration?: number;\n readonly trackNumber?: number;\n readonly trackCount?: number;\n readonly discNumber?: number;\n readonly discCount?: number;\n readonly year?: number;\n readonly bitrate?: number;\n readonly sampleRate?: number;\n readonly size?: number;\n};\n","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 parts(ntp: bigint): [number, number] {\n return [\n Number(ntp >> 32n),\n Number(ntp & 0xFFFFFFFFn)\n ];\n}\n\nexport function decode(buffer: Buffer): PacketFields {\n if (buffer.length < 24) {\n throw new RangeError(`NTP packet too small: expected at least 24 bytes, got ${buffer.length}`);\n }\n\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.length >= 28 ? buffer.readUInt32BE(24) : 0,\n sendtime_frac: buffer.length >= 32 ? buffer.readUInt32BE(28) : 0\n };\n}\n\nexport function encode(fields: PacketFields): Buffer {\n const buffer = Buffer.allocUnsafe(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 readonly proto: number;\n readonly type: number;\n readonly seqno: number;\n readonly padding: number;\n readonly reftime_sec: number;\n readonly reftime_frac: number;\n readonly recvtime_sec: number;\n readonly recvtime_frac: number;\n readonly sendtime_sec: number;\n readonly sendtime_frac: number;\n};\n","type Packed = Uint8Array;\ntype ObjectList = Packed[];\n\ntype UnpackResult = {\n readonly value: any;\n readonly offset: number;\n};\n\nconst TAG = {\n TRUE: 0x01,\n FALSE: 0x02,\n TERMINATOR: 0x03,\n NULL: 0x04,\n UUID: 0x05,\n TIMESTAMP: 0x06,\n INT_BASE: 0x08,\n INT_INLINE_MAX_VALUE: 0x27,\n INT_MAX_INLINE: 0x2F,\n INT_1BYTE: 0x30,\n INT_2BYTE: 0x31,\n INT_4BYTE: 0x32,\n INT_8BYTE: 0x33,\n FLOAT32: 0x35,\n FLOAT64: 0x36,\n STR_BASE: 0x40,\n STR_MAX_INLINE: 0x60,\n STR_1BYTE_LEN: 0x61,\n STR_2BYTE_LEN: 0x62,\n STR_3BYTE_LEN: 0x63,\n STR_4BYTE_LEN: 0x64,\n BYTES_BASE: 0x70,\n BYTES_MAX_INLINE: 0x90,\n BYTES_1BYTE_LEN: 0x91,\n BYTES_2BYTE_LEN: 0x92,\n BYTES_4BYTE_LEN: 0x93,\n REF_BASE: 0xA0,\n REF_MAX_INLINE: 0xC0,\n REF_1BYTE: 0xC1,\n REF_2BYTE: 0xC2,\n REF_4BYTE: 0xC3,\n REF_8BYTE: 0xC4,\n ARRAY_BASE: 0xD0,\n ARRAY_VARIABLE: 0xDF,\n DICT_BASE: 0xE0,\n DICT_VARIABLE: 0xEF,\n DICT_TERMINATOR: 0x81\n} as const;\n\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\n\nclass Float {\n get value(): number {\n return this.#value;\n }\n\n readonly #value: number;\n\n constructor(value: number) {\n this.#value = value;\n }\n}\n\nclass Integer {\n get value(): number {\n return this.#value;\n }\n\n readonly #value: number;\n\n constructor(value: number) {\n this.#value = value;\n }\n}\n\nclass SizedInteger {\n get size(): number {\n return this.#size;\n }\n\n get value(): number {\n return this.#value;\n }\n\n readonly #size: number;\n readonly #value: number;\n\n constructor(value: number, size: number) {\n this.#size = size;\n this.#value = value;\n }\n\n valueOf(): number {\n return this.#value;\n }\n}\n\nexport function float(value: number): Float {\n return new Float(value);\n}\n\nexport function int(value: number): Integer {\n return new Integer(value);\n}\n\nexport function sizedInteger(value: number, size: number): SizedInteger {\n return new SizedInteger(value, size);\n}\n\nexport function decode(data: Uint8Array): any {\n const result = _unpackAt(data, 0, []);\n return result.value;\n}\n\nexport function encode(data: any): Uint8Array {\n return _pack(data, []);\n}\n\nfunction concat(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\n for (const a of arrays) {\n out.set(a, offset);\n offset += a.length;\n }\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\n for (let i = 0; i < byteLen; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n\n return out;\n}\n\nfunction readLittleEndian(buf: Uint8Array, offset: number, len: number) {\n if (len === 1) {\n return buf[offset];\n } else if (len === 2) {\n return buf[offset] | (buf[offset + 1] << 8);\n } else if (len === 4) {\n return buf[offset] | (buf[offset + 1] << 8) | (buf[offset + 2] << 16) | ((buf[offset + 3] << 24) >>> 0);\n } else {\n let v = 0n;\n for (let i = len - 1; i >= 0; i--) {\n v = (v << 8n) | BigInt(buf[offset + i]);\n }\n return Number(v);\n }\n}\n\nfunction _pack(data: any, objectList: ObjectList): Uint8Array {\n let packed: Uint8Array | null = null;\n\n if (data === null || data === undefined) {\n packed = u8(TAG.NULL);\n } else if (typeof data === 'boolean') {\n packed = u8(data ? TAG.TRUE : TAG.FALSE);\n } else if (data instanceof Float) {\n packed = new Uint8Array(9);\n packed[0] = TAG.FLOAT64;\n new DataView(packed.buffer, packed.byteOffset + 1, 8).setFloat64(0, data.value, true);\n } else if (data instanceof Integer) {\n const val = data.value;\n\n if (val <= TAG.INT_INLINE_MAX_VALUE) {\n packed = u8(TAG.INT_BASE + val);\n } else if (val <= 0xFF) {\n packed = new Uint8Array(2);\n packed[0] = TAG.INT_1BYTE;\n packed[1] = val;\n } else if (val <= 0xFFFF) {\n packed = new Uint8Array(3);\n packed[0] = TAG.INT_2BYTE;\n packed[1] = val & 0xFF;\n packed[2] = (val >> 8) & 0xFF;\n } else if (val <= 0xFFFFFFFF) {\n packed = new Uint8Array(5);\n packed[0] = TAG.INT_4BYTE;\n packed[1] = val & 0xFF;\n packed[2] = (val >> 8) & 0xFF;\n packed[3] = (val >> 16) & 0xFF;\n packed[4] = (val >> 24) & 0xFF;\n } else {\n packed = new Uint8Array(9);\n packed[0] = TAG.INT_8BYTE;\n packed.set(uintToLEBytes(val, 8), 1);\n }\n } else if (typeof data === 'number') {\n if (!Number.isInteger(data)) {\n packed = new Uint8Array(9);\n packed[0] = TAG.FLOAT64;\n new DataView(packed.buffer, packed.byteOffset + 1, 8).setFloat64(0, data, true);\n } else {\n if (data <= TAG.INT_INLINE_MAX_VALUE) {\n packed = u8(TAG.INT_BASE + data);\n } else if (data <= 0xFF) {\n packed = new Uint8Array(2);\n packed[0] = TAG.INT_1BYTE;\n packed[1] = data;\n } else if (data <= 0xFFFF) {\n packed = new Uint8Array(3);\n packed[0] = TAG.INT_2BYTE;\n packed[1] = data & 0xFF;\n packed[2] = (data >> 8) & 0xFF;\n } else if (data <= 0xFFFFFFFF) {\n packed = new Uint8Array(5);\n packed[0] = TAG.INT_4BYTE;\n packed[1] = data & 0xFF;\n packed[2] = (data >> 8) & 0xFF;\n packed[3] = (data >> 16) & 0xFF;\n packed[4] = (data >> 24) & 0xFF;\n } else {\n packed = new Uint8Array(9);\n packed[0] = TAG.INT_8BYTE;\n packed.set(uintToLEBytes(data, 8), 1);\n }\n }\n } else if (data instanceof SizedInteger) {\n const byteSize = data.size;\n packed = new Uint8Array(byteSize + 1);\n packed[0] = TAG.INT_1BYTE + (31 - Math.clz32(byteSize));\n\n if (byteSize === 1) {\n packed[1] = data.valueOf();\n } else if (byteSize === 2) {\n const val = data.valueOf();\n packed[1] = val & 0xFF;\n packed[2] = (val >> 8) & 0xFF;\n } else if (byteSize === 4) {\n const val = data.valueOf();\n packed[1] = val & 0xFF;\n packed[2] = (val >> 8) & 0xFF;\n packed[3] = (val >> 16) & 0xFF;\n packed[4] = (val >> 24) & 0xFF;\n } else {\n packed.set(uintToLEBytes(data.valueOf(), 8), 1);\n }\n } else if (typeof data === 'string') {\n const b = textEncoder.encode(data);\n const len = b.length;\n\n if (len <= 0x20) {\n packed = new Uint8Array(1 + len);\n packed[0] = TAG.STR_BASE + len;\n packed.set(b, 1);\n } else if (len <= 0xFF) {\n packed = new Uint8Array(2 + len);\n packed[0] = TAG.STR_1BYTE_LEN;\n packed[1] = len;\n packed.set(b, 2);\n } else if (len <= 0xFFFF) {\n packed = new Uint8Array(3 + len);\n packed[0] = TAG.STR_2BYTE_LEN;\n packed[1] = len & 0xFF;\n packed[2] = (len >> 8) & 0xFF;\n packed.set(b, 3);\n } else if (len <= 0xFFFFFF) {\n packed = new Uint8Array(4 + len);\n packed[0] = TAG.STR_3BYTE_LEN;\n packed[1] = len & 0xFF;\n packed[2] = (len >> 8) & 0xFF;\n packed[3] = (len >> 16) & 0xFF;\n packed.set(b, 4);\n } else {\n packed = new Uint8Array(5 + len);\n packed[0] = TAG.STR_4BYTE_LEN;\n packed[1] = len & 0xFF;\n packed[2] = (len >> 8) & 0xFF;\n packed[3] = (len >> 16) & 0xFF;\n packed[4] = (len >> 24) & 0xFF;\n packed.set(b, 5);\n }\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\n if (len <= 0x20) {\n packed = new Uint8Array(1 + len);\n packed[0] = TAG.BYTES_BASE + len;\n packed.set(bytes, 1);\n } else if (len <= 0xFF) {\n packed = new Uint8Array(2 + len);\n packed[0] = TAG.BYTES_1BYTE_LEN;\n packed[1] = len;\n packed.set(bytes, 2);\n } else if (len <= 0xFFFF) {\n packed = new Uint8Array(3 + len);\n packed[0] = TAG.BYTES_2BYTE_LEN;\n packed[1] = len & 0xFF;\n packed[2] = (len >> 8) & 0xFF;\n packed.set(bytes, 3);\n } else {\n packed = new Uint8Array(5 + len);\n packed[0] = TAG.BYTES_4BYTE_LEN;\n packed[1] = len & 0xFF;\n packed[2] = (len >> 8) & 0xFF;\n packed[3] = (len >> 16) & 0xFF;\n packed[4] = (len >> 24) & 0xFF;\n packed.set(bytes, 5);\n }\n } else if (Array.isArray(data)) {\n const parts = data.map(d => _pack(d, objectList));\n const bodyLen = parts.reduce((sum, p) => sum + p.length, 0);\n const len = data.length;\n\n if (len < 0x0F) {\n packed = new Uint8Array(1 + bodyLen);\n packed[0] = TAG.ARRAY_BASE + len;\n let pos = 1;\n for (const part of parts) {\n packed.set(part, pos);\n pos += part.length;\n }\n } else {\n packed = new Uint8Array(2 + bodyLen);\n packed[0] = TAG.ARRAY_VARIABLE;\n let pos = 1;\n for (const part of parts) {\n packed.set(part, pos);\n pos += part.length;\n }\n packed[pos] = TAG.TERMINATOR;\n }\n } else if (typeof data === 'object') {\n const keys = Object.keys(data);\n const len = keys.length;\n const parts: Uint8Array[] = [];\n let bodyLen = 0;\n\n for (const k of keys) {\n const keyPacked = _pack(k, objectList);\n const valPacked = _pack((data as any)[k], objectList);\n parts.push(keyPacked, valPacked);\n bodyLen += keyPacked.length + valPacked.length;\n }\n\n const needsTerminator = len >= 0x0F;\n packed = new Uint8Array(1 + bodyLen + (needsTerminator ? 1 : 0));\n packed[0] = len <= 0x0F ? TAG.DICT_BASE + len : TAG.DICT_VARIABLE;\n\n let pos = 1;\n for (const part of parts) {\n packed.set(part, pos);\n pos += part.length;\n }\n\n if (needsTerminator) {\n packed[pos] = TAG.DICT_TERMINATOR;\n }\n } else {\n throw new TypeError(typeof data + '');\n }\n\n const idx = objectList.findIndex(v => v.length === packed!.length && v.every((x, i) => x === packed![i]));\n\n if (idx >= 0) {\n if (idx < 0x21) {\n packed = u8(TAG.REF_BASE + idx);\n } else if (idx <= 0xFF) {\n packed = new Uint8Array(2);\n packed[0] = TAG.REF_1BYTE;\n packed[1] = idx;\n } else if (idx <= 0xFFFF) {\n packed = new Uint8Array(3);\n packed[0] = TAG.REF_2BYTE;\n packed[1] = idx & 0xFF;\n packed[2] = (idx >> 8) & 0xFF;\n } else if (idx <= 0xFFFFFFFF) {\n packed = new Uint8Array(5);\n packed[0] = TAG.REF_4BYTE;\n packed[1] = idx & 0xFF;\n packed[2] = (idx >> 8) & 0xFF;\n packed[3] = (idx >> 16) & 0xFF;\n packed[4] = (idx >> 24) & 0xFF;\n } else {\n packed = new Uint8Array(9);\n packed[0] = TAG.REF_8BYTE;\n packed.set(uintToLEBytes(idx, 8), 1);\n }\n } else if (packed!.length > 1) {\n objectList.push(packed!);\n }\n\n return packed!;\n}\n\nfunction _unpackAt(data: Uint8Array, offset: number, objectList: any[]): UnpackResult {\n if (offset >= data.length) throw new TypeError('No data to unpack');\n\n const tag = data[offset];\n let addToObjectList = true;\n let value: any;\n let newOffset: number;\n\n // simple tokens\n if (tag === TAG.TRUE) {\n value = true;\n newOffset = offset + 1;\n } else if (tag === TAG.FALSE) {\n value = false;\n newOffset = offset + 1;\n } else if (tag === TAG.NULL) {\n value = null;\n newOffset = offset + 1;\n } else if (tag === TAG.UUID) {\n value = data.subarray(offset + 1, offset + 17);\n newOffset = offset + 17;\n } else if (tag === TAG.TIMESTAMP) {\n value = readLittleEndian(data, offset + 1, 8);\n newOffset = offset + 9;\n } else if (tag >= TAG.INT_BASE && tag <= TAG.INT_MAX_INLINE) {\n value = tag - TAG.INT_BASE;\n newOffset = offset + 1;\n } else if (tag === TAG.FLOAT32) {\n const view = new DataView(data.buffer, data.byteOffset + offset + 1, 4);\n value = view.getFloat32(0, true);\n newOffset = offset + 5;\n } else if (tag === TAG.FLOAT64) {\n const view = new DataView(data.buffer, data.byteOffset + offset + 1, 8);\n value = view.getFloat64(0, true);\n newOffset = offset + 9;\n } else if ((tag & 0xF0) === TAG.INT_1BYTE) {\n const noOfBytes = 1 << (tag & 0xF);\n const val = readLittleEndian(data, offset + 1, noOfBytes);\n value = sizedInteger(val, noOfBytes);\n newOffset = offset + 1 + noOfBytes;\n } else if (tag >= TAG.STR_BASE && tag <= TAG.STR_MAX_INLINE) {\n const length = tag - TAG.STR_BASE;\n value = textDecoder.decode(data.subarray(offset + 1, offset + 1 + length));\n newOffset = offset + 1 + length;\n } else if (tag >= TAG.STR_1BYTE_LEN && tag <= TAG.STR_4BYTE_LEN) {\n const lenBytes = tag & 0xF;\n const length = readLittleEndian(data, offset + 1, lenBytes);\n const start = offset + 1 + lenBytes;\n value = textDecoder.decode(data.subarray(start, start + length));\n newOffset = start + length;\n } else if (tag >= TAG.BYTES_BASE && tag <= TAG.BYTES_MAX_INLINE) {\n const length = tag - TAG.BYTES_BASE;\n value = data.subarray(offset + 1, offset + 1 + length);\n newOffset = offset + 1 + length;\n } else if (tag >= TAG.BYTES_1BYTE_LEN && tag <= TAG.BYTES_4BYTE_LEN) {\n const noOfBytes = 1 << ((tag & 0xF) - 1);\n const length = readLittleEndian(data, offset + 1, noOfBytes);\n const start = offset + 1 + noOfBytes;\n value = data.subarray(start, start + length);\n newOffset = start + length;\n } else if ((tag & 0xF0) === TAG.ARRAY_BASE) {\n const count = tag & 0xF;\n let pos = offset + 1;\n\n if (count === 0xF) {\n const arr: any[] = [];\n while (data[pos] !== TAG.TERMINATOR) {\n const result = _unpackAt(data, pos, objectList);\n arr.push(result.value);\n pos = result.offset;\n }\n pos++;\n value = arr;\n } else {\n const arr = new Array(count);\n for (let i = 0; i < count; i++) {\n const result = _unpackAt(data, pos, objectList);\n arr[i] = result.value;\n pos = result.offset;\n }\n value = arr;\n }\n\n newOffset = pos;\n addToObjectList = false;\n } else if ((tag & 0xF0) === TAG.DICT_BASE) {\n const count = tag & 0xF;\n const obj: Record<string, any> = {};\n let pos = offset + 1;\n\n if (count === 0xF) {\n while (data[pos] !== TAG.TERMINATOR) {\n const keyResult = _unpackAt(data, pos, objectList);\n const valResult = _unpackAt(data, keyResult.offset, objectList);\n obj[keyResult.value] = valResult.value;\n pos = valResult.offset;\n }\n pos++; // skip terminator\n } else {\n for (let i = 0; i < count; i++) {\n const keyResult = _unpackAt(data, pos, objectList);\n const valResult = _unpackAt(data, keyResult.offset, objectList);\n obj[keyResult.value] = valResult.value;\n pos = valResult.offset;\n }\n }\n\n value = obj;\n newOffset = pos;\n addToObjectList = false;\n } else if (tag >= TAG.REF_BASE && tag <= TAG.REF_MAX_INLINE) {\n const idx = tag - TAG.REF_BASE;\n\n if (idx >= objectList.length) {\n throw new TypeError(`Reference index ${idx} out of range`);\n }\n\n value = objectList[idx];\n newOffset = offset + 1;\n addToObjectList = false;\n } else if (tag >= TAG.REF_1BYTE && tag <= TAG.REF_8BYTE) {\n const len = tag - TAG.REF_MAX_INLINE;\n const uid = readLittleEndian(data, offset + 1, len);\n\n if (uid >= objectList.length) {\n throw new TypeError(`UID ${uid} out of range`);\n }\n\n value = objectList[uid];\n newOffset = offset + 1 + len;\n addToObjectList = false;\n } else {\n throw new TypeError(`Unknown tag 0x${tag.toString(16)}`);\n }\n\n if (addToObjectList) {\n objectList.push(value);\n }\n\n return {value, offset: newOffset};\n}\n","// EPOCH = new SimpleDateFormat(\"yyyy MM dd zzz\").parse(\"2001 01 01 GMT\").getTime();\n// ...but that's annoying in a static initializer because it can throw exceptions, ick.\n// So we just hardcode the correct value.\nexport const EPOCH = 978307200000;\nexport const HEADER_BINARY = 'bplist00';\nexport const HEADER_OPENSTEP_UTF8 = '// !$*UTF8*$!';\nexport var PlistFormat;\n(function (PlistFormat) {\n PlistFormat[PlistFormat[\"BINARY\"] = 0] = \"BINARY\";\n PlistFormat[PlistFormat[\"XML\"] = 1] = \"XML\";\n PlistFormat[PlistFormat[\"OPENSTEP\"] = 2] = \"OPENSTEP\";\n})(PlistFormat || (PlistFormat = {}));\n","import { HEADER_BINARY, EPOCH } from '@plist/common';\nconst maxObjectSize = 100 * 1000 * 1000; // 100Meg\nconst maxObjectCount = 32768;\nconst DECODER_UTF8 = new TextDecoder('utf-8');\nconst DECODER_UTF16 = new TextDecoder('utf-16');\nfunction readDouble(buffer, start = 0) {\n return new DataView(buffer).getFloat64(start, false);\n}\nfunction readFloat(buffer, start = 0) {\n return new DataView(buffer).getFloat32(start, false);\n}\nfunction readUInt8(buffer, start = 0) {\n return new DataView(buffer).getUint8(start);\n}\nfunction readUInt16(buffer, start = 0) {\n return new DataView(buffer).getUint16(start, false);\n}\nfunction readUInt32(buffer, start = 0) {\n return new DataView(buffer).getUint32(start, false);\n}\nfunction readUInt64(buffer, start = 0) {\n return new DataView(buffer).getBigUint64(start, false);\n}\nfunction readUInt(buffer) {\n switch (buffer.byteLength) {\n case 1:\n return readUInt8(buffer);\n case 2:\n return readUInt16(buffer);\n case 4:\n return readUInt32(buffer);\n case 8:\n return readUInt64(buffer);\n case 16:\n // No support for 128-bit numbers.\n return readUInt64(buffer, 8);\n }\n throw new Error(`Invalid unsigned int length: ${buffer.byteLength}`);\n}\nfunction readInt8(buffer, start = 0) {\n return new DataView(buffer).getInt8(start);\n}\nfunction readInt16(buffer, start = 0) {\n return new DataView(buffer).getInt16(start, false);\n}\nfunction readInt32(buffer, start = 0) {\n return new DataView(buffer).getInt32(start, false);\n}\nfunction readInt64(buffer, start = 0) {\n return new DataView(buffer).getBigInt64(start, false);\n}\nfunction readInt(buffer) {\n switch (buffer.byteLength) {\n case 1:\n return readInt8(buffer);\n case 2:\n return readInt16(buffer);\n case 4:\n return readInt32(buffer);\n case 8:\n return readInt64(buffer);\n case 16:\n // No support for 128-bit numbers.\n // Also, we assume unsigned here.\n return readUInt64(buffer, 8);\n }\n throw new Error(`Invalid int length: ${buffer.byteLength}`);\n}\nfunction swapBytes(buffer) {\n const array = new Uint8Array(buffer);\n for (let i = 0; i < array.length; i += 2) {\n const a = array[i];\n array[i] = array[i + 1];\n array[i + 1] = a;\n }\n return array.buffer;\n}\nexport const parse = (buffer) => {\n // check header\n const headerBytes = buffer.slice(0, HEADER_BINARY.length);\n if (DECODER_UTF8.decode(headerBytes) !== HEADER_BINARY) {\n throw new Error(`Invalid binary plist. Expected '${HEADER_BINARY}' at offset 0.`);\n }\n // Handle trailer, last 32 bytes of the file\n const trailer = buffer.slice(buffer.byteLength - 32, buffer.byteLength);\n // 6 null bytes (index 0 to 5)\n const offsetSize = readUInt8(trailer, 6);\n const objectRefSize = readUInt8(trailer, 7);\n const numObjects = Number(readUInt64(trailer, 8));\n const topObject = Number(readUInt64(trailer, 16));\n const offsetTableOffset = Number(readUInt64(trailer, 24));\n if (numObjects > maxObjectCount) {\n throw new Error('maxObjectCount exceeded');\n }\n // Handle offset table\n const offsetTable = [];\n for (let i = 0; i < numObjects; i++) {\n const offsetBytes = buffer.slice(offsetTableOffset + i * offsetSize, offsetTableOffset + (i + 1) * offsetSize);\n offsetTable[i] = Number(readUInt(offsetBytes));\n }\n // Parses an object inside the currently parsed binary property list.\n // For the format specification check\n // https://www.opensource.apple.com/source/CF/CF-635/CFBinaryPList.c\n // (Apple's binary property list parser implementation)\n function parseObject(tableOffset) {\n const offset = offsetTable[tableOffset];\n const type = readUInt8(buffer, offset);\n const objType = (type & 0xf0) >> 4; // First 4 bits\n const objInfo = type & 0x0f; // Second 4 bits\n switch (objType) {\n case 0x0:\n return parseSimple();\n case 0x1:\n return parseInteger();\n case 0x8:\n return parseUID();\n case 0x2:\n return parseReal();\n case 0x3:\n return parseDate();\n case 0x4:\n return parseData();\n case 0x5: // ASCII\n return parsePlistString();\n case 0x6: // UTF-16\n return parsePlistString(true);\n case 0xa:\n return parseArray();\n case 0xd:\n return parseDictionary();\n default:\n throw new Error('Unhandled type 0x' + objType.toString(16));\n }\n function parseSimple() {\n //Simple\n switch (objInfo) {\n case 0x0: // null\n return null;\n case 0x8: // false\n return false;\n case 0x9: // true\n return true;\n case 0xf: // filler byte\n return null;\n default:\n throw new Error('Unhandled simple type 0x' + objType.toString(16));\n }\n }\n function parseInteger() {\n const length = Math.pow(2, objInfo);\n if (length < maxObjectSize) {\n const data = buffer.slice(offset + 1, offset + 1 + length);\n return readInt(data);\n }\n throw new Error('Too little heap space available! Wanted to read ' +\n length +\n ' bytes, but only ' +\n maxObjectSize +\n ' are available.');\n }\n function parseUID() {\n const length = objInfo + 1;\n if (length < maxObjectSize) {\n return {\n CF$UID: readUInt(buffer.slice(offset + 1, offset + 1 + length)),\n };\n }\n throw new Error('Too little heap space available! Wanted to read ' +\n length +\n ' bytes, but only ' +\n maxObjectSize +\n ' are available.');\n }\n function parseReal() {\n const length = Math.pow(2, objInfo);\n if (length < maxObjectSize) {\n const realBuffer = buffer.slice(offset + 1, offset + 1 + length);\n if (length === 4) {\n return readFloat(realBuffer);\n }\n else if (length === 8) {\n return readDouble(realBuffer);\n }\n throw new Error(`Invalid real length: ${length}`);\n }\n else {\n throw new Error('Too little heap space available! Wanted to read ' +\n length +\n ' bytes, but only ' +\n maxObjectSize +\n ' are available.');\n }\n }\n function parseDate() {\n if (objInfo != 0x3) {\n console.error('Unknown date type :' + objInfo + '. Parsing anyway...');\n }\n const dateBuffer = buffer.slice(offset + 1, offset + 9);\n return new Date(EPOCH + 1000 * readDouble(dateBuffer));\n }\n function parseData() {\n let dataoffset = 1;\n let length = objInfo;\n if (objInfo == 0xf) {\n const int_type = readInt8(buffer, offset + 1);\n const intType = (int_type & 0xf0) / 0x10;\n if (intType != 0x1) {\n console.error('0x4: UNEXPECTED LENGTH-INT TYPE! ' + intType);\n }\n const intInfo = int_type & 0x0f;\n const intLength = Math.pow(2, intInfo);\n dataoffset = 2 + intLength;\n length = Number(readUInt(buffer.slice(offset + 2, offset + 2 + intLength)));\n }\n if (length < maxObjectSize) {\n return buffer.slice(offset + dataoffset, offset + dataoffset + Number(length));\n }\n throw new Error('Too little heap space available! Wanted to read ' +\n length +\n ' bytes, but only ' +\n maxObjectSize +\n ' are available.');\n }\n function parsePlistString(isUtf16 = false) {\n let length = objInfo;\n let stroffset = 1;\n if (objInfo == 0xf) {\n const int_type = readUInt8(buffer, offset + 1);\n const intType = (int_type & 0xf0) / 0x10;\n if (intType != 0x1) {\n console.error('UNEXPECTED LENGTH-INT TYPE! ' + intType);\n }\n const intInfo = int_type & 0x0f;\n const intLength = Math.pow(2, intInfo);\n stroffset = 2 + intLength;\n length = Number(readUInt(buffer.slice(offset + 2, offset + 2 + intLength)));\n }\n // length is String length -> to get byte length multiply by 2, as 1 character takes 2 bytes in UTF-16\n length *= isUtf16 ? 2 : 1;\n if (length < maxObjectSize) {\n let plistString = buffer.slice(offset + stroffset, offset + stroffset + length);\n if (isUtf16) {\n plistString = swapBytes(plistString);\n return DECODER_UTF16.decode(plistString);\n }\n else {\n return DECODER_UTF8.decode(plistString);\n }\n }\n throw new Error('Too little heap space available! Wanted to read ' +\n length +\n ' bytes, but only ' +\n maxObjectSize +\n ' are available.');\n }\n function parseArray() {\n let length = objInfo;\n let arrayoffset = 1;\n if (objInfo == 0xf) {\n const int_type = readUInt8(buffer, offset + 1);\n const intType = (int_type & 0xf0) / 0x10;\n if (intType != 0x1) {\n console.error('0xa: UNEXPECTED LENGTH-INT TYPE! ' + intType);\n }\n const intInfo = int_type & 0x0f;\n const intLength = Math.pow(2, intInfo);\n arrayoffset = 2 + intLength;\n length = Number(readUInt(buffer.slice(offset + 2, offset + 2 + intLength)));\n }\n if (length * objectRefSize > maxObjectSize) {\n throw new Error('Too little heap space available!');\n }\n const array = [];\n for (let i = 0; i < length; i++) {\n const objRef = Number(readUInt(buffer.slice(offset + arrayoffset + i * objectRefSize, offset + arrayoffset + (i + 1) * objectRefSize)));\n array[i] = parseObject(objRef);\n }\n return array;\n }\n function parseDictionary() {\n let length = objInfo;\n let dictoffset = 1;\n if (objInfo == 0xf) {\n const int_type = readUInt8(buffer, offset + 1);\n const intType = (int_type & 0xf0) / 0x10;\n if (intType != 0x1) {\n console.error('0xD: UNEXPECTED LENGTH-INT TYPE! ' + intType);\n }\n const intInfo = int_type & 0x0f;\n const intLength = Math.pow(2, intInfo);\n dictoffset = 2 + intLength;\n length = Number(readUInt(buffer.slice(offset + 2, offset + 2 + intLength)));\n }\n if (length * 2 * objectRefSize > maxObjectSize) {\n throw new Error('Too little heap space available!');\n }\n const dict = {};\n for (let i = 0; i < length; i++) {\n const keyRef = Number(readUInt(buffer.slice(offset + dictoffset + i * objectRefSize, offset + dictoffset + (i + 1) * objectRefSize)));\n const valRef = Number(readUInt(buffer.slice(offset + dictoffset + length * objectRefSize + i * objectRefSize, offset +\n dictoffset +\n length * objectRefSize +\n (i + 1) * objectRefSize)));\n const key = parseObject(keyRef);\n if (typeof key !== 'string') {\n throw new Error('Invalid key type.');\n }\n if (key === '__proto__') {\n throw new Error('Attempted prototype pollution');\n }\n const val = parseObject(valRef);\n dict[key] = val;\n }\n return dict;\n }\n }\n return parseObject(topObject);\n};\n","import { EPOCH, HEADER_BINARY } from '@plist/common';\nconst encoder = new TextEncoder();\nconst nullBytes = new Uint8Array([0, 0, 0, 0, 0, 0]);\nconst fromHexString = (hexString) => Uint8Array.from(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16)));\nconst isUID = (value) => !!value &&\n typeof value === 'object' &&\n Object.keys(value).length == 1 &&\n typeof value.CF$UID === 'number';\nconst toUTF16 = (string) => {\n const buf = new ArrayBuffer(string.length * 2);\n const bufView = new Uint16Array(buf);\n for (let i = 0, strLen = string.length; i < strLen; i++) {\n bufView[i] = string.charCodeAt(i);\n }\n return new Uint8Array(buf);\n};\nconst concat = (first, second) => {\n const third = new Uint8Array(first.length + second.length);\n third.set(first);\n third.set(second, first.length);\n return third;\n};\nconst writeUInt = (buffer, int, size) => {\n const output = new Uint8Array(buffer.length + size);\n const dataView = new DataView(output.buffer);\n output.set(buffer);\n switch (size) {\n case 1:\n dataView.setUint8(buffer.length, Number(int));\n break;\n case 2:\n dataView.setUint16(buffer.length, Number(int), false);\n break;\n case 4:\n dataView.setUint32(buffer.length, Number(int), false);\n break;\n case 8:\n dataView.setBigUint64(buffer.length, BigInt(int), false);\n break;\n default:\n throw new Error('Unsupported int size');\n }\n return output;\n};\nconst writeInt = (buffer, int, size) => {\n const output = new Uint8Array(buffer.length + size);\n const dataView = new DataView(output.buffer);\n output.set(buffer);\n switch (size) {\n case 1:\n dataView.setInt8(buffer.length, Number(int));\n break;\n case 2:\n dataView.setInt16(buffer.length, Number(int), false);\n break;\n case 4:\n dataView.setInt32(buffer.length, Number(int), false);\n break;\n case 8:\n dataView.setBigInt64(buffer.length, BigInt(int), false);\n break;\n default:\n throw new Error('Unsupported int size');\n }\n return output;\n};\nconst writeDouble = (buffer, double) => {\n const output = new Uint8Array(buffer.length + 8);\n const dataView = new DataView(output.buffer);\n output.set(buffer);\n dataView.setFloat64(buffer.length, double);\n return output;\n};\nexport const serialize = (value) => {\n let buffer = encoder.encode(HEADER_BINARY);\n if (value instanceof Array && value.length === 1) {\n value = value[0];\n }\n let entries = toEntries(value);\n const idSizeInBytes = computeIdSizeInBytes(entries.length);\n const offsets = [];\n let offsetSizeInBytes;\n let offsetTableOffset;\n updateEntryIds();\n entries.forEach((entry, entryIdx) => {\n offsets[entryIdx] = buffer.byteLength;\n if (typeof entry === 'undefined' || entry === null) {\n buffer = writeUInt(buffer, 0x00, 1);\n }\n else {\n write(entry);\n }\n });\n writeOffsetTable();\n writeTrailer();\n return buffer.buffer;\n function updateEntryIds() {\n const strings = {};\n let entryId = 0;\n entries.forEach(entry => {\n if (entry.id) {\n return;\n }\n if (typeof entry.value === 'string') {\n if (strings.hasOwnProperty(entry.value)) {\n entry.type = 'stringref';\n entry.id = strings[entry.value];\n }\n else {\n strings[entry.value] = entry.id = entryId++;\n }\n }\n else {\n entry.id = entryId++;\n }\n });\n entries = entries.filter(entry => {\n return entry.type !== 'stringref';\n });\n }\n function writeTrailer() {\n buffer = concat(buffer, nullBytes);\n buffer = concat(buffer, new Uint8Array([offsetSizeInBytes, idSizeInBytes]));\n buffer = writeUInt(buffer, BigInt(entries.length), 8);\n buffer = writeUInt(buffer, BigInt('0'), 8);\n buffer = writeUInt(buffer, BigInt(offsetTableOffset), 8);\n }\n function writeOffsetTable() {\n offsetTableOffset = buffer.byteLength;\n offsetSizeInBytes = computeOffsetSizeInBytes(offsetTableOffset);\n offsets.forEach(offset => {\n buffer = writeUInt(buffer, offset, offsetSizeInBytes);\n });\n }\n function write(entry) {\n if (entry.type === 'primitive') {\n const value = entry.value;\n switch (typeof value) {\n case 'number':\n case 'bigint':\n writeNumber(value);\n break;\n case 'string':\n writeString(value);\n break;\n case 'boolean':\n writeBoolean(value);\n break;\n }\n if (value instanceof Date) {\n writeDate(value);\n }\n else if (value instanceof ArrayBuffer) {\n writeData(value);\n }\n else if (isUID(value)) {\n writeUID(value.CF$UID);\n }\n return;\n }\n switch (entry.type) {\n case 'dict':\n writeDict(entry);\n break;\n case 'array':\n writeArray(entry);\n break;\n default:\n throw new Error('unhandled entry type: ' + entry.type);\n }\n }\n function writeDate(value) {\n buffer = writeUInt(buffer, 0x33, 1);\n const date = (value.getTime() - EPOCH) / 1000;\n buffer = writeDouble(buffer, date);\n }\n function writeDict(entry) {\n writeIntHeader(0xd, entry.entryKeys.length);\n entry.entryKeys.forEach((entry) => {\n writeID(entry.id);\n });\n entry.entryValues.forEach((entry) => {\n writeID(entry.id);\n });\n }\n function writeNumber(value) {\n if (typeof value === 'bigint') {\n const width = 16;\n const hex = value.toString(16);\n const buf = fromHexString(hex.padStart(width * 2, '0').slice(0, width * 2));\n buffer = writeUInt(buffer, 0x14, 1);\n buffer = concat(buffer, buf);\n }\n else {\n if (Number.isInteger(value)) {\n if (value < 0) {\n buffer = writeUInt(buffer, 0x13, 1);\n buffer = writeInt(buffer, value, 8);\n }\n else if (value <= 0xff) {\n buffer = writeUInt(buffer, 0x10, 1);\n buffer = writeUInt(buffer, value, 1);\n }\n else if (value <= 0xffff) {\n buffer = writeUInt(buffer, 0x11, 1);\n buffer = writeUInt(buffer, value, 2);\n }\n else if (value <= 0xffffffff) {\n buffer = writeUInt(buffer, 0x12, 1);\n buffer = writeUInt(buffer, value, 4);\n }\n else {\n buffer = writeUInt(buffer, 0x13, 1);\n buffer = writeUInt(buffer, value, 8);\n }\n }\n else {\n buffer = writeUInt(buffer, 0x23, 1);\n buffer = writeDouble(buffer, value);\n }\n }\n }\n function writeUID(uid) {\n writeIntHeader(0x8, 0x0);\n writeID(uid);\n }\n function writeArray(entry) {\n writeIntHeader(0xa, entry.entries.length);\n entry.entries.forEach(e => {\n writeID(e.id);\n });\n }\n function writeBoolean(value) {\n buffer = writeUInt(buffer, value ? 0x09 : 0x08, 1);\n }\n function writeString(value) {\n if (mustBeUtf16(value)) {\n const utf16 = toUTF16(value);\n writeIntHeader(0x6, utf16.length / 2);\n // needs to be big endian so swap the bytes\n for (let i = 0; i < utf16.length; i += 2) {\n const t = utf16[i + 0];\n utf16[i + 0] = utf16[i + 1];\n utf16[i + 1] = t;\n }\n buffer = concat(buffer, utf16);\n }\n else {\n const utf8 = encoder.encode(value);\n writeIntHeader(0x5, utf8.length);\n buffer = concat(buffer, utf8);\n }\n }\n function writeData(data) {\n writeIntHeader(0x4, data.byteLength);\n buffer = concat(buffer, new Uint8Array(data));\n }\n function writeIntHeader(kind, value) {\n if (value < 15) {\n buffer = writeUInt(buffer, (kind << 4) + value, 1);\n }\n else {\n buffer = writeUInt(buffer, (kind << 4) + 15, 1);\n writeNumber(value);\n }\n }\n function writeID(id) {\n buffer = writeUInt(buffer, id, idSizeInBytes);\n }\n function mustBeUtf16(string) {\n return encoder.encode(string).byteLength != string.length;\n }\n};\nconst typeofPrimitive = ['string', 'number', 'boolean', 'bigint'];\nfunction toEntries(value) {\n if (typeofPrimitive.includes(typeof value) ||\n value instanceof ArrayBuffer ||\n value instanceof Date ||\n isUID(value)) {\n return [\n {\n type: 'primitive',\n value,\n },\n ];\n }\n if (value != null && typeof value === 'object') {\n return Array.isArray(value)\n ? toEntriesArray(value)\n : toEntriesObject(value);\n }\n throw new Error('unhandled entry: ' + value);\n}\nfunction toEntriesArray(array) {\n const entries = array.map(toEntries);\n return [\n {\n type: 'array',\n value: undefined,\n entries: entries.map(entries => entries[0]),\n },\n ...entries.flat(),\n ];\n}\nfunction toEntriesObject(dict) {\n const entryKeys = Object.keys(dict).map(toEntries).flat(1);\n const entryValues = Object.values(dict).map(toEntries);\n return [\n {\n type: 'dict',\n value: undefined,\n entryKeys,\n entryValues: entryValues.map(entries => entries[0]),\n },\n ...entryKeys,\n ...entryValues.flat(),\n ];\n}\nfunction computeOffsetSizeInBytes(maxOffset) {\n if (maxOffset < 256) {\n return 1;\n }\n if (maxOffset < 65536) {\n return 2;\n }\n if (maxOffset < 4294967296) {\n return 4;\n }\n return 8;\n}\nfunction computeIdSizeInBytes(numberOfIds) {\n if (numberOfIds < 256) {\n return 1;\n }\n if (numberOfIds < 65536) {\n return 2;\n }\n return 4;\n}\n","export { parse } from '@plist/binary.parse';\nexport { serialize } from '@plist/binary.serialize';\n","export type Method =\n | 'GET'\n | 'OPTIONS'\n | 'POST'\n | 'PUT'\n | 'GET_PARAMETER'\n | 'SET_PARAMETER'\n | 'ANNOUNCE'\n | 'FLUSH'\n | 'RECORD'\n | 'SETUP'\n | 'TEARDOWN';\n\nexport function makeHeader(method: Method, path: string, headers: HeadersInit, cseq: number, activeRemote: string, dacpId: string, sessionId: string): string {\n const lines = [];\n lines.push(`${method} ${path} RTSP/1.0`);\n lines.push(`CSeq: ${cseq}`);\n lines.push(`Active-Remote: ${activeRemote}`);\n lines.push(`Client-Instance: ${dacpId}`);\n lines.push(`DACP-ID: ${dacpId}`);\n lines.push('User-Agent: AirPlay/320.20');\n lines.push('X-Apple-ProtocolVersion: 1');\n lines.push(`X-Apple-Session-ID: ${sessionId}`);\n lines.push('X-ProtocolVersion: 1');\n\n for (const [name, value] of Object.entries(headers)) {\n lines.push(`${name}: ${value}`);\n }\n\n lines.push('');\n lines.push('');\n\n return lines.join('\\r\\n');\n}\n\nexport function makeRequest(buffer: Buffer): HttpRequest | null {\n const headerLength = buffer.indexOf('\\r\\n\\r\\n');\n const {headers, method, path} = parseRequestHeaders(buffer.subarray(0, headerLength));\n\n let contentLength = headers['Content-Length'] ? Number(headers['Content-Length']) : 0;\n\n if (isNaN(contentLength)) {\n contentLength = 0;\n }\n\n const requestLength = headerLength + 4 + contentLength;\n\n if (buffer.byteLength < requestLength) {\n return null;\n }\n\n const body = buffer.subarray(headerLength + 4, requestLength);\n\n return {\n headers,\n method,\n path,\n body,\n requestLength\n };\n}\n\nexport function makeResponse(buffer: Buffer): HttpResponse | null {\n const headerLength = buffer.indexOf('\\r\\n\\r\\n');\n const {headers, status, statusText} = parseResponseHeaders(buffer.subarray(0, headerLength));\n\n let contentLength = headers['Content-Length'] ? Number(headers['Content-Length']) : 0;\n\n if (isNaN(contentLength)) {\n contentLength = 0;\n }\n\n const responseLength = headerLength + 4 + contentLength;\n\n // not enough data yet\n if (buffer.byteLength < responseLength) {\n return null;\n }\n\n const body = buffer.subarray(headerLength + 4, responseLength);\n const response = new Response(body as unknown as ReadableStream, {\n status,\n statusText,\n headers\n });\n\n return {\n response,\n responseLength\n };\n}\n\nfunction parseHeaders(lines: string[]): Record<string, string> {\n const headers: Record<string, string> = {};\n\n for (let i = 0; i < lines.length; i++) {\n const colon = lines[i].indexOf(':');\n\n if (colon <= 0) {\n continue;\n }\n\n const name = lines[i].substring(0, colon).trim();\n headers[name] = lines[i].substring(colon + 1).trim();\n }\n\n return headers;\n}\n\nfunction parseRequestHeaders(buffer: Buffer): HttpRequestHeader {\n const lines = buffer.toString('utf8').split('\\r\\n');\n\n const rawRequest = lines[0].match(/^(\\S+)\\s+(\\S+)\\s+RTSP\\/1\\.0$/);\n const method = rawRequest[1] as Method;\n const path = rawRequest[2];\n const headers: Record<string, string> = parseHeaders(lines.slice(1));\n\n return {\n headers,\n method,\n path\n };\n}\n\nfunction parseResponseHeaders(buffer: Buffer): HttpResponseHeader {\n const lines = buffer.toString('utf8').split('\\r\\n');\n\n const rawStatus = lines[0].match(/(HTTP|RTSP)\\/[\\d.]+\\s+(\\d+)\\s+(.+)/);\n const status = Number(rawStatus[2]);\n const statusText = rawStatus[3];\n const headers: Record<string, string> = parseHeaders(lines.slice(1));\n\n return {\n headers,\n status,\n statusText\n };\n}\n\ntype HttpRequestHeader = {\n readonly headers: Record<string, string>;\n readonly method: Method;\n readonly path: string;\n};\n\ntype HttpResponseHeader = {\n readonly headers: Record<string, string>;\n readonly status: number;\n readonly statusText: string;\n};\n\ntype HttpRequest = {\n readonly headers: Record<string, string>;\n readonly method: Method;\n readonly path: string;\n readonly body: Buffer;\n readonly requestLength: number;\n};\n\ntype HttpResponse = {\n readonly response: Response;\n readonly responseLength: number;\n};\n","export const Flags = {\n TransientPairing: 0x10\n} as const;\n\nexport const ErrorCode = {\n Unknown: 0x01,\n Authentication: 0x02,\n BackOff: 0x03,\n MaxPeers: 0x04,\n MaxTries: 0x05,\n Unavailable: 0x06,\n Busy: 0x07\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 const errorCodeEntries = Object.entries(ErrorCode) as [string, number][];\n const errorCode = errorCodeEntries.find(([_, code]) => code === data.get(Value.Error).readUint8());\n\n if (!errorCode) {\n throw new Error(`Device returned an unknown error code: ${data.get(Value.Error).readUint8()}`);\n }\n\n throw new Error(`Device returned an error code: ${errorCode[0]}`);\n }\n\n throw new Error('Invalid response');\n}\n\nexport function encode(entries: [number, number | Buffer | Uint8Array][]): Buffer {\n let totalSize = 0;\n for (const [, valueRaw] of entries) {\n const len = typeof valueRaw === 'number' ? 1 : valueRaw.length;\n const chunks = Math.max(1, Math.ceil(len / 255));\n totalSize += chunks * 2 + len;\n }\n\n const result = Buffer.allocUnsafe(totalSize);\n let pos = 0;\n\n for (const [type, valueRaw] of entries) {\n let value: Buffer | Uint8Array;\n let valueLen: number;\n\n if (typeof valueRaw === 'number') {\n value = Buffer.allocUnsafe(1);\n value[0] = valueRaw;\n valueLen = 1;\n } else {\n value = valueRaw;\n valueLen = value.length;\n }\n\n let offset = 0;\n\n do {\n const len = Math.min(valueLen - offset, 255);\n result[pos++] = type;\n result[pos++] = len;\n\n if (len > 0) {\n if (value instanceof Buffer) {\n value.copy(result, pos, offset, offset + len);\n } else {\n result.set(value.subarray(offset, offset + len), pos);\n }\n pos += len;\n }\n\n offset += len;\n } while (offset < valueLen);\n }\n\n return result;\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 existing = map.get(type);\n if (existing) {\n const newBuf = Buffer.allocUnsafe(existing.length + len);\n existing.copy(newBuf, 0);\n buf.copy(newBuf, existing.length, i, i + len);\n map.set(type, newBuf);\n } else {\n map.set(type, buf.subarray(i, i + len) as Buffer);\n }\n\n i += len;\n }\n\n return map;\n}\n"],"x_google_ignoreList":[3,4,5],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@basmilius/apple-encoding",
3
3
  "description": "Common encoding utilities for Apple Protocols.",
4
- "version": "0.7.2",
4
+ "version": "0.8.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": {
@@ -26,22 +26,23 @@
26
26
  "provenance": false
27
27
  },
28
28
  "scripts": {
29
- "build": "tsgo && bun -b build.ts"
29
+ "build": "tsgo --noEmit && tsdown",
30
+ "dev": "tsdown --watch"
30
31
  },
31
- "main": "./dist/index.js",
32
- "types": "./dist/index.d.ts",
33
- "typings": "./dist/index.d.ts",
32
+ "main": "./dist/index.mjs",
33
+ "types": "./dist/index.d.mts",
34
+ "typings": "./dist/index.d.mts",
34
35
  "sideEffects": false,
35
36
  "exports": {
36
37
  ".": {
37
- "types": "./dist/index.d.ts",
38
- "default": "./dist/index.js"
38
+ "types": "./dist/index.d.mts",
39
+ "default": "./dist/index.mjs"
39
40
  }
40
41
  },
41
42
  "devDependencies": {
42
- "@basmilius/tools": "^2.25.0",
43
43
  "@plist/binary.parse": "^1.1.0",
44
44
  "@plist/binary.serialize": "^1.1.0",
45
- "@types/bun": "^1.3.9"
45
+ "@types/bun": "^1.3.9",
46
+ "tsdown": "^0.21.0-beta.2"
46
47
  }
47
48
  }