@tindalabs/shield 0.1.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.
Files changed (118) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +357 -0
  3. package/dist/assess.d.ts +16 -0
  4. package/dist/assess.js +220 -0
  5. package/dist/config/default-extensions-config.json +103 -0
  6. package/dist/core/ContentProtector.d.ts +63 -0
  7. package/dist/core/ContentProtector.js +281 -0
  8. package/dist/core/index.d.ts +1 -0
  9. package/dist/core/index.js +2 -0
  10. package/dist/core/mediator/ContentProtectionMediator.d.ts +86 -0
  11. package/dist/core/mediator/ContentProtectionMediator.js +238 -0
  12. package/dist/core/mediator/eventDataTypes.d.ts +112 -0
  13. package/dist/core/mediator/eventDataTypes.js +23 -0
  14. package/dist/core/mediator/handlers/abstractEventHandler.d.ts +41 -0
  15. package/dist/core/mediator/handlers/abstractEventHandler.js +59 -0
  16. package/dist/core/mediator/handlers/devToolsEventHandler.d.ts +9 -0
  17. package/dist/core/mediator/handlers/devToolsEventHandler.js +95 -0
  18. package/dist/core/mediator/handlers/eventHandlerRegistry.d.ts +9 -0
  19. package/dist/core/mediator/handlers/eventHandlerRegistry.js +34 -0
  20. package/dist/core/mediator/handlers/extensionEventHandlers.d.ts +40 -0
  21. package/dist/core/mediator/handlers/extensionEventHandlers.js +140 -0
  22. package/dist/core/mediator/handlers/iFrameEventHandlers.d.ts +27 -0
  23. package/dist/core/mediator/handlers/iFrameEventHandlers.js +93 -0
  24. package/dist/core/mediator/handlers/screenShotEventHandlers.d.ts +34 -0
  25. package/dist/core/mediator/handlers/screenShotEventHandlers.js +111 -0
  26. package/dist/core/mediator/protection-event.d.ts +77 -0
  27. package/dist/core/mediator/protection-event.js +32 -0
  28. package/dist/core/mediator/types.d.ts +105 -0
  29. package/dist/core/mediator/types.js +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.js +7 -0
  32. package/dist/otel.d.ts +24 -0
  33. package/dist/otel.js +83 -0
  34. package/dist/policy.d.ts +98 -0
  35. package/dist/policy.js +97 -0
  36. package/dist/strategies/AbstractStrategy.d.ts +124 -0
  37. package/dist/strategies/AbstractStrategy.js +256 -0
  38. package/dist/strategies/ClipboardStrategy.d.ts +67 -0
  39. package/dist/strategies/ClipboardStrategy.js +291 -0
  40. package/dist/strategies/ContextMenuStrategy.d.ts +60 -0
  41. package/dist/strategies/ContextMenuStrategy.js +454 -0
  42. package/dist/strategies/DevToolsStrategy.d.ts +55 -0
  43. package/dist/strategies/DevToolsStrategy.js +314 -0
  44. package/dist/strategies/ExtensionStrategy.d.ts +66 -0
  45. package/dist/strategies/ExtensionStrategy.js +486 -0
  46. package/dist/strategies/IFrameStrategy.d.ts +49 -0
  47. package/dist/strategies/IFrameStrategy.js +255 -0
  48. package/dist/strategies/KeyboardStrategy.d.ts +35 -0
  49. package/dist/strategies/KeyboardStrategy.js +130 -0
  50. package/dist/strategies/PrintStrategy.d.ts +47 -0
  51. package/dist/strategies/PrintStrategy.js +201 -0
  52. package/dist/strategies/ScreenshotStrategy.d.ts +90 -0
  53. package/dist/strategies/ScreenshotStrategy.js +502 -0
  54. package/dist/strategies/SelectionStrategy.d.ts +49 -0
  55. package/dist/strategies/SelectionStrategy.js +216 -0
  56. package/dist/strategies/WatermarkStrategy.d.ts +56 -0
  57. package/dist/strategies/WatermarkStrategy.js +287 -0
  58. package/dist/strategies/index.d.ts +10 -0
  59. package/dist/strategies/index.js +11 -0
  60. package/dist/types/assessment.d.ts +62 -0
  61. package/dist/types/assessment.js +1 -0
  62. package/dist/types/index.d.ts +278 -0
  63. package/dist/types/index.js +17 -0
  64. package/dist/utils/DOMObserver.d.ts +68 -0
  65. package/dist/utils/DOMObserver.js +134 -0
  66. package/dist/utils/base/LoggableComponent.d.ts +44 -0
  67. package/dist/utils/base/LoggableComponent.js +56 -0
  68. package/dist/utils/detectors/AbstractDevToolsDetector.d.ts +98 -0
  69. package/dist/utils/detectors/AbstractDevToolsDetector.js +127 -0
  70. package/dist/utils/detectors/dateToStringDetector.d.ts +43 -0
  71. package/dist/utils/detectors/dateToStringDetector.js +96 -0
  72. package/dist/utils/detectors/debugLibDetector.d.ts +64 -0
  73. package/dist/utils/detectors/debugLibDetector.js +195 -0
  74. package/dist/utils/detectors/debuggerDetector.d.ts +51 -0
  75. package/dist/utils/detectors/debuggerDetector.js +211 -0
  76. package/dist/utils/detectors/defineGetterDetector.d.ts +48 -0
  77. package/dist/utils/detectors/defineGetterDetector.js +150 -0
  78. package/dist/utils/detectors/detectorInterface.d.ts +36 -0
  79. package/dist/utils/detectors/detectorInterface.js +1 -0
  80. package/dist/utils/detectors/devToolsDetectorManager.d.ts +88 -0
  81. package/dist/utils/detectors/devToolsDetectorManager.js +243 -0
  82. package/dist/utils/detectors/funcToStringDetector.d.ts +43 -0
  83. package/dist/utils/detectors/funcToStringDetector.js +90 -0
  84. package/dist/utils/detectors/regToStringDetector.d.ts +43 -0
  85. package/dist/utils/detectors/regToStringDetector.js +129 -0
  86. package/dist/utils/detectors/sizeDetector.d.ts +54 -0
  87. package/dist/utils/detectors/sizeDetector.js +134 -0
  88. package/dist/utils/detectors/timingDetector.d.ts +55 -0
  89. package/dist/utils/detectors/timingDetector.js +143 -0
  90. package/dist/utils/dom.d.ts +20 -0
  91. package/dist/utils/dom.js +83 -0
  92. package/dist/utils/environment.d.ts +29 -0
  93. package/dist/utils/environment.js +267 -0
  94. package/dist/utils/eventManager.d.ts +162 -0
  95. package/dist/utils/eventManager.js +548 -0
  96. package/dist/utils/index.d.ts +2 -0
  97. package/dist/utils/index.js +3 -0
  98. package/dist/utils/intervalManager.d.ts +91 -0
  99. package/dist/utils/intervalManager.js +221 -0
  100. package/dist/utils/keyboardShortcutManager/keyboardShortcutManager.d.ts +41 -0
  101. package/dist/utils/keyboardShortcutManager/keyboardShortcutManager.js +135 -0
  102. package/dist/utils/keyboardShortcutManager/keyboardShortcuts.d.ts +18 -0
  103. package/dist/utils/keyboardShortcutManager/keyboardShortcuts.js +195 -0
  104. package/dist/utils/logging/simple/Loggable.d.ts +33 -0
  105. package/dist/utils/logging/simple/Loggable.js +1 -0
  106. package/dist/utils/logging/simple/LoggingDelegate.d.ts +42 -0
  107. package/dist/utils/logging/simple/LoggingDelegate.js +53 -0
  108. package/dist/utils/logging/simple/SimpleLoggingService.d.ts +39 -0
  109. package/dist/utils/logging/simple/SimpleLoggingService.js +58 -0
  110. package/dist/utils/orientation.d.ts +15 -0
  111. package/dist/utils/orientation.js +32 -0
  112. package/dist/utils/protectedContentManager.d.ts +155 -0
  113. package/dist/utils/protectedContentManager.js +424 -0
  114. package/dist/utils/securityOverlayManager.d.ts +253 -0
  115. package/dist/utils/securityOverlayManager.js +786 -0
  116. package/dist/utils/timeoutManager.d.ts +50 -0
  117. package/dist/utils/timeoutManager.js +113 -0
  118. package/package.json +61 -0
