@apocaliss92/nodelink-js 0.4.16 → 0.4.18

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.
@@ -7659,11 +7659,20 @@ async function captureModelFixtures(params) {
7659
7659
  return void 0;
7660
7660
  }
7661
7661
  }
7662
- const info = await capture(
7662
+ const channelInfo = await capture(
7663
7663
  "getInfo",
7664
- () => api.getInfo(channel),
7665
- (v) => writeJsonSafe(path4.join(outDir, "device-info.json"), v)
7664
+ () => api.getInfo(channel)
7666
7665
  );
7666
+ const baseInfo = await capture(
7667
+ "getInfoBase",
7668
+ () => api.getInfo()
7669
+ );
7670
+ const mergedInfo = { ...baseInfo ?? {} };
7671
+ for (const [k, v] of Object.entries(channelInfo ?? {})) {
7672
+ if (v !== void 0 && v !== null && v !== "") mergedInfo[k] = v;
7673
+ }
7674
+ const info = Object.keys(mergedInfo).length > 0 ? mergedInfo : void 0;
7675
+ if (info) writeJsonSafe(path4.join(outDir, "device-info.json"), info);
7667
7676
  const support = await capture(
7668
7677
  "getSupportInfo",
7669
7678
  () => api.getSupportInfo(),
@@ -7779,6 +7788,76 @@ async function captureModelFixtures(params) {
7779
7788
  () => api.getDualLensChannelInfo(channel),
7780
7789
  (v) => writeJsonSafe(path4.join(outDir, "dual-lens-info.json"), v)
7781
7790
  );
7791
+ await capture(
7792
+ "getEncOptions",
7793
+ () => api.getEncOptions(channel),
7794
+ (v) => writeJsonSafe(path4.join(outDir, "enc-options.json"), v)
7795
+ );
7796
+ await capture(
7797
+ "getEnc",
7798
+ () => api.getEnc(channel),
7799
+ (v) => writeJsonSafe(path4.join(outDir, "enc.json"), v)
7800
+ );
7801
+ await capture(
7802
+ "getStreamInfoList",
7803
+ () => api.getStreamInfoList(channel),
7804
+ (v) => writeJsonSafe(path4.join(outDir, "stream-info-list.json"), v)
7805
+ );
7806
+ await capture(
7807
+ "getAutoFocus",
7808
+ () => api.getAutoFocus(channel),
7809
+ (v) => writeJsonSafe(path4.join(outDir, "autofocus.json"), v)
7810
+ );
7811
+ await capture(
7812
+ "getLedState",
7813
+ () => api.getLedState(channel),
7814
+ (v) => writeJsonSafe(path4.join(outDir, "led-state.json"), v)
7815
+ );
7816
+ await capture(
7817
+ "getIrLights",
7818
+ () => api.getIrLights(channel),
7819
+ (v) => writeJsonSafe(path4.join(outDir, "ir-lights.json"), v)
7820
+ );
7821
+ await capture(
7822
+ "getImage",
7823
+ () => api.getImage(channel),
7824
+ (v) => writeJsonSafe(path4.join(outDir, "image.json"), v)
7825
+ );
7826
+ await capture(
7827
+ "getIsp",
7828
+ () => api.getIsp(channel),
7829
+ (v) => writeJsonSafe(path4.join(outDir, "isp.json"), v)
7830
+ );
7831
+ await capture(
7832
+ "getDayNightThreshold",
7833
+ () => api.getDayNightThreshold(channel),
7834
+ (v) => writeJsonSafe(path4.join(outDir, "day-night-threshold.json"), v)
7835
+ );
7836
+ await capture(
7837
+ "getMask",
7838
+ () => api.getMask(channel),
7839
+ (v) => writeJsonSafe(path4.join(outDir, "mask.json"), v)
7840
+ );
7841
+ await capture(
7842
+ "getAudioCfg",
7843
+ () => api.getAudioCfg(channel),
7844
+ (v) => writeJsonSafe(path4.join(outDir, "audio-cfg.json"), v)
7845
+ );
7846
+ await capture(
7847
+ "getOsdDatetime",
7848
+ () => api.getOsdDatetime(channel),
7849
+ (v) => writeJsonSafe(path4.join(outDir, "osd-datetime.json"), v)
7850
+ );
7851
+ await capture(
7852
+ "getPtzPosition",
7853
+ () => api.getPtzPosition(channel),
7854
+ (v) => writeJsonSafe(path4.join(outDir, "ptz-position.json"), v)
7855
+ );
7856
+ await capture(
7857
+ "getZoomFocus",
7858
+ () => api.getZoomFocus(channel),
7859
+ (v) => writeJsonSafe(path4.join(outDir, "zoom-focus.json"), v)
7860
+ );
7782
7861
  if (!params.skipStreamCombinationTest) await capture("streamCombinationTest", async () => {
7783
7862
  let dualLensInfo;
7784
7863
  try {
@@ -18573,7 +18652,15 @@ var applyFloodlightSettingsToXml = (xml, settings) => {
18573
18652
  // src/reolink/baichuan/ReolinkBaichuanApi.ts
18574
18653
  var DUAL_LENS_DUAL_MOTION_MODELS = /* @__PURE__ */ new Set([
18575
18654
  "Reolink Duo PoE",
18576
- "Reolink Duo WiFi"
18655
+ "Reolink Duo WiFi",
18656
+ // Duo 2 family
18657
+ "Reolink Duo 2 PoE",
18658
+ "Reolink Duo 2 WiFi",
18659
+ // Duo 3 family — physically dual-sensor, marketed as a stitched 16MP feed
18660
+ // (the firmware exposes a single logical channel, so callers should still
18661
+ // check `getDualLensChannelInfo` for the actual channel topology).
18662
+ "Reolink Duo 3 PoE",
18663
+ "Reolink Duo 3 WiFi"
18577
18664
  ]);
18578
18665
  var DUAL_LENS_SINGLE_MOTION_MODELS = /* @__PURE__ */ new Set([
18579
18666
  "Reolink TrackMix",
@@ -18588,7 +18675,10 @@ var DUAL_LENS_MODELS = /* @__PURE__ */ new Set([
18588
18675
  ]);
18589
18676
  var isDualLenseModel = (model) => {
18590
18677
  const lower = model.toLowerCase();
18591
- return Array.from(DUAL_LENS_MODELS).some((m) => m.toLowerCase() === lower) || lower.includes("trackmix") || lower.includes("trackflex");
18678
+ if (Array.from(DUAL_LENS_MODELS).some((m) => m.toLowerCase() === lower)) {
18679
+ return true;
18680
+ }
18681
+ return lower.includes("trackmix") || lower.includes("trackflex") || /\bduo\b/.test(lower);
18592
18682
  };
18593
18683
  var NVR_HUB_EXACT_TYPES = ["NVR", "WIFI_NVR", "HOMEHUB"];
18594
18684
  var NVR_HUB_MODEL_PATTERNS = [
@@ -26387,6 +26477,13 @@ ${xml}`
26387
26477
  model = deviceInfo.type?.trim();
26388
26478
  } catch {
26389
26479
  }
26480
+ if (!model) {
26481
+ try {
26482
+ const deviceInfoBase = await this.getInfo(void 0, { tags: ["type"] });
26483
+ model = deviceInfoBase.type?.trim();
26484
+ } catch {
26485
+ }
26486
+ }
26390
26487
  try {
26391
26488
  const capabilities = await this.getDeviceCapabilities(channel);
26392
26489
  channelNum = capabilities.support?.channelNum;