@wenathlan/extension 1.1.38 → 1.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/capture.d.ts +161 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +574 -6
- package/dist/index.js.map +3 -3
- package/dist/memory.d.ts +65 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/policy.d.ts +35 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/protocol.d.ts +39 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/types.d.ts +202 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/extension/dist/background.js +1594 -52
- package/extension/dist/background.js.map +4 -4
- package/extension/dist/manifest.json +1 -1
- package/extension/dist/pagebridge.js +66 -3
- package/extension/dist/pagebridge.js.map +3 -3
- package/extension/dist/popup.html +1 -1
- package/extension/dist/popup.js +39 -2
- package/extension/dist/popup.js.map +2 -2
- package/extension/dist/sidepanel.html +1 -1
- package/extension/dist/sidepanel.js +306 -2
- package/extension/dist/sidepanel.js.map +2 -2
- package/extension/dist/style.css +2 -0
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOEjO8Z0PDgQyfvawGcaO2j+o0GLCFTLNj7TkYC/Avo9l2NenMRq7gp90Nfd7E9MViv/OMcCKSYZ5unv12QPRtv31C+a5UQWDFAOP/cH5mwMd6hsayElrSoW8ta+FwFqmr9dIFkn7cQEU3YhZr4Gcbs+ycUHOxVgDA4NBKB0rQ6e9VW5LvTw0isRYUrqM+M72vKxHk9zUIYYn/LGPvottKBYi2GLr0PHSeC2UE+Shmq7vcFIXj6hDjvD4kLJ5sKoUllEcZ1TPuBcnHUQ9ndKA5iktXDQOIJCUJmi7a0YJ2PGg7fvpYfT9k0ai/qZ+pIoRfoOEwE01bPoDn7NjeYnNQIDAQAB",
|
|
4
4
|
"name": "Devthink",
|
|
5
|
-
"version": "1.1.
|
|
5
|
+
"version": "1.1.40",
|
|
6
6
|
"description": "A consent-first bridge for reviewed browser-agent tasks.",
|
|
7
7
|
"permissions": [
|
|
8
8
|
"activeTab",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
(() => {
|
|
3
3
|
// policy.ts
|
|
4
|
-
var sensitiveactions = /* @__PURE__ */ new Set(["click", "type", "navigate", "select", "presskey", "drag", "drop", "upload", "clear", "check", "uncheck", "toggle", "submit", "reload", "back", "forward", "writestorage", "setattribute", "removeattribute", "evaluate", "tabcreate", "tabactivate", "tabclose", "tabreload", "windowcreate", "windowclose", "windowresize", "downloadfile", "clickpoint", "shiftclick", "dismissdialog", "enterframe", "typetime", "appendtext", "setvalue", "typeedit", "keyhold", "keyrelease", "submitsearch", "selectmulti", "chooseradio", "setslider", "setdate", "setcolor", "openlink", "openprivate", "reloadcache", "stopnav", "followlink", "spanav", "rewritequery", "setfragment", "navlist", "navprofile", "handleauth", "printpdf", "prefetch", "preconnect", "deeplink", "reopentab", "pausenav", "navrate", "openclipboard", "batchopen", "duplicatetab", "closepattern", "pintab", "mutetab", "movetab", "movetabwindow", "grouptabs", "colorgroup", "collapsegroup", "discardtab", "reloadtabs", "zoomin", "zoomout", "switchtab", "maximizewindow", "minimizewindow", "restorewindow", "focuswindow", "scratchwindow", "incognitowindow", "restoretab", "restorelayout", "reopenrun", "badgetab", "fillform", "filllabel", "fillplaceholder", "submitform", "retryform", "runwizard", "selectchain", "picktypeahead", "pickdate", "attachfile", "fillcard", "fillcode", "consentpassword", "exportcsv", "exportjson", "exportexcel", "copytable", "pushsheets", "streamdisk", "paginateextract", "resumeextract"]);
|
|
4
|
+
var sensitiveactions = /* @__PURE__ */ new Set(["click", "type", "navigate", "select", "presskey", "drag", "drop", "upload", "clear", "check", "uncheck", "toggle", "submit", "reload", "back", "forward", "writestorage", "setattribute", "removeattribute", "evaluate", "tabcreate", "tabactivate", "tabclose", "tabreload", "windowcreate", "windowclose", "windowresize", "downloadfile", "clickpoint", "shiftclick", "dismissdialog", "enterframe", "typetime", "appendtext", "setvalue", "typeedit", "keyhold", "keyrelease", "submitsearch", "selectmulti", "chooseradio", "setslider", "setdate", "setcolor", "openlink", "openprivate", "reloadcache", "stopnav", "followlink", "spanav", "rewritequery", "setfragment", "navlist", "navprofile", "handleauth", "printpdf", "prefetch", "preconnect", "deeplink", "reopentab", "pausenav", "navrate", "openclipboard", "batchopen", "duplicatetab", "closepattern", "pintab", "mutetab", "movetab", "movetabwindow", "grouptabs", "colorgroup", "collapsegroup", "discardtab", "reloadtabs", "zoomin", "zoomout", "switchtab", "maximizewindow", "minimizewindow", "restorewindow", "focuswindow", "scratchwindow", "incognitowindow", "restoretab", "restorelayout", "reopenrun", "badgetab", "fillform", "filllabel", "fillplaceholder", "submitform", "retryform", "runwizard", "selectchain", "picktypeahead", "pickdate", "attachfile", "fillcard", "fillcode", "consentpassword", "exportcsv", "exportjson", "exportexcel", "copytable", "pushsheets", "streamdisk", "paginateextract", "resumeextract", "batchdownload", "pausedownload", "resumedownload", "interceptmime", "readclipboard", "writeclipboard", "copyscreen", "quarantinedownload", "scanvirus", "cleanupartifacts"]);
|
|
5
5
|
var interactionactions = /* @__PURE__ */ new Set(["focus", "scroll", "hover", "clickdeep", "rightclick", "doubleclick", "scrollpage", "scrollby", "scrollend", "scrolltop", "fullscreen", "zoomset", "movepointer", "clicktext", "clickaria", "clickname", "expanddetails", "pierceshadow", "retryaction"]);
|
|
6
|
-
var readactions = /* @__PURE__ */ new Set(["observe", "inspect", "extract", "wait", "waitfor", "waittext", "readattribute", "readstyle", "readgeometry", "readvalue", "readtext", "readhtml", "countelements", "readtable", "readlinks", "readimages", "readmeta", "readforms", "readstorage", "highlight", "tablist", "windowlist", "tabsnapshot", "mapclicks", "verifyvisible", "verifyenabled", "resolvexpath", "a11ytree", "readvisible", "readertree", "detectlists", "detecttables", "readjson", "watchmutate", "waitquiet", "watchbanner", "detectinfinitescroll", "detectvirtual", "detectlazy", "readscrollpos", "readlang", "readoutline", "countpages", "listshadow", "listframes", "classifypage", "fingerprintsection", "diffsnapshots", "readselection", "watchfocus", "detectsticky", "detectscrolllock", "readopengraph", "detectlanguage", "deriveselector", "waitload", "waiturl", "spawait", "detecthttp", "readredirects", "readfinalurl", "trailaudit", "navintent", "checksafe", "querytabs", "watchtab", "findclones", "searchtabs", "listaudio", "snapshotsession", "savelayout", "attachmeta", "detectfields", "generatevalues", "saveprofiles", "asksubmit", "readerrors", "skiphoneypot", "detectlogin", "detecttemplate", "handoffcaptcha", "scrapetable", "importcsv", "looprows", "transformvalues", "deduperows", "mergepages", "stamplerows", "previewgrid", "logprovenance"]);
|
|
6
|
+
var readactions = /* @__PURE__ */ new Set(["observe", "inspect", "extract", "wait", "waitfor", "waittext", "readattribute", "readstyle", "readgeometry", "readvalue", "readtext", "readhtml", "countelements", "readtable", "readlinks", "readimages", "readmeta", "readforms", "readstorage", "highlight", "tablist", "windowlist", "tabsnapshot", "mapclicks", "verifyvisible", "verifyenabled", "resolvexpath", "a11ytree", "readvisible", "readertree", "detectlists", "detecttables", "readjson", "watchmutate", "waitquiet", "watchbanner", "detectinfinitescroll", "detectvirtual", "detectlazy", "readscrollpos", "readlang", "readoutline", "countpages", "listshadow", "listframes", "classifypage", "fingerprintsection", "diffsnapshots", "readselection", "watchfocus", "detectsticky", "detectscrolllock", "readopengraph", "detectlanguage", "deriveselector", "waitload", "waiturl", "spawait", "detecthttp", "readredirects", "readfinalurl", "trailaudit", "navintent", "checksafe", "querytabs", "watchtab", "findclones", "searchtabs", "listaudio", "snapshotsession", "savelayout", "attachmeta", "detectfields", "generatevalues", "saveprofiles", "asksubmit", "readerrors", "skiphoneypot", "detectlogin", "detecttemplate", "handoffcaptcha", "scrapetable", "importcsv", "looprows", "transformvalues", "deduperows", "mergepages", "stamplerows", "previewgrid", "logprovenance", "verifydownload", "exportnetlog", "namecaptures", "shotview", "shotfullpage", "shotelement", "shotregion", "contactsheet"]);
|
|
7
7
|
var allowedactions = /* @__PURE__ */ new Set([...sensitiveactions, ...interactionactions, ...readactions]);
|
|
8
8
|
function parseoptions(step) {
|
|
9
9
|
if (step.options === void 0) return {};
|
|
@@ -3117,6 +3117,13 @@
|
|
|
3117
3117
|
return { ok: false, summary: "Unsupported data step." };
|
|
3118
3118
|
}
|
|
3119
3119
|
|
|
3120
|
+
// extension/datacommand.ts
|
|
3121
|
+
function checksum(value) {
|
|
3122
|
+
let hash = 5381;
|
|
3123
|
+
for (let index = 0; index < value.length; index += 1) hash = (hash * 33 ^ value.charCodeAt(index)) >>> 0;
|
|
3124
|
+
return `fnv1a-${hash.toString(16)}`;
|
|
3125
|
+
}
|
|
3126
|
+
|
|
3120
3127
|
// extension/pagebridge.ts
|
|
3121
3128
|
function stepoptions3(step) {
|
|
3122
3129
|
if (!step.options) return {};
|
|
@@ -3254,6 +3261,11 @@
|
|
|
3254
3261
|
return { ok: true, summary: "History forward requested." };
|
|
3255
3262
|
}
|
|
3256
3263
|
if (navstepkinds.has(step.kind)) return await runpagenav(step, rootdocument);
|
|
3264
|
+
if (step.kind === "writeclipboard") {
|
|
3265
|
+
const text = step.value ?? "";
|
|
3266
|
+
await navigator.clipboard.writeText(text);
|
|
3267
|
+
return { ok: true, summary: `Wrote ${text.length} reviewed character${text.length === 1 ? "" : "s"} to the clipboard with payload hash ${checksum(text)}.`, details: { length: text.length, hash: checksum(text), destination: "clipboard" } };
|
|
3268
|
+
}
|
|
3257
3269
|
if (step.kind === "scrollpage") {
|
|
3258
3270
|
const options = stepoptions3(step);
|
|
3259
3271
|
window.scrollBy({ left: typeof options.x === "number" ? options.x : 0, top: typeof options.y === "number" ? options.y : 600, behavior: "auto" });
|
|
@@ -3316,6 +3328,57 @@
|
|
|
3316
3328
|
}
|
|
3317
3329
|
return output;
|
|
3318
3330
|
}
|
|
3319
|
-
|
|
3331
|
+
function measurepage() {
|
|
3332
|
+
const root = document.documentElement;
|
|
3333
|
+
return {
|
|
3334
|
+
scrollwidth: Math.max(root.scrollWidth, document.body?.scrollWidth ?? 0),
|
|
3335
|
+
scrollheight: Math.max(root.scrollHeight, document.body?.scrollHeight ?? 0),
|
|
3336
|
+
viewportwidth: window.innerWidth,
|
|
3337
|
+
viewportheight: window.innerHeight,
|
|
3338
|
+
pixelratio: window.devicePixelRatio || 1,
|
|
3339
|
+
scrollx: window.scrollX,
|
|
3340
|
+
scrolly: window.scrollY
|
|
3341
|
+
};
|
|
3342
|
+
}
|
|
3343
|
+
function elementrect(selector) {
|
|
3344
|
+
const target = document.querySelector(selector);
|
|
3345
|
+
if (!target) return { ok: false, summary: "The reviewed capture element is no longer available." };
|
|
3346
|
+
const bounds = target.getBoundingClientRect();
|
|
3347
|
+
if (bounds.width <= 0 || bounds.height <= 0) return { ok: false, summary: "The reviewed capture element is not currently visible." };
|
|
3348
|
+
const viewport = { width: window.innerWidth, height: window.innerHeight };
|
|
3349
|
+
const rect = { x: Math.round(bounds.left + window.scrollX), y: Math.round(bounds.top + window.scrollY), width: Math.round(bounds.width), height: Math.round(bounds.height) };
|
|
3350
|
+
const viewrect = { x: bounds.left, y: bounds.top, width: bounds.width, height: bounds.height };
|
|
3351
|
+
return { ok: true, rect, pixelratio: window.devicePixelRatio || 1, crossesviewport: viewrect.x < 0 || viewrect.y < 0 || viewrect.x + viewrect.width > viewport.width || viewrect.y + viewrect.height > viewport.height, summary: `Measured the capture element at ${rect.width} by ${rect.height} css pixels.` };
|
|
3352
|
+
}
|
|
3353
|
+
var scrollbarstyleid = "devthinkcapturehider";
|
|
3354
|
+
function preparecapture() {
|
|
3355
|
+
if (!document.getElementById(scrollbarstyleid)) {
|
|
3356
|
+
const style = document.createElement("style");
|
|
3357
|
+
style.id = scrollbarstyleid;
|
|
3358
|
+
style.setAttribute("aria-hidden", "true");
|
|
3359
|
+
style.textContent = "html::-webkit-scrollbar,body::-webkit-scrollbar{display:none!important}html{scrollbar-width:none!important}";
|
|
3360
|
+
document.documentElement.append(style);
|
|
3361
|
+
}
|
|
3362
|
+
return { scrollx: window.scrollX, scrolly: window.scrollY };
|
|
3363
|
+
}
|
|
3364
|
+
function scrollcapture(x, y) {
|
|
3365
|
+
window.scrollTo(x, y);
|
|
3366
|
+
return { x: window.scrollX, y: window.scrollY };
|
|
3367
|
+
}
|
|
3368
|
+
function restorecapture(state) {
|
|
3369
|
+
document.getElementById(scrollbarstyleid)?.remove();
|
|
3370
|
+
window.scrollTo(state.scrollx, state.scrolly);
|
|
3371
|
+
}
|
|
3372
|
+
function scrollcontainercapture(selector, top) {
|
|
3373
|
+
const container = document.querySelector(selector);
|
|
3374
|
+
if (!container) return { ok: false, summary: "The reviewed scrollable container is no longer available." };
|
|
3375
|
+
if (!(container instanceof HTMLElement)) return { ok: false, summary: "The reviewed scrollable container cannot scroll." };
|
|
3376
|
+
container.scrollTo({ top, behavior: "auto" });
|
|
3377
|
+
return { ok: true, top: container.scrollTop, height: container.scrollHeight, viewportheight: container.clientHeight, summary: `Scrolled the container to ${container.scrollTop} of ${container.scrollHeight} pixels.` };
|
|
3378
|
+
}
|
|
3379
|
+
function waitsettle(milliseconds) {
|
|
3380
|
+
return new Promise((resolve) => window.setTimeout(resolve, Math.max(0, milliseconds)));
|
|
3381
|
+
}
|
|
3382
|
+
Object.assign(globalThis, { devthinkbridge: { capturesnapshot, previewtarget, performstep, readdialogs, measurepage, elementrect, preparecapture, scrollcapture, restorecapture, scrollcontainercapture, waitsettle } });
|
|
3320
3383
|
})();
|
|
3321
3384
|
//# sourceMappingURL=pagebridge.js.map
|