@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,17 @@
|
|
|
1
|
+
export declare const CAPTCHA_TYPE_1 = "type_1";
|
|
2
|
+
export declare const CAPTCHA_TYPE_2 = "type_2";
|
|
3
|
+
export declare const VIEW_MODE_BLOCK = "block";
|
|
4
|
+
export declare const VIEW_MODE_POPUP = "popup";
|
|
5
|
+
export declare const LANGUAGE_ID_BY_CODE: {
|
|
6
|
+
readonly ru: "0";
|
|
7
|
+
readonly uk: "1";
|
|
8
|
+
readonly en: "3";
|
|
9
|
+
readonly es: "4";
|
|
10
|
+
readonly de: "6";
|
|
11
|
+
readonly pl: "15";
|
|
12
|
+
readonly fr: "16";
|
|
13
|
+
readonly uz: "65";
|
|
14
|
+
readonly tr: "82";
|
|
15
|
+
readonly kk: "97";
|
|
16
|
+
readonly be: "114";
|
|
17
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Dispatcher } from "../dispatcher";
|
|
2
|
+
import { BridgeMessageData, BridgeConfig } from './types';
|
|
3
|
+
export declare const BRIDGE_MESSAGE_TYPE_SDK = "vk-sak-sdk";
|
|
4
|
+
export declare class Bridge<H> extends Dispatcher {
|
|
5
|
+
private config;
|
|
6
|
+
constructor(config: BridgeConfig);
|
|
7
|
+
destroy(): void;
|
|
8
|
+
sendMessage(message: BridgeMessageData<H>): void;
|
|
9
|
+
private handleMessage;
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare enum BridgeEvents {
|
|
2
|
+
MESSAGE = "message",
|
|
3
|
+
UNSUPPORTED_MESSAGE = "unsupported_message"
|
|
4
|
+
}
|
|
5
|
+
export interface BridgeMessageData<H, P = Record<string, any>> {
|
|
6
|
+
handler: H;
|
|
7
|
+
params: P;
|
|
8
|
+
}
|
|
9
|
+
export interface BridgeMessage<H, P = Record<string, any>> extends BridgeMessageData<H, P> {
|
|
10
|
+
type: string;
|
|
11
|
+
}
|
|
12
|
+
export interface BridgeConfig {
|
|
13
|
+
iframe: HTMLIFrameElement;
|
|
14
|
+
origin: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Dispatcher } from './dispatcher';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare enum WidgetEvents {
|
|
2
|
+
START_LOAD = "common: start load",
|
|
3
|
+
LOAD = "common: load",
|
|
4
|
+
SHOW = "common: show",
|
|
5
|
+
HIDE = "common: hide",
|
|
6
|
+
CLOSE = "common: close",
|
|
7
|
+
ERROR = "common: error",
|
|
8
|
+
RESIZE = "common: resize"
|
|
9
|
+
}
|
|
10
|
+
export declare enum CaptchaEvents {
|
|
11
|
+
GET_RESULT = "VKCaptchaGetResult",
|
|
12
|
+
CLOSE = "VKCaptchaCloseCaptcha",
|
|
13
|
+
SENSORS_START = "VKCaptchaListenSensorsStart",
|
|
14
|
+
SEND_SENSORS = "VKCaptchaListenSensorsChanged",
|
|
15
|
+
SEND_WEB_SENSORS = "VKCaptchaListenSensorsWebChanged",
|
|
16
|
+
SENSORS_STOP = "VKCaptchaListenSensorsStop",
|
|
17
|
+
USER_CLOSE = "VKCaptchaUserClose"
|
|
18
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { CAPTCHA_TYPE_1, CAPTCHA_TYPE_2, VIEW_MODE_POPUP } from "../../constants";
|
|
2
|
+
import { ColorScheme, Language, ViewMode } from "../../types";
|
|
3
|
+
export declare enum WidgetState {
|
|
4
|
+
LOADING = "loading",
|
|
5
|
+
LOADED = "loaded",
|
|
6
|
+
NOT_LOADED = "not_loaded"
|
|
7
|
+
}
|
|
8
|
+
export type WidgetCaptchaType = typeof CAPTCHA_TYPE_1 | typeof CAPTCHA_TYPE_2;
|
|
9
|
+
export interface WidgetElements {
|
|
10
|
+
root: HTMLElement;
|
|
11
|
+
iframe: HTMLIFrameElement;
|
|
12
|
+
}
|
|
13
|
+
type WidgetBasicParams = {
|
|
14
|
+
/**
|
|
15
|
+
* HTML элемент, в который будет вставлен виджет
|
|
16
|
+
*/
|
|
17
|
+
container: HTMLElement;
|
|
18
|
+
/**
|
|
19
|
+
* Ссылка на iframe с капчей
|
|
20
|
+
*/
|
|
21
|
+
iframeSrc: string;
|
|
22
|
+
/**
|
|
23
|
+
* Флаг автофокуса капчи после первого открытия
|
|
24
|
+
*/
|
|
25
|
+
autofocus?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Цветовая схема виджета
|
|
28
|
+
*/
|
|
29
|
+
scheme?: ColorScheme;
|
|
30
|
+
/**
|
|
31
|
+
* Локализация
|
|
32
|
+
*/
|
|
33
|
+
lang?: Language;
|
|
34
|
+
/**
|
|
35
|
+
* Колбэк события закрытия, функция вызывается после закрытия капчи
|
|
36
|
+
*/
|
|
37
|
+
onClose?: VoidFunction;
|
|
38
|
+
};
|
|
39
|
+
export type WidgetParams1 = WidgetBasicParams & {
|
|
40
|
+
/**
|
|
41
|
+
* Тип капчи
|
|
42
|
+
*/
|
|
43
|
+
captchaType: typeof CAPTCHA_TYPE_1;
|
|
44
|
+
/**
|
|
45
|
+
* Режим отображения
|
|
46
|
+
*/
|
|
47
|
+
view: ViewMode;
|
|
48
|
+
};
|
|
49
|
+
export type WidgetParams2 = WidgetBasicParams & {
|
|
50
|
+
/**
|
|
51
|
+
* Тип капчи
|
|
52
|
+
*/
|
|
53
|
+
captchaType: typeof CAPTCHA_TYPE_2;
|
|
54
|
+
/**
|
|
55
|
+
* Режим отображения
|
|
56
|
+
*/
|
|
57
|
+
view?: typeof VIEW_MODE_POPUP;
|
|
58
|
+
};
|
|
59
|
+
export type WidgetParams = WidgetParams1 | WidgetParams2;
|
|
60
|
+
export declare enum WidgetErrorCode {
|
|
61
|
+
/**
|
|
62
|
+
* Не загрузился iframe
|
|
63
|
+
*/
|
|
64
|
+
TimeoutExceeded = 0,
|
|
65
|
+
/**
|
|
66
|
+
* Внутренняя ошибка
|
|
67
|
+
*/
|
|
68
|
+
InternalError = 1,
|
|
69
|
+
/**
|
|
70
|
+
* Ошибка авторизации
|
|
71
|
+
*/
|
|
72
|
+
AuthError = 2
|
|
73
|
+
}
|
|
74
|
+
export type WidgetErrorText = Record<WidgetErrorCode, string>;
|
|
75
|
+
export interface WidgetError {
|
|
76
|
+
code: WidgetErrorCode;
|
|
77
|
+
text: string;
|
|
78
|
+
details?: Record<string, any>;
|
|
79
|
+
}
|
|
80
|
+
export declare enum SensorsDataEventTypes {
|
|
81
|
+
INIT = "init",
|
|
82
|
+
MOUSE_CHANGE = "mouseChange",
|
|
83
|
+
TOUCH_CHANGE = "touchChange"
|
|
84
|
+
}
|
|
85
|
+
type SendSensorsDataInitParams = {
|
|
86
|
+
eventType: SensorsDataEventTypes.INIT;
|
|
87
|
+
data?: never;
|
|
88
|
+
};
|
|
89
|
+
type SendSensorsDataChangeParams = {
|
|
90
|
+
eventType: SensorsDataEventTypes.MOUSE_CHANGE | SensorsDataEventTypes.TOUCH_CHANGE;
|
|
91
|
+
data: {
|
|
92
|
+
pageX: number;
|
|
93
|
+
pageY: number;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
export type SendSensorsDataParams = SendSensorsDataInitParams | SendSensorsDataChangeParams;
|
|
97
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { LANGUAGE_ID_BY_CODE } from "../../constants";
|
|
2
|
+
import { Bridge, BridgeMessage } from "../bridge";
|
|
3
|
+
import { Config, ConfigData } from "../config";
|
|
4
|
+
import { Dispatcher } from "../dispatcher";
|
|
5
|
+
import { ColorScheme, Language, ViewMode } from "../../types";
|
|
6
|
+
import { SendSensorsDataParams, WidgetCaptchaType, WidgetElements, WidgetError, WidgetParams, WidgetState } from './types';
|
|
7
|
+
export declare class Widget extends Dispatcher {
|
|
8
|
+
/**
|
|
9
|
+
* @ignore
|
|
10
|
+
*/
|
|
11
|
+
protected readonly id: string;
|
|
12
|
+
protected scheme: ColorScheme | undefined;
|
|
13
|
+
protected langId: typeof LANGUAGE_ID_BY_CODE[Language] | undefined;
|
|
14
|
+
protected config: Config;
|
|
15
|
+
protected timeoutTimer: any;
|
|
16
|
+
protected bridge: Bridge<any>;
|
|
17
|
+
protected container: HTMLElement;
|
|
18
|
+
protected iframeSrc: string;
|
|
19
|
+
protected captchaType: WidgetCaptchaType;
|
|
20
|
+
protected autofocus: boolean;
|
|
21
|
+
protected view: ViewMode;
|
|
22
|
+
protected onClose: VoidFunction | undefined;
|
|
23
|
+
protected templateRenderer: (id: string, view: ViewMode) => string;
|
|
24
|
+
promise: Promise<string>;
|
|
25
|
+
protected promiseResolve: (successToken: string) => void;
|
|
26
|
+
protected promiseReject: (errorMessage: string) => void;
|
|
27
|
+
protected elements: WidgetElements;
|
|
28
|
+
constructor(config?: ConfigData);
|
|
29
|
+
update(config: Partial<ConfigData>): Config;
|
|
30
|
+
show(params: WidgetParams): this['promise'];
|
|
31
|
+
close(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Получение координат айфрейма
|
|
34
|
+
*/
|
|
35
|
+
protected getIframeCoords: () => {
|
|
36
|
+
left: number;
|
|
37
|
+
top: number;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Метод отправки данных движения мыши/событий касания через бридж
|
|
41
|
+
*/
|
|
42
|
+
protected sendSensorsData: ({ eventType, data }: SendSensorsDataParams) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Обработчик движения мыши
|
|
45
|
+
*/
|
|
46
|
+
protected handleMouseMove: (event: MouseEvent) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Метод вызывается для регистрации обработчиков движения мыши
|
|
49
|
+
*/
|
|
50
|
+
protected addAnalyticsMouseListeners(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Метод вызывается для удаления обработчиков движения мыши
|
|
53
|
+
*/
|
|
54
|
+
protected removeAnalyticsMouseListeners(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Обработчик событий касания
|
|
57
|
+
*/
|
|
58
|
+
protected handleTouchMove: (event: TouchEvent) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Метод вызывается для регистрации обработчиков событий касания
|
|
61
|
+
*/
|
|
62
|
+
protected addAnalyticsTouchListeners(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Метод вызывается для удаления обработчиков событий касания
|
|
65
|
+
*/
|
|
66
|
+
protected removeAnalyticsTouchListeners(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Метод вызывается перед началом загрузки iframe с VK ID приложением
|
|
69
|
+
*/
|
|
70
|
+
/**
|
|
71
|
+
* Метод вызывается после того, как полностью загружен iframe с VK ID приложением
|
|
72
|
+
*/
|
|
73
|
+
protected onLoadHandler(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Метод вызывается, когда во время работы/загрузки VK ID приложения произошла ошибка
|
|
76
|
+
*/
|
|
77
|
+
protected onErrorHandler(error: WidgetError): void;
|
|
78
|
+
/**
|
|
79
|
+
* Метод вызывается при сообщениях от VK ID приложения
|
|
80
|
+
*/
|
|
81
|
+
protected onBridgeMessageHandler(event: BridgeMessage<any>): void;
|
|
82
|
+
protected renderTemplate(): void;
|
|
83
|
+
protected loadWidgetFrame(): void;
|
|
84
|
+
protected setState(state: WidgetState): void;
|
|
85
|
+
protected registerElements(): void;
|
|
86
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Widget } from './core/widget';
|
|
2
|
+
import { checkCaptchaError, CheckCaptchaType } from './utils/checkCaptchaError';
|
|
3
|
+
export { Widget as CaptchaWidget };
|
|
4
|
+
export { checkCaptchaError, CheckCaptchaType };
|
|
5
|
+
export type { ConfigData as CaptchaConfigData } from './core/config';
|
|
6
|
+
export type { WidgetParams as CaptchaWidgetParams, WidgetCaptchaType as CaptchaWidgetType } from './core/widget';
|
|
7
|
+
export type { ColorScheme as CaptchaColorScheme, Language as CaptchaLanguage, ViewMode as CaptchaViewMode } from './types';
|
|
8
|
+
export type { CheckCaptchaErrorParams, CheckCaptchaWidgetShowParams } from './utils/checkCaptchaError/types';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LANGUAGE_ID_BY_CODE, VIEW_MODE_BLOCK, VIEW_MODE_POPUP } from './constants';
|
|
2
|
+
export type ColorScheme = 'light' | 'dark';
|
|
3
|
+
export type Language = keyof typeof LANGUAGE_ID_BY_CODE;
|
|
4
|
+
export type ViewMode = typeof VIEW_MODE_BLOCK | typeof VIEW_MODE_POPUP;
|
|
5
|
+
export declare enum WebBridgeSensor {
|
|
6
|
+
CURSOR = "cursor",
|
|
7
|
+
TAPS = "taps"
|
|
8
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ConfigData } from "../../core/config";
|
|
2
|
+
import { Widget } from "../../core/widget";
|
|
3
|
+
import { WidgetParams1, WidgetParams2 } from "../../core/widget/types";
|
|
4
|
+
export declare enum CheckCaptchaType {
|
|
5
|
+
TYPE_1 = "type_1",
|
|
6
|
+
TYPE_2 = "type_2",
|
|
7
|
+
UNKNOWN = "unknown"
|
|
8
|
+
}
|
|
9
|
+
type ApiResponseError = {
|
|
10
|
+
error_code: number | null;
|
|
11
|
+
redirect_uri?: string;
|
|
12
|
+
};
|
|
13
|
+
type LoginResponse = {
|
|
14
|
+
type: string;
|
|
15
|
+
redirect_uri?: string;
|
|
16
|
+
};
|
|
17
|
+
type CheckCaptchaResponseError = ApiResponseError | LoginResponse;
|
|
18
|
+
export type CheckCaptchaErrorParams = {
|
|
19
|
+
responseHeaders: Headers;
|
|
20
|
+
url: string;
|
|
21
|
+
responseError?: CheckCaptchaResponseError;
|
|
22
|
+
withWidget?: boolean;
|
|
23
|
+
widgetConfig?: ConfigData;
|
|
24
|
+
};
|
|
25
|
+
type CheckCaptchaNoError = {
|
|
26
|
+
captchaType: null;
|
|
27
|
+
captchaUrl?: never;
|
|
28
|
+
captchaWidget?: never;
|
|
29
|
+
};
|
|
30
|
+
type CheckCaptchaUnknownError = {
|
|
31
|
+
captchaType: CheckCaptchaType.UNKNOWN;
|
|
32
|
+
captchaUrl?: never;
|
|
33
|
+
captchaWidget?: never;
|
|
34
|
+
};
|
|
35
|
+
type CheckCaptchaType1WidgetShowParams = Omit<WidgetParams1, 'iframeSrc' | 'captchaType'>;
|
|
36
|
+
export type CheckCaptchaType1Widget = {
|
|
37
|
+
show: (params: CheckCaptchaType1WidgetShowParams) => ReturnType<Widget['show']>;
|
|
38
|
+
close: Widget['close'];
|
|
39
|
+
update: Widget['update'];
|
|
40
|
+
};
|
|
41
|
+
type CheckCaptchaType1Error = {
|
|
42
|
+
captchaType: CheckCaptchaType.TYPE_1;
|
|
43
|
+
captchaUrl: string;
|
|
44
|
+
captchaWidget?: CheckCaptchaType1Widget;
|
|
45
|
+
};
|
|
46
|
+
type CheckCaptchaType2WidgetShowParams = Omit<WidgetParams2, 'iframeSrc' | 'captchaType'>;
|
|
47
|
+
export type CheckCaptchaType2Widget = {
|
|
48
|
+
show: (params: CheckCaptchaType2WidgetShowParams) => ReturnType<Widget['show']>;
|
|
49
|
+
close: Widget['close'];
|
|
50
|
+
update: Widget['update'];
|
|
51
|
+
};
|
|
52
|
+
type CheckCaptchaType2Error = {
|
|
53
|
+
captchaType: CheckCaptchaType.TYPE_2;
|
|
54
|
+
captchaUrl: string;
|
|
55
|
+
captchaWidget?: CheckCaptchaType2Widget;
|
|
56
|
+
};
|
|
57
|
+
export type CheckCaptchaWidgetShowParams = CheckCaptchaType1WidgetShowParams | CheckCaptchaType2WidgetShowParams;
|
|
58
|
+
export type CheckCaptchaErrorData = CheckCaptchaNoError | CheckCaptchaUnknownError | CheckCaptchaType1Error | CheckCaptchaType2Error;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getChallengeUrlDomain: (url: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const uuid: (size?: number | undefined) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e,t;e=this,t=function(e){"use strict";var t,n,r,o,i,a,s,c,u,l="type_2",h="popup",f={ru:"0",uk:"1",en:"3",es:"4",de:"6",pl:"15",fr:"16",uz:"65",tr:"82",kk:"97",be:"114"},d=function(){var e;function t(){var e,n,r;if(!(this instanceof t))throw TypeError("Cannot call a class as a function");n="events",e=e||Object.create(null),r={on:function(t,n){(e[t]||(e[t]=[])).push(n)},off:function(t,n){e[t]&&e[t].splice(e[t].indexOf(n)>>>0,1)},emit:function(t,n){(e[t]||[]).slice().map(function(e){e(n)}),(e["*"]||[]).slice().map(function(e){e(t,n)})}},n in this?Object.defineProperty(this,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):this[n]=r}return e=[{key:"on",value:function(e,t){return this.events.on(e,t),this}},{key:"off",value:function(e,t){return this.events.off(e,t),this}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(t.prototype,e),t}(),p=((n={}).MESSAGE="message",n.UNSUPPORTED_MESSAGE="unsupported_message",n);function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){return(m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function y(e,t){return(y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function g(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(g=function(){return!!e})()}var b="vk-sak-sdk",E=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(e){var t,r,o;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return r=m(r=n),v(t=function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,g()?Reflect.construct(r,[],m(this).constructor):r.apply(this,o)),"config",void 0),t.config=e,t.handleMessage=t.handleMessage.bind(t),window.addEventListener("message",t.handleMessage),t}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&y(n,e),t=[{key:"destroy",value:function(){delete this.config,window.removeEventListener("message",this.handleMessage)}},{key:"sendMessage",value:function(e){var t;null==(t=this.config.iframe.contentWindow)||t.postMessage(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){v(e,t,n[t])})}return e}({type:b},e),this.config.origin)}},{key:"handleMessage",value:function(e){var t;if(!this.config.origin||e.origin!==this.config.origin||e.source!==this.config.iframe.contentWindow||(null==(t=e.data)?void 0:t.type)!==b)return void this.events.emit(p.UNSUPPORTED_MESSAGE,e.data);this.events.emit(p.MESSAGE,e.data)}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(d);function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var S=function(){var e;function t(){if(!(this instanceof t))throw TypeError("Cannot call a class as a function");O(this,"store",{})}return e=[{key:"init",value:function(e){return this.set(e),this}},{key:"update",value:function(e){return this.set(e)}},{key:"set",value:function(e){return this.store=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){O(e,t,n[t])})}return e}({},this.store,e),this}},{key:"get",value:function(){return this.store}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(t.prototype,e),t}(),T=((r={}).CURSOR="cursor",r.TAPS="taps",r),w=((e,t=21)=>(n=t)=>{let r="",o=0|n;for(;o--;)r+=e[Math.random()*e.length|0];return r})("qazwsxedcrfvtgbyhnujmikol",6),_=((o={}).LOADING="loading",o.LOADED="loaded",o.NOT_LOADED="not_loaded",o),P=((i={})[i.TimeoutExceeded=0]="TimeoutExceeded",i[i.InternalError=1]="InternalError",i[i.AuthError=2]="AuthError",i),j=((a={}).INIT="init",a.MOUSE_CHANGE="mouseChange",a.TOUCH_CHANGE="touchChange",a);function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var k=(L(t={},P.TimeoutExceeded,"timeout"),L(t,P.InternalError,"internal error"),L(t,P.AuthError,"auth error"),t),R=((s={}).START_LOAD="common: start load",s.LOAD="common: load",s.SHOW="common: show",s.HIDE="common: hide",s.CLOSE="common: close",s.ERROR="common: error",s.RESIZE="common: resize",s),C=((c={}).GET_RESULT="VKCaptchaGetResult",c.CLOSE="VKCaptchaCloseCaptcha",c.SENSORS_START="VKCaptchaListenSensorsStart",c.SEND_SENSORS="VKCaptchaListenSensorsChanged",c.SEND_WEB_SENSORS="VKCaptchaListenSensorsWebChanged",c.SENSORS_STOP="VKCaptchaListenSensorsStop",c.USER_CLOSE="VKCaptchaUserClose",c),M=function(e,t){return'\n<div id="'.concat(e,'" data-test-id="captcha-widget">\n <style>\n #').concat(e," {").concat(t===h?"\n position: fixed;\n top: 0;\n left: 0;\n z-index: 9999;":"","\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n }\n\n #").concat(e," iframe {\n border: none;\n color-scheme: auto;\n }\n\n #").concat(e," .loader,\n #").concat(e,' .error {\n display: none;\n width: 100%;\n height: 100%;\n text-align: center;\n }\n </style>\n <div class="loader"></div>\n <div class="error"></div>\n <iframe width="100%" height="100%"></iframe>\n</div>\n ')};function A(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e){return(D=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function N(e,t){return(N=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function U(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(U=function(){return!!e})()}var I=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t,r,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=D(e=n),A(r=function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,U()?Reflect.construct(e,[],D(this).constructor):e.apply(this,t)),"id",w()),A(r,"scheme",void 0),A(r,"langId",void 0),A(r,"config",void 0),A(r,"timeoutTimer",void 0),A(r,"bridge",void 0),A(r,"container",void 0),A(r,"iframeSrc",void 0),A(r,"captchaType",void 0),A(r,"autofocus",void 0),A(r,"view",void 0),A(r,"onClose",void 0),A(r,"templateRenderer",M),A(r,"promise",void 0),A(r,"promiseResolve",void 0),A(r,"promiseReject",void 0),A(r,"elements",void 0),A(r,"getIframeCoords",function(){var e=r.elements.iframe.getBoundingClientRect(),t=e.left,n=e.top;return{left:t+window.scrollX,top:n+window.scrollY}}),A(r,"sendSensorsData",function(e){var t=e.eventType,n=e.data;r.bridge.sendMessage({handler:C.SEND_WEB_SENSORS,params:{eventType:t,data:n,coords:r.getIframeCoords()}})}),A(r,"handleMouseMove",function(e){var t=e.pageX,n=e.pageY;r.sendSensorsData({eventType:j.MOUSE_CHANGE,data:{pageX:t,pageY:n}})}),A(r,"handleTouchMove",function(e){var t=e.touches[0];if(t){var n=t.pageX,o=t.pageY;r.sendSensorsData({eventType:j.TOUCH_CHANGE,data:{pageX:n,pageY:o}})}}),r.config=new S().init(o),r}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&N(n,e),t=[{key:"update",value:function(e){return this.config.update(e)}},{key:"show",value:function(e){var t=this,n=e.container,r=e.iframeSrc,o=e.captchaType,i=e.view,a=e.autofocus,s=e.scheme,c=e.lang,u=e.onClose;return this.promise=new Promise(function(e,n){t.promiseResolve=e,t.promiseReject=n}),this.container=n,this.iframeSrc=r,this.view=o===l?h:i,this.iframeSrc=r,this.captchaType=o,this.autofocus=null==a||a,this.scheme=s,this.langId=c?f[c]:void 0,this.onClose=u,this.renderTemplate(),this.registerElements(),this.loadWidgetFrame(),this.promise}},{key:"close",value:function(){var e,t,n,r,o;clearTimeout(this.timeoutTimer),this.removeAnalyticsMouseListeners(),this.removeAnalyticsTouchListeners(),null==(t=this.elements)||null==(e=t.root)||e.remove(),null==(n=this.bridge)||n.destroy(),this.events.emit(R.CLOSE),null==(r=this.promiseReject)||r.call(this,"close"),null==(o=this.onClose)||o.call(this)}},{key:"addAnalyticsMouseListeners",value:function(){document.addEventListener("mouseenter",this.handleMouseMove),document.addEventListener("mouseleave",this.handleMouseMove),document.addEventListener("mousemove",this.handleMouseMove)}},{key:"removeAnalyticsMouseListeners",value:function(){document.removeEventListener("mouseenter",this.handleMouseMove),document.removeEventListener("mouseleave",this.handleMouseMove),document.removeEventListener("mousemove",this.handleMouseMove)}},{key:"addAnalyticsTouchListeners",value:function(){document.addEventListener("touchstart",this.handleTouchMove),document.addEventListener("touchend",this.handleTouchMove),document.addEventListener("touchmove",this.handleTouchMove)}},{key:"removeAnalyticsTouchListeners",value:function(){document.removeEventListener("touchstart",this.handleTouchMove),document.removeEventListener("touchend",this.handleTouchMove),document.removeEventListener("touchmove",this.handleTouchMove)}},{key:"onLoadHandler",value:function(){var e=this;clearTimeout(this.timeoutTimer),setTimeout(function(){e.setState(_.LOADED)},300),this.events.emit(R.LOAD)}},{key:"onErrorHandler",value:function(e){var t,n,r;clearTimeout(this.timeoutTimer),this.setState(_.NOT_LOADED),this.events.emit(R.ERROR,e),null==(n=this.elements)||null==(t=n.iframe)||t.remove(),null==(r=this.promiseReject)||r.call(this,e.text)}},{key:"onBridgeMessageHandler",value:function(e){switch(e.handler){case R.LOAD:this.onLoadHandler();break;case C.CLOSE:case R.CLOSE:this.close();break;case R.ERROR:this.onErrorHandler({code:P.InternalError,text:k[P.InternalError],details:e.params});break;case R.RESIZE:this.elements.root.style.height="".concat(e.params.height,"px");break;case C.GET_RESULT:var t=e.params.token;this.promiseResolve(t);break;case C.SENSORS_START:var n=e.params.bridge_sensors_list,r=n.includes(T.CURSOR),o=n.includes(T.TAPS);(r||o)&&this.sendSensorsData({eventType:j.INIT}),r&&this.addAnalyticsMouseListeners(),o&&this.addAnalyticsTouchListeners();break;case C.SENSORS_STOP:this.removeAnalyticsMouseListeners(),this.removeAnalyticsTouchListeners()}}},{key:"renderTemplate",value:function(){this.container.insertAdjacentHTML("beforeend",this.templateRenderer(this.id,this.view))}},{key:"loadWidgetFrame",value:function(){var e=this,t=new URL(this.iframeSrc);this.bridge=new E({iframe:this.elements.iframe,origin:t.origin}),this.bridge.on(p.MESSAGE,function(t){return e.onBridgeMessageHandler(t)});var n=new URLSearchParams(t.search);switch(!0){case!!this.scheme:n.set("scheme",this.scheme);case!!this.langId:n.set("lang_id",this.langId);default:n.set("autofocus",this.autofocus?"1":"0");var r=location.protocol+"//"+location.hostname;n.set("origin",r),this.captchaType!==l&&n.set("variant",this.view)}t=new URL("".concat(t.origin).concat(t.pathname,"?").concat(n)),this.elements.iframe.src=t.href}},{key:"setState",value:function(e){this.elements.root.setAttribute("data-state",e)}},{key:"registerElements",value:function(){var e=document.getElementById(this.id);this.elements={root:e,iframe:e.querySelector("iframe")}}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(d),x=((u={})[u.TYPE_1="type_1"]="TYPE_1",u[u.TYPE_2=l]="TYPE_2",u.UNKNOWN="unknown",u),H=function(e){var t=new URL(e).hostname,n=t.split(".");return n.length>2?(n.shift(),n.join(".")):t};function W(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function Y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var G=function(e){var t=e.responseHeaders,n=e.url,r=e.responseError,o=e.withWidget,i=e.widgetConfig,a="required"===t.get("X-Challenge"),s=t.get("X-Challenge-Url"),c=a&&!!s,u=r&&"error_code"in r&&14===r.error_code,l=r&&"type"in r&&"captcha"===r.type,h=(u||l)&&!!r.redirect_uri,f=(u||l)&&!r.redirect_uri;if(c){var d="https://".concat(H(n)).concat(s);if(!o)return{captchaType:x.TYPE_2,captchaUrl:d};var p=new I(i);return{captchaType:x.TYPE_2,captchaUrl:d,captchaWidget:{show:function(e){return p.show(Y(W({},e),{iframeSrc:d,captchaType:x.TYPE_2}))},close:function(){return p.close()},update:function(e){return p.update(e)}}}}if(h){var v=r.redirect_uri||"";if(!o)return{captchaType:x.TYPE_1,captchaUrl:v};var m=new I(i);return{captchaType:x.TYPE_1,captchaUrl:v,captchaWidget:{show:function(e){return m.show(Y(W({},e),{iframeSrc:v,captchaType:x.TYPE_1}))},close:function(){return m.close()},update:function(e){return m.update(e)}}}}return f?{captchaType:x.UNKNOWN}:{captchaType:null}};"undefined"!=typeof window&&(window._vkidCaptchaWidget=I,window._vkidCaptchaCheckError=G),e.CaptchaWidget=I,e.CheckCaptchaType=x,e.checkCaptchaError=G},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VKIDCaptchaSDK={});
|
package/package.json
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vkid/captcha",
|
|
3
|
+
"version": "1.0.6-JETiT.0",
|
|
4
|
+
"description": "VKID Captcha",
|
|
5
|
+
"main": "dist/umd/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/types/index.d.ts",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"CHANGELOG.md",
|
|
12
|
+
"CONTRIBUTING.md",
|
|
13
|
+
"CODE_OF_CONDUCT.md",
|
|
14
|
+
"CODE_STYLE.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"lint-staged": {
|
|
18
|
+
"src/**/*.{ts,tsx}": "pnpm lint:check:ts",
|
|
19
|
+
"demo/**/*.{ts,tsx}": "pnpm lint:check:ts"
|
|
20
|
+
},
|
|
21
|
+
"author": "VK ID <devsupport@corp.vk.com>",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@rollup/plugin-commonjs": "^25.0.4",
|
|
25
|
+
"@rollup/plugin-node-resolve": "^15.2.1",
|
|
26
|
+
"@rollup/plugin-replace": "^5.0.2",
|
|
27
|
+
"@swc/core": "^1.3.82",
|
|
28
|
+
"@types/crypto-js": "^4.1.1",
|
|
29
|
+
"@types/node": "^16.11.7",
|
|
30
|
+
"@typescript-eslint/eslint-plugin": "5.0.0",
|
|
31
|
+
"@typescript-eslint/parser": "5.0.0",
|
|
32
|
+
"@vkontakte/eslint-config": "3.0.0",
|
|
33
|
+
"@vkontakte/vkjs": "0.20.0",
|
|
34
|
+
"concurrently": "^8.0.1",
|
|
35
|
+
"cross-env": "^7.0.2",
|
|
36
|
+
"css-loader": "^6.8.1",
|
|
37
|
+
"eslint": "^8.41.0",
|
|
38
|
+
"eslint-plugin-import": "^2.27.5",
|
|
39
|
+
"eslint-plugin-storybook": "^0.6.12",
|
|
40
|
+
"husky": "^8.0.3",
|
|
41
|
+
"lint-staged": "12.5.0",
|
|
42
|
+
"mitt": "^1.2.0",
|
|
43
|
+
"nanoid": "^3.0.2",
|
|
44
|
+
"resize-observer-polyfill": "^1.5.1",
|
|
45
|
+
"rimraf": "3.0.2",
|
|
46
|
+
"rollup": "^3.28.1",
|
|
47
|
+
"rollup-plugin-analyzer": "^4.0.0",
|
|
48
|
+
"rollup-plugin-generate-html-template": "^1.7.0",
|
|
49
|
+
"rollup-plugin-livereload": "^2.0.5",
|
|
50
|
+
"rollup-plugin-rename-node-modules": "^1.3.1",
|
|
51
|
+
"rollup-plugin-serve": "^2.0.2",
|
|
52
|
+
"rollup-plugin-styles": "^4.0.0",
|
|
53
|
+
"rollup-plugin-swc3": "^0.10.1",
|
|
54
|
+
"rollup-plugin-watch-assets": "^1.0.1",
|
|
55
|
+
"style-loader": "^3.3.3",
|
|
56
|
+
"ts-jest": "^28.0.7",
|
|
57
|
+
"ts-loader": "^9.4.3",
|
|
58
|
+
"ts-node": "^10.9.1",
|
|
59
|
+
"ts-patch": "^3.0.2",
|
|
60
|
+
"typedoc": "^0.24.7",
|
|
61
|
+
"typescript": "5.0.4",
|
|
62
|
+
"typescript-transform-paths": "^3.4.6"
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"crypto-js": "^4.1.1"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=20.12.2",
|
|
69
|
+
"pnpm": ">=9.7.1"
|
|
70
|
+
},
|
|
71
|
+
"scripts": {
|
|
72
|
+
"sdk:types": "tspc --emitDeclarationOnly -p tsconfig.sdk.json",
|
|
73
|
+
"sdk:base": "rollup -c rollup.sdk.config.js --bundleConfigAsCjs",
|
|
74
|
+
"sdk:dev": "pnpm sdk:base -w",
|
|
75
|
+
"sdk:prod": "pnpm clear:sdk && cross-env NODE_ENV=production SDK_STATIC_DOMAIN='https://static.vk.com/captchaSDK' pnpm sdk:base",
|
|
76
|
+
"sdk:alpha": "pnpm clear:sdk && cross-env NODE_ENV=production SDK_STATIC_DOMAIN='https://static.vkontakte.com/captchaSDK' pnpm sdk:base",
|
|
77
|
+
"sdk:demo": "cross-env IS_DEMO='true' SDK_STATIC_DOMAIN='.' pnpm sdk:base -w",
|
|
78
|
+
"sdk:npm:dev": "pnpm sdk:npm:base -w",
|
|
79
|
+
"sdk:npm:base": "rollup -c rollup.npm.config.js --bundleConfigAsCjs",
|
|
80
|
+
"sdk:npm:prod": "pnpm clear:sdk:npm && cross-env NODE_ENV=production pnpm sdk:npm:base && pnpm sdk:types",
|
|
81
|
+
"docs:dev": "typedoc --watch --out ./docs",
|
|
82
|
+
"docs:prod": "pnpm clear:docs && typedoc --out ./docs",
|
|
83
|
+
"lint:check:ts": "eslint --cache \"./**/*.{ts,tsx}\"",
|
|
84
|
+
"clear:sdk": "rimraf dist-sdk",
|
|
85
|
+
"clear:demo": "rimraf dist-demo",
|
|
86
|
+
"clear:sdk:npm": "rimraf dist",
|
|
87
|
+
"clear:docs": "rimraf ./docs",
|
|
88
|
+
"demo:base": "rollup -c rollup.demo.config.js --bundleConfigAsCjs",
|
|
89
|
+
"demo:dev": "pnpm demo:base -w",
|
|
90
|
+
"demo:prod": "pnpm clear:demo && cross-env NODE_ENV=production pnpm demo:base",
|
|
91
|
+
"lint-staged": "lint-staged",
|
|
92
|
+
"release": "pnpm publish --no-git-checks --access public",
|
|
93
|
+
"release:alpha": "node ./scripts/release-alpha.mjs"
|
|
94
|
+
}
|
|
95
|
+
}
|