Fingerprint Pro Internals
Collector s217

Battery

charging state and levels from getBattery

Group: Hardware · signal map · run it live

// s217 — sig_s217_getBattery
// module cm, stage2, codes 0 -1 -2 -101
//
// measures
//   navigator.getBattery navigator.getBattery() DOMException TextEncoder
// engine
//   Number.isFinite() TypeError ArrayBuffer Object.getOwnPropertyNames() Object.getPrototypeOf()
//   Uint32Array Uint8Array Error
// reported value
//   null {c,l,ct,dt}
// probes
//   "NotAllowedError" "chargingTime" "dischargingTime" "function"
// compares against
//   == "function" === "NotAllowedError" === "function" === "string" in "getBattery"
// decides on
//   !("getBattery" in navigator) || !(typeof navigator.getBattery === "function")
//   fn118(v846)
//   v846 instanceof Error && v846.name === "NotAllowedError"
//   h_s217_fn: Number.isFinite(arg683)
//   readVaultedProp: typeof v316 == "function"
//   fn118: (arg732 instanceof DOMException || arg732 instanceof TypeError) && (v10.test(arg732.message) || v12.test(arg732.message) || v11.test(arg732.message) || v13.test…
//   resolveNameByHash: typeof arg801 === "string"
//   resolveNameByHash: fn48(v928) === arg801
//
// 2 owned helpers inlined below.
// shared with other collectors, see agent.clean.js:
//   asUint8Array:6496 crc32OfBytes:4943 fn118:6312 fn48:3370 readVaultedProp:1674
//   resolveNameByHash:7015 stringToBytes:7901 v10:3418 v11:3419 v12:3420 v13:3421 v14:3422

// agent.clean.js:5825
function h_s217_fn(arg683) {
  return Number.isFinite(arg683) ? arg683 : h_s217_fn2;
}

// agent.clean.js:6245
async function sig_s217_getBattery() {
  if (!("getBattery" in navigator) || !(typeof navigator.getBattery === "function")) {
    return { s: -1, v: null };
  }
  try {
    const v845 = await navigator.getBattery();
    return {
      s: 0,
      v: {
        c: v845.charging,
        l: v845.level,
        ct: h_s217_fn(readVaultedProp(v845, "chargingTime")),
        dt: h_s217_fn(readVaultedProp(v845, "dischargingTime")),
      },
    };
  } catch (v846) {
    if (fn118(v846)) {
      return { s: -101, v: null };
    }
    if (v846 instanceof Error && v846.name === "NotAllowedError") {
      return { s: -2, v: null };
    }
    throw v846;
  }
}

// agent.clean.js:8288
const h_s217_fn2 = -1;