Skip to content

Instantly share code, notes, and snippets.

@dmurph
Last active June 21, 2017 00:04
Show Gist options
  • Save dmurph/0904b8bc3c58e2d8f32fb4623e41ff98 to your computer and use it in GitHub Desktop.
Save dmurph/0904b8bc3c58e2d8f32fb4623e41ff98 to your computer and use it in GitHub Desktop.
Extract Docs IDB State
function json_db_items(os_name, keys, log, db) {
  var txn = db.transaction([os_name], "readonly");
  txn.onerror = (event)=>{
    log(event);
  }
  var os = txn.objectStore(os_name);
  let i = 0;
  var str = [];
  let num = keys.length;
  keys.forEach((key)=>{
    var readRequest = os.get(key);
    readRequest.onsuccess = ()=>{
      str.push("var " + os_name + "_key = " + JSON.stringify(key));
      str.push("var " + os_name + "_value = " + JSON.stringify(readRequest.result));
      --num;
      if (num == 0) {
        log(os_name);
        log(str.join("\n"));
      }
    }
  }
  );
}

function open_db(name, cb) {
  var request = indexedDB.open(name);
  request.onsuccess = ()=>{
    cb(request.result);
  }
}

var so1 = ["syncMap", "preferences", "docs-show_smart_todo", "1"];
var so2 = ["syncMap", "preferences", "docs-voice_tips_shown"];
var so3 = ["syncMap", "domainFonts", "2"];
var so4 = ["syncMap", "domainFonts", "5"];

var obs_func = function(changes) {
  console.log("printing txn records");
  var str = [];
  changes.records.forEach((value,key)=>{
    console.log(key);
    value.forEach((value)=>{
      str.push("var " + key + "_key = IDBKeyRange.bound(" + [JSON.stringify(value.key.lower), JSON.stringify(value.key.upper), value.key.lowerOpen, value.key.upperOpen].join(",") + ")");
      str.push("var " + key + "_value = " + JSON.stringify(value.value));
    }
    );
  }
  );
  console.log(str.join("\n"));
}

if (observer && the_db) {
  observer.unobserve(the_db);
}

var the_db;
var observer = new IDBObserver(obs_func);

function dumpDB(db) {
  the_db = db;
  json_db_items("Users", ["ufa1a865c6eb48d97"], console.log, db);

  json_db_items("DocumentLocks", [["19OmSKoWTJrUPwoA3G2-ZHe6jPMw2voDpyStgHFXH7qI"]], console.log, db);

  json_db_items("Documents", ["19OmSKoWTJrUPwoA3G2-ZHe6jPMw2voDpyStgHFXH7qI", "1HybJ594lZzyzPzZGCgf1JFwXA5rPx5Z0bO19glO-a5k"], console.log, db);

  json_db_items("PendingQueues", ["19OmSKoWTJrUPwoA3G2-ZHe6jPMw2voDpyStgHFXH7qI", "1HybJ594lZzyzPzZGCgf1JFwXA5rPx5Z0bO19glO-a5k"], console.log, db);

  json_db_items("SyncObjects", [so1, so2, so3, so4], console.log, db);

  json_db_items("FontMetadata", ["Cambria", "Cambria|*"], console.log, db);

  var txn = db.transaction(["Users", "DocumentLocks", "Documents", "PendingQueues", "SyncObjects", "FontMetadata", "PendingQueueCommands"]);
  observer.observe(db, txn, {
    values: true,
    operationTypes: ["put", "add", "delete", "clear"]
  });
}

open_db("GoogleDocs", dumpDB);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment