webhistory.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const { URL } = require('url')
  2. const fileHash = require('../../util/backup_filehash')
  3. const apple_timestamp = require('../../util/apple_timestamp')
  4. const HISTORY_DB = fileHash('Library/Safari/History.db', 'AppDomain-com.apple.mobilesafari')
  5. module.exports = {
  6. version: 4,
  7. name: 'safari.webhistory',
  8. description: `List all web history`,
  9. requiresBackup: true,
  10. // Run on a v3 lib / backup object
  11. run (lib, { backup }) {
  12. return getWebHistory(backup)
  13. },
  14. // Available fields.
  15. output: {
  16. timestamp: el => el.XFORMATTEDDATESTRING,
  17. origin: el => new URL(el.url || '').origin || '',
  18. url: el => el.url,
  19. title: el => (el.title || '')
  20. }
  21. }
  22. /// Get all web history entries.
  23. function getWebHistory (backup) {
  24. return new Promise((resolve, reject) => {
  25. backup.openDatabase(HISTORY_DB)
  26. .then(db => {
  27. db.all(`SELECT *, ${apple_timestamp.parse('visit_time')} AS XFORMATTEDDATESTRING from history_visits LEFT JOIN history_items ON history_items.ROWID = history_visits.history_item`, function (err, rows) {
  28. if (err) reject(err)
  29. resolve(rows)
  30. })
  31. })
  32. .catch(reject)
  33. })
  34. }