@@ -0,0 +1,267 @@
1
+ // FEATURE/ENVIRONMENT DETECTION
2
+ /**
3
+ * Detect browser environment
4
+ */
5
+ export const isBrowser = () => {
6
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
7
+ };
8
+ /**
9
+ * Detect mobile device
10
+ */
11
+ export const isMobile = () => {
12
+ if (!isBrowser())
13
+ return false;
14
+ const userAgent = navigator.userAgent;
15
+ // Standard mobile OS and browser detection
16
+ if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)) {
17
+ return true;
18
+ }
19
+ // Chinese mobile devices
20
+ if (/Huawei|HUAWEI|Honor|HONOR|Xiaomi|MI\/|Redmi|POCO|OPPO|vivo|OnePlus|Realme/i.test(userAgent)) {
21
+ return true;
22
+ }
23
+ // Korean mobile devices
24
+ if (/Samsung|SAMSUNG|LG|Tizen/i.test(userAgent)) {
25
+ return true;
26
+ }
27
+ // Japanese mobile devices
28
+ if (/Sony|SONY|Xperia|Sharp|SHARP|Fujitsu|FOMA|KDDI/i.test(userAgent)) {
29
+ return true;
30
+ }
31
+ // Russian mobile devices
32
+ if (/Yandex.Phone|YandexPhone|BQ-|BQru/i.test(userAgent)) {
33
+ return true;
34
+ }
35
+ // Other mobile platforms
36
+ if (/Windows Phone|WindowsPhone|Lumia|Mobile|Tablet|Phone|WPDesktop|ZuneWP|WP7|wds|Fennec|Firefox OS|KaiOS|KAIOS|Sailfish/i.test(userAgent)) {
37
+ return true;
38
+ }
39
+ // Mobile browser detection
40
+ if (/Mobile|Tablet|Android|Touch/i.test(userAgent) && !/Windows NT|Mac OS X/i.test(userAgent)) {
41
+ return true;
42
+ }
43
+ // Feature detection for touch devices (most mobile devices have touch capability)
44
+ if (isBrowser() && ("ontouchstart" in window || navigator.maxTouchPoints > 0)) {
45
+ // Additional check to avoid false positives on desktops with touch screens
46
+ if (window.innerWidth <= 1024 || /Mobi|Android/i.test(userAgent)) {
47
+ return true;
48
+ }
49
+ }
50
+ return false;
51
+ };
52
+ /**
53
+ * Detect specific browser
54
+ */
55
+ export const getBrowser = () => {
56
+ if (!isBrowser())
57
+ return { name: "unknown", version: "0" };
58
+ const ua = navigator.userAgent;
59
+ let browserName = "unknown";
60
+ let version = "0";
61
+ // Order matters here - we need to check more specific browsers first
62
+ // before falling back to more generic ones
63
+ // --- Chinese Browsers ---
64
+ if (/MicroMessenger|WeChat/.test(ua)) {
65
+ browserName = "wechat";
66
+ const match = ua.match(/MicroMessenger\/(\d+\.\d+)/);
67
+ version = match ? match[1] : "0";
68
+ }
69
+ // QQ Browser
70
+ else if (/QQBrowser/.test(ua)) {
71
+ browserName = "qq";
72
+ const match = ua.match(/QQBrowser\/(\d+\.\d+)/);
73
+ version = match ? match[1] : "0";
74
+ }
75
+ // UC Browser
76
+ else if (/UCBrowser/.test(ua)) {
77
+ browserName = "uc";
78
+ const match = ua.match(/UCBrowser\/(\d+\.\d+)/);
79
+ version = match ? match[1] : "0";
80
+ }
81
+ // Baidu Browser
82
+ else if (/Baidu|BIDUBrowser|baiduboxapp/.test(ua)) {
83
+ browserName = "baidu";
84
+ const match = ua.match(/(?:Baidu|BIDUBOX)(?:Browser)?\/(\d+\.\d+)/);
85
+ version = match ? match[1] : "0";
86
+ }
87
+ // Mi Browser
88
+ else if (/MiuiBrowser/.test(ua)) {
89
+ browserName = "mi";
90
+ const match = ua.match(/MiuiBrowser\/(\d+\.\d+)/);
91
+ version = match ? match[1] : "0";
92
+ }
93
+ // --- Russian Browsers ---
94
+ // Yandex Browser
95
+ else if (/YaBrowser/.test(ua)) {
96
+ browserName = "yandex";
97
+ const match = ua.match(/YaBrowser\/(\d+\.\d+)/);
98
+ version = match ? match[1] : "0";
99
+ }
100
+ // --- Korean Browsers ---
101
+ // Naver Whale
102
+ else if (/Whale/.test(ua)) {
103
+ browserName = "whale";
104
+ const match = ua.match(/Whale\/(\d+\.\d+)/);
105
+ version = match ? match[1] : "0";
106
+ }
107
+ // --- Mobile Browsers ---
108
+ // Samsung Internet
109
+ else if (/SamsungBrowser/.test(ua)) {
110
+ browserName = "samsung";
111
+ const match = ua.match(/SamsungBrowser\/(\d+\.\d+)/);
112
+ version = match ? match[1] : "0";
113
+ }
114
+ // Huawei Browser
115
+ else if (/HuaweiBrowser/.test(ua)) {
116
+ browserName = "huawei";
117
+ const match = ua.match(/HuaweiBrowser\/(\d+\.\d+)/);
118
+ version = match ? match[1] : "0";
119
+ }
120
+ // --- Alternative Browsers ---
121
+ // Vivaldi
122
+ else if (/Vivaldi/.test(ua)) {
123
+ browserName = "vivaldi";
124
+ const match = ua.match(/Vivaldi\/(\d+\.\d+)/);
125
+ version = match ? match[1] : "0";
126
+ }
127
+ // Lunascape
128
+ else if (/Lunascape/.test(ua)) {
129
+ browserName = "lunascape";
130
+ const match = ua.match(/Lunascape[/| ](\d+\.\d+)/);
131
+ version = match ? match[1] : "0";
132
+ }
133
+ // Opera
134
+ else if (/OPR|Opera/.test(ua)) {
135
+ browserName = "opera";
136
+ const match = ua.match(/(?:OPR|Opera)[/| ](\d+\.\d+)/);
137
+ version = match ? match[1] : "0";
138
+ }
139
+ // --- Emulators ---
140
+ // Nox Browser/Emulator
141
+ else if (/Nox/.test(ua)) {
142
+ browserName = "nox";
143
+ const match = ua.match(/Nox\/(\d+\.\d+)/);
144
+ version = match ? match[1] : "0";
145
+ }
146
+ // BlueStacks
147
+ else if (/BlueStacks/.test(ua)) {
148
+ browserName = "bluestacks";
149
+ const match = ua.match(/BlueStacks\/(\d+\.\d+)/);
150
+ version = match ? match[1] : "0";
151
+ }
152
+ // --- Major Browsers (keep these last as fallbacks) ---
153
+ // Edge
154
+ else if (/Edg/.test(ua)) {
155
+ browserName = "edge";
156
+ const match = ua.match(/Edg\/(\d+\.\d+)/);
157
+ version = match ? match[1] : "0";
158
+ }
159
+ // Chrome
160
+ else if (/Chrome/.test(ua) && !/Chromium|Edge|Edg|OPR|Opera/.test(ua)) {
161
+ browserName = "chrome";
162
+ const match = ua.match(/Chrome\/(\d+\.\d+)/);
163
+ version = match ? match[1] : "0";
164
+ }
165
+ // Firefox
166
+ else if (/Firefox/.test(ua)) {
167
+ browserName = "firefox";
168
+ const match = ua.match(/Firefox\/(\d+\.\d+)/);
169
+ version = match ? match[1] : "0";
170
+ }
171
+ // Safari
172
+ else if (/Safari/.test(ua) && !/Chrome/.test(ua)) {
173
+ browserName = "safari";
174
+ const match = ua.match(/Version\/(\d+\.\d+)/);
175
+ version = match ? match[1] : "0";
176
+ }
177
+ // IE
178
+ else if (/Trident|MSIE/.test(ua)) {
179
+ browserName = "ie";
180
+ const match = ua.match(/(?:rv:|MSIE )(\d+\.\d+)/);
181
+ version = match ? match[1] : "0";
182
+ }
183
+ // Chromium-based browsers not caught above
184
+ else if (/Chromium/.test(ua)) {
185
+ browserName = "chromium";
186
+ const match = ua.match(/Chromium\/(\d+\.\d+)/);
187
+ version = match ? match[1] : "0";
188
+ }
189
+ return { name: browserName, version };
190
+ };
191
+ /**
192
+ * Detect operating system
193
+ */
194
+ export const getOS = () => {
195
+ if (!isBrowser())
196
+ return { name: "unknown" };
197
+ const platform = navigator.platform.toLowerCase();
198
+ const userAgent = navigator.userAgent.toLowerCase();
199
+ // macOS and iOS devices
200
+ if (platform.includes("mac") ||
201
+ platform.includes("ipad") ||
202
+ platform.includes("ipod") ||
203
+ platform.includes("iphone") ||
204
+ userAgent.includes("mac") ||
205
+ userAgent.includes("iphone") ||
206
+ userAgent.includes("ipad") ||
207
+ (userAgent.includes("safari") && !userAgent.includes("chrome") && !userAgent.includes("android"))) {
208
+ return { name: "mac" };
209
+ }
210
+ // Windows detection
211
+ else if (platform.includes("win") || userAgent.includes("win") || userAgent.includes("windows nt")) {
212
+ return { name: "windows" };
213
+ }
214
+ // Linux and Linux-based OS detection
215
+ else if (
216
+ // Standard Linux
217
+ platform.includes("linux") ||
218
+ userAgent.includes("linux") ||
219
+ // Android (Linux-based)
220
+ userAgent.includes("android") ||
221
+ // Chinese OS (most are Linux-based)
222
+ userAgent.includes("harmonyos") ||
223
+ userAgent.includes("deepin") ||
224
+ userAgent.includes("uos") ||
225
+ userAgent.includes("cos") ||
226
+ // Russian Linux distributions
227
+ userAgent.includes("astra linux") ||
228
+ userAgent.includes("alt linux") ||
229
+ userAgent.includes("rosa") ||
230
+ // Korean OS
231
+ userAgent.includes("tizen") ||
232
+ userAgent.includes("gooroom") ||
233
+ // Other Linux-based OS
234
+ userAgent.includes("ubuntu") ||
235
+ userAgent.includes("debian") ||
236
+ userAgent.includes("fedora") ||
237
+ userAgent.includes("red hat") ||
238
+ userAgent.includes("suse") ||
239
+ userAgent.includes("mint") ||
240
+ // Chrome OS (Linux-based)
241
+ userAgent.includes("cros") ||
242
+ userAgent.includes("chromium os") ||
243
+ userAgent.includes("chrome os") ||
244
+ // BSD variants (Unix-like, grouped with Linux for simplicity)
245
+ userAgent.includes("freebsd") ||
246
+ userAgent.includes("openbsd") ||
247
+ userAgent.includes("netbsd")) {
248
+ return { name: "linux" };
249
+ }
250
+ // Fallback for undetected OS
251
+ return { name: "unknown" };
252
+ };
253
+ /**
254
+ * Check if print is supported
255
+ */
256
+ export const isPrintSupported = () => {
257
+ return isBrowser() && typeof window.print === 'function';
258
+ };
259
+ /**
260
+ * Check if beforeprint event is supported
261
+ */
262
+ export const isBeforePrintSupported = () => {
263
+ if (!isBrowser())
264
+ return false;
265
+ const mediaQueryList = window.matchMedia('print');
266
+ return !!mediaQueryList.addListener || 'onbeforeprint' in window;
267
+ };
@@ -0,0 +1,162 @@
1
+ import { LoggableComponent } from "./base/LoggableComponent";
2
+ /**
3
+ * Options for event registration
4
+ */
5
+ export interface EventRegistrationOptions extends AddEventListenerOptions {
6
+ /**
7
+ * Optional ID for the event (auto-generated if not provided)
8
+ */
9
+ id?: string;
10
+ /**
11
+ * Priority for the event handler (higher executes first)
12
+ * @default 0
13
+ */
14
+ priority?: number;
15
+ }
16
+ /**
17
+ * EventManager centralizes event handling across protection strategies
18
+ * It provides a unified API for registering and removing event listeners
19
+ * and ensures proper cleanup when strategies are removed
20
+ */
21
+ export declare class EventManager extends LoggableComponent {
22
+ private static instance;
23
+ private events;
24
+ private targetMap;
25
+ private readonly DOCUMENT_SYMBOL;
26
+ private readonly WINDOW_SYMBOL;
27
+ /**
28
+ * Create a new EventManager
29
+ * @param debugMode Enable debug mode for troubleshooting
30
+ */
31
+ private constructor();
32
+ /**
33
+ * Get the EventManager instance (singleton)
34
+ * @param debugMode Enable debug mode for troubleshooting
35
+ */
36
+ static getInstance(debugMode?: boolean): EventManager;
37
+ /**
38
+ * Register an event listener
39
+ * @param target The target element, document, or window
40
+ * @param eventType The type of event (e.g., "click", "keydown")
41
+ * @param handler The event handler function
42
+ * @param owner The component or strategy that owns this event
43
+ * @param options Additional options for the event listener
44
+ * @returns The ID of the registered event
45
+ */
46
+ addEventListener(target: EventTarget | null, eventType: string, handler: EventListener, owner: string, options?: EventRegistrationOptions): string;
47
+ /**
48
+ * Remove a specific event listener by ID
49
+ * @param target The target element, document, or window
50
+ * @param eventId The ID of the event to remove
51
+ * @returns True if the event was removed, false otherwise
52
+ */
53
+ removeEventListener(target: EventTarget | null, eventId: string): boolean;
54
+ /**
55
+ * Remove all event listeners for a specific owner (strategy/component)
56
+ * @param owner The owner to remove events for
57
+ * @returns The number of events removed
58
+ */
59
+ removeEventsByOwner(owner: string): number;
60
+ /**
61
+ * Remove all event listeners for a specific target
62
+ * @param target The target to remove events from
63
+ * @returns The number of events removed
64
+ */
65
+ removeAllEventsForTarget(target: EventTarget | null): number;
66
+ /**
67
+ * Get all event IDs for a specific owner
68
+ * @param owner The owner to get events for
69
+ * @returns Array of event IDs
70
+ */
71
+ getEventsByOwner(owner: string): string[];
72
+ /**
73
+ * Check if an event exists
74
+ * @param target The target element
75
+ * @param eventId The event ID
76
+ * @returns True if the event exists
77
+ */
78
+ hasEvent(target: EventTarget | null, eventId: string): boolean;
79
+ /**
80
+ * Get a unique identifier for a target
81
+ * @param target The target element, document, or window
82
+ * @param create Whether to create a new ID if one doesn't exist
83
+ * @returns The target ID
84
+ */
85
+ private getTargetId;
86
+ /**
87
+ * Get a target from its ID
88
+ * @param targetId The target ID
89
+ * @returns The target element or null
90
+ */
91
+ private getTargetFromId;
92
+ /**
93
+ * Get the number of registered events
94
+ * @returns The total number of registered events
95
+ */
96
+ getEventCount(): number;
97
+ /**
98
+ * Get debug information about registered events
99
+ * @returns Object with debug information
100
+ */
101
+ getDebugInfo(): {
102
+ totalEvents: number;
103
+ eventsByOwner: Record<string, number>;
104
+ eventsByType: Record<string, number>;
105
+ eventDetails: Array<{
106
+ targetId: string | symbol;
107
+ eventId: string;
108
+ eventType: string;
109
+ owner: string;
110
+ priority: number;
111
+ }>;
112
+ };
113
+ /**
114
+ * Clear all registered events
115
+ * @returns The number of events removed
116
+ */
117
+ clearAllEvents(): number;
118
+ /**
119
+ * Check if an event handler is already registered for this target, event type, and owner
120
+ * This helps prevent duplicate registrations
121
+ * @param target The target element
122
+ * @param eventType The event type (e.g., "click", "contextmenu")
123
+ * @param owner The owner of the event handler
124
+ * @returns True if an event handler is already registered
125
+ */
126
+ hasRegisteredEventType(target: EventTarget | null, eventType: string, owner: string): boolean;
127
+ /**
128
+ * Check for potential conflicts with existing event listeners
129
+ * @param target The target element
130
+ * @param eventType The event type (e.g., "click", "contextmenu")
131
+ * @param owner The owner of the event handler
132
+ * @returns Object with conflict information
133
+ */
134
+ checkForConflicts(target: EventTarget | null, eventType: string, owner: string): {
135
+ hasConflicts: boolean;
136
+ conflictsWith: Array<{
137
+ owner: string;
138
+ eventId: string;
139
+ }>;
140
+ };
141
+ /**
142
+ * Get events of a specific type for a target
143
+ * @param target The target element
144
+ * @param eventType The event type (e.g., "click", "contextmenu")
145
+ * @returns Array of event information
146
+ */
147
+ getEventsByType(target: EventTarget | null, eventType: string): Array<{
148
+ eventId: string;
149
+ owner: string;
150
+ priority: number;
151
+ }>;
152
+ /**
153
+ * Remove event listeners by selector
154
+ * Useful for Vue components and other dynamically created elements
155
+ * @param selector CSS selector to match elements
156
+ * @param eventType The event type (e.g., "click", "contextmenu")
157
+ * @param owner The owner of the event handler
158
+ * @returns The number of events removed
159
+ */
160
+ removeEventsBySelector(selector: string, eventType: string, owner: string): number;
161
+ }
162
+ export declare const eventManager: EventManager;