@swetrix/captcha 2.0.1 → 2.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 +72 -5
- package/dist/captcha-loader.cjs +333 -0
- package/dist/captcha-loader.cjs.map +1 -0
- package/dist/captcha-loader.esm.js +327 -0
- package/dist/captcha-loader.esm.js.map +1 -0
- package/dist/captcha-loader.js +1 -1
- package/dist/captcha-loader.js.map +1 -1
- package/dist/captcha.js +1 -1
- package/dist/captcha.js.map +1 -1
- package/dist/esnext/captcha-loader.d.ts +10 -0
- package/dist/esnext/captcha-loader.js +315 -0
- package/dist/esnext/captcha-loader.js.map +1 -0
- package/dist/esnext/captcha.d.ts +10 -0
- package/dist/esnext/captcha.js +491 -0
- package/dist/esnext/captcha.js.map +1 -0
- package/dist/esnext/i18n.d.ts +22 -0
- package/dist/esnext/i18n.js +110 -0
- package/dist/esnext/i18n.js.map +1 -0
- package/dist/esnext/index.d.ts +7 -0
- package/dist/esnext/index.js +7 -0
- package/dist/esnext/index.js.map +1 -0
- package/dist/esnext/logger.d.ts +6 -0
- package/dist/esnext/logger.js +8 -0
- package/dist/esnext/logger.js.map +1 -0
- package/dist/esnext/pow-worker.d.ts +1 -0
- package/dist/esnext/pow-worker.js +127 -0
- package/dist/esnext/pow-worker.js.map +1 -0
- package/dist/pages/dark.html +461 -276
- package/dist/pages/light.html +463 -278
- package/dist/pages/test.html +26 -27
- package/package.json +58 -32
- package/.nvmrc +0 -1
- package/.prettierrc.js +0 -13
- package/dist/assets/logo_blue.png +0 -0
- package/dist/assets/logo_white.png +0 -0
- package/rollup.config.mjs +0 -83
- package/src/assets/logo_blue.png +0 -0
- package/src/assets/logo_white.png +0 -0
- package/src/captcha-loader.ts +0 -212
- package/src/captcha.ts +0 -358
- package/src/pages/dark.html +0 -284
- package/src/pages/light.html +0 -286
- package/src/pages/test.html +0 -33
- package/src/pow-worker.ts +0 -178
- package/tsconfig.esnext.json +0 -15
- package/tsconfig.json +0 -14
package/README.md
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
<
|
|
1
|
+
<picture>
|
|
2
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://swetrix.com/assets/logo_white.png?v=2">
|
|
3
|
+
<img alt="Swetrix" src="https://swetrix.com/assets/logo_blue.png?v=2" height="80">
|
|
4
|
+
</picture>
|
|
5
|
+
<br /><br />
|
|
2
6
|
|
|
3
7
|
## Description
|
|
4
8
|
|
|
@@ -6,6 +10,73 @@ Swetrix CAPTCHA is a privacy-oriented, simple and opensource CAPTCHA service.
|
|
|
6
10
|
|
|
7
11
|
See the full documentation at https://docs.swetrix.com/captcha/introduction
|
|
8
12
|
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- **Privacy-focused**: No tracking, no cookies
|
|
16
|
+
- **Accessible**: Full keyboard navigation, ARIA support, screen reader announcements, respects `prefers-reduced-motion`
|
|
17
|
+
- **Progress indicator**: Visual progress bar during verification
|
|
18
|
+
- **Auto theme detection**: Automatically matches browser's light/dark mode preference
|
|
19
|
+
- **Lightweight**: Minimal footprint, fast loading
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Script tag
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<div class="swecaptcha"
|
|
27
|
+
data-project-id="YOUR_PROJECT_ID"
|
|
28
|
+
data-theme="auto">
|
|
29
|
+
</div>
|
|
30
|
+
<script src="https://cdn.swetrixcaptcha.com/captcha-loader.js" defer></script>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### npm
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install @swetrix/captcha
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
import '@swetrix/captcha'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The package automatically renders `.swecaptcha` elements when the DOM is ready. You can also trigger a reload manually:
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
import { forceLoadCaptcha, loadCaptcha } from '@swetrix/captcha'
|
|
47
|
+
|
|
48
|
+
// Render any .swecaptcha elements that are not initialised yet.
|
|
49
|
+
loadCaptcha()
|
|
50
|
+
|
|
51
|
+
// Re-render all .swecaptcha elements, replacing existing widgets.
|
|
52
|
+
forceLoadCaptcha()
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Options
|
|
56
|
+
|
|
57
|
+
| Attribute | Description | Values | Default |
|
|
58
|
+
|-----------|-------------|--------|---------|
|
|
59
|
+
| `data-project-id` | Your project ID | Valid project ID | Required |
|
|
60
|
+
| `data-theme` | Color theme | `auto`, `light`, `dark` | `auto` |
|
|
61
|
+
| `data-response-input-name` | Hidden input name | Any string | `swetrix-captcha-response` |
|
|
62
|
+
| `data-lang` | Force a specific language | `en`, `de`, `fr`, `pl`, `uk`, `hu` | Auto-detected |
|
|
63
|
+
| `data-asset-url` | Custom URL for CAPTCHA package assets | Any absolute or relative URL | `https://cdn.swetrixcaptcha.com/dist/` |
|
|
64
|
+
|
|
65
|
+
### Language Support
|
|
66
|
+
|
|
67
|
+
The widget supports **English**, **German**, **French**, **Polish**, **Ukrainian**, and **Hungarian**.
|
|
68
|
+
|
|
69
|
+
Language is detected automatically in this order:
|
|
70
|
+
1. `data-lang` attribute on the widget element
|
|
71
|
+
2. `lang` attribute on parent elements (e.g., `<html lang="de">`)
|
|
72
|
+
3. Browser's preferred language
|
|
73
|
+
|
|
74
|
+
### Theme Options
|
|
75
|
+
|
|
76
|
+
- `auto`: Automatically detects user's browser theme preference using `prefers-color-scheme`
|
|
77
|
+
- `light`: Forces light theme
|
|
78
|
+
- `dark`: Forces dark theme
|
|
79
|
+
|
|
9
80
|
## Development
|
|
10
81
|
|
|
11
82
|
To build the captcha run:
|
|
@@ -27,7 +98,3 @@ For severe security issues, please contact us at security@swetrix.com
|
|
|
27
98
|
## Contact
|
|
28
99
|
|
|
29
100
|
You can contact us via email at contact@swetrix.com
|
|
30
|
-
|
|
31
|
-
## Donate
|
|
32
|
-
You can support the project by donating us at https://ko-fi.com/andriir \
|
|
33
|
-
We can only run our services by once again asking for your financial support!
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const CAPTCHA_SELECTOR = '.swecaptcha';
|
|
6
|
+
const SUPPORTED_LOCALES = ['en', 'de', 'fr', 'pl', 'uk', 'hu'];
|
|
7
|
+
const DEFAULT_LOCALE = 'en';
|
|
8
|
+
const DEFAULT_ASSET_BASE_URL = 'https://cdn.swetrixcaptcha.com/dist/';
|
|
9
|
+
const DEFAULT_RESPONSE_INPUT_NAME = 'swetrix-captcha-response';
|
|
10
|
+
const MESSAGE_IDENTIFIER = 'swetrix-captcha';
|
|
11
|
+
const ID_PREFIX = 'swetrix-captcha-';
|
|
12
|
+
const THEMES = ['light', 'dark', 'auto'];
|
|
13
|
+
const DEFAULT_THEME = 'auto';
|
|
14
|
+
const PID_REGEX = /^(?!.*--)[a-zA-Z0-9-]{12}$/;
|
|
15
|
+
const SCRIPT_NAME_REGEX = /(?:^|\/)captcha-loader(?:\.[\w-]+)?\.js(?:[?#]|$)/;
|
|
16
|
+
const LEGACY_CDN_HOST = 'cdn.swetrixcaptcha.com';
|
|
17
|
+
var LOG_ACTIONS;
|
|
18
|
+
(function (LOG_ACTIONS) {
|
|
19
|
+
LOG_ACTIONS["log"] = "log";
|
|
20
|
+
LOG_ACTIONS["error"] = "error";
|
|
21
|
+
LOG_ACTIONS["warn"] = "warn";
|
|
22
|
+
LOG_ACTIONS["info"] = "info";
|
|
23
|
+
})(LOG_ACTIONS || (LOG_ACTIONS = {}));
|
|
24
|
+
const DUMMY_PIDS = ['AP00000000000', 'FAIL000000000'];
|
|
25
|
+
const isValidPID = (pid) => DUMMY_PIDS.includes(pid) || PID_REGEX.test(pid);
|
|
26
|
+
const FRAME_HEIGHT = '66px';
|
|
27
|
+
const getFrameID = (cid) => `${cid}-frame`;
|
|
28
|
+
const ids = [];
|
|
29
|
+
const captchaFrameOrigins = new Map();
|
|
30
|
+
const captchaFrameSources = new Map();
|
|
31
|
+
let messageListenerRegistered = false;
|
|
32
|
+
const log = (status, text) => {
|
|
33
|
+
console[status](`[Swetrix Captcha] ${text}`);
|
|
34
|
+
};
|
|
35
|
+
const getWindow = () => (typeof window === 'undefined' ? undefined : window);
|
|
36
|
+
const getDocument = () => (typeof document === 'undefined' ? undefined : document);
|
|
37
|
+
const normalizeAssetBaseURL = (assetBaseUrl) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const fallbackBase = (_a = getWindow()) === null || _a === void 0 ? void 0 : _a.location.href;
|
|
40
|
+
try {
|
|
41
|
+
const url = fallbackBase ? new URL(assetBaseUrl, fallbackBase) : new URL(assetBaseUrl);
|
|
42
|
+
return url.href.endsWith('/') ? url.href : `${url.href}/`;
|
|
43
|
+
}
|
|
44
|
+
catch (_b) {
|
|
45
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const getScriptAssetBaseURL = () => {
|
|
49
|
+
const doc = getDocument();
|
|
50
|
+
if (!doc) {
|
|
51
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
52
|
+
}
|
|
53
|
+
const currentScript = doc.currentScript;
|
|
54
|
+
const scripts = [
|
|
55
|
+
...((currentScript === null || currentScript === void 0 ? void 0 : currentScript.src) ? [currentScript] : []),
|
|
56
|
+
...Array.from(doc.scripts).reverse(),
|
|
57
|
+
];
|
|
58
|
+
const loaderScript = scripts.find((script) => SCRIPT_NAME_REGEX.test(script.src));
|
|
59
|
+
if (!(loaderScript === null || loaderScript === void 0 ? void 0 : loaderScript.src)) {
|
|
60
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
61
|
+
}
|
|
62
|
+
if (new URL(loaderScript.src).hostname === LEGACY_CDN_HOST) {
|
|
63
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
64
|
+
}
|
|
65
|
+
return normalizeAssetBaseURL(new URL('.', loaderScript.src).href);
|
|
66
|
+
};
|
|
67
|
+
const resolveAssetBaseURL = (container) => {
|
|
68
|
+
var _a;
|
|
69
|
+
const configuredAssetBaseURL = container.getAttribute('data-asset-url') ||
|
|
70
|
+
container.getAttribute('data-assets-url') ||
|
|
71
|
+
((_a = getWindow()) === null || _a === void 0 ? void 0 : _a.__SWETRIX_CAPTCHA_ASSET_URL);
|
|
72
|
+
return normalizeAssetBaseURL(configuredAssetBaseURL || getScriptAssetBaseURL());
|
|
73
|
+
};
|
|
74
|
+
const detectPreferredTheme = () => {
|
|
75
|
+
var _a;
|
|
76
|
+
const win = getWindow();
|
|
77
|
+
if ((_a = win === null || win === void 0 ? void 0 : win.matchMedia) === null || _a === void 0 ? void 0 : _a.call(win, '(prefers-color-scheme: dark)').matches) {
|
|
78
|
+
return 'dark';
|
|
79
|
+
}
|
|
80
|
+
return 'light';
|
|
81
|
+
};
|
|
82
|
+
const isSupportedLocale = (locale) => {
|
|
83
|
+
return SUPPORTED_LOCALES.includes(locale);
|
|
84
|
+
};
|
|
85
|
+
const normalizeLocale = (locale) => {
|
|
86
|
+
const lowered = locale.toLowerCase();
|
|
87
|
+
const primary = lowered.split('-')[0].split('_')[0];
|
|
88
|
+
if (isSupportedLocale(primary)) {
|
|
89
|
+
return primary;
|
|
90
|
+
}
|
|
91
|
+
return DEFAULT_LOCALE;
|
|
92
|
+
};
|
|
93
|
+
const detectBrowserLocale = () => {
|
|
94
|
+
if (typeof navigator === 'undefined') {
|
|
95
|
+
return DEFAULT_LOCALE;
|
|
96
|
+
}
|
|
97
|
+
const languages = navigator.languages || [navigator.language];
|
|
98
|
+
for (const lang of languages) {
|
|
99
|
+
const normalized = normalizeLocale(lang);
|
|
100
|
+
if (normalized !== DEFAULT_LOCALE || lang.toLowerCase().startsWith('en')) {
|
|
101
|
+
return normalized;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return DEFAULT_LOCALE;
|
|
105
|
+
};
|
|
106
|
+
const findHtmlLangAttribute = (element) => {
|
|
107
|
+
let current = element;
|
|
108
|
+
while (current) {
|
|
109
|
+
const lang = current.getAttribute('lang');
|
|
110
|
+
if (lang) {
|
|
111
|
+
return lang;
|
|
112
|
+
}
|
|
113
|
+
current = current.parentElement;
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
};
|
|
117
|
+
const detectLanguage = (container) => {
|
|
118
|
+
const forcedLang = container.getAttribute('data-lang');
|
|
119
|
+
if (forcedLang) {
|
|
120
|
+
return normalizeLocale(forcedLang);
|
|
121
|
+
}
|
|
122
|
+
const ancestorLang = findHtmlLangAttribute(container.parentElement);
|
|
123
|
+
if (ancestorLang) {
|
|
124
|
+
return normalizeLocale(ancestorLang);
|
|
125
|
+
}
|
|
126
|
+
return detectBrowserLocale();
|
|
127
|
+
};
|
|
128
|
+
const resolveTheme = (theme) => {
|
|
129
|
+
if (theme === 'light' || theme === 'dark') {
|
|
130
|
+
return theme;
|
|
131
|
+
}
|
|
132
|
+
return detectPreferredTheme();
|
|
133
|
+
};
|
|
134
|
+
const appendParamsToURL = (url, params) => {
|
|
135
|
+
var _a;
|
|
136
|
+
const urlObject = new URL(url, (_a = getWindow()) === null || _a === void 0 ? void 0 : _a.location.href);
|
|
137
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
138
|
+
if (value !== null && value !== undefined) {
|
|
139
|
+
urlObject.searchParams.set(key, value);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return urlObject.toString();
|
|
143
|
+
};
|
|
144
|
+
const clearExistingCaptcha = (container) => {
|
|
145
|
+
const existingFrames = container.querySelectorAll('iframe[id^="swetrix-captcha-"]');
|
|
146
|
+
existingFrames.forEach((frame) => {
|
|
147
|
+
const cid = frame.id.replace('-frame', '');
|
|
148
|
+
const input = container.querySelector(`input[id="${cid}"]`);
|
|
149
|
+
input === null || input === void 0 ? void 0 : input.remove();
|
|
150
|
+
captchaFrameOrigins.delete(cid);
|
|
151
|
+
captchaFrameSources.delete(cid);
|
|
152
|
+
const cidIndex = ids.indexOf(cid);
|
|
153
|
+
if (cidIndex > -1) {
|
|
154
|
+
ids.splice(cidIndex, 1);
|
|
155
|
+
}
|
|
156
|
+
frame.remove();
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
const renderCaptcha = (container, params) => {
|
|
160
|
+
clearExistingCaptcha(container);
|
|
161
|
+
const cParams = {
|
|
162
|
+
...params,
|
|
163
|
+
cid: generateRandomID(),
|
|
164
|
+
};
|
|
165
|
+
const frame = generateCaptchaFrame(cParams);
|
|
166
|
+
const input = generateHiddenInput(cParams);
|
|
167
|
+
container.appendChild(frame);
|
|
168
|
+
captchaFrameSources.set(cParams.cid, frame.contentWindow);
|
|
169
|
+
container.appendChild(input);
|
|
170
|
+
};
|
|
171
|
+
const generateRandomID = () => {
|
|
172
|
+
const randomID = ID_PREFIX + Math.random().toString(36).substr(2, 6);
|
|
173
|
+
if (ids.includes(randomID)) {
|
|
174
|
+
return generateRandomID();
|
|
175
|
+
}
|
|
176
|
+
ids.push(randomID);
|
|
177
|
+
return randomID;
|
|
178
|
+
};
|
|
179
|
+
const postMessageCallback = (pmEvent) => {
|
|
180
|
+
var _a;
|
|
181
|
+
const data = pmEvent.data;
|
|
182
|
+
if (!data) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const { type, cid, event } = data;
|
|
186
|
+
if (type !== MESSAGE_IDENTIFIER) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!cid || !ids.includes(cid)) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const expectedOrigin = captchaFrameOrigins.get(cid);
|
|
193
|
+
const expectedSource = captchaFrameSources.get(cid);
|
|
194
|
+
if ((!expectedOrigin || pmEvent.origin !== expectedOrigin) &&
|
|
195
|
+
(!expectedSource || pmEvent.source !== expectedSource)) {
|
|
196
|
+
log(LOG_ACTIONS.error, `[PM -> ${event}] Unexpected origin: ${pmEvent.origin}`);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const input = (_a = getDocument()) === null || _a === void 0 ? void 0 : _a.getElementById(cid);
|
|
200
|
+
const inputExists = input !== null;
|
|
201
|
+
switch (event) {
|
|
202
|
+
case 'success': {
|
|
203
|
+
const { token } = data;
|
|
204
|
+
if (!inputExists) {
|
|
205
|
+
log(LOG_ACTIONS.error, '[PM -> success] Input element does not exist.');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
input.value = token || '';
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
case 'failure':
|
|
212
|
+
case 'tokenExpired': {
|
|
213
|
+
if (!inputExists) {
|
|
214
|
+
log(LOG_ACTIONS.error, '[PM -> failure] Input element does not exist.');
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
input.value = '';
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
const generateCaptchaFrame = (params) => {
|
|
223
|
+
const { assetBaseUrl, cid, theme: rawTheme, ...queryParams } = params;
|
|
224
|
+
const theme = resolveTheme(rawTheme);
|
|
225
|
+
const captchaFrame = document.createElement('iframe');
|
|
226
|
+
const captchaPage = theme === 'dark' ? 'pages/dark.html' : 'pages/light.html';
|
|
227
|
+
captchaFrame.id = getFrameID(cid);
|
|
228
|
+
captchaFrame.src = appendParamsToURL(new URL(captchaPage, assetBaseUrl).toString(), {
|
|
229
|
+
...queryParams,
|
|
230
|
+
cid,
|
|
231
|
+
theme: rawTheme,
|
|
232
|
+
});
|
|
233
|
+
captchaFrameOrigins.set(cid, new URL(captchaFrame.src).origin);
|
|
234
|
+
captchaFrame.style.height = FRAME_HEIGHT;
|
|
235
|
+
captchaFrame.title = 'Swetrix Captcha - Human verification';
|
|
236
|
+
captchaFrame.style.border = 'none';
|
|
237
|
+
captchaFrame.style.width = '302px';
|
|
238
|
+
captchaFrame.style.overflow = 'visible';
|
|
239
|
+
captchaFrame.setAttribute('role', 'presentation');
|
|
240
|
+
captchaFrame.setAttribute('aria-label', 'Human verification widget');
|
|
241
|
+
return captchaFrame;
|
|
242
|
+
};
|
|
243
|
+
const generateHiddenInput = (params) => {
|
|
244
|
+
const { cid } = params;
|
|
245
|
+
const input = document.createElement('input');
|
|
246
|
+
input.type = 'hidden';
|
|
247
|
+
input.name = params.respName;
|
|
248
|
+
input.value = '';
|
|
249
|
+
input.id = cid;
|
|
250
|
+
input.setAttribute('aria-hidden', 'true');
|
|
251
|
+
return input;
|
|
252
|
+
};
|
|
253
|
+
const validateParams = (params) => {
|
|
254
|
+
const { theme, pid } = params;
|
|
255
|
+
if (theme && !THEMES.includes(theme)) {
|
|
256
|
+
log(LOG_ACTIONS.error, `Invalid data-theme parameter: ${theme}. Valid options are: ${THEMES.join(', ')}`);
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
if (!pid || !isValidPID(pid)) {
|
|
260
|
+
log(LOG_ACTIONS.error, `Invalid data-project-id parameter: ${pid}`);
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
};
|
|
265
|
+
const parseParams = (container) => {
|
|
266
|
+
const params = {
|
|
267
|
+
pid: container.getAttribute('data-project-id'),
|
|
268
|
+
respName: container.getAttribute('data-response-input-name') || DEFAULT_RESPONSE_INPUT_NAME,
|
|
269
|
+
theme: container.getAttribute('data-theme') || DEFAULT_THEME,
|
|
270
|
+
lang: detectLanguage(container),
|
|
271
|
+
assetBaseUrl: resolveAssetBaseURL(container),
|
|
272
|
+
};
|
|
273
|
+
const apiUrl = container.getAttribute('data-api-url');
|
|
274
|
+
if (apiUrl) {
|
|
275
|
+
params.apiUrl = apiUrl;
|
|
276
|
+
}
|
|
277
|
+
return params;
|
|
278
|
+
};
|
|
279
|
+
const isCaptchaRendered = (container) => container.querySelector('iframe[id^="swetrix-captcha-"]') !== null;
|
|
280
|
+
const registerMessageListener = () => {
|
|
281
|
+
const win = getWindow();
|
|
282
|
+
if (!win || messageListenerRegistered) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
win.addEventListener('message', postMessageCallback);
|
|
286
|
+
messageListenerRegistered = true;
|
|
287
|
+
};
|
|
288
|
+
const loadCaptcha = (forced = false) => {
|
|
289
|
+
const win = getWindow();
|
|
290
|
+
const doc = getDocument();
|
|
291
|
+
if (!win || !doc) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
win.swecaptcha = true;
|
|
295
|
+
registerMessageListener();
|
|
296
|
+
const containers = Array.from(doc.querySelectorAll(CAPTCHA_SELECTOR));
|
|
297
|
+
for (const container of containers) {
|
|
298
|
+
if (!forced && isCaptchaRendered(container)) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const params = parseParams(container);
|
|
302
|
+
if (!validateParams(params)) {
|
|
303
|
+
log(LOG_ACTIONS.error, 'Aborting captcha rendering due to invalid parameters.');
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
renderCaptcha(container, params);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const forceLoadCaptcha = () => loadCaptcha(true);
|
|
310
|
+
const setupCaptcha = () => {
|
|
311
|
+
const win = getWindow();
|
|
312
|
+
const doc = getDocument();
|
|
313
|
+
if (!win || !doc) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
win.swetrixCaptchaForceLoad = forceLoadCaptcha;
|
|
317
|
+
if (doc.readyState === 'loading') {
|
|
318
|
+
doc.addEventListener('DOMContentLoaded', () => loadCaptcha(), { once: true });
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
loadCaptcha();
|
|
322
|
+
};
|
|
323
|
+
setupCaptcha();
|
|
324
|
+
|
|
325
|
+
var index = {
|
|
326
|
+
forceLoadCaptcha,
|
|
327
|
+
loadCaptcha,
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
exports.default = index;
|
|
331
|
+
exports.forceLoadCaptcha = forceLoadCaptcha;
|
|
332
|
+
exports.loadCaptcha = loadCaptcha;
|
|
333
|
+
//# sourceMappingURL=captcha-loader.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captcha-loader.cjs","sources":["../src/captcha-loader.ts","../src/index.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
|