@swetrix/captcha 2.0.2 → 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
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
const CAPTCHA_SELECTOR = '.swecaptcha';
|
|
2
|
+
const SUPPORTED_LOCALES = ['en', 'de', 'fr', 'pl', 'uk', 'hu'];
|
|
3
|
+
const DEFAULT_LOCALE = 'en';
|
|
4
|
+
const DEFAULT_ASSET_BASE_URL = 'https://cdn.swetrixcaptcha.com/dist/';
|
|
5
|
+
const DEFAULT_RESPONSE_INPUT_NAME = 'swetrix-captcha-response';
|
|
6
|
+
const MESSAGE_IDENTIFIER = 'swetrix-captcha';
|
|
7
|
+
const ID_PREFIX = 'swetrix-captcha-';
|
|
8
|
+
const THEMES = ['light', 'dark', 'auto'];
|
|
9
|
+
const DEFAULT_THEME = 'auto';
|
|
10
|
+
const PID_REGEX = /^(?!.*--)[a-zA-Z0-9-]{12}$/;
|
|
11
|
+
const SCRIPT_NAME_REGEX = /(?:^|\/)captcha-loader(?:\.[\w-]+)?\.js(?:[?#]|$)/;
|
|
12
|
+
const LEGACY_CDN_HOST = 'cdn.swetrixcaptcha.com';
|
|
13
|
+
var LOG_ACTIONS;
|
|
14
|
+
(function (LOG_ACTIONS) {
|
|
15
|
+
LOG_ACTIONS["log"] = "log";
|
|
16
|
+
LOG_ACTIONS["error"] = "error";
|
|
17
|
+
LOG_ACTIONS["warn"] = "warn";
|
|
18
|
+
LOG_ACTIONS["info"] = "info";
|
|
19
|
+
})(LOG_ACTIONS || (LOG_ACTIONS = {}));
|
|
20
|
+
const DUMMY_PIDS = ['AP00000000000', 'FAIL000000000'];
|
|
21
|
+
const isValidPID = (pid) => DUMMY_PIDS.includes(pid) || PID_REGEX.test(pid);
|
|
22
|
+
const FRAME_HEIGHT = '66px';
|
|
23
|
+
const getFrameID = (cid) => `${cid}-frame`;
|
|
24
|
+
const ids = [];
|
|
25
|
+
const captchaFrameOrigins = new Map();
|
|
26
|
+
const captchaFrameSources = new Map();
|
|
27
|
+
let messageListenerRegistered = false;
|
|
28
|
+
const log = (status, text) => {
|
|
29
|
+
console[status](`[Swetrix Captcha] ${text}`);
|
|
30
|
+
};
|
|
31
|
+
const getWindow = () => (typeof window === 'undefined' ? undefined : window);
|
|
32
|
+
const getDocument = () => (typeof document === 'undefined' ? undefined : document);
|
|
33
|
+
const normalizeAssetBaseURL = (assetBaseUrl) => {
|
|
34
|
+
const fallbackBase = getWindow()?.location.href;
|
|
35
|
+
try {
|
|
36
|
+
const url = fallbackBase ? new URL(assetBaseUrl, fallbackBase) : new URL(assetBaseUrl);
|
|
37
|
+
return url.href.endsWith('/') ? url.href : `${url.href}/`;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const getScriptAssetBaseURL = () => {
|
|
44
|
+
const doc = getDocument();
|
|
45
|
+
if (!doc) {
|
|
46
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
47
|
+
}
|
|
48
|
+
const currentScript = doc.currentScript;
|
|
49
|
+
const scripts = [
|
|
50
|
+
...(currentScript?.src ? [currentScript] : []),
|
|
51
|
+
...Array.from(doc.scripts).reverse(),
|
|
52
|
+
];
|
|
53
|
+
const loaderScript = scripts.find((script) => SCRIPT_NAME_REGEX.test(script.src));
|
|
54
|
+
if (!loaderScript?.src) {
|
|
55
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
56
|
+
}
|
|
57
|
+
if (new URL(loaderScript.src).hostname === LEGACY_CDN_HOST) {
|
|
58
|
+
return DEFAULT_ASSET_BASE_URL;
|
|
59
|
+
}
|
|
60
|
+
return normalizeAssetBaseURL(new URL('.', loaderScript.src).href);
|
|
61
|
+
};
|
|
62
|
+
const resolveAssetBaseURL = (container) => {
|
|
63
|
+
const configuredAssetBaseURL = container.getAttribute('data-asset-url') ||
|
|
64
|
+
container.getAttribute('data-assets-url') ||
|
|
65
|
+
getWindow()?.__SWETRIX_CAPTCHA_ASSET_URL;
|
|
66
|
+
return normalizeAssetBaseURL(configuredAssetBaseURL || getScriptAssetBaseURL());
|
|
67
|
+
};
|
|
68
|
+
const detectPreferredTheme = () => {
|
|
69
|
+
const win = getWindow();
|
|
70
|
+
if (win?.matchMedia?.('(prefers-color-scheme: dark)').matches) {
|
|
71
|
+
return 'dark';
|
|
72
|
+
}
|
|
73
|
+
return 'light';
|
|
74
|
+
};
|
|
75
|
+
const isSupportedLocale = (locale) => {
|
|
76
|
+
return SUPPORTED_LOCALES.includes(locale);
|
|
77
|
+
};
|
|
78
|
+
const normalizeLocale = (locale) => {
|
|
79
|
+
const lowered = locale.toLowerCase();
|
|
80
|
+
const primary = lowered.split('-')[0].split('_')[0];
|
|
81
|
+
if (isSupportedLocale(primary)) {
|
|
82
|
+
return primary;
|
|
83
|
+
}
|
|
84
|
+
return DEFAULT_LOCALE;
|
|
85
|
+
};
|
|
86
|
+
const detectBrowserLocale = () => {
|
|
87
|
+
if (typeof navigator === 'undefined') {
|
|
88
|
+
return DEFAULT_LOCALE;
|
|
89
|
+
}
|
|
90
|
+
const languages = navigator.languages || [navigator.language];
|
|
91
|
+
for (const lang of languages) {
|
|
92
|
+
const normalized = normalizeLocale(lang);
|
|
93
|
+
if (normalized !== DEFAULT_LOCALE || lang.toLowerCase().startsWith('en')) {
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return DEFAULT_LOCALE;
|
|
98
|
+
};
|
|
99
|
+
const findHtmlLangAttribute = (element) => {
|
|
100
|
+
let current = element;
|
|
101
|
+
while (current) {
|
|
102
|
+
const lang = current.getAttribute('lang');
|
|
103
|
+
if (lang) {
|
|
104
|
+
return lang;
|
|
105
|
+
}
|
|
106
|
+
current = current.parentElement;
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
};
|
|
110
|
+
const detectLanguage = (container) => {
|
|
111
|
+
const forcedLang = container.getAttribute('data-lang');
|
|
112
|
+
if (forcedLang) {
|
|
113
|
+
return normalizeLocale(forcedLang);
|
|
114
|
+
}
|
|
115
|
+
const ancestorLang = findHtmlLangAttribute(container.parentElement);
|
|
116
|
+
if (ancestorLang) {
|
|
117
|
+
return normalizeLocale(ancestorLang);
|
|
118
|
+
}
|
|
119
|
+
return detectBrowserLocale();
|
|
120
|
+
};
|
|
121
|
+
const resolveTheme = (theme) => {
|
|
122
|
+
if (theme === 'light' || theme === 'dark') {
|
|
123
|
+
return theme;
|
|
124
|
+
}
|
|
125
|
+
return detectPreferredTheme();
|
|
126
|
+
};
|
|
127
|
+
const appendParamsToURL = (url, params) => {
|
|
128
|
+
const urlObject = new URL(url, getWindow()?.location.href);
|
|
129
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
130
|
+
if (value !== null && value !== undefined) {
|
|
131
|
+
urlObject.searchParams.set(key, value);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return urlObject.toString();
|
|
135
|
+
};
|
|
136
|
+
const clearExistingCaptcha = (container) => {
|
|
137
|
+
const existingFrames = container.querySelectorAll('iframe[id^="swetrix-captcha-"]');
|
|
138
|
+
existingFrames.forEach((frame) => {
|
|
139
|
+
const cid = frame.id.replace('-frame', '');
|
|
140
|
+
const input = container.querySelector(`input[id="${cid}"]`);
|
|
141
|
+
input?.remove();
|
|
142
|
+
captchaFrameOrigins.delete(cid);
|
|
143
|
+
captchaFrameSources.delete(cid);
|
|
144
|
+
const cidIndex = ids.indexOf(cid);
|
|
145
|
+
if (cidIndex > -1) {
|
|
146
|
+
ids.splice(cidIndex, 1);
|
|
147
|
+
}
|
|
148
|
+
frame.remove();
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
const renderCaptcha = (container, params) => {
|
|
152
|
+
clearExistingCaptcha(container);
|
|
153
|
+
const cParams = {
|
|
154
|
+
...params,
|
|
155
|
+
cid: generateRandomID(),
|
|
156
|
+
};
|
|
157
|
+
const frame = generateCaptchaFrame(cParams);
|
|
158
|
+
const input = generateHiddenInput(cParams);
|
|
159
|
+
container.appendChild(frame);
|
|
160
|
+
captchaFrameSources.set(cParams.cid, frame.contentWindow);
|
|
161
|
+
container.appendChild(input);
|
|
162
|
+
};
|
|
163
|
+
const generateRandomID = () => {
|
|
164
|
+
const randomID = ID_PREFIX + Math.random().toString(36).substr(2, 6);
|
|
165
|
+
if (ids.includes(randomID)) {
|
|
166
|
+
return generateRandomID();
|
|
167
|
+
}
|
|
168
|
+
ids.push(randomID);
|
|
169
|
+
return randomID;
|
|
170
|
+
};
|
|
171
|
+
const postMessageCallback = (pmEvent) => {
|
|
172
|
+
const data = pmEvent.data;
|
|
173
|
+
if (!data) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const { type, cid, event } = data;
|
|
177
|
+
if (type !== MESSAGE_IDENTIFIER) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (!cid || !ids.includes(cid)) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const expectedOrigin = captchaFrameOrigins.get(cid);
|
|
184
|
+
const expectedSource = captchaFrameSources.get(cid);
|
|
185
|
+
if ((!expectedOrigin || pmEvent.origin !== expectedOrigin) &&
|
|
186
|
+
(!expectedSource || pmEvent.source !== expectedSource)) {
|
|
187
|
+
log(LOG_ACTIONS.error, `[PM -> ${event}] Unexpected origin: ${pmEvent.origin}`);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const input = getDocument()?.getElementById(cid);
|
|
191
|
+
const inputExists = input !== null;
|
|
192
|
+
switch (event) {
|
|
193
|
+
case 'success': {
|
|
194
|
+
const { token } = data;
|
|
195
|
+
if (!inputExists) {
|
|
196
|
+
log(LOG_ACTIONS.error, '[PM -> success] Input element does not exist.');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
input.value = token || '';
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case 'failure':
|
|
203
|
+
case 'tokenExpired': {
|
|
204
|
+
if (!inputExists) {
|
|
205
|
+
log(LOG_ACTIONS.error, '[PM -> failure] Input element does not exist.');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
input.value = '';
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
const generateCaptchaFrame = (params) => {
|
|
214
|
+
const { assetBaseUrl, cid, theme: rawTheme, ...queryParams } = params;
|
|
215
|
+
const theme = resolveTheme(rawTheme);
|
|
216
|
+
const captchaFrame = document.createElement('iframe');
|
|
217
|
+
const captchaPage = theme === 'dark' ? 'pages/dark.html' : 'pages/light.html';
|
|
218
|
+
captchaFrame.id = getFrameID(cid);
|
|
219
|
+
captchaFrame.src = appendParamsToURL(new URL(captchaPage, assetBaseUrl).toString(), {
|
|
220
|
+
...queryParams,
|
|
221
|
+
cid,
|
|
222
|
+
theme: rawTheme,
|
|
223
|
+
});
|
|
224
|
+
captchaFrameOrigins.set(cid, new URL(captchaFrame.src).origin);
|
|
225
|
+
captchaFrame.style.height = FRAME_HEIGHT;
|
|
226
|
+
captchaFrame.title = 'Swetrix Captcha - Human verification';
|
|
227
|
+
captchaFrame.style.border = 'none';
|
|
228
|
+
captchaFrame.style.width = '302px';
|
|
229
|
+
captchaFrame.style.overflow = 'visible';
|
|
230
|
+
captchaFrame.setAttribute('role', 'presentation');
|
|
231
|
+
captchaFrame.setAttribute('aria-label', 'Human verification widget');
|
|
232
|
+
return captchaFrame;
|
|
233
|
+
};
|
|
234
|
+
const generateHiddenInput = (params) => {
|
|
235
|
+
const { cid } = params;
|
|
236
|
+
const input = document.createElement('input');
|
|
237
|
+
input.type = 'hidden';
|
|
238
|
+
input.name = params.respName;
|
|
239
|
+
input.value = '';
|
|
240
|
+
input.id = cid;
|
|
241
|
+
input.setAttribute('aria-hidden', 'true');
|
|
242
|
+
return input;
|
|
243
|
+
};
|
|
244
|
+
const validateParams = (params) => {
|
|
245
|
+
const { theme, pid } = params;
|
|
246
|
+
if (theme && !THEMES.includes(theme)) {
|
|
247
|
+
log(LOG_ACTIONS.error, `Invalid data-theme parameter: ${theme}. Valid options are: ${THEMES.join(', ')}`);
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
if (!pid || !isValidPID(pid)) {
|
|
251
|
+
log(LOG_ACTIONS.error, `Invalid data-project-id parameter: ${pid}`);
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
return true;
|
|
255
|
+
};
|
|
256
|
+
const parseParams = (container) => {
|
|
257
|
+
const params = {
|
|
258
|
+
pid: container.getAttribute('data-project-id'),
|
|
259
|
+
respName: container.getAttribute('data-response-input-name') || DEFAULT_RESPONSE_INPUT_NAME,
|
|
260
|
+
theme: container.getAttribute('data-theme') || DEFAULT_THEME,
|
|
261
|
+
lang: detectLanguage(container),
|
|
262
|
+
assetBaseUrl: resolveAssetBaseURL(container),
|
|
263
|
+
};
|
|
264
|
+
const apiUrl = container.getAttribute('data-api-url');
|
|
265
|
+
if (apiUrl) {
|
|
266
|
+
params.apiUrl = apiUrl;
|
|
267
|
+
}
|
|
268
|
+
return params;
|
|
269
|
+
};
|
|
270
|
+
const isCaptchaRendered = (container) => container.querySelector('iframe[id^="swetrix-captcha-"]') !== null;
|
|
271
|
+
const registerMessageListener = () => {
|
|
272
|
+
const win = getWindow();
|
|
273
|
+
if (!win || messageListenerRegistered) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
win.addEventListener('message', postMessageCallback);
|
|
277
|
+
messageListenerRegistered = true;
|
|
278
|
+
};
|
|
279
|
+
export const loadCaptcha = (forced = false) => {
|
|
280
|
+
const win = getWindow();
|
|
281
|
+
const doc = getDocument();
|
|
282
|
+
if (!win || !doc) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
win.swecaptcha = true;
|
|
286
|
+
registerMessageListener();
|
|
287
|
+
const containers = Array.from(doc.querySelectorAll(CAPTCHA_SELECTOR));
|
|
288
|
+
for (const container of containers) {
|
|
289
|
+
if (!forced && isCaptchaRendered(container)) {
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
const params = parseParams(container);
|
|
293
|
+
if (!validateParams(params)) {
|
|
294
|
+
log(LOG_ACTIONS.error, 'Aborting captcha rendering due to invalid parameters.');
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
renderCaptcha(container, params);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
export const forceLoadCaptcha = () => loadCaptcha(true);
|
|
301
|
+
const setupCaptcha = () => {
|
|
302
|
+
const win = getWindow();
|
|
303
|
+
const doc = getDocument();
|
|
304
|
+
if (!win || !doc) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
win.swetrixCaptchaForceLoad = forceLoadCaptcha;
|
|
308
|
+
if (doc.readyState === 'loading') {
|
|
309
|
+
doc.addEventListener('DOMContentLoaded', () => loadCaptcha(), { once: true });
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
loadCaptcha();
|
|
313
|
+
};
|
|
314
|
+
setupCaptcha();
|
|
315
|
+
//# sourceMappingURL=captcha-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captcha-loader.js","sourceRoot":"","sources":["../../src/captcha-loader.ts"],"names":[],"mappings":"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"}
|