Skip to content

Commit 56b0fbc

Browse files
authored
enable saving local/sessionStorage! (#275)
- should improve fidelity of archiving many logged in sites - use injected script instead of CDP api due to security restriction. - enabled by default for now - deps: update RWP, wabac.js deps bump version to 0.14.0
1 parent c772029 commit 56b0fbc

File tree

3 files changed

+81
-37
lines changed

3 files changed

+81
-37
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@webrecorder/archivewebpage",
33
"productName": "ArchiveWeb.page",
4-
"version": "0.13.3",
4+
"version": "0.14.0",
55
"main": "index.js",
66
"description": "Create Web Archives directly in your browser",
77
"repository": {
@@ -14,7 +14,7 @@
1414
"@fortawesome/fontawesome-free": "^5.13.0",
1515
"@ipld/car": "^5.3.1",
1616
"@webrecorder/awp-sw": "^0.5.0",
17-
"@webrecorder/wabac": "^2.20.1",
17+
"@webrecorder/wabac": "^2.20.3",
1818
"auto-js-ipfs": "^2.3.0",
1919
"browsertrix-behaviors": "^0.6.4",
2020
"btoa": "^1.2.1",
@@ -26,7 +26,7 @@
2626
"node-fetch": "2.6.7",
2727
"pdfjs-dist": "2.2.228",
2828
"pretty-bytes": "^5.6.0",
29-
"replaywebpage": "^2.2.1",
29+
"replaywebpage": "^2.2.2",
3030
"stream-browserify": "^3.0.0",
3131
"tsconfig-paths-webpack-plugin": "^4.1.0",
3232
"unused-filename": "^4.0.1",
@@ -64,7 +64,7 @@
6464
"webpack-extension-reloader": "^1.1.4"
6565
},
6666
"resolutions": {
67-
"@webrecorder/wabac": "^2.20.1"
67+
"@webrecorder/wabac": "^2.20.3"
6868
},
6969
"files": [
7070
"src/",

src/recorder.ts

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ function sleep(time) {
3636

3737
// ===========================================================================
3838
class Recorder {
39+
recordStorage = true;
40+
3941
constructor() {
4042
// @ts-expect-error - TS2339 - Property 'flatMode' does not exist on type 'Recorder'.
4143
this.flatMode = false;
@@ -1488,7 +1490,7 @@ class Recorder {
14881490
data.extraOpts.pixelRatio = this.pixelRatio;
14891491

14901492
// handle storage
1491-
const storage = await this.getStorage(reqresp.url);
1493+
const storage = await this.getStorage(sessions);
14921494

14931495
if (storage) {
14941496
data.extraOpts.storage = storage;
@@ -1508,29 +1510,44 @@ class Recorder {
15081510
//delete this._fetchPending[requestId];
15091511
}
15101512

1511-
// @ts-expect-error - TS7006 - Parameter 'url' implicitly has an 'any' type.
1512-
async getStorage(url) {
1513+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1514+
async getStorage(sessions: any) {
15131515
// check if recording storage is allowed
1514-
// @ts-expect-error - TS2339 - Property 'recordStorage' does not exist on type 'Recorder'.
15151516
if (!this.recordStorage) {
15161517
return null;
15171518
}
15181519

1519-
const securityOrigin = new URL(url).origin;
1520-
const storageId = { securityOrigin, isLocalStorage: true };
1521-
1522-
// @ts-expect-error - TS2345 - Argument of type '{ storageId: { securityOrigin: string; isLocalStorage: boolean; }; }' is not assignable to parameter of type 'null | undefined'.
1523-
const local = await this.send("DOMStorage.getDOMStorageItems", {
1524-
storageId,
1525-
});
1526-
storageId.isLocalStorage = false;
1520+
const extractStorage = () => {
1521+
const local: [string, string][] = [];
1522+
for (let i = 0; i < localStorage.length; i++) {
1523+
const key = localStorage.key(i);
1524+
if (!key) continue;
1525+
const value = localStorage.getItem(key);
1526+
if (!value) continue;
1527+
local.push([key, value]);
1528+
}
1529+
const session: [string, string][] = [];
1530+
for (let i = 0; i < sessionStorage.length; i++) {
1531+
const key = sessionStorage.key(i);
1532+
if (!key) continue;
1533+
const value = sessionStorage.getItem(key);
1534+
if (!value) continue;
1535+
session.push([key, value]);
1536+
}
1537+
return JSON.stringify({ local, session });
1538+
};
15271539

1528-
// @ts-expect-error - TS2345 - Argument of type '{ storageId: { securityOrigin: string; isLocalStorage: boolean; }; }' is not assignable to parameter of type 'null | undefined'.
1529-
const session = await this.send("DOMStorage.getDOMStorageItems", {
1530-
storageId,
1531-
});
1540+
const { result } = await this.pageEval(
1541+
"__awp_extract_storage",
1542+
`(${extractStorage.toString()})();`,
1543+
sessions,
1544+
);
15321545

1533-
return JSON.stringify({ local: local.entries, session: session.entries });
1546+
if (result && result.type === "string") {
1547+
return result.value;
1548+
} else {
1549+
return null;
1550+
}
15341551
}
15351552

15361553
// @ts-expect-error - TS7006 - Parameter 'params' implicitly has an 'any' type.

yarn.lock

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2284,16 +2284,16 @@
22842284
uuid "^9.0.0"
22852285
warcio "^2.3.1"
22862286

2287-
"@webrecorder/wabac@^2.20.0", "@webrecorder/wabac@^2.20.1":
2288-
version "2.20.1"
2289-
resolved "https://registry.yarnpkg.com/@webrecorder/wabac/-/wabac-2.20.1.tgz#58e397e2ef1c33de1bb37aa4f51fc7f3eec8a1f7"
2290-
integrity sha512-RX+U6m7aVgvsAfLb9FuLY/PcHCNL5dc1FPaD0GnUiFgswSSe5v4MjIhqJNOnbrJYEcbib81AJfxNuvOyXAJDJQ==
2287+
"@webrecorder/wabac@^2.20.0", "@webrecorder/wabac@^2.20.3":
2288+
version "2.20.3"
2289+
resolved "https://registry.yarnpkg.com/@webrecorder/wabac/-/wabac-2.20.3.tgz#4e3faa476477b64ba2c2315f57d38372d0acf4c0"
2290+
integrity sha512-bik2YbIJwox5LctL3QwZ1pvG89ORR31do3mFHTF1l4zcvjqeLoqCHIImEsgl9uH7KYq27UxeG4y25Jo3PxA5qQ==
22912291
dependencies:
22922292
"@peculiar/asn1-ecc" "^2.3.4"
22932293
"@peculiar/asn1-schema" "^2.3.3"
22942294
"@peculiar/x509" "^1.9.2"
22952295
"@types/js-levenshtein" "^1.1.3"
2296-
"@webrecorder/wombat" "^3.8.3"
2296+
"@webrecorder/wombat" "^3.8.6"
22972297
acorn "^8.10.0"
22982298
auto-js-ipfs "^2.1.1"
22992299
base64-js "^1.5.1"
@@ -2312,14 +2312,14 @@
23122312
path-parser "^6.1.0"
23132313
process "^0.11.10"
23142314
stream-browserify "^3.0.0"
2315-
warcio "^2.3.1"
2315+
warcio "^2.4.0"
23162316

2317-
"@webrecorder/wombat@^3.8.3":
2318-
version "3.8.3"
2319-
resolved "https://registry.yarnpkg.com/@webrecorder/wombat/-/wombat-3.8.3.tgz#c5a077225d1a70def9fbbbfcd50fa4465d236546"
2320-
integrity sha512-dqgoxigB3OdX5JeB3yxJrUNwFwUBlYC+LmGrLEgGeP259MFzXQLD2pmfuqGt5ygWvIv56SrAMV4sUceux07X2A==
2317+
"@webrecorder/wombat@^3.8.6":
2318+
version "3.8.6"
2319+
resolved "https://registry.yarnpkg.com/@webrecorder/wombat/-/wombat-3.8.6.tgz#3aa99d9519f6263434a9e0b963f6ef86d3e0494a"
2320+
integrity sha512-+IxV0bkoc6QdHYzwejsPFPC31dRjaxa6zGuR9F08aFb4Ooeekf9AK16ZIYweizs/wm7nvTG5E12ZwW0LUUzX8w==
23212321
dependencies:
2322-
warcio "^2.3.1"
2322+
warcio "^2.4.0"
23232323

23242324
"@xmldom/xmldom@^0.8.8":
23252325
version "0.8.10"
@@ -6798,14 +6798,14 @@ repeat-string@^1.6.1:
67986798
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
67996799
integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
68006800

6801-
replaywebpage@^2.2.1:
6802-
version "2.2.1"
6803-
resolved "https://registry.yarnpkg.com/replaywebpage/-/replaywebpage-2.2.1.tgz#3a468238d4ccb3ec04693bdc355e416fcaa6cedd"
6804-
integrity sha512-mh5fXIVB51+ADCWzfhiiSrhyNrkAgnUwBOVKUvGhC6tkrsoPa5TOI5yZNCmeey4RcJmcC0gYFKkoDQVsluHZUQ==
6801+
replaywebpage@^2.2.2:
6802+
version "2.2.2"
6803+
resolved "https://registry.yarnpkg.com/replaywebpage/-/replaywebpage-2.2.2.tgz#91fb8d5afd28db1c0e65fc61c214aa2a37b273df"
6804+
integrity sha512-gsgRP8JFYIRE5BIyV7IMH9S86iV1CbKWxJPOVnWyA6rZtEy6LcCgd8NFjLZQZotfF2p29jaF0ZWL5OFqrx1K+A==
68056805
dependencies:
68066806
"@fortawesome/fontawesome-free" "^5.15.4"
68076807
"@shoelace-style/shoelace" "~2.15.1"
6808-
"@webrecorder/wabac" "^2.20.1"
6808+
"@webrecorder/wabac" "^2.20.3"
68096809
bulma "^0.9.3"
68106810
electron-log "^4.4.1"
68116811
electron-updater "^6.3.2"
@@ -8168,6 +8168,20 @@ warcio@^2.3.1:
81688168
uuid-random "^1.3.2"
81698169
yargs "^17.6.2"
81708170

8171+
warcio@^2.4.0:
8172+
version "2.4.0"
8173+
resolved "https://registry.yarnpkg.com/warcio/-/warcio-2.4.0.tgz#13bae2837f1bbf5cf7585f75857e6311d30557bd"
8174+
integrity sha512-EfxXCgsnZ35CGf2j99QBMyB6EI98KEQ6YmeER+8Lnv/4KFJ3thT76PiX37HfZVbPJS21JihA0Eddjk9QBQRlPg==
8175+
dependencies:
8176+
"@types/pako" "^1.0.7"
8177+
"@types/stream-buffers" "^3.0.7"
8178+
base32-encode "^2.0.0"
8179+
hash-wasm "^4.9.0"
8180+
pako "^1.0.11"
8181+
tempy "^3.1.0"
8182+
uuid-random "^1.3.2"
8183+
yargs "^17.7.2"
8184+
81718185
watchpack@^2.4.1:
81728186
version "2.4.1"
81738187
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff"
@@ -8526,6 +8540,19 @@ yargs@^17.6.2:
85268540
y18n "^5.0.5"
85278541
yargs-parser "^21.1.1"
85288542

8543+
yargs@^17.7.2:
8544+
version "17.7.2"
8545+
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
8546+
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
8547+
dependencies:
8548+
cliui "^8.0.1"
8549+
escalade "^3.1.1"
8550+
get-caller-file "^2.0.5"
8551+
require-directory "^2.1.1"
8552+
string-width "^4.2.3"
8553+
y18n "^5.0.5"
8554+
yargs-parser "^21.1.1"
8555+
85298556
yauzl@^2.10.0:
85308557
version "2.10.0"
85318558
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"

0 commit comments

Comments
 (0)