@amalgm/browser 0.1.0 → 0.1.1
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/PURPOSE.md +8 -0
- package/dist/src/drivers/electron/native/adblock/index.js +6 -1
- package/dist/src/drivers/electron/native/adblock/index.js.map +1 -1
- package/dist/src/electron-preload.cjs +113 -0
- package/dist/src/electron.cjs +13534 -0
- package/dist/src/electron.d.cts +14 -0
- package/dist/src/runtime-selector.js +7 -13
- package/dist/src/runtime-selector.js.map +1 -1
- package/package.json +64 -18
package/PURPOSE.md
CHANGED
|
@@ -50,6 +50,9 @@ public Browser ports. It does not own a second browser implementation.
|
|
|
50
50
|
|
|
51
51
|
## Axioms
|
|
52
52
|
|
|
53
|
+
Managed releases bind to one exact published Core version and build from the
|
|
54
|
+
locked dependency graph on the supported Node toolchain.
|
|
55
|
+
|
|
53
56
|
1. Browser owns browser state and never depends on Chat, Agents, Engine,
|
|
54
57
|
Realtime, or an application renderer to define it.
|
|
55
58
|
2. Every state change passes through `BrowserService`; drivers execute actions
|
|
@@ -115,3 +118,8 @@ they cannot inspect one another. Named auth bundles are separate, explicit
|
|
|
115
118
|
snapshots. Captures, input coordinates, and recordings all address the same
|
|
116
119
|
verified page, while large artifacts leave the API through the injected store.
|
|
117
120
|
Engine and Realtime can compose and relay Browser without becoming Browser.
|
|
121
|
+
|
|
122
|
+
The Browser build supplies its Electron CommonJS adapter and companion preload as
|
|
123
|
+
SDK-owned artifacts; a UI copies those bytes without rebuilding Browser behavior.
|
|
124
|
+
Desktop bridge discovery uses one host-selected machine namespace and a validated
|
|
125
|
+
Core binding; neither a shared user root nor an unknown lane selects another host.
|
|
@@ -24,7 +24,12 @@ export class NativeAdBlocker {
|
|
|
24
24
|
this.allowlist = new AdBlockAllowlist(options.settingsPath);
|
|
25
25
|
}
|
|
26
26
|
cosmeticPreloadPath() {
|
|
27
|
-
|
|
27
|
+
const generatedName = typeof __AMALGM_BROWSER_ADBLOCK_PRELOAD__ === 'string'
|
|
28
|
+
? __AMALGM_BROWSER_ADBLOCK_PRELOAD__
|
|
29
|
+
: 'preload.js';
|
|
30
|
+
return this.disabled
|
|
31
|
+
? null
|
|
32
|
+
: this.options.preloadPath || path.join(import.meta.dirname, generatedName);
|
|
28
33
|
}
|
|
29
34
|
install(session) {
|
|
30
35
|
if (this.installed === session)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/adblock/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsB,MAAM,qBAAqB,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/adblock/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/drivers/electron/native/adblock/preload.ts
|
|
4
|
+
var import_electron = require("electron");
|
|
5
|
+
var COSMETIC_INJECTION_CHANNEL = "@ghostery/adblocker/inject-cosmetic-filters";
|
|
6
|
+
var MUTATION_OBSERVER_CHANNEL = "@ghostery/adblocker/is-mutation-observer-enabled";
|
|
7
|
+
var IGNORED_TAGS = /* @__PURE__ */ new Set(["br", "head", "link", "meta", "script", "style", "s"]);
|
|
8
|
+
var MUTATION_DEBOUNCE_MS = 25;
|
|
9
|
+
var MUTATION_MAX_WAIT_MS = 1e3;
|
|
10
|
+
var MUTATION_ELEMENT_LIMIT = 512;
|
|
11
|
+
if (window === window.top && !window.location.href.startsWith("devtools://")) {
|
|
12
|
+
const knownClasses = /* @__PURE__ */ new Set();
|
|
13
|
+
const knownHrefs = /* @__PURE__ */ new Set();
|
|
14
|
+
const knownIds = /* @__PURE__ */ new Set();
|
|
15
|
+
const pendingElements = /* @__PURE__ */ new Set();
|
|
16
|
+
let observer = null;
|
|
17
|
+
let debounceTimer = null;
|
|
18
|
+
let maxWaitTimer = null;
|
|
19
|
+
const inject = (features) => {
|
|
20
|
+
void import_electron.ipcRenderer.invoke(COSMETIC_INJECTION_CHANNEL, window.location.href, features).catch(() => void 0);
|
|
21
|
+
};
|
|
22
|
+
const clearTimers = () => {
|
|
23
|
+
if (debounceTimer) clearTimeout(debounceTimer);
|
|
24
|
+
if (maxWaitTimer) clearTimeout(maxWaitTimer);
|
|
25
|
+
debounceTimer = null;
|
|
26
|
+
maxWaitTimer = null;
|
|
27
|
+
};
|
|
28
|
+
const addNewValue = (value, known, additions) => {
|
|
29
|
+
if (!value || known.has(value)) return;
|
|
30
|
+
known.add(value);
|
|
31
|
+
additions.push(value);
|
|
32
|
+
};
|
|
33
|
+
const collectFeatures = (roots) => {
|
|
34
|
+
const classes = [];
|
|
35
|
+
const hrefs = [];
|
|
36
|
+
const ids = [];
|
|
37
|
+
const visited = /* @__PURE__ */ new Set();
|
|
38
|
+
for (const root of roots) {
|
|
39
|
+
const elements = [
|
|
40
|
+
root,
|
|
41
|
+
...Array.from(root.querySelectorAll("[id], [class], [href]"))
|
|
42
|
+
];
|
|
43
|
+
for (const element of elements) {
|
|
44
|
+
if (visited.has(element)) continue;
|
|
45
|
+
visited.add(element);
|
|
46
|
+
if (IGNORED_TAGS.has(element.tagName.toLowerCase())) continue;
|
|
47
|
+
addNewValue(element.getAttribute("id"), knownIds, ids);
|
|
48
|
+
addNewValue(element.getAttribute("href"), knownHrefs, hrefs);
|
|
49
|
+
for (const className of Array.from(element.classList)) {
|
|
50
|
+
addNewValue(className, knownClasses, classes);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (classes.length || hrefs.length || ids.length) {
|
|
55
|
+
inject({ classes, hrefs, ids, lifecycle: "dom-update" });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const flushPendingElements = () => {
|
|
59
|
+
clearTimers();
|
|
60
|
+
if (!pendingElements.size) return;
|
|
61
|
+
const elements = [...pendingElements];
|
|
62
|
+
pendingElements.clear();
|
|
63
|
+
collectFeatures(elements);
|
|
64
|
+
};
|
|
65
|
+
const scheduleFlush = () => {
|
|
66
|
+
if (!maxWaitTimer) {
|
|
67
|
+
maxWaitTimer = setTimeout(flushPendingElements, MUTATION_MAX_WAIT_MS);
|
|
68
|
+
}
|
|
69
|
+
if (debounceTimer) clearTimeout(debounceTimer);
|
|
70
|
+
debounceTimer = setTimeout(flushPendingElements, MUTATION_DEBOUNCE_MS);
|
|
71
|
+
};
|
|
72
|
+
const queueElement = (node) => {
|
|
73
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
74
|
+
pendingElements.add(node);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const startMonitoring = () => {
|
|
78
|
+
if (observer || !document.documentElement) return;
|
|
79
|
+
observer = new MutationObserver((mutations) => {
|
|
80
|
+
for (const mutation of mutations) {
|
|
81
|
+
if (mutation.type === "attributes") {
|
|
82
|
+
queueElement(mutation.target);
|
|
83
|
+
} else {
|
|
84
|
+
mutation.addedNodes.forEach(queueElement);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (pendingElements.size > MUTATION_ELEMENT_LIMIT) {
|
|
88
|
+
flushPendingElements();
|
|
89
|
+
} else if (pendingElements.size) {
|
|
90
|
+
scheduleFlush();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
observer.observe(document.documentElement, {
|
|
94
|
+
attributes: true,
|
|
95
|
+
attributeFilter: ["class", "id", "href"],
|
|
96
|
+
childList: true,
|
|
97
|
+
subtree: true
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
inject();
|
|
101
|
+
window.addEventListener("DOMContentLoaded", () => {
|
|
102
|
+
if (document.documentElement) collectFeatures([document.documentElement]);
|
|
103
|
+
void import_electron.ipcRenderer.invoke(MUTATION_OBSERVER_CHANNEL).then((enabled) => {
|
|
104
|
+
if (enabled) startMonitoring();
|
|
105
|
+
}).catch(() => void 0);
|
|
106
|
+
}, { once: true, passive: true });
|
|
107
|
+
window.addEventListener("unload", () => {
|
|
108
|
+
observer?.disconnect();
|
|
109
|
+
observer = null;
|
|
110
|
+
pendingElements.clear();
|
|
111
|
+
clearTimers();
|
|
112
|
+
}, { once: true, passive: true });
|
|
113
|
+
}
|