dnssd-advertise 1.0.2 → 1.0.3

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.
@@ -303,7 +303,7 @@ const y = {
303
303
  }
304
304
  };
305
305
 
306
- const p = {
306
+ const E = {
307
307
  bytes: () => 4,
308
308
  write(e, t, n) {
309
309
  const r = n.split(".", 4);
@@ -333,7 +333,7 @@ const g = {
333
333
  }
334
334
  };
335
335
 
336
- const E = {
336
+ const p = {
337
337
  bytes: () => 16,
338
338
  write(e, t, n) {
339
339
  const r = n.indexOf("::");
@@ -423,6 +423,12 @@ const advance = (e, t) => {
423
423
  e.length &= ~(e.length >> 31);
424
424
  };
425
425
 
426
+ const encodeIntoBuffer = (e, t) => {
427
+ const n = new ArrayBuffer(e.bytes(t));
428
+ const r = e.write(new DataView(n), 0, t);
429
+ return new Uint8Array(n, 0, r);
430
+ };
431
+
426
432
  const sliceView = (e, t, n = t.length) => {
427
433
  const r = new Uint8Array(e.buffer, e.byteOffset + t.offset, n);
428
434
  advance(t, n);
@@ -490,11 +496,7 @@ const m = withRDLength({
490
496
  e.setUint8(t + 2, r);
491
497
  e.setUint8(t + 3, s);
492
498
  t += 4;
493
- const i = ((e, t) => {
494
- const n = new ArrayBuffer(e.bytes(t));
495
- const r = e.write(new DataView(n), 0, t);
496
- return new Uint8Array(n, 0, r);
497
- })(a === b.v4 ? p : E, n.ip);
499
+ const i = encodeIntoBuffer(a === b.v4 ? E : p, n.ip);
498
500
  for (let n = 0; n < o; n++) {
499
501
  e.setUint8(t++, i[n]);
500
502
  }
@@ -510,7 +512,7 @@ const m = withRDLength({
510
512
  family: n,
511
513
  sourcePrefixLength: r,
512
514
  scopePrefixLength: s,
513
- ip: n === b.v4 ? p.read(e, t) : E.read(e, t)
515
+ ip: n === b.v4 ? E.read(e, t) : p.read(e, t)
514
516
  };
515
517
  }
516
518
  });
@@ -661,11 +663,11 @@ const C = withRDLength(array(h));
661
663
 
662
664
  const D = withRDLength(g);
663
665
 
664
- const v = withRDLength(array(p));
665
-
666
666
  const L = withRDLength(array(E));
667
667
 
668
- const k = withRDLength(u);
668
+ const k = withRDLength(array(p));
669
+
670
+ const v = withRDLength(u);
669
671
 
670
672
  const M = {
671
673
  bytes(e) {
@@ -683,19 +685,19 @@ const M = {
683
685
  t += D.bytes(e.port) + 2;
684
686
  }
685
687
  if (e.ipv4hint) {
686
- t += v.bytes(e.ipv4hint) + 2;
688
+ t += L.bytes(e.ipv4hint) + 2;
687
689
  }
688
690
  if (e.ipv6hint) {
689
- t += L.bytes(e.ipv6hint) + 2;
691
+ t += k.bytes(e.ipv6hint) + 2;
690
692
  }
691
693
  if (e.echconfig) {
692
- t += k.bytes(e.echconfig) + 2;
694
+ t += v.bytes(e.echconfig) + 2;
693
695
  }
694
696
  if (e.dohpath) {
695
- t += k.bytes(e.dohpath) + 2;
697
+ t += v.bytes(e.dohpath) + 2;
696
698
  }
697
699
  if (e.odoh) {
698
- t += k.bytes(e.odoh) + 2;
700
+ t += v.bytes(e.odoh) + 2;
699
701
  }
700
702
  return t;
701
703
  },
@@ -719,23 +721,23 @@ const M = {
719
721
  }
720
722
  if (n.ipv4hint) {
721
723
  e.setUint16(t, R.Ipv4Hint);
722
- t = v.write(e, t + 2, n.ipv4hint);
724
+ t = L.write(e, t + 2, n.ipv4hint);
723
725
  }
724
726
  if (n.ipv6hint) {
725
727
  e.setUint16(t, R.Ipv6Hint);
726
- t = L.write(e, t + 2, n.ipv6hint);
728
+ t = k.write(e, t + 2, n.ipv6hint);
727
729
  }
728
730
  if (n.echconfig) {
729
731
  e.setUint16(t, R.EchConfig);
730
- t = k.write(e, t + 2, n.echconfig);
732
+ t = v.write(e, t + 2, n.echconfig);
731
733
  }
732
734
  if (n.dohpath) {
733
735
  e.setUint16(t, R.DohPath);
734
- t = k.write(e, t + 2, n.dohpath);
736
+ t = v.write(e, t + 2, n.dohpath);
735
737
  }
736
738
  if (n.odoh) {
737
739
  e.setUint16(t, R.Odoh);
738
- t = k.write(e, t + 2, n.odoh);
740
+ t = v.write(e, t + 2, n.odoh);
739
741
  }
740
742
  return t;
741
743
  },
@@ -774,27 +776,27 @@ const M = {
774
776
  break;
775
777
 
776
778
  case R.Ipv4Hint:
777
- s.ipv4hint = v.read(e, t);
779
+ s.ipv4hint = L.read(e, t);
778
780
  break;
779
781
 
780
782
  case R.Ipv6Hint:
781
- s.ipv6hint = L.read(e, t);
783
+ s.ipv6hint = k.read(e, t);
782
784
  break;
783
785
 
784
786
  case R.EchConfig:
785
- s.echconfig = k.read(e, t);
787
+ s.echconfig = v.read(e, t);
786
788
  break;
787
789
 
788
790
  case R.DohPath:
789
- s.dohpath = c.decode(k.read(e, t));
791
+ s.dohpath = c.decode(v.read(e, t));
790
792
  break;
791
793
 
792
794
  case R.Odoh:
793
- s.odoh = k.read(e, t);
795
+ s.odoh = v.read(e, t);
794
796
  break;
795
797
 
796
798
  default:
797
- k.read(e, t);
799
+ v.read(e, t);
798
800
  }
799
801
  }
800
802
  return s;
@@ -805,13 +807,13 @@ const _ = withRDLength(u);
805
807
 
806
808
  const H = withRDLength(l);
807
809
 
808
- const x = withRDLength(p);
810
+ const x = withRDLength(E);
809
811
 
810
- const V = withRDLength(E);
812
+ const V = withRDLength(p);
811
813
 
812
814
  const Y = withRDLength(array(h));
813
815
 
814
- const q = withRDLength({
816
+ const B = withRDLength({
815
817
  bytes: e => l.bytes(e.target) + 6,
816
818
  write(e, t, n) {
817
819
  e.setUint16(t, n.priority || 0);
@@ -835,7 +837,7 @@ const q = withRDLength({
835
837
  }
836
838
  });
837
839
 
838
- const B = withRDLength({
840
+ const q = withRDLength({
839
841
  bytes: e => h.bytes(e.cpu) + h.bytes(e.os),
840
842
  write(e, t, n) {
841
843
  t = h.write(e, t, n.cpu);
@@ -859,7 +861,7 @@ const toCaaTag = e => {
859
861
  }
860
862
  };
861
863
 
862
- const G = withRDLength({
864
+ const K = withRDLength({
863
865
  bytes: e => h.bytes(e.tag) + u.bytes(e.value) + 1,
864
866
  write(e, t, n) {
865
867
  let r = n.flags || 0;
@@ -882,7 +884,7 @@ const G = withRDLength({
882
884
  }
883
885
  });
884
886
 
885
- const K = withRDLength({
887
+ const G = withRDLength({
886
888
  bytes: e => l.bytes(e.mname) + l.bytes(e.rname) + 20,
887
889
  write(e, t, n) {
888
890
  t = l.write(e, t, n.mname);
@@ -1152,10 +1154,10 @@ const re = {
1152
1154
  return t + H.bytes(e.data);
1153
1155
 
1154
1156
  case r.SOA:
1155
- return t + K.bytes(e.data);
1157
+ return t + G.bytes(e.data);
1156
1158
 
1157
1159
  case r.HINFO:
1158
- return t + B.bytes(e.data);
1160
+ return t + q.bytes(e.data);
1159
1161
 
1160
1162
  case r.MX:
1161
1163
  return t + X.bytes(e.data);
@@ -1170,7 +1172,7 @@ const re = {
1170
1172
  return t + V.bytes(e.data);
1171
1173
 
1172
1174
  case r.SRV:
1173
- return t + q.bytes(e.data);
1175
+ return t + B.bytes(e.data);
1174
1176
 
1175
1177
  case r.NAPTR:
1176
1178
  return t + J.bytes(e.data);
@@ -1204,7 +1206,7 @@ const re = {
1204
1206
  return t + te.bytes(e.data);
1205
1207
 
1206
1208
  case r.CAA:
1207
- return t + G.bytes(e.data);
1209
+ return t + K.bytes(e.data);
1208
1210
 
1209
1211
  case r.PTR:
1210
1212
  case r.CNAME:
@@ -1238,10 +1240,10 @@ const re = {
1238
1240
  return H.write(e, t, n.data);
1239
1241
 
1240
1242
  case r.SOA:
1241
- return K.write(e, t, n.data);
1243
+ return G.write(e, t, n.data);
1242
1244
 
1243
1245
  case r.HINFO:
1244
- return B.write(e, t, n.data);
1246
+ return q.write(e, t, n.data);
1245
1247
 
1246
1248
  case r.MX:
1247
1249
  return X.write(e, t, n.data);
@@ -1256,7 +1258,7 @@ const re = {
1256
1258
  return V.write(e, t, n.data);
1257
1259
 
1258
1260
  case r.SRV:
1259
- return q.write(e, t, n.data);
1261
+ return B.write(e, t, n.data);
1260
1262
 
1261
1263
  case r.NAPTR:
1262
1264
  return J.write(e, t, n.data);
@@ -1287,7 +1289,7 @@ const re = {
1287
1289
  return te.write(e, t, n.data);
1288
1290
 
1289
1291
  case r.CAA:
1290
- return G.write(e, t, n.data);
1292
+ return K.write(e, t, n.data);
1291
1293
 
1292
1294
  case r.PTR:
1293
1295
  case r.CNAME:
@@ -1337,11 +1339,11 @@ const re = {
1337
1339
  return i;
1338
1340
 
1339
1341
  case r.SOA:
1340
- i.data = K.read(e, t);
1342
+ i.data = G.read(e, t);
1341
1343
  return i;
1342
1344
 
1343
1345
  case r.HINFO:
1344
- i.data = B.read(e, t);
1346
+ i.data = q.read(e, t);
1345
1347
  return i;
1346
1348
 
1347
1349
  case r.MX:
@@ -1361,7 +1363,7 @@ const re = {
1361
1363
  return i;
1362
1364
 
1363
1365
  case r.SRV:
1364
- i.data = q.read(e, t);
1366
+ i.data = B.read(e, t);
1365
1367
  return i;
1366
1368
 
1367
1369
  case r.NAPTR:
@@ -1402,7 +1404,7 @@ const re = {
1402
1404
  return i;
1403
1405
 
1404
1406
  case r.CAA:
1405
- i.data = G.read(e, t);
1407
+ i.data = K.read(e, t);
1406
1408
  return i;
1407
1409
 
1408
1410
  case r.PTR:
@@ -1418,6 +1420,117 @@ const re = {
1418
1420
  }
1419
1421
  };
1420
1422
 
1423
+ const compareAnswers = (e, t) => {
1424
+ if (e.type === r.OPT || t.type === r.OPT) {
1425
+ return 0;
1426
+ }
1427
+ const n = e.class || s.IN;
1428
+ const a = t.class || s.IN;
1429
+ if (n !== a) {
1430
+ return n - a;
1431
+ } else if (e.type !== t.type) {
1432
+ return e.type - t.type;
1433
+ }
1434
+ let o;
1435
+ switch (e.type) {
1436
+ case r.A:
1437
+ o = x;
1438
+ break;
1439
+
1440
+ case r.NS:
1441
+ o = H;
1442
+ break;
1443
+
1444
+ case r.SOA:
1445
+ o = G;
1446
+ break;
1447
+
1448
+ case r.HINFO:
1449
+ o = q;
1450
+ break;
1451
+
1452
+ case r.MX:
1453
+ o = X;
1454
+ break;
1455
+
1456
+ case r.TXT:
1457
+ o = Y;
1458
+ break;
1459
+
1460
+ case r.RP:
1461
+ o = z;
1462
+ break;
1463
+
1464
+ case r.AAAA:
1465
+ o = V;
1466
+ break;
1467
+
1468
+ case r.SRV:
1469
+ o = B;
1470
+ break;
1471
+
1472
+ case r.NAPTR:
1473
+ o = J;
1474
+ break;
1475
+
1476
+ case r.DS:
1477
+ o = Z;
1478
+ break;
1479
+
1480
+ case r.SSHFP:
1481
+ o = W;
1482
+ break;
1483
+
1484
+ case r.RRSIG:
1485
+ o = F;
1486
+ break;
1487
+
1488
+ case r.NSEC:
1489
+ o = Q;
1490
+ break;
1491
+
1492
+ case r.DNSKEY:
1493
+ o = $;
1494
+ break;
1495
+
1496
+ case r.NSEC3:
1497
+ o = j;
1498
+ break;
1499
+
1500
+ case r.TLSA:
1501
+ o = ee;
1502
+ break;
1503
+
1504
+ case r.SVCB:
1505
+ case r.HTTPS:
1506
+ o = te;
1507
+ break;
1508
+
1509
+ case r.CAA:
1510
+ o = K;
1511
+ break;
1512
+
1513
+ case r.PTR:
1514
+ case r.CNAME:
1515
+ case r.DNAME:
1516
+ o = H;
1517
+ break;
1518
+
1519
+ default:
1520
+ o = _;
1521
+ }
1522
+ const i = encodeIntoBuffer(o, e.data);
1523
+ const c = encodeIntoBuffer(o, t.data);
1524
+ const f = i.byteLength < c.byteLength ? i.byteLength : c.byteLength;
1525
+ for (let e = 2; e < f; e++) {
1526
+ const t = i[e] - c[e];
1527
+ if (0 !== t) {
1528
+ return t < 0 ? -1 : 1;
1529
+ }
1530
+ }
1531
+ return i.byteLength !== c.byteLength ? i.byteLength < c.byteLength ? -1 : 1 : 0;
1532
+ };
1533
+
1421
1534
  const readList = (e, t, n, r) => {
1422
1535
  if (!r) {
1423
1536
  return;
@@ -1599,12 +1712,15 @@ const aaaaAnswers = (e, t, n) => t.filter(e => e.family === fe.v6).map(t => ({
1599
1712
 
1600
1713
  const answers = (e, t, n) => [ ...ptrAnswers(e, n), srvAnswer(e, n), txtAnswer(e, n), ...aAnswers(e, t, n), ...aaaaAnswers(e, t, n) ];
1601
1714
 
1715
+ const authorities = (e, t, n) => [ ...aAnswers(e, t, n), txtAnswer(e, n), ...aaaaAnswers(e, t, n), srvAnswer(e, n) ];
1716
+
1602
1717
  let ce = function(e) {
1603
1718
  e[e.NONE = 0] = "NONE";
1604
1719
  e[e.NAME = 1] = "NAME";
1605
1720
  e[e.HOSTNAME_A = 2] = "HOSTNAME_A";
1606
1721
  e[e.HOSTNAME_AAAA = 4] = "HOSTNAME_AAAA";
1607
1722
  e[e.HOSTNAME = e.HOSTNAME_A | e.HOSTNAME_AAAA] = "HOSTNAME";
1723
+ e[e.LOST_TIEBREAKER = 8] = "LOST_TIEBREAKER";
1608
1724
  return e;
1609
1725
  }({});
1610
1726
 
@@ -1667,10 +1783,29 @@ const checkQuestionConflicts = (e, t, s) => {
1667
1783
  if (e.type !== n.QUERY || !e.questions?.length || !e.authorities?.length) {
1668
1784
  return ce.NONE;
1669
1785
  }
1670
- return e.questions.some(e => {
1786
+ if (!e.questions.some(e => {
1671
1787
  const n = e.name.toLowerCase();
1672
1788
  return (e => e.type === r.ANY || e.type === r.A || e.type === r.AAAA || e.type === r.SRV || e.type === r.TXT || e.type === r.PTR)(e) && (n === t.host || n === t.fqdnIn);
1673
- }) ? checkAnswerConflicts(e.authorities, t, s) : ce.NONE;
1789
+ })) {
1790
+ return ce.NONE;
1791
+ }
1792
+ const a = ((e, t) => {
1793
+ e.sort(compareAnswers);
1794
+ t.sort(compareAnswers);
1795
+ const n = e.length < t.length ? e.length : t.length;
1796
+ for (let r = 0; r < n; r++) {
1797
+ const n = compareAnswers(e[r], t[r]);
1798
+ if (0 !== n) {
1799
+ return n;
1800
+ }
1801
+ }
1802
+ return e.length !== t.length ? e.length < t.length ? -1 : 1 : 0;
1803
+ })(authorities(t, s, t.ttl), e.authorities.filter(e => e.name?.toLowerCase() === t.host || e.name?.toLowerCase() === t.fqdnIn));
1804
+ if (a < 0) {
1805
+ return checkAnswerConflicts(e.authorities, t, s);
1806
+ } else {
1807
+ return ce.NONE;
1808
+ }
1674
1809
  };
1675
1810
 
1676
1811
  const responseMessage = (e, t, s, o) => {
@@ -2140,13 +2275,16 @@ const ye = {
2140
2275
  e.delete(onCancel);
2141
2276
  let i = !1;
2142
2277
  try {
2143
- const e = await n({
2144
- attempt: r,
2145
- async retry(e) {
2146
- i = !0;
2147
- return schedule(r + 1, e);
2148
- }
2149
- });
2278
+ let e;
2279
+ if (n) {
2280
+ e = await n({
2281
+ attempt: r,
2282
+ async retry(e) {
2283
+ i = !0;
2284
+ return schedule(r + 1, e);
2285
+ }
2286
+ });
2287
+ }
2150
2288
  a(e);
2151
2289
  } catch (e) {
2152
2290
  if (!i && shouldRetry(t, r)) {
@@ -2234,11 +2372,12 @@ const ye = {
2234
2372
  hostname
2235
2373
  };
2236
2374
 
2237
- let pe = function(e) {
2375
+ let Ee = function(e) {
2238
2376
  e[e.SEND = 0] = "SEND";
2239
2377
  e[e.PROBE = 1] = "PROBE";
2240
2378
  e[e.ANNOUNCE = 2] = "ANNOUNCE";
2241
2379
  e[e.REOPEN = 3] = "REOPEN";
2380
+ e[e.DELAY = 4] = "DELAY";
2242
2381
  return e;
2243
2382
  }({});
2244
2383
 
@@ -2248,31 +2387,37 @@ const randomDelay = (e, t) => e + Math.floor(Math.random() * (t - e + 1));
2248
2387
 
2249
2388
  const shouldRetry = (e, t) => {
2250
2389
  switch (e) {
2251
- case pe.SEND:
2252
- case pe.PROBE:
2390
+ case Ee.SEND:
2391
+ case Ee.PROBE:
2253
2392
  return t < 4;
2254
2393
 
2255
- case pe.ANNOUNCE:
2394
+ case Ee.ANNOUNCE:
2256
2395
  return t < 3;
2257
2396
 
2258
- case pe.REOPEN:
2397
+ case Ee.REOPEN:
2259
2398
  return !0;
2399
+
2400
+ case Ee.DELAY:
2401
+ return !1;
2260
2402
  }
2261
2403
  };
2262
2404
 
2263
2405
  const getDelay = (e, t) => {
2264
2406
  switch (e) {
2265
- case pe.SEND:
2407
+ case Ee.SEND:
2266
2408
  return randomDelay(20, 120);
2267
2409
 
2268
- case pe.PROBE:
2410
+ case Ee.PROBE:
2269
2411
  return t ? 250 : randomDelay(0, 250);
2270
2412
 
2271
- case pe.ANNOUNCE:
2413
+ case Ee.ANNOUNCE:
2272
2414
  return t ? 1e3 * 2 ** (Math.min(t, 3) - 1) : 0;
2273
2415
 
2274
- case pe.REOPEN:
2416
+ case Ee.REOPEN:
2275
2417
  return 6e3;
2418
+
2419
+ case Ee.DELAY:
2420
+ return 1e3;
2276
2421
  }
2277
2422
  };
2278
2423
 
@@ -2282,7 +2427,7 @@ const runTimer = (e, t, n) => {
2282
2427
  let a;
2283
2428
  if (s) {
2284
2429
  for (const t of s) {
2285
- if (e === pe.REOPEN || Math.abs(t.time - r) <= 100) {
2430
+ if (e === Ee.REOPEN || Math.abs(t.time - r) <= 100) {
2286
2431
  a = t;
2287
2432
  break;
2288
2433
  }
@@ -2327,12 +2472,12 @@ class AbortError extends Error {
2327
2472
  }
2328
2473
  }
2329
2474
 
2330
- var Ee = function(e) {
2475
+ var pe = function(e) {
2331
2476
  e[e.PROBING = 0] = "PROBING";
2332
2477
  e[e.ADVERTISE = 2] = "ADVERTISE";
2333
2478
  e[e.CLOSED = 3] = "CLOSED";
2334
2479
  return e;
2335
- }(Ee || {});
2480
+ }(pe || {});
2336
2481
 
2337
2482
  function createInterfaceAdvertiser(e, t, o) {
2338
2483
  const i = o.createServiceInput(t);
@@ -2340,11 +2485,11 @@ function createInterfaceAdvertiser(e, t, o) {
2340
2485
  let f = 0;
2341
2486
  let l = 0;
2342
2487
  let u = o.createServiceRecord(i);
2343
- let d = Ee.PROBING;
2488
+ let d = pe.PROBING;
2344
2489
  let h = ce.NONE;
2345
2490
  const y = o.createSocket(e, {
2346
2491
  async onMessage(e, t) {
2347
- if (d === Ee.CLOSED) {
2492
+ if (d === pe.CLOSED) {
2348
2493
  return;
2349
2494
  }
2350
2495
  const r = function decode(e) {
@@ -2354,25 +2499,29 @@ function createInterfaceAdvertiser(e, t, o) {
2354
2499
  length: t.byteLength
2355
2500
  });
2356
2501
  }(e);
2357
- if (d === Ee.PROBING) {
2358
- l++;
2359
- h |= ((e, t, r) => e.type === n.RESPONSE ? checkResponseConflicts(e, t, r) : checkQuestionConflicts(e, t, r))(r, u, y.bindings);
2360
- return;
2361
- } else if (d === Ee.ADVERTISE) {
2502
+ if (d === pe.PROBING) {
2503
+ if (r.type === n.QUERY) {
2504
+ l++;
2505
+ const e = checkQuestionConflicts(r, u, y.bindings);
2506
+ h |= e !== ce.NONE ? e | ce.LOST_TIEBREAKER : ce.NONE;
2507
+ } else if (r.type === n.RESPONSE) {
2508
+ h |= checkResponseConflicts(r, u, y.bindings);
2509
+ }
2510
+ } else if (d === pe.ADVERTISE) {
2362
2511
  h = checkResponseConflicts(r, u, y.bindings);
2363
2512
  if (resolveConflicts()) {
2364
- d = Ee.PROBING;
2365
- return;
2366
- }
2367
- try {
2368
- await async function sendReply(e, t) {
2369
- const n = responseMessage(e, u, y.bindings, !1);
2370
- const r = responseMessage(e, u, y.bindings, !0);
2371
- await Promise.all([ n && c.schedule(pe.SEND, () => t.reply(n)), r && c.schedule(pe.SEND, () => y.send(r)) ]);
2372
- }(r, t);
2373
- } catch (e) {
2374
- if (!AbortError.isAbortError(e)) {
2375
- o.onError(e);
2513
+ d = pe.PROBING;
2514
+ } else {
2515
+ try {
2516
+ await async function sendReply(e, t) {
2517
+ const n = responseMessage(e, u, y.bindings, !1);
2518
+ const r = responseMessage(e, u, y.bindings, !0);
2519
+ await Promise.all([ n && c.schedule(Ee.SEND, () => t.reply(n)), r && c.schedule(Ee.SEND, () => y.send(r)) ]);
2520
+ }(r, t);
2521
+ } catch (e) {
2522
+ if (!AbortError.isAbortError(e)) {
2523
+ o.onError(e);
2524
+ }
2376
2525
  }
2377
2526
  }
2378
2527
  }
@@ -2392,9 +2541,9 @@ function createInterfaceAdvertiser(e, t, o) {
2392
2541
  class: s.IN,
2393
2542
  qu: !0
2394
2543
  } ],
2395
- authorities: [ srvAnswer(e, e.ttl), ...aAnswers(e, t, e.ttl), ...aaaaAnswers(e, t, e.ttl) ]
2544
+ authorities: authorities(e, t, e.ttl)
2396
2545
  }))(u, y.bindings);
2397
- await c.schedule(pe.SEND, () => y.send(e));
2546
+ await c.schedule(Ee.SEND, () => y.send(e));
2398
2547
  }
2399
2548
  async function sendAnnouncement() {
2400
2549
  const e = ((e, t) => encode({
@@ -2402,7 +2551,7 @@ function createInterfaceAdvertiser(e, t, o) {
2402
2551
  flags: a.AUTHORITATIVE_ANSWER,
2403
2552
  answers: answers(e, t, e.ttl)
2404
2553
  }))(u, y.bindings);
2405
- await c.schedule(pe.SEND, () => y.send(e));
2554
+ await c.schedule(Ee.SEND, () => y.send(e));
2406
2555
  }
2407
2556
  async function sendGoodbye() {
2408
2557
  const e = ((e, t) => encode({
@@ -2410,7 +2559,7 @@ function createInterfaceAdvertiser(e, t, o) {
2410
2559
  flags: a.AUTHORITATIVE_ANSWER,
2411
2560
  answers: answers(e, t, 0)
2412
2561
  }))(u, y.bindings);
2413
- await c.schedule(pe.SEND, () => y.send(e));
2562
+ await c.schedule(Ee.SEND, () => y.send(e));
2414
2563
  }
2415
2564
  function resolveConflicts() {
2416
2565
  if (h !== ce.NONE) {
@@ -2429,37 +2578,41 @@ function createInterfaceAdvertiser(e, t, o) {
2429
2578
  }
2430
2579
  function next() {
2431
2580
  switch (d) {
2432
- case Ee.PROBING:
2581
+ case pe.PROBING:
2433
2582
  return async function probe() {
2434
2583
  l = 0;
2435
2584
  h = ce.NONE;
2436
- await c.schedule(pe.PROBE, async e => {
2585
+ let e = 3;
2586
+ await c.schedule(Ee.PROBE, async t => {
2587
+ const n = h & ce.LOST_TIEBREAKER;
2437
2588
  if (y.closed) {
2438
- d = Ee.CLOSED;
2589
+ d = pe.CLOSED;
2439
2590
  return;
2440
- } else if (d !== Ee.PROBING) {
2591
+ } else if (d !== pe.PROBING) {
2441
2592
  return;
2442
- } else if (e.attempt >= 3) {
2443
- if (l) {
2444
- d = h === ce.NONE ? Ee.ADVERTISE : Ee.CLOSED;
2445
- } else {
2446
- d = Ee.CLOSED;
2593
+ } else if (resolveConflicts()) {
2594
+ if (n) {
2595
+ await c.schedule(Ee.DELAY);
2447
2596
  }
2448
- return;
2449
- } else {
2450
- resolveConflicts();
2597
+ e += 4;
2598
+ return t.retry();
2599
+ } else if (t.attempt < e) {
2451
2600
  await sendProbe();
2452
- return e.retry();
2601
+ return t.retry();
2602
+ } else if (l) {
2603
+ d = h === ce.NONE ? pe.ADVERTISE : pe.CLOSED;
2604
+ } else {
2605
+ d = pe.CLOSED;
2453
2606
  }
2454
2607
  });
2455
2608
  return next();
2456
2609
  }();
2457
2610
 
2458
- case Ee.ADVERTISE:
2611
+ case pe.ADVERTISE:
2459
2612
  return async function announce() {
2460
- while (d === Ee.ADVERTISE && !y.closed) {
2461
- if (!await c.schedule(pe.ANNOUNCE, async e => {
2462
- if (d !== Ee.ADVERTISE) {
2613
+ while (d === pe.ADVERTISE && !y.closed) {
2614
+ if (!await c.schedule(Ee.ANNOUNCE, async e => {
2615
+ if (d !== pe.ADVERTISE) {
2463
2616
  return !1;
2464
2617
  } else if (e.attempt > 2 && y.refresh()) {
2465
2618
  return !0;
@@ -2472,8 +2625,8 @@ function createInterfaceAdvertiser(e, t, o) {
2472
2625
  }
2473
2626
  return !1;
2474
2627
  })) {
2475
- await c.schedule(pe.REOPEN, async e => {
2476
- if (d !== Ee.ADVERTISE) {
2628
+ await c.schedule(Ee.REOPEN, async e => {
2629
+ if (d !== pe.ADVERTISE) {
2477
2630
  return;
2478
2631
  } else if (!y.refresh() && !y.closed) {
2479
2632
  return e.retry();
@@ -2484,19 +2637,20 @@ function createInterfaceAdvertiser(e, t, o) {
2484
2637
  return next();
2485
2638
  }();
2486
2639
 
2487
- case Ee.CLOSED:
2640
+ case pe.CLOSED:
2488
2641
  return async function reopen() {
2489
2642
  c.cancel();
2490
2643
  if (f++ > 15) {
2491
2644
  return;
2492
2645
  }
2493
- await c.schedule(pe.REOPEN, async e => {
2494
- if (d === Ee.CLOSED && y.refresh() && !y.closed) {
2495
- return e.retry();
2496
- } else if (!y.closed) {
2497
- d = Ee.PROBING;
2646
+ await c.schedule(Ee.REOPEN, async e => {
2647
+ if (d !== pe.CLOSED) {
2498
2648
  return;
2499
2649
  }
2650
+ if (!y.refresh() || y.closed) {
2651
+ return e.retry();
2652
+ }
2653
+ d = pe.PROBING;
2500
2654
  });
2501
2655
  return next();
2502
2656
  }();
@@ -2505,7 +2659,7 @@ function createInterfaceAdvertiser(e, t, o) {
2505
2659
  return {
2506
2660
  promise: (async () => {
2507
2661
  try {
2508
- d = Ee.PROBING;
2662
+ d = pe.PROBING;
2509
2663
  await next();
2510
2664
  c.cancel();
2511
2665
  } catch (e) {
@@ -2519,8 +2673,8 @@ function createInterfaceAdvertiser(e, t, o) {
2519
2673
  async close() {
2520
2674
  try {
2521
2675
  c.cancel();
2522
- if (d !== Ee.CLOSED) {
2523
- d = Ee.CLOSED;
2676
+ if (d !== pe.CLOSED) {
2677
+ d = pe.CLOSED;
2524
2678
  await sendGoodbye();
2525
2679
  }
2526
2680
  c.cancel();
@@ -2543,7 +2697,7 @@ exports.advertise = function advertise(e) {
2543
2697
  for (const s of n) {
2544
2698
  r.set(s, createInterfaceAdvertiser(s, e, t));
2545
2699
  }
2546
- s.schedule(pe.REOPEN, n => {
2700
+ s.schedule(Ee.REOPEN, n => {
2547
2701
  try {
2548
2702
  const s = new Set(t.networkInterfaceNames());
2549
2703
  for (const n of s) {