@basmilius/apple-common 0.4.2 → 0.5.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,10 @@
1
+ import { DiscoveryResult } from "node-dns-sd";
2
+ export declare class Discovery {
3
+ #private;
4
+ constructor(service: string);
5
+ find(): Promise<DiscoveryResult[]>;
6
+ findUntil(id: string, tries?: number, timeout?: number): Promise<DiscoveryResult>;
7
+ static airplay(): Discovery;
8
+ static companionLink(): Discovery;
9
+ static raop(): Discovery;
10
+ }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { v4 as uuid } from "uuid";
2
2
  export { Chacha20, Curve25519, hkdf } from "./crypto";
3
- export { type DiscoveryResult, Discovery } from "./discovery";
3
+ export { Discovery } from "./discovery";
4
4
  export { getLocalIP, getMacAddress } from "./net";
5
5
  export { prompt, waitFor, cli } from "./cli";
6
6
  export { Connection, EncryptionAwareConnection, EncryptionState } from "./connection";
@@ -11,4 +11,4 @@ export { type Logger, type Reporter, reporter } from "./reporter";
11
11
  export { ENCRYPTION } from "./symbols";
12
12
  export { TimingServer } from "./timing";
13
13
  export { randomInt32, randomInt64, uint16ToBE, uint53ToLE } from "./utils";
14
- export type { ConnectionState, EventMap } from "./types";
14
+ export type { ConnectionState, DiscoveryResult, EventMap } from "./types";
package/dist/index.js CHANGED
@@ -805,7 +805,7 @@ import { hkdfSync } from "node:crypto";
805
805
  function hkdf_default(options) {
806
806
  return Buffer.from(hkdfSync(options.hash, options.key, options.salt, options.info, options.length));
807
807
  }
808
- // src/discovery/discovery.ts
808
+ // src/discovery.ts
809
809
  import mdns from "node-dns-sd";
810
810
 
811
811
  // src/cli.ts
@@ -829,27 +829,32 @@ var AIRPLAY_SERVICE = "_airplay._tcp.local";
829
829
  var COMPANION_LINK_SERVICE = "_companion-link._tcp.local";
830
830
  var RAOP_SERVICE = "_raop._tcp.local";
831
831
 
