Fingerprint Pro Internals
Collector s29

Storage quota

the usage and quota the origin is granted

Group: Storage · signal map · run it live

// s29 — sig_s29
// module cm, stage2, codes 1 0 -1 -2 -101
//
// measures
//   DOMException TextEncoder clearTimeout() setTimeout()
// engine
//   TypeError ArrayBuffer Object.getOwnPropertyNames() Object.getPrototypeOf() Promise.race()
//   Uint32Array Uint8Array Promise
// reported value
//   null value
// probes
//   "3b947bb" "function" "quota"
// compares against
//   == "function" === "string"
// decides on
//   !webkitTemporaryStorage && !storage?.estimate
//   v464 !== undefined
//   v465 !== undefined
//   fn118(v466)
//   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…
//   fn158: Date.now() < v1036
//   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 fn158:8266 fn167:8899 fn48:3370
//   readVaultedProp:1674 resolveNameByHash:7015 stringToBytes:7901 v10:3418 v11:3419 v12:3420
//   v13:3421 v14:3422

// agent.clean.js:3054
async function sig_s29() {
  const storage = v30.storage,
    webkitTemporaryStorage = v30.webkitTemporaryStorage;
  if (!webkitTemporaryStorage && !storage?.estimate) {
    return { s: -1, v: null };
  }
  if (webkitTemporaryStorage) {
    const v464 = await Promise.race([
      fn167(250, undefined),
      new Promise((arg357) => {
        webkitTemporaryStorage.queryUsageAndQuota((arg358, arg359) => arg357(arg359));
      }),
    ]);
    if (v464 !== undefined) {
      return { s: 0, v: v464 };
    }
  }
  try {
    if (storage?.estimate) {
      const v465 = await Promise.race([
        fn167(250, undefined),
        storage.estimate().then((arg360) => readVaultedProp(arg360, "quota")),
      ]);
      if (v465 !== undefined) {
        return { s: 1, v: v465 };
      }
    }
    return { s: -2, v: null };
  } catch (v466) {
    if (fn118(v466)) {
      return { s: -101, v: null };
    }
    throw v466;
  }
}

// agent.clean.js:9034
const h_s29_fn = {};

// agent.clean.js:9035
const v30 = function () {
  return {
    key: "ex",
    ab: h_s29_fn,
    sources: { stage2: {}, stage3: {} },
    toRequest: () => ({ epv: "3b947bb" }),
  };
};