fck-honey 0.2.1 → 0.3.0
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 +13 -14
- package/dist/bundle-tmp/core.js +172 -0
- package/dist/bundle-tmp/global.js +6 -0
- package/dist/esm/core.js +172 -0
- package/dist/esm/index.js +1 -162
- package/dist/honey-detect.js +121 -104
- package/dist/types/core.d.ts +17 -0
- package/dist/types/index.d.ts +1 -17
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# fck-honey
|
|
2
|
-
Open source lib for Merchants to detect if
|
|
2
|
+
Open source lib for Merchants to detect if a customer has Honey browser extension installed
|
|
3
|
+
|
|
4
|
+
<img width="968" height="532" alt="image" src="https://github.com/user-attachments/assets/b0bcccd6-d922-436d-8b0d-dcd4334a9219" />
|
|
3
5
|
|
|
4
6
|
## Inspiration
|
|
5
7
|
[MegaLag exposed Honey as a scam](https://www.youtube.com/watch?v=wwB3FmbcC88)
|
|
@@ -9,10 +11,9 @@ Open source lib for Merchants to detect if an end user has Honey browser extensi
|
|
|
9
11
|
```html
|
|
10
12
|
<script src="https://cdn.jsdelivr.net/npm/fck-honey/dist/honey-detect.min.js"></script>
|
|
11
13
|
<script>
|
|
12
|
-
|
|
13
|
-
// Decide how you want to handle this.
|
|
14
|
-
|
|
15
|
-
console.log("Honey overlay detected:", el);
|
|
14
|
+
window.fckHoney.listen((warn) => {
|
|
15
|
+
// Decide how you want to handle this. Native warn function allows you to tell the user to disable Honey.
|
|
16
|
+
warn("You must disable the Honey extension to continue.");
|
|
16
17
|
});
|
|
17
18
|
</script>
|
|
18
19
|
```
|
|
@@ -26,19 +27,17 @@ npm install fck-honey
|
|
|
26
27
|
```js
|
|
27
28
|
import { listen } from "fck-honey";
|
|
28
29
|
|
|
29
|
-
listen((
|
|
30
|
-
// Decide how you want to handle this.
|
|
31
|
-
|
|
32
|
-
console.log("Honey overlay detected:", el);
|
|
30
|
+
listen((warn) => {
|
|
31
|
+
// Decide how you want to handle this. Native warn function allows you to tell the user to disable Honey.
|
|
32
|
+
warn("You must disable the Honey extension to continue.");
|
|
33
33
|
});
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Advanced Options
|
|
37
37
|
|
|
38
38
|
```js
|
|
39
|
-
window.fckHoney.listen((
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
}, { removeHoney: true });
|
|
39
|
+
window.fckHoney.listen((warn, el) => {
|
|
40
|
+
// removeHoney defaults to true (element is auto-removed).
|
|
41
|
+
// Set removeHoney to false if you want to keep the Honey element for some reason.
|
|
42
|
+
}, { removeHoney: false });
|
|
44
43
|
```
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var DEFAULT_Z_NEAR_MAX = 2147480000;
|
|
13
|
+
var UUIDISH_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
14
|
+
var TARGET_SELECTOR = "div[id]";
|
|
15
|
+
var OVERLAY_STYLE_ID = "simple-overlay-styles";
|
|
16
|
+
function showOverlay(message) {
|
|
17
|
+
if (typeof document === "undefined")
|
|
18
|
+
return function () { };
|
|
19
|
+
if (!document.getElementById(OVERLAY_STYLE_ID)) {
|
|
20
|
+
var style = document.createElement("style");
|
|
21
|
+
style.id = OVERLAY_STYLE_ID;
|
|
22
|
+
style.textContent =
|
|
23
|
+
".simple-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:999999;display:flex;align-items:center;justify-content:center;pointer-events:all;}" +
|
|
24
|
+
".simple-overlay-message{background:#ffffff;padding:16px 20px;border-radius:8px;font-size:14px;max-width:80%;text-align:center;box-shadow:0 10px 30px rgba(0,0,0,0.3);}";
|
|
25
|
+
document.head.appendChild(style);
|
|
26
|
+
}
|
|
27
|
+
var overlay = document.createElement("div");
|
|
28
|
+
overlay.className = "simple-overlay";
|
|
29
|
+
var messageEl = document.createElement("div");
|
|
30
|
+
messageEl.className = "simple-overlay-message";
|
|
31
|
+
messageEl.innerHTML = message;
|
|
32
|
+
overlay.appendChild(messageEl);
|
|
33
|
+
if (document.body) {
|
|
34
|
+
document.body.appendChild(overlay);
|
|
35
|
+
}
|
|
36
|
+
var prevOverflow = document.body ? document.body.style.overflow : "";
|
|
37
|
+
if (document.body)
|
|
38
|
+
document.body.style.overflow = "hidden";
|
|
39
|
+
return function hideOverlay() {
|
|
40
|
+
overlay.remove();
|
|
41
|
+
if (document.body)
|
|
42
|
+
document.body.style.overflow = prevOverflow;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function parseZIndex(cs, el) {
|
|
46
|
+
var computed = parseInt(cs.zIndex, 10);
|
|
47
|
+
if (isFinite(computed))
|
|
48
|
+
return computed;
|
|
49
|
+
var inline = parseInt(el.style.zIndex, 10);
|
|
50
|
+
return isFinite(inline) ? inline : null;
|
|
51
|
+
}
|
|
52
|
+
function looksLikeTargetDiv(el, zNearMax, uuidGate, debug) {
|
|
53
|
+
if (!el.id) {
|
|
54
|
+
if (debug)
|
|
55
|
+
console.log("+++ reject: no id", el);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
if (uuidGate && !UUIDISH_RE.test(el.id)) {
|
|
59
|
+
if (debug)
|
|
60
|
+
console.log("+++ reject: uuid", el.id);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
var cs = getComputedStyle(el);
|
|
64
|
+
var z = parseZIndex(cs, el);
|
|
65
|
+
if (z === null || z < zNearMax) {
|
|
66
|
+
if (debug)
|
|
67
|
+
console.log("+++ reject: z-index", z, cs.zIndex, el.style.zIndex, el);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (cs.display === "none") {
|
|
71
|
+
if (debug)
|
|
72
|
+
console.log("+++ reject: display none", el);
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (el.shadowRoot) {
|
|
76
|
+
if (debug)
|
|
77
|
+
console.log("+++ reject: shadowRoot", el);
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (debug)
|
|
81
|
+
console.log("+++ match", el);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
function scanElement(el, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn) {
|
|
85
|
+
var _a;
|
|
86
|
+
if (el instanceof HTMLDivElement && el.matches(TARGET_SELECTOR)) {
|
|
87
|
+
if (seen.indexOf(el) === -1 && looksLikeTargetDiv(el, zNearMax, uuidGate, debug)) {
|
|
88
|
+
seen.push(el);
|
|
89
|
+
if (removeHoney && el.parentNode)
|
|
90
|
+
el.parentNode.removeChild(el);
|
|
91
|
+
if (removeHoney) {
|
|
92
|
+
onMatch(warn);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
onMatch(warn, el);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
var divs = (_a = el.querySelectorAll) === null || _a === void 0 ? void 0 : _a.call(el, TARGET_SELECTOR);
|
|
100
|
+
if (!divs)
|
|
101
|
+
return;
|
|
102
|
+
for (var i = 0; i < divs.length; i += 1) {
|
|
103
|
+
var d = divs[i];
|
|
104
|
+
if (seen.indexOf(d) === -1 && looksLikeTargetDiv(d, zNearMax, uuidGate, debug)) {
|
|
105
|
+
seen.push(d);
|
|
106
|
+
if (removeHoney && d.parentNode)
|
|
107
|
+
d.parentNode.removeChild(d);
|
|
108
|
+
if (removeHoney) {
|
|
109
|
+
onMatch(warn);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
onMatch(warn, d);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export function startHoneyOverlayObserver(options) {
|
|
118
|
+
var _a, _b, _c, _d, _e;
|
|
119
|
+
if (options === void 0) { options = {}; }
|
|
120
|
+
var seen = [];
|
|
121
|
+
var zNearMax = (_a = options.zNearMax) !== null && _a !== void 0 ? _a : DEFAULT_Z_NEAR_MAX;
|
|
122
|
+
var uuidGate = (_b = options.uuidGate) !== null && _b !== void 0 ? _b : true;
|
|
123
|
+
var debug = (_c = options.debug) !== null && _c !== void 0 ? _c : false;
|
|
124
|
+
var removeHoney = (_d = options.removeHoney) !== null && _d !== void 0 ? _d : true;
|
|
125
|
+
var warn = function (message) { return showOverlay(message); };
|
|
126
|
+
var onMatch = (_e = options.onMatch) !== null && _e !== void 0 ? _e : (function () { });
|
|
127
|
+
var mo = new MutationObserver(function (mutations) {
|
|
128
|
+
for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {
|
|
129
|
+
var m = mutations_1[_i];
|
|
130
|
+
if (debug &&
|
|
131
|
+
document.body &&
|
|
132
|
+
(m.target === document.body || (m.target instanceof Node && document.body.contains(m.target)))) {
|
|
133
|
+
console.log("+++ body mutation", m.type, m.target);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
for (var _a = 0, mutations_2 = mutations; _a < mutations_2.length; _a++) {
|
|
137
|
+
var m = mutations_2[_a];
|
|
138
|
+
if (m.type === "childList") {
|
|
139
|
+
if (m.addedNodes.length) {
|
|
140
|
+
for (var i = 0; i < m.addedNodes.length; i += 1) {
|
|
141
|
+
var node = m.addedNodes[i];
|
|
142
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
143
|
+
scanElement(node, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (m.target instanceof Element) {
|
|
148
|
+
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (m.type === "attributes") {
|
|
152
|
+
if (m.target instanceof Element) {
|
|
153
|
+
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
mo.observe(document.documentElement, {
|
|
159
|
+
subtree: true,
|
|
160
|
+
childList: true,
|
|
161
|
+
attributes: true,
|
|
162
|
+
attributeFilter: ["style", "class", "id"]
|
|
163
|
+
});
|
|
164
|
+
scanElement(document.documentElement, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
165
|
+
return {
|
|
166
|
+
stop: function () { return mo.disconnect(); }
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function listen(onMatch, options) {
|
|
170
|
+
if (options === void 0) { options = {}; }
|
|
171
|
+
return startHoneyOverlayObserver(__assign(__assign({}, options), { onMatch: onMatch }));
|
|
172
|
+
}
|
package/dist/esm/core.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var DEFAULT_Z_NEAR_MAX = 2147480000;
|
|
13
|
+
var UUIDISH_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
14
|
+
var TARGET_SELECTOR = "div[id]";
|
|
15
|
+
var OVERLAY_STYLE_ID = "simple-overlay-styles";
|
|
16
|
+
function showOverlay(message) {
|
|
17
|
+
if (typeof document === "undefined")
|
|
18
|
+
return function () { };
|
|
19
|
+
if (!document.getElementById(OVERLAY_STYLE_ID)) {
|
|
20
|
+
var style = document.createElement("style");
|
|
21
|
+
style.id = OVERLAY_STYLE_ID;
|
|
22
|
+
style.textContent =
|
|
23
|
+
".simple-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:999999;display:flex;align-items:center;justify-content:center;pointer-events:all;}" +
|
|
24
|
+
".simple-overlay-message{background:#ffffff;padding:16px 20px;border-radius:8px;font-size:14px;max-width:80%;text-align:center;box-shadow:0 10px 30px rgba(0,0,0,0.3);}";
|
|
25
|
+
document.head.appendChild(style);
|
|
26
|
+
}
|
|
27
|
+
var overlay = document.createElement("div");
|
|
28
|
+
overlay.className = "simple-overlay";
|
|
29
|
+
var messageEl = document.createElement("div");
|
|
30
|
+
messageEl.className = "simple-overlay-message";
|
|
31
|
+
messageEl.innerHTML = message;
|
|
32
|
+
overlay.appendChild(messageEl);
|
|
33
|
+
if (document.body) {
|
|
34
|
+
document.body.appendChild(overlay);
|
|
35
|
+
}
|
|
36
|
+
var prevOverflow = document.body ? document.body.style.overflow : "";
|
|
37
|
+
if (document.body)
|
|
38
|
+
document.body.style.overflow = "hidden";
|
|
39
|
+
return function hideOverlay() {
|
|
40
|
+
overlay.remove();
|
|
41
|
+
if (document.body)
|
|
42
|
+
document.body.style.overflow = prevOverflow;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function parseZIndex(cs, el) {
|
|
46
|
+
var computed = parseInt(cs.zIndex, 10);
|
|
47
|
+
if (isFinite(computed))
|
|
48
|
+
return computed;
|
|
49
|
+
var inline = parseInt(el.style.zIndex, 10);
|
|
50
|
+
return isFinite(inline) ? inline : null;
|
|
51
|
+
}
|
|
52
|
+
function looksLikeTargetDiv(el, zNearMax, uuidGate, debug) {
|
|
53
|
+
if (!el.id) {
|
|
54
|
+
if (debug)
|
|
55
|
+
console.log("+++ reject: no id", el);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
if (uuidGate && !UUIDISH_RE.test(el.id)) {
|
|
59
|
+
if (debug)
|
|
60
|
+
console.log("+++ reject: uuid", el.id);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
var cs = getComputedStyle(el);
|
|
64
|
+
var z = parseZIndex(cs, el);
|
|
65
|
+
if (z === null || z < zNearMax) {
|
|
66
|
+
if (debug)
|
|
67
|
+
console.log("+++ reject: z-index", z, cs.zIndex, el.style.zIndex, el);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (cs.display === "none") {
|
|
71
|
+
if (debug)
|
|
72
|
+
console.log("+++ reject: display none", el);
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (el.shadowRoot) {
|
|
76
|
+
if (debug)
|
|
77
|
+
console.log("+++ reject: shadowRoot", el);
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (debug)
|
|
81
|
+
console.log("+++ match", el);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
function scanElement(el, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn) {
|
|
85
|
+
var _a;
|
|
86
|
+
if (el instanceof HTMLDivElement && el.matches(TARGET_SELECTOR)) {
|
|
87
|
+
if (seen.indexOf(el) === -1 && looksLikeTargetDiv(el, zNearMax, uuidGate, debug)) {
|
|
88
|
+
seen.push(el);
|
|
89
|
+
if (removeHoney && el.parentNode)
|
|
90
|
+
el.parentNode.removeChild(el);
|
|
91
|
+
if (removeHoney) {
|
|
92
|
+
onMatch(warn);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
onMatch(warn, el);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
var divs = (_a = el.querySelectorAll) === null || _a === void 0 ? void 0 : _a.call(el, TARGET_SELECTOR);
|
|
100
|
+
if (!divs)
|
|
101
|
+
return;
|
|
102
|
+
for (var i = 0; i < divs.length; i += 1) {
|
|
103
|
+
var d = divs[i];
|
|
104
|
+
if (seen.indexOf(d) === -1 && looksLikeTargetDiv(d, zNearMax, uuidGate, debug)) {
|
|
105
|
+
seen.push(d);
|
|
106
|
+
if (removeHoney && d.parentNode)
|
|
107
|
+
d.parentNode.removeChild(d);
|
|
108
|
+
if (removeHoney) {
|
|
109
|
+
onMatch(warn);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
onMatch(warn, d);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export function startHoneyOverlayObserver(options) {
|
|
118
|
+
var _a, _b, _c, _d, _e;
|
|
119
|
+
if (options === void 0) { options = {}; }
|
|
120
|
+
var seen = [];
|
|
121
|
+
var zNearMax = (_a = options.zNearMax) !== null && _a !== void 0 ? _a : DEFAULT_Z_NEAR_MAX;
|
|
122
|
+
var uuidGate = (_b = options.uuidGate) !== null && _b !== void 0 ? _b : true;
|
|
123
|
+
var debug = (_c = options.debug) !== null && _c !== void 0 ? _c : false;
|
|
124
|
+
var removeHoney = (_d = options.removeHoney) !== null && _d !== void 0 ? _d : true;
|
|
125
|
+
var warn = function (message) { return showOverlay(message); };
|
|
126
|
+
var onMatch = (_e = options.onMatch) !== null && _e !== void 0 ? _e : (function () { });
|
|
127
|
+
var mo = new MutationObserver(function (mutations) {
|
|
128
|
+
for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {
|
|
129
|
+
var m = mutations_1[_i];
|
|
130
|
+
if (debug &&
|
|
131
|
+
document.body &&
|
|
132
|
+
(m.target === document.body || (m.target instanceof Node && document.body.contains(m.target)))) {
|
|
133
|
+
console.log("+++ body mutation", m.type, m.target);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
for (var _a = 0, mutations_2 = mutations; _a < mutations_2.length; _a++) {
|
|
137
|
+
var m = mutations_2[_a];
|
|
138
|
+
if (m.type === "childList") {
|
|
139
|
+
if (m.addedNodes.length) {
|
|
140
|
+
for (var i = 0; i < m.addedNodes.length; i += 1) {
|
|
141
|
+
var node = m.addedNodes[i];
|
|
142
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
143
|
+
scanElement(node, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (m.target instanceof Element) {
|
|
148
|
+
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (m.type === "attributes") {
|
|
152
|
+
if (m.target instanceof Element) {
|
|
153
|
+
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
mo.observe(document.documentElement, {
|
|
159
|
+
subtree: true,
|
|
160
|
+
childList: true,
|
|
161
|
+
attributes: true,
|
|
162
|
+
attributeFilter: ["style", "class", "id"]
|
|
163
|
+
});
|
|
164
|
+
scanElement(document.documentElement, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
165
|
+
return {
|
|
166
|
+
stop: function () { return mo.disconnect(); }
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function listen(onMatch, options) {
|
|
170
|
+
if (options === void 0) { options = {}; }
|
|
171
|
+
return startHoneyOverlayObserver(__assign(__assign({}, options), { onMatch: onMatch }));
|
|
172
|
+
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,162 +1 @@
|
|
|
1
|
-
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var DEFAULT_Z_NEAR_MAX = 2147480000;
|
|
13
|
-
var UUIDISH_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
14
|
-
var TARGET_SELECTOR = "div[id]";
|
|
15
|
-
var OVERLAY_STYLE_ID = "simple-overlay-styles";
|
|
16
|
-
function showOverlay(message) {
|
|
17
|
-
if (typeof document === "undefined")
|
|
18
|
-
return function () { };
|
|
19
|
-
if (!document.getElementById(OVERLAY_STYLE_ID)) {
|
|
20
|
-
var style = document.createElement("style");
|
|
21
|
-
style.id = OVERLAY_STYLE_ID;
|
|
22
|
-
style.textContent =
|
|
23
|
-
".simple-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:999999;display:flex;align-items:center;justify-content:center;pointer-events:all;}" +
|
|
24
|
-
".simple-overlay-message{background:#ffffff;padding:16px 20px;border-radius:8px;font-size:14px;max-width:80%;text-align:center;box-shadow:0 10px 30px rgba(0,0,0,0.3);}";
|
|
25
|
-
document.head.appendChild(style);
|
|
26
|
-
}
|
|
27
|
-
var overlay = document.createElement("div");
|
|
28
|
-
overlay.className = "simple-overlay";
|
|
29
|
-
var messageEl = document.createElement("div");
|
|
30
|
-
messageEl.className = "simple-overlay-message";
|
|
31
|
-
messageEl.innerHTML = message;
|
|
32
|
-
overlay.appendChild(messageEl);
|
|
33
|
-
if (document.body) {
|
|
34
|
-
document.body.appendChild(overlay);
|
|
35
|
-
}
|
|
36
|
-
var prevOverflow = document.body ? document.body.style.overflow : "";
|
|
37
|
-
if (document.body)
|
|
38
|
-
document.body.style.overflow = "hidden";
|
|
39
|
-
return function hideOverlay() {
|
|
40
|
-
overlay.remove();
|
|
41
|
-
if (document.body)
|
|
42
|
-
document.body.style.overflow = prevOverflow;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
function parseZIndex(cs, el) {
|
|
46
|
-
var computed = parseInt(cs.zIndex, 10);
|
|
47
|
-
if (isFinite(computed))
|
|
48
|
-
return computed;
|
|
49
|
-
var inline = parseInt(el.style.zIndex, 10);
|
|
50
|
-
return isFinite(inline) ? inline : null;
|
|
51
|
-
}
|
|
52
|
-
function looksLikeTargetDiv(el, zNearMax, uuidGate, debug) {
|
|
53
|
-
if (!el.id) {
|
|
54
|
-
if (debug)
|
|
55
|
-
console.log("+++ reject: no id", el);
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
if (uuidGate && !UUIDISH_RE.test(el.id)) {
|
|
59
|
-
if (debug)
|
|
60
|
-
console.log("+++ reject: uuid", el.id);
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
var cs = getComputedStyle(el);
|
|
64
|
-
var z = parseZIndex(cs, el);
|
|
65
|
-
if (z === null || z < zNearMax) {
|
|
66
|
-
if (debug)
|
|
67
|
-
console.log("+++ reject: z-index", z, cs.zIndex, el.style.zIndex, el);
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
if (cs.display === "none") {
|
|
71
|
-
if (debug)
|
|
72
|
-
console.log("+++ reject: display none", el);
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
if (el.shadowRoot) {
|
|
76
|
-
if (debug)
|
|
77
|
-
console.log("+++ reject: shadowRoot", el);
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
if (debug)
|
|
81
|
-
console.log("+++ match", el);
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
function scanElement(el, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn) {
|
|
85
|
-
var _a;
|
|
86
|
-
if (el instanceof HTMLDivElement && el.matches(TARGET_SELECTOR)) {
|
|
87
|
-
if (seen.indexOf(el) === -1 && looksLikeTargetDiv(el, zNearMax, uuidGate, debug)) {
|
|
88
|
-
seen.push(el);
|
|
89
|
-
if (removeHoney && el.parentNode)
|
|
90
|
-
el.parentNode.removeChild(el);
|
|
91
|
-
onMatch(el, warn);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
var divs = (_a = el.querySelectorAll) === null || _a === void 0 ? void 0 : _a.call(el, TARGET_SELECTOR);
|
|
95
|
-
if (!divs)
|
|
96
|
-
return;
|
|
97
|
-
for (var i = 0; i < divs.length; i += 1) {
|
|
98
|
-
var d = divs[i];
|
|
99
|
-
if (seen.indexOf(d) === -1 && looksLikeTargetDiv(d, zNearMax, uuidGate, debug)) {
|
|
100
|
-
seen.push(d);
|
|
101
|
-
if (removeHoney && d.parentNode)
|
|
102
|
-
d.parentNode.removeChild(d);
|
|
103
|
-
onMatch(d, warn);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
export function startHoneyOverlayObserver(options) {
|
|
108
|
-
var _a, _b, _c, _d, _e;
|
|
109
|
-
if (options === void 0) { options = {}; }
|
|
110
|
-
var seen = [];
|
|
111
|
-
var zNearMax = (_a = options.zNearMax) !== null && _a !== void 0 ? _a : DEFAULT_Z_NEAR_MAX;
|
|
112
|
-
var uuidGate = (_b = options.uuidGate) !== null && _b !== void 0 ? _b : true;
|
|
113
|
-
var debug = (_c = options.debug) !== null && _c !== void 0 ? _c : false;
|
|
114
|
-
var removeHoney = (_d = options.removeHoney) !== null && _d !== void 0 ? _d : true;
|
|
115
|
-
var warn = function (message) { return showOverlay(message); };
|
|
116
|
-
var onMatch = (_e = options.onMatch) !== null && _e !== void 0 ? _e : (function () { });
|
|
117
|
-
var mo = new MutationObserver(function (mutations) {
|
|
118
|
-
for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {
|
|
119
|
-
var m = mutations_1[_i];
|
|
120
|
-
if (debug &&
|
|
121
|
-
document.body &&
|
|
122
|
-
(m.target === document.body || (m.target instanceof Node && document.body.contains(m.target)))) {
|
|
123
|
-
console.log("+++ body mutation", m.type, m.target);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
for (var _a = 0, mutations_2 = mutations; _a < mutations_2.length; _a++) {
|
|
127
|
-
var m = mutations_2[_a];
|
|
128
|
-
if (m.type === "childList") {
|
|
129
|
-
if (m.addedNodes.length) {
|
|
130
|
-
for (var i = 0; i < m.addedNodes.length; i += 1) {
|
|
131
|
-
var node = m.addedNodes[i];
|
|
132
|
-
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
133
|
-
scanElement(node, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (m.target instanceof Element) {
|
|
138
|
-
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
else if (m.type === "attributes") {
|
|
142
|
-
if (m.target instanceof Element) {
|
|
143
|
-
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
mo.observe(document.documentElement, {
|
|
149
|
-
subtree: true,
|
|
150
|
-
childList: true,
|
|
151
|
-
attributes: true,
|
|
152
|
-
attributeFilter: ["style", "class", "id"]
|
|
153
|
-
});
|
|
154
|
-
scanElement(document.documentElement, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
155
|
-
return {
|
|
156
|
-
stop: function () { return mo.disconnect(); }
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
export function listen(onMatch, options) {
|
|
160
|
-
if (options === void 0) { options = {}; }
|
|
161
|
-
return startHoneyOverlayObserver(__assign(__assign({}, options), { onMatch: onMatch }));
|
|
162
|
-
}
|
|
1
|
+
export * from "./core";
|
package/dist/honey-detect.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
(function() {
|
|
2
|
+
// dist/bundle-tmp/core.js
|
|
3
|
+
var __assign = function() {
|
|
3
4
|
__assign = Object.assign || function(t) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
10
11
|
};
|
|
11
12
|
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var DEFAULT_Z_NEAR_MAX =
|
|
14
|
-
var UUIDISH_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
15
|
-
var TARGET_SELECTOR = "div[id]";
|
|
16
|
-
var OVERLAY_STYLE_ID = "simple-overlay-styles";
|
|
17
|
-
function showOverlay(message) {
|
|
13
|
+
};
|
|
14
|
+
var DEFAULT_Z_NEAR_MAX = 214748e4;
|
|
15
|
+
var UUIDISH_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
16
|
+
var TARGET_SELECTOR = "div[id]";
|
|
17
|
+
var OVERLAY_STYLE_ID = "simple-overlay-styles";
|
|
18
|
+
function showOverlay(message) {
|
|
18
19
|
if (typeof document === "undefined")
|
|
19
|
-
|
|
20
|
+
return function() {
|
|
21
|
+
};
|
|
20
22
|
if (!document.getElementById(OVERLAY_STYLE_ID)) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
".simple-overlay-message{background:#ffffff;padding:16px 20px;border-radius:8px;font-size:14px;max-width:80%;text-align:center;box-shadow:0 10px 30px rgba(0,0,0,0.3);}";
|
|
26
|
-
document.head.appendChild(style);
|
|
23
|
+
var style = document.createElement("style");
|
|
24
|
+
style.id = OVERLAY_STYLE_ID;
|
|
25
|
+
style.textContent = ".simple-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:999999;display:flex;align-items:center;justify-content:center;pointer-events:all;}.simple-overlay-message{background:#ffffff;padding:16px 20px;border-radius:8px;font-size:14px;max-width:80%;text-align:center;box-shadow:0 10px 30px rgba(0,0,0,0.3);}";
|
|
26
|
+
document.head.appendChild(style);
|
|
27
27
|
}
|
|
28
28
|
var overlay = document.createElement("div");
|
|
29
29
|
overlay.className = "simple-overlay";
|
|
@@ -32,137 +32,154 @@ function showOverlay(message) {
|
|
|
32
32
|
messageEl.innerHTML = message;
|
|
33
33
|
overlay.appendChild(messageEl);
|
|
34
34
|
if (document.body) {
|
|
35
|
-
|
|
35
|
+
document.body.appendChild(overlay);
|
|
36
36
|
}
|
|
37
37
|
var prevOverflow = document.body ? document.body.style.overflow : "";
|
|
38
38
|
if (document.body)
|
|
39
|
-
|
|
39
|
+
document.body.style.overflow = "hidden";
|
|
40
40
|
return function hideOverlay() {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
overlay.remove();
|
|
42
|
+
if (document.body)
|
|
43
|
+
document.body.style.overflow = prevOverflow;
|
|
44
44
|
};
|
|
45
|
-
}
|
|
46
|
-
function parseZIndex(cs, el) {
|
|
45
|
+
}
|
|
46
|
+
function parseZIndex(cs, el) {
|
|
47
47
|
var computed = parseInt(cs.zIndex, 10);
|
|
48
48
|
if (isFinite(computed))
|
|
49
|
-
|
|
49
|
+
return computed;
|
|
50
50
|
var inline = parseInt(el.style.zIndex, 10);
|
|
51
51
|
return isFinite(inline) ? inline : null;
|
|
52
|
-
}
|
|
53
|
-
function looksLikeTargetDiv(el, zNearMax, uuidGate, debug) {
|
|
52
|
+
}
|
|
53
|
+
function looksLikeTargetDiv(el, zNearMax, uuidGate, debug) {
|
|
54
54
|
if (!el.id) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
if (debug)
|
|
56
|
+
console.log("+++ reject: no id", el);
|
|
57
|
+
return false;
|
|
58
58
|
}
|
|
59
59
|
if (uuidGate && !UUIDISH_RE.test(el.id)) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
if (debug)
|
|
61
|
+
console.log("+++ reject: uuid", el.id);
|
|
62
|
+
return false;
|
|
63
63
|
}
|
|
64
64
|
var cs = getComputedStyle(el);
|
|
65
65
|
var z = parseZIndex(cs, el);
|
|
66
66
|
if (z === null || z < zNearMax) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
if (debug)
|
|
68
|
+
console.log("+++ reject: z-index", z, cs.zIndex, el.style.zIndex, el);
|
|
69
|
+
return false;
|
|
70
70
|
}
|
|
71
71
|
if (cs.display === "none") {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
if (debug)
|
|
73
|
+
console.log("+++ reject: display none", el);
|
|
74
|
+
return false;
|
|
75
75
|
}
|
|
76
76
|
if (el.shadowRoot) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
if (debug)
|
|
78
|
+
console.log("+++ reject: shadowRoot", el);
|
|
79
|
+
return false;
|
|
80
80
|
}
|
|
81
81
|
if (debug)
|
|
82
|
-
|
|
82
|
+
console.log("+++ match", el);
|
|
83
83
|
return true;
|
|
84
|
-
}
|
|
85
|
-
function scanElement(el, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn) {
|
|
84
|
+
}
|
|
85
|
+
function scanElement(el, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn) {
|
|
86
86
|
var _a;
|
|
87
87
|
if (el instanceof HTMLDivElement && el.matches(TARGET_SELECTOR)) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
if (seen.indexOf(el) === -1 && looksLikeTargetDiv(el, zNearMax, uuidGate, debug)) {
|
|
89
|
+
seen.push(el);
|
|
90
|
+
if (removeHoney && el.parentNode)
|
|
91
|
+
el.parentNode.removeChild(el);
|
|
92
|
+
if (removeHoney) {
|
|
93
|
+
onMatch(warn);
|
|
94
|
+
} else {
|
|
95
|
+
onMatch(warn, el);
|
|
93
96
|
}
|
|
97
|
+
}
|
|
94
98
|
}
|
|
95
99
|
var divs = (_a = el.querySelectorAll) === null || _a === void 0 ? void 0 : _a.call(el, TARGET_SELECTOR);
|
|
96
100
|
if (!divs)
|
|
97
|
-
|
|
101
|
+
return;
|
|
98
102
|
for (var i = 0; i < divs.length; i += 1) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
var d = divs[i];
|
|
104
|
+
if (seen.indexOf(d) === -1 && looksLikeTargetDiv(d, zNearMax, uuidGate, debug)) {
|
|
105
|
+
seen.push(d);
|
|
106
|
+
if (removeHoney && d.parentNode)
|
|
107
|
+
d.parentNode.removeChild(d);
|
|
108
|
+
if (removeHoney) {
|
|
109
|
+
onMatch(warn);
|
|
110
|
+
} else {
|
|
111
|
+
onMatch(warn, d);
|
|
105
112
|
}
|
|
113
|
+
}
|
|
106
114
|
}
|
|
107
|
-
}
|
|
108
|
-
function startHoneyOverlayObserver(options) {
|
|
115
|
+
}
|
|
116
|
+
function startHoneyOverlayObserver(options) {
|
|
109
117
|
var _a, _b, _c, _d, _e;
|
|
110
|
-
if (options === void 0) {
|
|
118
|
+
if (options === void 0) {
|
|
119
|
+
options = {};
|
|
120
|
+
}
|
|
111
121
|
var seen = [];
|
|
112
122
|
var zNearMax = (_a = options.zNearMax) !== null && _a !== void 0 ? _a : DEFAULT_Z_NEAR_MAX;
|
|
113
123
|
var uuidGate = (_b = options.uuidGate) !== null && _b !== void 0 ? _b : true;
|
|
114
124
|
var debug = (_c = options.debug) !== null && _c !== void 0 ? _c : false;
|
|
115
125
|
var removeHoney = (_d = options.removeHoney) !== null && _d !== void 0 ? _d : true;
|
|
116
|
-
var warn = function
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
+
var warn = function(message) {
|
|
127
|
+
return showOverlay(message);
|
|
128
|
+
};
|
|
129
|
+
var onMatch = (_e = options.onMatch) !== null && _e !== void 0 ? _e : (function() {
|
|
130
|
+
});
|
|
131
|
+
var mo = new MutationObserver(function(mutations) {
|
|
132
|
+
for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {
|
|
133
|
+
var m = mutations_1[_i];
|
|
134
|
+
if (debug && document.body && (m.target === document.body || m.target instanceof Node && document.body.contains(m.target))) {
|
|
135
|
+
console.log("+++ body mutation", m.type, m.target);
|
|
126
136
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
if (m.target instanceof Element) {
|
|
139
|
-
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else if (m.type === "attributes") {
|
|
143
|
-
if (m.target instanceof Element) {
|
|
144
|
-
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
145
|
-
}
|
|
137
|
+
}
|
|
138
|
+
for (var _a2 = 0, mutations_2 = mutations; _a2 < mutations_2.length; _a2++) {
|
|
139
|
+
var m = mutations_2[_a2];
|
|
140
|
+
if (m.type === "childList") {
|
|
141
|
+
if (m.addedNodes.length) {
|
|
142
|
+
for (var i = 0; i < m.addedNodes.length; i += 1) {
|
|
143
|
+
var node = m.addedNodes[i];
|
|
144
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
145
|
+
scanElement(node, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
146
|
+
}
|
|
146
147
|
}
|
|
148
|
+
}
|
|
149
|
+
if (m.target instanceof Element) {
|
|
150
|
+
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
151
|
+
}
|
|
152
|
+
} else if (m.type === "attributes") {
|
|
153
|
+
if (m.target instanceof Element) {
|
|
154
|
+
scanElement(m.target, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
155
|
+
}
|
|
147
156
|
}
|
|
157
|
+
}
|
|
148
158
|
});
|
|
149
159
|
mo.observe(document.documentElement, {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
160
|
+
subtree: true,
|
|
161
|
+
childList: true,
|
|
162
|
+
attributes: true,
|
|
163
|
+
attributeFilter: ["style", "class", "id"]
|
|
154
164
|
});
|
|
155
165
|
scanElement(document.documentElement, seen, zNearMax, uuidGate, debug, removeHoney, onMatch, warn);
|
|
156
166
|
return {
|
|
157
|
-
|
|
167
|
+
stop: function() {
|
|
168
|
+
return mo.disconnect();
|
|
169
|
+
}
|
|
158
170
|
};
|
|
159
|
-
}
|
|
160
|
-
function listen(onMatch, options) {
|
|
161
|
-
if (options === void 0) {
|
|
171
|
+
}
|
|
172
|
+
function listen(onMatch, options) {
|
|
173
|
+
if (options === void 0) {
|
|
174
|
+
options = {};
|
|
175
|
+
}
|
|
162
176
|
return startHoneyOverlayObserver(__assign(__assign({}, options), { onMatch: onMatch }));
|
|
163
|
-
}
|
|
164
|
-
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// dist/bundle-tmp/global.js
|
|
180
|
+
if (typeof window !== "undefined") {
|
|
165
181
|
window.fckHoney = window.fckHoney || {};
|
|
166
182
|
window.fckHoney.startHoneyOverlayObserver = startHoneyOverlayObserver;
|
|
167
183
|
window.fckHoney.listen = listen;
|
|
168
|
-
}
|
|
184
|
+
}
|
|
185
|
+
})();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type WarnCallback = (message: string) => () => void;
|
|
2
|
+
export type MatchCallback = (warn: WarnCallback, el?: HTMLDivElement) => void;
|
|
3
|
+
export interface ObserverOptions {
|
|
4
|
+
onMatch?: MatchCallback;
|
|
5
|
+
uuidGate?: boolean;
|
|
6
|
+
zNearMax?: number;
|
|
7
|
+
debug?: boolean;
|
|
8
|
+
removeHoney?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ObserverHandle {
|
|
11
|
+
stop: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface ListenHandle {
|
|
14
|
+
stop: () => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function startHoneyOverlayObserver(options?: ObserverOptions): ObserverHandle;
|
|
17
|
+
export declare function listen(onMatch: MatchCallback, options?: Omit<ObserverOptions, "onMatch">): ListenHandle;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export type MatchCallback = (el: HTMLDivElement, warn: WarnCallback) => void;
|
|
3
|
-
export interface ObserverOptions {
|
|
4
|
-
onMatch?: MatchCallback;
|
|
5
|
-
uuidGate?: boolean;
|
|
6
|
-
zNearMax?: number;
|
|
7
|
-
debug?: boolean;
|
|
8
|
-
removeHoney?: boolean;
|
|
9
|
-
}
|
|
10
|
-
export interface ObserverHandle {
|
|
11
|
-
stop: () => void;
|
|
12
|
-
}
|
|
13
|
-
export interface ListenHandle {
|
|
14
|
-
stop: () => void;
|
|
15
|
-
}
|
|
16
|
-
export declare function startHoneyOverlayObserver(options?: ObserverOptions): ObserverHandle;
|
|
17
|
-
export declare function listen(onMatch: MatchCallback, options?: Omit<ObserverOptions, "onMatch">): ListenHandle;
|
|
1
|
+
export * from "./core";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fck-honey",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Detects Honey browser extension overlays for merchants.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/honey-detect.js",
|
|
@@ -17,11 +17,12 @@
|
|
|
17
17
|
"dist"
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.global.
|
|
20
|
+
"build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.bundle.json && esbuild dist/bundle-tmp/global.js --bundle --format=iife --platform=browser --target=es5 --outfile=dist/honey-detect.js",
|
|
21
21
|
"prepublishOnly": "npm run build",
|
|
22
22
|
"clean": "rm -rf dist"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
+
"esbuild": "^0.25.12",
|
|
25
26
|
"typescript": "^5.9.3"
|
|
26
27
|
}
|
|
27
28
|
}
|