832
- // src/discovery/discovery.ts
832
+ // src/discovery.ts
833
833
  class Discovery {
834
834
  #service;
835
835
  constructor(service) {
836
836
  this.#service = service;
837
837
  }
838
838
  async find() {
839
- return await mdns.discover({
839
+ const results = await mdns.discover({
840
840
  name: this.#service
841
841
  });
842
+ return results.map((result) => ({
843
+ id: generateId(result) ?? result.fqdn,
844
+ txt: getTxt(result),
845
+ ...result
846
+ }));
842
847
  }
843
- async findUntil(fqdn, tries = 10, timeout = 1000) {
848
+ async findUntil(id, tries = 10, timeout = 1000) {
844
849
  while (tries > 0) {
845
850
  const devices = await this.find();
846
- const device = devices.find((device2) => device2.fqdn === fqdn);
851
+ const device = devices.find((device2) => device2.id === id);
847
852
  if (device) {
848
853
  return device;
849
854
  }
850
855
  console.log();
851
856
  console.log(`Device not found, retrying in ${timeout}ms...`);
852
- console.log(devices.map((d) => ` ● ${d.fqdn}`).join(`
857
+ console.log(devices.map((d) => ` ● ${d.id}`).join(`
853
858
  `));
854
859
  tries--;
855
860
  if (tries === 0) {
@@ -868,6 +873,49 @@ class Discovery {
868
873
  return new Discovery(RAOP_SERVICE);
869
874
  }
870
875
  }
876
+ function generateId(result) {
877
+ if (!result?.packet) {
878
+ return null;
879
+ }
880
+ const { answers = [], additionals = [] } = result.packet;
881
+ const allRecords = [...answers, ...additionals];
882
+ const srvRecord = allRecords.find((record) => record.type === "SRV");
883
+ if (srvRecord?.rdata?.target) {
884
+ return srvRecord.rdata.target;
885
+ }
886
+ if (result.address) {
887
+ const addressRecord = allRecords.find((record) => (record.type === "A" || record.type === "AAAA") && record.rdata === result.address);
888
+ if (addressRecord?.name) {
889
+ return addressRecord.name;
890
+ }
891
+ }
892
+ const aRecord = allRecords.find((record) => record.type === "A");
893
+ if (aRecord?.name) {
894
+ return aRecord.name;
895
+ }
896
+ if (result.modelName) {
897
+ const hostname = result.modelName.replace(/\s+/g, "-").replace(/[^a-zA-Z0-9-]/g, "");
898
+ return `${hostname}.local`;
899
+ }
900
+ return null;
901
+ }
902
+ function getTxt(result) {
903
+ if (!result.packet) {
904
+ return {};
905
+ }
906
+ const { answers = [], additionals = [] } = result.packet;
907
+ const records = [
908
+ ...answers,
909
+ ...additionals
910
+ ];
911
+ const txt = {};
912
+ for (const record of records) {
913
+ if (record.type === "TXT" && record.rdata) {
914
+ Object.assign(txt, record.rdata);
915
+ }
916
+ }
917
+ return txt;
918
+ }
871
919
  // src/net/getLocalIP.ts
872
920
  import { networkInterfaces } from "node:os";
873
921
  function getLocalIP_default() {
@@ -1165,362 +1213,6 @@ class EncryptionState {
1165
1213
  this.writeKey = writeKey;
1166
1214
  }
1167
1215
  }
1168
- // ../../node_modules/lodash-es/_freeGlobal.js
1169
- var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
1170
- var _freeGlobal_default = freeGlobal;
1171
-
1172
- // ../../node_modules/lodash-es/_root.js
1173
- var freeSelf = typeof self == "object" && self && self.Object === Object && self;
1174
- var root = _freeGlobal_default || freeSelf || Function("return this")();
1175
- var _root_default = root;
1176
-
1177
- // ../../node_modules/lodash-es/_Symbol.js
1178
- var Symbol2 = _root_default.Symbol;
1179
- var _Symbol_default = Symbol2;
1180
-
1181
- // ../../node_modules/lodash-es/_getRawTag.js
1182
- var objectProto = Object.prototype;
1183
- var hasOwnProperty = objectProto.hasOwnProperty;
1184
- var nativeObjectToString = objectProto.toString;
1185
- var symToStringTag = _Symbol_default ? _Symbol_default.toStringTag : undefined;
1186
- function getRawTag(value) {
1187
- var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
1188
- try {
1189
- value[symToStringTag] = undefined;
1190
- var unmasked = true;
1191
- } catch (e) {}
1192
- var result = nativeObjectToString.call(value);
1193
- if (unmasked) {
1194
- if (isOwn) {
1195
- value[symToStringTag] = tag;
1196
- } else {
1197
- delete value[symToStringTag];
1198
- }
1199
- }
1200
- return result;
1201
- }
1202
- var _getRawTag_default = getRawTag;
1203
-
1204
- // ../../node_modules/lodash-es/_objectToString.js
1205
- var objectProto2 = Object.prototype;
1206
- var nativeObjectToString2 = objectProto2.toString;
1207
- function objectToString(value) {
1208
- return nativeObjectToString2.call(value);
1209
- }
1210
- var _objectToString_default = objectToString;
1211
-
1212
- // ../../node_modules/lodash-es/_baseGetTag.js
1213
- var nullTag = "[object Null]";
1214
- var undefinedTag = "[object Undefined]";
1215
- var symToStringTag2 = _Symbol_default ? _Symbol_default.toStringTag : undefined;
1216
- function baseGetTag(value) {
1217
- if (value == null) {
1218
- return value === undefined ? undefinedTag : nullTag;
1219
- }
1220
- return symToStringTag2 && symToStringTag2 in Object(value) ? _getRawTag_default(value) : _objectToString_default(value);
1221
- }
1222
- var _baseGetTag_default = baseGetTag;
1223
-
1224
- // ../../node_modules/lodash-es/isObjectLike.js
1225
- function isObjectLike(value) {
1226
- return value != null && typeof value == "object";
1227
- }
1228
- var isObjectLike_default = isObjectLike;
1229
-
1230
- // ../../node_modules/lodash-es/isSymbol.js
1231
- var symbolTag = "[object Symbol]";
1232
- function isSymbol(value) {
1233
- return typeof value == "symbol" || isObjectLike_default(value) && _baseGetTag_default(value) == symbolTag;
1234
- }
1235
- var isSymbol_default = isSymbol;
1236
-
1237
- // ../../node_modules/lodash-es/_arrayMap.js
1238
- function arrayMap(array, iteratee) {
1239
- var index = -1, length = array == null ? 0 : array.length, result = Array(length);
1240
- while (++index < length) {
1241
- result[index] = iteratee(array[index], index, array);
1242
- }
1243
- return result;
1244
- }
1245
- var _arrayMap_default = arrayMap;
1246
-
1247
- // ../../node_modules/lodash-es/isArray.js
1248
- var isArray = Array.isArray;
1249
- var isArray_default = isArray;
1250
-
1251
- // ../../node_modules/lodash-es/_baseToString.js
1252
- var INFINITY = 1 / 0;
1253
- var symbolProto = _Symbol_default ? _Symbol_default.prototype : undefined;
1254
- var symbolToString = symbolProto ? symbolProto.toString : undefined;
1255
- function baseToString(value) {
1256
- if (typeof value == "string") {
1257
- return value;
1258
- }
1259
- if (isArray_default(value)) {
1260
- return _arrayMap_default(value, baseToString) + "";
1261
- }
1262
- if (isSymbol_default(value)) {
1263
- return symbolToString ? symbolToString.call(value) : "";
1264
- }
1265
- var result = value + "";
1266
- return result == "0" && 1 / value == -INFINITY ? "-0" : result;
1267
- }
1268
- var _baseToString_default = baseToString;
1269
-
1270
- // ../../node_modules/lodash-es/_trimmedEndIndex.js
1271
- var reWhitespace = /\s/;
1272
- function trimmedEndIndex(string) {
1273
- var index = string.length;
1274
- while (index-- && reWhitespace.test(string.charAt(index))) {}
1275
- return index;
1276
- }
1277
- var _trimmedEndIndex_default = trimmedEndIndex;
1278
-
1279
- // ../../node_modules/lodash-es/_baseTrim.js
1280
- var reTrimStart = /^\s+/;
1281
- function baseTrim(string) {
1282
- return string ? string.slice(0, _trimmedEndIndex_default(string) + 1).replace(reTrimStart, "") : string;
1283
- }
1284
- var _baseTrim_default = baseTrim;
1285
-
1286
- // ../../node_modules/lodash-es/isObject.js
1287
- function isObject(value) {
1288
- var type = typeof value;
1289
- return value != null && (type == "object" || type == "function");
1290
- }
1291
- var isObject_default = isObject;
1292
-
1293
- // ../../node_modules/lodash-es/toNumber.js
1294
- var NAN = 0 / 0;
1295
- var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
1296
- var reIsBinary = /^0b[01]+$/i;
1297
- var reIsOctal = /^0o[0-7]+$/i;
1298
- var freeParseInt = parseInt;
1299
- function toNumber(value) {
1300
- if (typeof value == "number") {
1301
- return value;
1302
- }
1303
- if (isSymbol_default(value)) {
1304
- return NAN;
1305
- }
1306
- if (isObject_default(value)) {
1307
- var other = typeof value.valueOf == "function" ? value.valueOf() : value;
1308
- value = isObject_default(other) ? other + "" : other;
1309
- }
1310
- if (typeof value != "string") {
1311
- return value === 0 ? value : +value;
1312
- }
1313
- value = _baseTrim_default(value);
1314
- var isBinary = reIsBinary.test(value);
1315
- return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
1316
- }
1317
- var toNumber_default = toNumber;
1318
-
1319
- // ../../node_modules/lodash-es/toFinite.js
1320
- var INFINITY2 = 1 / 0;
1321
- var MAX_INTEGER = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
1322
- function toFinite(value) {
1323
- if (!value) {
1324
- return value === 0 ? value : 0;
1325
- }
1326
- value = toNumber_default(value);
1327
- if (value === INFINITY2 || value === -INFINITY2) {
1328
- var sign = value < 0 ? -1 : 1;
1329
- return sign * MAX_INTEGER;
1330
- }
1331
- return value === value ? value : 0;
1332
- }
1333
- var toFinite_default = toFinite;
1334
-
1335
- // ../../node_modules/lodash-es/toInteger.js
1336
- function toInteger(value) {
1337
- var result = toFinite_default(value), remainder = result % 1;
1338
- return result === result ? remainder ? result - remainder : result : 0;
1339
- }
1340
- var toInteger_default = toInteger;
1341
-
1342
- // ../../node_modules/lodash-es/toString.js
1343
- function toString(value) {
1344
- return value == null ? "" : _baseToString_default(value);
1345
- }
1346
- var toString_default = toString;
1347
-
1348
- // ../../node_modules/lodash-es/_baseSlice.js
1349
- function baseSlice(array, start, end) {
1350
- var index = -1, length = array.length;
1351
- if (start < 0) {
1352
- start = -start > length ? 0 : length + start;
1353
- }
1354
- end = end > length ? length : end;
1355
- if (end < 0) {
1356
- end += length;
1357
- }
1358
- length = start > end ? 0 : end - start >>> 0;
1359
- start >>>= 0;
1360
- var result = Array(length);
1361
- while (++index < length) {
1362
- result[index] = array[index + start];
1363
- }
1364
- return result;
1365
- }
1366
- var _baseSlice_default = baseSlice;
1367
-
1368
- // ../../node_modules/lodash-es/_castSlice.js
1369
- function castSlice(array, start, end) {
1370
- var length = array.length;
1371
- end = end === undefined ? length : end;
1372
- return !start && end >= length ? array : _baseSlice_default(array, start, end);
1373
- }
1374
- var _castSlice_default = castSlice;
1375
-
1376
- // ../../node_modules/lodash-es/_hasUnicode.js
1377
- var rsAstralRange = "\\ud800-\\udfff";
1378
- var rsComboMarksRange = "\\u0300-\\u036f";
1379
- var reComboHalfMarksRange = "\\ufe20-\\ufe2f";
1380
- var rsComboSymbolsRange = "\\u20d0-\\u20ff";
1381
- var rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
1382
- var rsVarRange = "\\ufe0e\\ufe0f";
1383
- var rsZWJ = "\\u200d";
1384
- var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
1385
- function hasUnicode(string) {
1386
- return reHasUnicode.test(string);
1387
- }
1388
- var _hasUnicode_default = hasUnicode;
1389
-
1390
- // ../../node_modules/lodash-es/_asciiToArray.js
1391
- function asciiToArray(string) {
1392
- return string.split("");
1393
- }
1394
- var _asciiToArray_default = asciiToArray;
1395
-
1396
- // ../../node_modules/lodash-es/_unicodeToArray.js
1397
- var rsAstralRange2 = "\\ud800-\\udfff";
1398
- var rsComboMarksRange2 = "\\u0300-\\u036f";
1399
- var reComboHalfMarksRange2 = "\\ufe20-\\ufe2f";
1400
- var rsComboSymbolsRange2 = "\\u20d0-\\u20ff";
1401
- var rsComboRange2 = rsComboMarksRange2 + reComboHalfMarksRange2 + rsComboSymbolsRange2;
1402
- var rsVarRange2 = "\\ufe0e\\ufe0f";
1403
- var rsAstral = "[" + rsAstralRange2 + "]";
1404
- var rsCombo = "[" + rsComboRange2 + "]";
1405
- var rsFitz = "\\ud83c[\\udffb-\\udfff]";
1406
- var rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")";
1407
- var rsNonAstral = "[^" + rsAstralRange2 + "]";
1408
- var rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}";
1409
- var rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]";
1410
- var rsZWJ2 = "\\u200d";
1411
- var reOptMod = rsModifier + "?";
1412
- var rsOptVar = "[" + rsVarRange2 + "]?";
1413
- var rsOptJoin = "(?:" + rsZWJ2 + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*";
1414
- var rsSeq = rsOptVar + reOptMod + rsOptJoin;
1415
- var rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
1416
- var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
1417
- function unicodeToArray(string) {
1418
- return string.match(reUnicode) || [];
1419
- }
1420
- var _unicodeToArray_default = unicodeToArray;
1421
-
1422
- // ../../node_modules/lodash-es/_stringToArray.js
1423
- function stringToArray(string) {
1424
- return _hasUnicode_default(string) ? _unicodeToArray_default(string) : _asciiToArray_default(string);
1425
- }
1426
- var _stringToArray_default = stringToArray;
1427
-
1428
- // ../../node_modules/lodash-es/_baseProperty.js
1429
- function baseProperty(key) {
1430
- return function(object) {
1431
- return object == null ? undefined : object[key];
1432
- };
1433
- }
1434
- var _baseProperty_default = baseProperty;
1435
-
1436
- // ../../node_modules/lodash-es/_baseRepeat.js
1437
- var MAX_SAFE_INTEGER2 = 9007199254740991;
1438
- var nativeFloor = Math.floor;
1439
- function baseRepeat(string, n) {
1440
- var result = "";
1441
- if (!string || n < 1 || n > MAX_SAFE_INTEGER2) {
1442
- return result;
1443
- }
1444
- do {
1445
- if (n % 2) {
1446
- result += string;
1447
- }
1448
- n = nativeFloor(n / 2);
1449
- if (n) {
1450
- string += string;
1451
- }
1452
- } while (n);
1453
- return result;
1454
- }
1455
- var _baseRepeat_default = baseRepeat;
1456
-
1457
- // ../../node_modules/lodash-es/_asciiSize.js
1458
- var asciiSize = _baseProperty_default("length");
1459
- var _asciiSize_default = asciiSize;
1460
-
1461
- // ../../node_modules/lodash-es/_unicodeSize.js
1462
- var rsAstralRange3 = "\\ud800-\\udfff";
1463
- var rsComboMarksRange3 = "\\u0300-\\u036f";
1464
- var reComboHalfMarksRange3 = "\\ufe20-\\ufe2f";
1465
- var rsComboSymbolsRange3 = "\\u20d0-\\u20ff";
1466
- var rsComboRange3 = rsComboMarksRange3 + reComboHalfMarksRange3 + rsComboSymbolsRange3;
1467
- var rsVarRange3 = "\\ufe0e\\ufe0f";
1468
- var rsAstral2 = "[" + rsAstralRange3 + "]";
1469
- var rsCombo2 = "[" + rsComboRange3 + "]";
1470
- var rsFitz2 = "\\ud83c[\\udffb-\\udfff]";
1471
- var rsModifier2 = "(?:" + rsCombo2 + "|" + rsFitz2 + ")";
1472
- var rsNonAstral2 = "[^" + rsAstralRange3 + "]";
1473
- var rsRegional2 = "(?:\\ud83c[\\udde6-\\uddff]){2}";
1474
- var rsSurrPair2 = "[\\ud800-\\udbff][\\udc00-\\udfff]";
1475
- var rsZWJ3 = "\\u200d";
1476
- var reOptMod2 = rsModifier2 + "?";
1477
- var rsOptVar2 = "[" + rsVarRange3 + "]?";
1478
- var rsOptJoin2 = "(?:" + rsZWJ3 + "(?:" + [rsNonAstral2, rsRegional2, rsSurrPair2].join("|") + ")" + rsOptVar2 + reOptMod2 + ")*";
1479
- var rsSeq2 = rsOptVar2 + reOptMod2 + rsOptJoin2;
1480
- var rsSymbol2 = "(?:" + [rsNonAstral2 + rsCombo2 + "?", rsCombo2, rsRegional2, rsSurrPair2, rsAstral2].join("|") + ")";
1481
- var reUnicode2 = RegExp(rsFitz2 + "(?=" + rsFitz2 + ")|" + rsSymbol2 + rsSeq2, "g");
1482
- function unicodeSize(string) {
1483
- var result = reUnicode2.lastIndex = 0;
1484
- while (reUnicode2.test(string)) {
1485
- ++result;
1486
- }
1487
- return result;
1488
- }
1489
- var _unicodeSize_default = unicodeSize;
1490
-
1491
- // ../../node_modules/lodash-es/_stringSize.js
1492
- function stringSize(string) {
1493
- return _hasUnicode_default(string) ? _unicodeSize_default(string) : _asciiSize_default(string);
1494
- }
1495
- var _stringSize_default = stringSize;
1496
-
1497
- // ../../node_modules/lodash-es/_createPadding.js
1498
- var nativeCeil = Math.ceil;
1499
- function createPadding(length, chars) {
1500
- chars = chars === undefined ? " " : _baseToString_default(chars);
1501
- var charsLength = chars.length;
1502
- if (charsLength < 2) {
1503
- return charsLength ? _baseRepeat_default(chars, length) : chars;
1504
- }
1505
- var result = _baseRepeat_default(chars, nativeCeil(length / _stringSize_default(chars)));
1506
- return _hasUnicode_default(chars) ? _castSlice_default(_stringToArray_default(result), 0, length).join("") : result.slice(0, length);
1507
- }
1508
- var _createPadding_default = createPadding;
1509
-
1510
- // ../../node_modules/lodash-es/pad.js
1511
- var nativeCeil2 = Math.ceil;
1512
- var nativeFloor2 = Math.floor;
1513
- function pad(string, length, chars) {
1514
- string = toString_default(string);
1515
- length = toInteger_default(length);
1516
- var strLength = length ? _stringSize_default(string) : 0;
1517
- if (!length || strLength >= length) {
1518
- return string;
1519
- }
1520
- var mid = (length - strLength) / 2;
1521
- return _createPadding_default(nativeFloor2(mid), chars) + string + _createPadding_default(nativeCeil2(mid), chars);
1522
- }
1523
- var pad_default = pad;
1524
1216
  // src/reporter.ts
1525
1217
  class Logger {
1526
1218
  get id() {
@@ -1533,7 +1225,7 @@ class Logger {
1533
1225
  #label;
1534
1226
  constructor(id) {
1535
1227
  this.#id = id;
1536
- this.#label = `\x1B[36m[${pad_default(id, 24)}]\x1B[39m`;
1228
+ this.#label = `\x1B[36m[${id}]\x1B[39m`;
1537
1229
  }
1538
1230
  debug(...data) {
1539
1231
  debug(this.#label, ...data);
@@ -0,0 +1,120 @@
1
+ export type ConnectionState =
2
+ | 'closing'
3
+ | 'connected'
4
+ | 'connecting'
5
+ | 'disconnected'
6
+ | 'failed';
7
+
8
+ export type EventMap = Record<string, any>;
9
+
10
+ export type DnsRecordClass = 'IN' | 'CS' | 'CH' | 'HS' | 'ANY';
11
+
12
+ export type DnsRecordType =
13
+ | 'A'
14
+ | 'AAAA'
15
+ | 'CNAME'
16
+ | 'MX'
17
+ | 'NS'
18
+ | 'NSEC'
19
+ | 'PTR'
20
+ | 'SOA'
21
+ | 'SRV'
22
+ | 'TXT';
23
+
24
+ export type DnsRecordBase = {
25
+ readonly name: string;
26
+ readonly type: DnsRecordType;
27
+ readonly class: DnsRecordClass;
28
+ readonly flash: boolean;
29
+ readonly ttl: number;
30
+ };
31
+
32
+ export type DnsRecordA = DnsRecordBase & {
33
+ readonly type: 'A';
34
+ readonly rdata: string;
35
+ };
36
+
37
+ export type DnsRecordAAAA = DnsRecordBase & {
38
+ readonly type: 'AAAA';
39
+ readonly rdata: string;
40
+ };
41
+
42
+ export type DnsRecordPTR = DnsRecordBase & {
43
+ readonly type: 'PTR';
44
+ readonly rdata: string;
45
+ };
46
+
47
+ export type DnsRecordTXT = DnsRecordBase & {
48
+ readonly type: 'TXT';
49
+ readonly rdata: Record<string, string>;
50
+ readonly rdata_buffer: Record<string, Buffer>;
51
+ };
52
+
53
+ export type DnsRecordSRV = DnsRecordBase & {
54
+ readonly type: 'SRV';
55
+ readonly rdata: {
56
+ readonly priority: number;
57
+ readonly weight: number;
58
+ readonly port: number;
59
+ readonly target: string;
60
+ };
61
+ };
62
+
63
+ export type DnsRecordNSEC = DnsRecordBase & {
64
+ readonly type: 'NSEC';
65
+ readonly rdata: string;
66
+ };
67
+
68
+ export type DnsRecord =
69
+ | DnsRecordA
70
+ | DnsRecordAAAA
71
+ | DnsRecordPTR
72
+ | DnsRecordTXT
73
+ | DnsRecordSRV
74
+ | DnsRecordNSEC;
75
+
76
+ export type DnsPacketHeader = {
77
+ readonly id: number;
78
+ readonly qr: number;
79
+ readonly op: number;
80
+ readonly aa: number;
81
+ readonly tc: number;
82
+ readonly rd: number;
83
+ readonly ra: number;
84
+ readonly z: number;
85
+ readonly ad: number;
86
+ readonly cd: number;
87
+ readonly rc: number;
88
+ readonly questions: number;
89
+ readonly answers: number;
90
+ readonly authorities: number;
91
+ readonly additionals: number;
92
+ };
93
+
94
+ export type DnsPacket = {
95
+ readonly address: string;
96
+ readonly header: DnsPacketHeader;
97
+ readonly questions: DnsRecord[];
98
+ readonly answers: DnsRecord[];
99
+ readonly authorities: DnsRecord[];
100
+ readonly additionals: DnsRecord[];
101
+ };
102
+
103
+ export type Result = {
104
+ readonly fqdn: string;
105
+ readonly address: string;
106
+ readonly modelName: string;
107
+ readonly familyName: string | null;
108
+ readonly service: {
109
+ readonly port: number;
110
+ readonly protocol: 'tcp' | 'udp';
111
+ readonly type: string;
112
+ };
113
+ readonly packet: DnsPacket;
114
+ readonly [key: string]: unknown;
115
+ };
116
+
117
+ export type DiscoveryResult = {
118
+ readonly id: string;
119
+ readonly txt: Record<string, string>;
120
+ } & Result;
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.4.2",
4
+ "version": "0.5.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": {
@@ -38,17 +38,15 @@
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "@basmilius/apple-encoding": "0.4.2",
41
+ "@basmilius/apple-encoding": "0.5.0",
42
42
  "@stablelib/chacha20poly1305": "^2.0.1",
43
43
  "fast-srp-hap": "^2.0.4",
44
- "lodash-es": "^4.17.23",
45
44
  "node-dns-sd": "^1.0.1",
46
45
  "tweetnacl": "^1.0.3",
47
46
  "uuid": "^13.0.0"
48
47
  },
49
48
  "devDependencies": {
50
49
  "@basmilius/tools": "^2.23.0",
51
- "@types/bun": "^1.3.8",
52
- "@types/lodash-es": "^4.17.12"
50
+ "@types/bun": "^1.3.8"
53
51
  }
54
52
  }
@@ -1,29 +0,0 @@
1
- export default class Discovery {
2
- #private;
3
- constructor(service: string);
4
- find(): Promise<DiscoveryResult[]>;
5
- findUntil(fqdn: string, tries?: number, timeout?: number): Promise<DiscoveryResult>;
6
- static airplay(): Discovery;
7
- static companionLink(): Discovery;
8
- static raop(): Discovery;
9
- }
10
- export type DiscoveryResult = {
11
- readonly fqdn: string;
12
- readonly address: string;
13
- readonly modelName: string;
14
- readonly familyName: string | null;
15
- readonly service: {
16
- readonly port: number;
17
- readonly protocol: "tcp" | "udp";
18
- readonly type: string;
19
- };
20
- readonly packet: {
21
- readonly address: string;
22
- readonly header: Record<string, number>;
23
- readonly questions: Array<any>;
24
- readonly answers: Array<any>;
25
- readonly authorities: Array<any>;
26
- readonly additionals: [];
27
- };
28
- readonly [key: string]: unknown;
29
- };
@@ -1 +0,0 @@
1
- export { default as Discovery, type DiscoveryResult } from "./discovery";