@vkid/captcha 1.0.6-JETiT.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/CODE_OF_CONDUCT.md +0 -0
- package/CODE_STYLE.md +188 -0
- package/LICENSE +4 -0
- package/README.md +7 -0
- package/dist/esm/constants.js +19 -0
- package/dist/esm/core/bridge/bridge.js +153 -0
- package/dist/esm/core/bridge/types.js +7 -0
- package/dist/esm/core/config/config.js +84 -0
- package/dist/esm/core/dispatcher/dispatcher.js +59 -0
- package/dist/esm/core/widget/constants.js +19 -0
- package/dist/esm/core/widget/events.js +22 -0
- package/dist/esm/core/widget/template.js +7 -0
- package/dist/esm/core/widget/types.js +26 -0
- package/dist/esm/core/widget/widget.js +406 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/lib/.pnpm/mitt@1.2.0/lib/mitt/dist/mitt.es.js +63 -0
- package/dist/esm/lib/.pnpm/nanoid@3.3.11/lib/nanoid/non-secure/index.js +12 -0
- package/dist/esm/types.js +7 -0
- package/dist/esm/utils/checkCaptchaError/checkCaptchaError.js +134 -0
- package/dist/esm/utils/checkCaptchaError/types.js +10 -0
- package/dist/esm/utils/checkCaptchaError/utils.js +11 -0
- package/dist/esm/utils/uuid.js +5 -0
- package/dist/types/constants.d.ts +17 -0
- package/dist/types/core/bridge/bridge.d.ts +10 -0
- package/dist/types/core/bridge/index.d.ts +3 -0
- package/dist/types/core/bridge/types.d.ts +15 -0
- package/dist/types/core/config/config.d.ts +8 -0
- package/dist/types/core/config/index.d.ts +2 -0
- package/dist/types/core/config/types.d.ts +6 -0
- package/dist/types/core/dispatcher/dispatcher.d.ts +6 -0
- package/dist/types/core/dispatcher/index.d.ts +1 -0
- package/dist/types/core/widget/constants.d.ts +2 -0
- package/dist/types/core/widget/events.d.ts +18 -0
- package/dist/types/core/widget/index.d.ts +3 -0
- package/dist/types/core/widget/template.d.ts +2 -0
- package/dist/types/core/widget/types.d.ts +97 -0
- package/dist/types/core/widget/widget.d.ts +86 -0
- package/dist/types/envConstants.d.ts +3 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/loader.d.ts +1 -0
- package/dist/types/types.d.ts +8 -0
- package/dist/types/utils/action.d.ts +7 -0
- package/dist/types/utils/checkCaptchaError/checkCaptchaError.d.ts +2 -0
- package/dist/types/utils/checkCaptchaError/index.d.ts +2 -0
- package/dist/types/utils/checkCaptchaError/types.d.ts +59 -0
- package/dist/types/utils/checkCaptchaError/utils.d.ts +1 -0
- package/dist/types/utils/uuid.d.ts +1 -0
- package/dist/umd/index.js +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import { CAPTCHA_TYPE_2, VIEW_MODE_POPUP, LANGUAGE_ID_BY_CODE } from '../../constants.js';
|
|
2
|
+
import { Bridge } from '../bridge/bridge.js';
|
|
3
|
+
import { BridgeEvents } from '../bridge/types.js';
|
|
4
|
+
import { Config } from '../config/config.js';
|
|
5
|
+
import { Dispatcher } from '../dispatcher/dispatcher.js';
|
|
6
|
+
import { WebBridgeSensor } from '../../types.js';
|
|
7
|
+
import { uuid } from '../../utils/uuid.js';
|
|
8
|
+
import { WIDGET_ERROR_TEXT } from './constants.js';
|
|
9
|
+
import { WidgetEvents, CaptchaEvents } from './events.js';
|
|
10
|
+
import { getWidgetTemplate } from './template.js';
|
|
11
|
+
import { WidgetState, SensorsDataEventTypes, WidgetErrorCode } from './types.js';
|
|
12
|
+
|
|
13
|
+
function _assert_this_initialized(self) {
|
|
14
|
+
if (self === void 0) {
|
|
15
|
+
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
16
|
+
}
|
|
17
|
+
return self;
|
|
18
|
+
}
|
|
19
|
+
function _call_super(_this, derived, args) {
|
|
20
|
+
derived = _get_prototype_of(derived);
|
|
21
|
+
return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
|
|
22
|
+
}
|
|
23
|
+
function _class_call_check(instance, Constructor) {
|
|
24
|
+
if (!(instance instanceof Constructor)) {
|
|
25
|
+
throw new TypeError("Cannot call a class as a function");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function _defineProperties(target, props) {
|
|
29
|
+
for(var i = 0; i < props.length; i++){
|
|
30
|
+
var descriptor = props[i];
|
|
31
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
32
|
+
descriptor.configurable = true;
|
|
33
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
34
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
38
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
39
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
40
|
+
return Constructor;
|
|
41
|
+
}
|
|
42
|
+
function _define_property(obj, key, value) {
|
|
43
|
+
if (key in obj) {
|
|
44
|
+
Object.defineProperty(obj, key, {
|
|
45
|
+
value: value,
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true
|
|
49
|
+
});
|
|
50
|
+
} else {
|
|
51
|
+
obj[key] = value;
|
|
52
|
+
}
|
|
53
|
+
return obj;
|
|
54
|
+
}
|
|
55
|
+
function _get_prototype_of(o) {
|
|
56
|
+
_get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
|
|
57
|
+
return o.__proto__ || Object.getPrototypeOf(o);
|
|
58
|
+
};
|
|
59
|
+
return _get_prototype_of(o);
|
|
60
|
+
}
|
|
61
|
+
function _inherits(subClass, superClass) {
|
|
62
|
+
if (typeof superClass !== "function" && superClass !== null) {
|
|
63
|
+
throw new TypeError("Super expression must either be null or a function");
|
|
64
|
+
}
|
|
65
|
+
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
66
|
+
constructor: {
|
|
67
|
+
value: subClass,
|
|
68
|
+
writable: true,
|
|
69
|
+
configurable: true
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
if (superClass) _set_prototype_of(subClass, superClass);
|
|
73
|
+
}
|
|
74
|
+
function _possible_constructor_return(self, call) {
|
|
75
|
+
if (call && (_type_of(call) === "object" || typeof call === "function")) {
|
|
76
|
+
return call;
|
|
77
|
+
}
|
|
78
|
+
return _assert_this_initialized(self);
|
|
79
|
+
}
|
|
80
|
+
function _set_prototype_of(o, p) {
|
|
81
|
+
_set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
|
|
82
|
+
o.__proto__ = p;
|
|
83
|
+
return o;
|
|
84
|
+
};
|
|
85
|
+
return _set_prototype_of(o, p);
|
|
86
|
+
}
|
|
87
|
+
function _type_of(obj) {
|
|
88
|
+
"@swc/helpers - typeof";
|
|
89
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
90
|
+
}
|
|
91
|
+
function _is_native_reflect_construct() {
|
|
92
|
+
try {
|
|
93
|
+
var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
|
|
94
|
+
} catch (_) {}
|
|
95
|
+
return (_is_native_reflect_construct = function() {
|
|
96
|
+
return !!result;
|
|
97
|
+
})();
|
|
98
|
+
}
|
|
99
|
+
// const MODULE_LOAD_TIMEOUT = 5000;
|
|
100
|
+
var MODULE_CHANGE_STATE_TIMEOUT = 300;
|
|
101
|
+
var Widget = /*#__PURE__*/ function(Dispatcher) {
|
|
102
|
+
_inherits(Widget, Dispatcher);
|
|
103
|
+
function Widget() {
|
|
104
|
+
var config = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
105
|
+
_class_call_check(this, Widget);
|
|
106
|
+
var _this;
|
|
107
|
+
_this = _call_super(this, Widget), /**
|
|
108
|
+
* @ignore
|
|
109
|
+
*/ _define_property(_this, "id", uuid()), _define_property(_this, "scheme", void 0), _define_property(_this, "langId", void 0), _define_property(_this, "config", void 0), _define_property(_this, "timeoutTimer", void 0), _define_property(_this, "bridge", void 0), _define_property(_this, "container", void 0), _define_property(_this, "iframeSrc", void 0), _define_property(_this, "captchaType", void 0), _define_property(_this, "autofocus", void 0), _define_property(_this, "view", void 0), _define_property(_this, "onClose", void 0), _define_property(_this, "templateRenderer", getWidgetTemplate), _define_property(_this, "promise", void 0), _define_property(_this, "promiseResolve", void 0), _define_property(_this, "promiseReject", void 0), _define_property(_this, "elements", void 0), /**
|
|
110
|
+
* Получение координат айфрейма
|
|
111
|
+
*/ _define_property(_this, "getIframeCoords", function() {
|
|
112
|
+
var _this_elements_iframe_getBoundingClientRect = _this.elements.iframe.getBoundingClientRect(), left = _this_elements_iframe_getBoundingClientRect.left, top = _this_elements_iframe_getBoundingClientRect.top;
|
|
113
|
+
var scrollX = window.scrollX, scrollY = window.scrollY;
|
|
114
|
+
return {
|
|
115
|
+
left: left + scrollX,
|
|
116
|
+
top: top + scrollY
|
|
117
|
+
};
|
|
118
|
+
}), /**
|
|
119
|
+
* Метод отправки данных движения мыши/событий касания через бридж
|
|
120
|
+
*/ _define_property(_this, "sendSensorsData", function(param) {
|
|
121
|
+
var eventType = param.eventType, data = param.data;
|
|
122
|
+
_this.bridge.sendMessage({
|
|
123
|
+
handler: CaptchaEvents.SEND_WEB_SENSORS,
|
|
124
|
+
params: {
|
|
125
|
+
eventType: eventType,
|
|
126
|
+
data: data,
|
|
127
|
+
coords: _this.getIframeCoords()
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}), /**
|
|
131
|
+
* Обработчик движения мыши
|
|
132
|
+
*/ _define_property(_this, "handleMouseMove", function(event) {
|
|
133
|
+
var pageX = event.pageX, pageY = event.pageY;
|
|
134
|
+
_this.sendSensorsData({
|
|
135
|
+
eventType: SensorsDataEventTypes.MOUSE_CHANGE,
|
|
136
|
+
data: {
|
|
137
|
+
pageX: pageX,
|
|
138
|
+
pageY: pageY
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}), /**
|
|
142
|
+
* Обработчик событий касания
|
|
143
|
+
*/ _define_property(_this, "handleTouchMove", function(event) {
|
|
144
|
+
var touch = event.touches[0];
|
|
145
|
+
if (touch) {
|
|
146
|
+
var pageX = touch.pageX, pageY = touch.pageY;
|
|
147
|
+
_this.sendSensorsData({
|
|
148
|
+
eventType: SensorsDataEventTypes.TOUCH_CHANGE,
|
|
149
|
+
data: {
|
|
150
|
+
pageX: pageX,
|
|
151
|
+
pageY: pageY
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
_this.config = new Config().init(config);
|
|
157
|
+
return _this;
|
|
158
|
+
}
|
|
159
|
+
_create_class(Widget, [
|
|
160
|
+
{
|
|
161
|
+
key: "update",
|
|
162
|
+
value: function update(config) {
|
|
163
|
+
return this.config.update(config);
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
key: "show",
|
|
168
|
+
value: function show(params) {
|
|
169
|
+
var _this = this;
|
|
170
|
+
var container = params.container, iframeSrc = params.iframeSrc, captchaType = params.captchaType, view = params.view, autofocus = params.autofocus, scheme = params.scheme, lang = params.lang, onClose = params.onClose;
|
|
171
|
+
this.promise = new Promise(function(res, rej) {
|
|
172
|
+
_this.promiseResolve = res;
|
|
173
|
+
_this.promiseReject = rej;
|
|
174
|
+
});
|
|
175
|
+
this.container = container;
|
|
176
|
+
this.iframeSrc = iframeSrc;
|
|
177
|
+
this.view = captchaType === CAPTCHA_TYPE_2 ? VIEW_MODE_POPUP : view;
|
|
178
|
+
this.iframeSrc = iframeSrc;
|
|
179
|
+
this.captchaType = captchaType;
|
|
180
|
+
this.autofocus = autofocus !== null && autofocus !== void 0 ? autofocus : true;
|
|
181
|
+
this.scheme = scheme;
|
|
182
|
+
this.langId = lang ? LANGUAGE_ID_BY_CODE[lang] : undefined;
|
|
183
|
+
this.onClose = onClose;
|
|
184
|
+
this.renderTemplate();
|
|
185
|
+
this.registerElements();
|
|
186
|
+
this.loadWidgetFrame();
|
|
187
|
+
return this.promise;
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
key: "close",
|
|
192
|
+
value: function close() {
|
|
193
|
+
var _this_elements_root, _this_elements, _this_bridge, _this_promiseReject, _this, _this_onClose, _this1;
|
|
194
|
+
clearTimeout(this.timeoutTimer);
|
|
195
|
+
this.removeAnalyticsMouseListeners();
|
|
196
|
+
this.removeAnalyticsTouchListeners();
|
|
197
|
+
(_this_elements = this.elements) === null || _this_elements === void 0 ? void 0 : (_this_elements_root = _this_elements.root) === null || _this_elements_root === void 0 ? void 0 : _this_elements_root.remove();
|
|
198
|
+
(_this_bridge = this.bridge) === null || _this_bridge === void 0 ? void 0 : _this_bridge.destroy();
|
|
199
|
+
this.events.emit(WidgetEvents.CLOSE);
|
|
200
|
+
(_this_promiseReject = (_this = this).promiseReject) === null || _this_promiseReject === void 0 ? void 0 : _this_promiseReject.call(_this, 'close');
|
|
201
|
+
(_this_onClose = (_this1 = this).onClose) === null || _this_onClose === void 0 ? void 0 : _this_onClose.call(_this1);
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
key: "addAnalyticsMouseListeners",
|
|
206
|
+
value: /**
|
|
207
|
+
* Метод вызывается для регистрации обработчиков движения мыши
|
|
208
|
+
*/ function addAnalyticsMouseListeners() {
|
|
209
|
+
document.addEventListener('mouseenter', this.handleMouseMove);
|
|
210
|
+
document.addEventListener('mouseleave', this.handleMouseMove);
|
|
211
|
+
document.addEventListener('mousemove', this.handleMouseMove);
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
key: "removeAnalyticsMouseListeners",
|
|
216
|
+
value: /**
|
|
217
|
+
* Метод вызывается для удаления обработчиков движения мыши
|
|
218
|
+
*/ function removeAnalyticsMouseListeners() {
|
|
219
|
+
document.removeEventListener('mouseenter', this.handleMouseMove);
|
|
220
|
+
document.removeEventListener('mouseleave', this.handleMouseMove);
|
|
221
|
+
document.removeEventListener('mousemove', this.handleMouseMove);
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
key: "addAnalyticsTouchListeners",
|
|
226
|
+
value: /**
|
|
227
|
+
* Метод вызывается для регистрации обработчиков событий касания
|
|
228
|
+
*/ function addAnalyticsTouchListeners() {
|
|
229
|
+
document.addEventListener('touchstart', this.handleTouchMove);
|
|
230
|
+
document.addEventListener('touchend', this.handleTouchMove);
|
|
231
|
+
document.addEventListener('touchmove', this.handleTouchMove);
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
key: "removeAnalyticsTouchListeners",
|
|
236
|
+
value: /**
|
|
237
|
+
* Метод вызывается для удаления обработчиков событий касания
|
|
238
|
+
*/ function removeAnalyticsTouchListeners() {
|
|
239
|
+
document.removeEventListener('touchstart', this.handleTouchMove);
|
|
240
|
+
document.removeEventListener('touchend', this.handleTouchMove);
|
|
241
|
+
document.removeEventListener('touchmove', this.handleTouchMove);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
key: "onLoadHandler",
|
|
246
|
+
value: /**
|
|
247
|
+
* Метод вызывается перед началом загрузки iframe с VK ID приложением
|
|
248
|
+
*/ // protected onStartLoadHandler() {
|
|
249
|
+
// this.setState(WidgetState.LOADING);
|
|
250
|
+
// this.timeoutTimer = setTimeout(() => {
|
|
251
|
+
// this.onErrorHandler({
|
|
252
|
+
// code: WidgetErrorCode.TimeoutExceeded,
|
|
253
|
+
// text: WIDGET_ERROR_TEXT[WidgetErrorCode.TimeoutExceeded],
|
|
254
|
+
// });
|
|
255
|
+
// }, MODULE_LOAD_TIMEOUT);
|
|
256
|
+
// this.events.emit(WidgetEvents.START_LOAD);
|
|
257
|
+
// }
|
|
258
|
+
/**
|
|
259
|
+
* Метод вызывается после того, как полностью загружен iframe с VK ID приложением
|
|
260
|
+
*/ function onLoadHandler() {
|
|
261
|
+
var _this = this;
|
|
262
|
+
clearTimeout(this.timeoutTimer);
|
|
263
|
+
setTimeout(function() {
|
|
264
|
+
// Задержка избавляет от моргания замены шаблона на iframe
|
|
265
|
+
_this.setState(WidgetState.LOADED);
|
|
266
|
+
}, MODULE_CHANGE_STATE_TIMEOUT);
|
|
267
|
+
this.events.emit(WidgetEvents.LOAD);
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
key: "onErrorHandler",
|
|
272
|
+
value: /**
|
|
273
|
+
* Метод вызывается, когда во время работы/загрузки VK ID приложения произошла ошибка
|
|
274
|
+
*/ function onErrorHandler(error) {
|
|
275
|
+
var _this_elements_iframe, _this_elements, _this_promiseReject, _this;
|
|
276
|
+
clearTimeout(this.timeoutTimer);
|
|
277
|
+
this.setState(WidgetState.NOT_LOADED);
|
|
278
|
+
this.events.emit(WidgetEvents.ERROR, error);
|
|
279
|
+
(_this_elements = this.elements) === null || _this_elements === void 0 ? void 0 : (_this_elements_iframe = _this_elements.iframe) === null || _this_elements_iframe === void 0 ? void 0 : _this_elements_iframe.remove();
|
|
280
|
+
(_this_promiseReject = (_this = this).promiseReject) === null || _this_promiseReject === void 0 ? void 0 : _this_promiseReject.call(_this, error.text);
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
key: "onBridgeMessageHandler",
|
|
285
|
+
value: /**
|
|
286
|
+
* Метод вызывается при сообщениях от VK ID приложения
|
|
287
|
+
*/ function onBridgeMessageHandler(event) {
|
|
288
|
+
switch(event.handler){
|
|
289
|
+
case WidgetEvents.LOAD:
|
|
290
|
+
{
|
|
291
|
+
this.onLoadHandler();
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
case CaptchaEvents.CLOSE:
|
|
295
|
+
case WidgetEvents.CLOSE:
|
|
296
|
+
{
|
|
297
|
+
this.close();
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
case WidgetEvents.ERROR:
|
|
301
|
+
{
|
|
302
|
+
this.onErrorHandler({
|
|
303
|
+
code: WidgetErrorCode.InternalError,
|
|
304
|
+
text: WIDGET_ERROR_TEXT[WidgetErrorCode.InternalError],
|
|
305
|
+
details: event.params
|
|
306
|
+
});
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
case WidgetEvents.RESIZE:
|
|
310
|
+
{
|
|
311
|
+
this.elements.root.style.height = "".concat(event.params.height, "px");
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
case CaptchaEvents.GET_RESULT:
|
|
315
|
+
{
|
|
316
|
+
var successToken = event.params.token;
|
|
317
|
+
this.promiseResolve(successToken);
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
case CaptchaEvents.SENSORS_START:
|
|
321
|
+
{
|
|
322
|
+
var _event_params = event.params, sensorsList = _event_params.bridge_sensors_list;
|
|
323
|
+
var isCursorSensorRequired = sensorsList.includes(WebBridgeSensor.CURSOR);
|
|
324
|
+
var isTapsSensorRequired = sensorsList.includes(WebBridgeSensor.TAPS);
|
|
325
|
+
if (isCursorSensorRequired || isTapsSensorRequired) {
|
|
326
|
+
this.sendSensorsData({
|
|
327
|
+
eventType: SensorsDataEventTypes.INIT
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
if (isCursorSensorRequired) {
|
|
331
|
+
this.addAnalyticsMouseListeners();
|
|
332
|
+
}
|
|
333
|
+
if (isTapsSensorRequired) {
|
|
334
|
+
this.addAnalyticsTouchListeners();
|
|
335
|
+
}
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
case CaptchaEvents.SENSORS_STOP:
|
|
339
|
+
{
|
|
340
|
+
this.removeAnalyticsMouseListeners();
|
|
341
|
+
this.removeAnalyticsTouchListeners();
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
key: "renderTemplate",
|
|
349
|
+
value: // <Дополнительные хелперы>
|
|
350
|
+
function renderTemplate() {
|
|
351
|
+
this.container.insertAdjacentHTML('beforeend', this.templateRenderer(this.id, this.view));
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
key: "loadWidgetFrame",
|
|
356
|
+
value: function loadWidgetFrame() {
|
|
357
|
+
var _this = this;
|
|
358
|
+
// this.onStartLoadHandler();
|
|
359
|
+
var iframeSrc = new URL(this.iframeSrc);
|
|
360
|
+
this.bridge = new Bridge({
|
|
361
|
+
iframe: this.elements.iframe,
|
|
362
|
+
origin: iframeSrc.origin
|
|
363
|
+
});
|
|
364
|
+
this.bridge.on(BridgeEvents.MESSAGE, function(event) {
|
|
365
|
+
return _this.onBridgeMessageHandler(event);
|
|
366
|
+
});
|
|
367
|
+
var iframeSearchParams = new URLSearchParams(iframeSrc.search);
|
|
368
|
+
switch(true){
|
|
369
|
+
case !!this.scheme:
|
|
370
|
+
iframeSearchParams.set('scheme', this.scheme);
|
|
371
|
+
case !!this.langId:
|
|
372
|
+
iframeSearchParams.set('lang_id', this.langId);
|
|
373
|
+
default:
|
|
374
|
+
iframeSearchParams.set('autofocus', this.autofocus ? '1' : '0');
|
|
375
|
+
var origin = location.protocol + '//' + location.hostname;
|
|
376
|
+
iframeSearchParams.set('origin', origin);
|
|
377
|
+
if (this.captchaType !== CAPTCHA_TYPE_2) {
|
|
378
|
+
iframeSearchParams.set('variant', this.view);
|
|
379
|
+
}
|
|
380
|
+
break;
|
|
381
|
+
}
|
|
382
|
+
iframeSrc = new URL("".concat(iframeSrc.origin).concat(iframeSrc.pathname, "?").concat(iframeSearchParams));
|
|
383
|
+
this.elements.iframe.src = iframeSrc.href;
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
key: "setState",
|
|
388
|
+
value: function setState(state) {
|
|
389
|
+
this.elements.root.setAttribute('data-state', state);
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
key: "registerElements",
|
|
394
|
+
value: function registerElements() {
|
|
395
|
+
var root = document.getElementById(this.id);
|
|
396
|
+
this.elements = {
|
|
397
|
+
root: root,
|
|
398
|
+
iframe: root.querySelector('iframe')
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
]);
|
|
403
|
+
return Widget;
|
|
404
|
+
}(Dispatcher);
|
|
405
|
+
|
|
406
|
+
export { Widget };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Widget } from './core/widget/widget.js';
|
|
2
|
+
import { checkCaptchaError } from './utils/checkCaptchaError/checkCaptchaError.js';
|
|
3
|
+
export { CheckCaptchaType } from './utils/checkCaptchaError/types.js';
|
|
4
|
+
|
|
5
|
+
if (typeof window !== 'undefined') {
|
|
6
|
+
window._vkidCaptchaWidget = Widget;
|
|
7
|
+
window._vkidCaptchaCheckError = checkCaptchaError;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { Widget as CaptchaWidget, checkCaptchaError };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
//
|
|
2
|
+
// An event handler can take an optional event argument
|
|
3
|
+
// and should not return a value
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
// An array of all currently registered event handlers for a type
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// A map of event types and their corresponding event handlers.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/** Mitt: Tiny (~200b) functional event emitter / pubsub.
|
|
17
|
+
* @name mitt
|
|
18
|
+
* @returns {Mitt}
|
|
19
|
+
*/
|
|
20
|
+
function mitt(all ) {
|
|
21
|
+
all = all || Object.create(null);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
/**
|
|
25
|
+
* Register an event handler for the given type.
|
|
26
|
+
*
|
|
27
|
+
* @param {String} type Type of event to listen for, or `"*"` for all events
|
|
28
|
+
* @param {Function} handler Function to call in response to given event
|
|
29
|
+
* @memberOf mitt
|
|
30
|
+
*/
|
|
31
|
+
on: function on(type , handler ) {
|
|
32
|
+
(all[type] || (all[type] = [])).push(handler);
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Remove an event handler for the given type.
|
|
37
|
+
*
|
|
38
|
+
* @param {String} type Type of event to unregister `handler` from, or `"*"`
|
|
39
|
+
* @param {Function} handler Handler function to remove
|
|
40
|
+
* @memberOf mitt
|
|
41
|
+
*/
|
|
42
|
+
off: function off(type , handler ) {
|
|
43
|
+
if (all[type]) {
|
|
44
|
+
all[type].splice(all[type].indexOf(handler) >>> 0, 1);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Invoke all handlers for the given type.
|
|
50
|
+
* If present, `"*"` handlers are invoked after type-matched handlers.
|
|
51
|
+
*
|
|
52
|
+
* @param {String} type The event type to invoke
|
|
53
|
+
* @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
|
|
54
|
+
* @memberOf mitt
|
|
55
|
+
*/
|
|
56
|
+
emit: function emit(type , evt ) {
|
|
57
|
+
(all[type] || []).slice().map(function (handler) { handler(evt); });
|
|
58
|
+
(all['*'] || []).slice().map(function (handler) { handler(type, evt); });
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { mitt as default };
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Widget } from '../../core/widget/widget.js';
|
|
2
|
+
import { CheckCaptchaType } from './types.js';
|
|
3
|
+
import { getChallengeUrlDomain } from './utils.js';
|
|
4
|
+
|
|
5
|
+
function _define_property(obj, key, value) {
|
|
6
|
+
if (key in obj) {
|
|
7
|
+
Object.defineProperty(obj, key, {
|
|
8
|
+
value: value,
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true
|
|
12
|
+
});
|
|
13
|
+
} else {
|
|
14
|
+
obj[key] = value;
|
|
15
|
+
}
|
|
16
|
+
return obj;
|
|
17
|
+
}
|
|
18
|
+
function _object_spread(target) {
|
|
19
|
+
for(var i = 1; i < arguments.length; i++){
|
|
20
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
21
|
+
var ownKeys = Object.keys(source);
|
|
22
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
23
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
24
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
ownKeys.forEach(function(key) {
|
|
28
|
+
_define_property(target, key, source[key]);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return target;
|
|
32
|
+
}
|
|
33
|
+
function ownKeys(object, enumerableOnly) {
|
|
34
|
+
var keys = Object.keys(object);
|
|
35
|
+
if (Object.getOwnPropertySymbols) {
|
|
36
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
37
|
+
if (enumerableOnly) {
|
|
38
|
+
symbols = symbols.filter(function(sym) {
|
|
39
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
keys.push.apply(keys, symbols);
|
|
43
|
+
}
|
|
44
|
+
return keys;
|
|
45
|
+
}
|
|
46
|
+
function _object_spread_props(target, source) {
|
|
47
|
+
source = source != null ? source : {};
|
|
48
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
49
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
50
|
+
} else {
|
|
51
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
52
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return target;
|
|
56
|
+
}
|
|
57
|
+
var ERROR_CODE_CAPTCHA = 14;
|
|
58
|
+
var ERROR_TYPE_CAPTCHA = 'captcha';
|
|
59
|
+
var checkCaptchaError = function(param) {
|
|
60
|
+
var responseHeaders = param.responseHeaders, url = param.url, responseError = param.responseError, withWidget = param.withWidget, widgetConfig = param.widgetConfig;
|
|
61
|
+
var isChallengeRequired = responseHeaders.get('X-Challenge') === 'required';
|
|
62
|
+
var challengeUrl = responseHeaders.get('X-Challenge-Url');
|
|
63
|
+
var isCaptchaType2 = isChallengeRequired && !!challengeUrl;
|
|
64
|
+
var isApiCaptchaError = responseError && 'error_code' in responseError && responseError.error_code === ERROR_CODE_CAPTCHA;
|
|
65
|
+
var isLoginCaptchaError = responseError && 'type' in responseError && responseError.type === ERROR_TYPE_CAPTCHA;
|
|
66
|
+
var isCaptchaType1 = (isApiCaptchaError || isLoginCaptchaError) && !!responseError.redirect_uri;
|
|
67
|
+
var isUnknownCaptcha = (isApiCaptchaError || isLoginCaptchaError) && !responseError.redirect_uri;
|
|
68
|
+
if (isCaptchaType2) {
|
|
69
|
+
var iframeSrc = "https://".concat(getChallengeUrlDomain(url)).concat(challengeUrl);
|
|
70
|
+
if (!withWidget) {
|
|
71
|
+
return {
|
|
72
|
+
captchaType: CheckCaptchaType.TYPE_2,
|
|
73
|
+
captchaUrl: iframeSrc
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
var widget = new Widget(widgetConfig);
|
|
77
|
+
return {
|
|
78
|
+
captchaType: CheckCaptchaType.TYPE_2,
|
|
79
|
+
captchaUrl: iframeSrc,
|
|
80
|
+
captchaWidget: {
|
|
81
|
+
show: function(params) {
|
|
82
|
+
return widget.show(_object_spread_props(_object_spread({}, params), {
|
|
83
|
+
iframeSrc: iframeSrc,
|
|
84
|
+
captchaType: CheckCaptchaType.TYPE_2
|
|
85
|
+
}));
|
|
86
|
+
},
|
|
87
|
+
close: function() {
|
|
88
|
+
return widget.close();
|
|
89
|
+
},
|
|
90
|
+
update: function(config) {
|
|
91
|
+
return widget.update(config);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (isCaptchaType1) {
|
|
97
|
+
var iframeSrc1 = responseError.redirect_uri || '';
|
|
98
|
+
if (!withWidget) {
|
|
99
|
+
return {
|
|
100
|
+
captchaType: CheckCaptchaType.TYPE_1,
|
|
101
|
+
captchaUrl: iframeSrc1
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
var widget1 = new Widget(widgetConfig);
|
|
105
|
+
return {
|
|
106
|
+
captchaType: CheckCaptchaType.TYPE_1,
|
|
107
|
+
captchaUrl: iframeSrc1,
|
|
108
|
+
captchaWidget: {
|
|
109
|
+
show: function(params) {
|
|
110
|
+
return widget1.show(_object_spread_props(_object_spread({}, params), {
|
|
111
|
+
iframeSrc: iframeSrc1,
|
|
112
|
+
captchaType: CheckCaptchaType.TYPE_1
|
|
113
|
+
}));
|
|
114
|
+
},
|
|
115
|
+
close: function() {
|
|
116
|
+
return widget1.close();
|
|
117
|
+
},
|
|
118
|
+
update: function(config) {
|
|
119
|
+
return widget1.update(config);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (isUnknownCaptcha) {
|
|
125
|
+
return {
|
|
126
|
+
captchaType: CheckCaptchaType.UNKNOWN
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
captchaType: null
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export { checkCaptchaError };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CAPTCHA_TYPE_1, CAPTCHA_TYPE_2 } from '../../constants.js';
|
|
2
|
+
|
|
3
|
+
var CheckCaptchaType = /*#__PURE__*/ function(CheckCaptchaType) {
|
|
4
|
+
CheckCaptchaType[CheckCaptchaType["TYPE_1"] = CAPTCHA_TYPE_1] = "TYPE_1";
|
|
5
|
+
CheckCaptchaType[CheckCaptchaType["TYPE_2"] = CAPTCHA_TYPE_2] = "TYPE_2";
|
|
6
|
+
CheckCaptchaType["UNKNOWN"] = "unknown";
|
|
7
|
+
return CheckCaptchaType;
|
|
8
|
+
}({});
|
|
9
|
+
|
|
10
|
+
export { CheckCaptchaType };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var getChallengeUrlDomain = function(url) {
|
|
2
|
+
var hostname = new URL(url).hostname;
|
|
3
|
+
var hostnameSplitted = hostname.split('.');
|
|
4
|
+
if (hostnameSplitted.length > 2) {
|
|
5
|
+
hostnameSplitted.shift();
|
|
6
|
+
return hostnameSplitted.join('.');
|
|
7
|
+
}
|
|
8
|
+
return hostname;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { getChallengeUrlDomain };
|