;
diff --git a/src/core/widget/widget.ts b/src/core/widget/widget.ts
index 7a557a4..64ca8b7 100644
--- a/src/core/widget/widget.ts
+++ b/src/core/widget/widget.ts
@@ -5,8 +5,9 @@ import { Dispatcher } from '#/core/dispatcher';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { isRequired, validator } from '#/core/validator';
import { Languages, Scheme } from '#/types';
+import { codeVerifier, state } from '#/utils/cookie';
import { generateCodeChallenge } from '#/utils/oauth';
-import { getRedirectWithPayloadUrl, getVKIDUrl } from '#/utils/url';
+import { getRedirectWithPayloadUrl, getVKIDUrl, RedirectPayload } from '#/utils/url';
import { uuid } from '#/utils/uuid';
import { WIDGET_ERROR_TEXT } from './constants';
@@ -22,11 +23,11 @@ export class Widget extends Dispatcher {
/**
* @ignore
*/
- public static __config: Config;
+ public static config: Config;
/**
* @ignore
*/
- public static __auth: Auth;
+ public static auth: Auth;
protected readonly id: string = uuid();
@@ -43,7 +44,7 @@ export class Widget
extends Dispatcher {
public constructor() {
super();
- this.config = Widget.__config;
+ this.config = Widget.config;
}
@validator({ container: [isRequired] })
@@ -165,11 +166,16 @@ export class Widget extends Dispatcher {
}
protected getWidgetFrameSrc(config: ConfigData, params: P): string {
+ codeVerifier(config.codeVerifier);
+ state(config.state);
+
const queryParams = {
...params,
- code_challenge: generateCodeChallenge(),
- code_challenge_method: CODE_CHALLENGE_METHOD,
origin: location.protocol + '//' + location.host,
+ oauth_version: 2,
+ code_challenge: config.codeChallenge ?? generateCodeChallenge(codeVerifier()),
+ code_challenge_method: CODE_CHALLENGE_METHOD,
+ state: state(),
};
return getVKIDUrl(this.vkidAppName, queryParams, config);
@@ -188,8 +194,7 @@ export class Widget
extends Dispatcher {
};
}
- // TODO: добавить типы
- protected redirectWithPayload(payload: any) {
- location.assign(getRedirectWithPayloadUrl(payload, Widget.__config));
+ protected redirectWithPayload(payload: RedirectPayload) {
+ location.assign(getRedirectWithPayloadUrl(payload, Widget.config));
}
}
diff --git a/src/index.ts b/src/index.ts
index ae2afd0..bcf5ee9 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,21 +1,39 @@
-import { Auth, AuthParams, AuthError, AuthResponse, AuthErrorCode } from './auth';
-import { Config, ConfigData, ConfigAuthMode } from './core/config';
+import {
+ Auth,
+ AuthParams,
+ AuthError,
+ AuthResponse,
+ AuthErrorCode,
+ LogoutResult,
+ PublicInfoResult,
+ TokenResult,
+ UserInfoResult,
+} from './auth';
+import { Config, ConfigData, ConfigAuthMode, Prompt } from './core/config';
import { Widget } from './core/widget';
export { Languages, Scheme } from './types';
const globalConfig = new Config();
-export { globalConfig as Config, ConfigAuthMode };
+export { globalConfig as Config, ConfigAuthMode, Prompt };
export type { ConfigData };
/** Export Auth */
-Auth.__config = globalConfig;
+Auth.config = globalConfig;
const globalAuth = new Auth();
export { globalAuth as Auth, AuthErrorCode };
-export type { AuthParams, AuthError, AuthResponse };
+export type {
+ AuthParams,
+ AuthError,
+ AuthResponse,
+ LogoutResult,
+ PublicInfoResult,
+ TokenResult,
+ UserInfoResult,
+};
/** Export Core Widget */
-Widget.__config = globalConfig;
-Widget.__auth = globalAuth;
+Widget.config = globalConfig;
+Widget.auth = globalAuth;
export { WidgetEvents } from './core/widget';
/** Export OneTap */
@@ -29,4 +47,3 @@ export type { FloatingOneTapParams } from './widgets/floatingOneTap';
/** Export OAuthList */
export { OAuthList, OAuthName } from './widgets/oauthList';
export type { OAuthListParams, OAuthListStyles } from './widgets/oauthList';
-
diff --git a/src/types.ts b/src/types.ts
index 8a4a506..a045425 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -6,7 +6,10 @@ export enum Languages {
GERMAN = 6,
POL = 15,
FRA = 16,
+ UZB = 65,
TURKEY = 82,
+ KAZ = 97,
+ BEL = 114,
}
export enum Scheme {
diff --git a/src/utils/action.ts b/src/utils/action.ts
new file mode 100644
index 0000000..e82f005
--- /dev/null
+++ b/src/utils/action.ts
@@ -0,0 +1,3 @@
+export const getSdkOauthAction = (provider: string) => ({ name: 'sdk_oauth', params: { oauth: provider } });
+
+export const encodeSdkOauthAction = (provider: string): string => btoa(JSON.stringify(getSdkOauthAction(provider)));
diff --git a/src/utils/cookie.ts b/src/utils/cookie.ts
new file mode 100644
index 0000000..64b3ca0
--- /dev/null
+++ b/src/utils/cookie.ts
@@ -0,0 +1,75 @@
+import { nanoid } from 'nanoid/non-secure';
+
+import { COOKIE_EXPIRES_TIME_15_MIN } from '#/constants';
+
+function getCookie(name: string) {
+ try {
+ let matches = document.cookie.match(new RegExp(
+ '(?:^|; )' + ('vkid_sdk:' + name).replace(/([.$?*|{}()\[\]\\\/+^])/g, '\\$1') + '=([^;]*)',
+ ));
+ return matches ? decodeURIComponent(matches[1]) : undefined;
+ } catch (e) {
+ return undefined;
+ }
+}
+
+type ParamValue = string;
+
+interface SetCookieParams {
+ expires?: number;
+ value?: ParamValue;
+}
+
+function setCookie(name: string, params: SetCookieParams) {
+ try {
+ const expireTime = new Date(new Date().getTime() + (params.expires || COOKIE_EXPIRES_TIME_15_MIN)).toUTCString();
+ const allowedDomain = location.host.split('.').slice(-2).join('.');
+
+ document.cookie = [
+ `vkid_sdk:${name}=${encodeURIComponent(params.value || '')}`,
+ `expires=${expireTime}`,
+ 'path=/',
+ `domain=.${allowedDomain}`,
+ 'SameSite=Strict',
+ 'Secure',
+ ].join('; ');
+ } catch (e) {}
+}
+
+function clearCookie(name: string) {
+ const allowedDomain = location.host.split('.').slice(-2).join('.');
+ try {
+ document.cookie = [
+ `vkid_sdk:${name}=`,
+ 'expires=Thu, 01 Jan 1970 00:00:00 UTC',
+ 'path=/',
+ 'SameSite=Strict',
+ 'Secure',
+ `domain=.${allowedDomain}`,
+ ].join('; ');
+ } catch (e) {}
+}
+
+export function cookie(name: string, params: SetCookieParams): string {
+ if (params.value) {
+ setCookie(name, params);
+ return params.value;
+ }
+
+ let value;
+ value = getCookie(name);
+
+ if (!value) {
+ value = nanoid();
+ setCookie(name, { ...params, value });
+ }
+
+ return value;
+}
+
+export const state = (value?: ParamValue) => cookie('state', { value });
+export const codeVerifier = (value?: ParamValue) => cookie('codeVerifier', { value });
+
+export const clearStateCookie = () => clearCookie('state');
+export const clearCodeVerifierCookie = () => clearCookie('codeVerifier');
+
diff --git a/src/utils/domain.ts b/src/utils/domain.ts
index 05ec4a6..3372526 100644
--- a/src/utils/domain.ts
+++ b/src/utils/domain.ts
@@ -1,6 +1,6 @@
const ALLOWED_DOMAINS = [
- 'vk.com',
- 'vk.ru',
+ '.vk.com',
+ '.vk.ru',
];
export const isDomainAllowed = (origin: string): boolean => !!ALLOWED_DOMAINS.find((domain) => origin.endsWith(domain));
diff --git a/src/utils/oauth.ts b/src/utils/oauth.ts
index 1dca518..8b2c629 100644
--- a/src/utils/oauth.ts
+++ b/src/utils/oauth.ts
@@ -1,12 +1,10 @@
import Base64 from 'crypto-js/enc-base64';
import sha256 from 'crypto-js/sha256';
-import { nanoid } from 'nanoid/non-secure';
/**
* Генерация code challenge для нового oauth
*/
-export const generateCodeChallenge = (): string => {
- const codeVerifier = nanoid();
+export const generateCodeChallenge = (codeVerifier: string): string => {
const hash = sha256(codeVerifier);
const base64 = Base64.stringify(hash);
diff --git a/src/utils/request.ts b/src/utils/request.ts
new file mode 100644
index 0000000..dd4e001
--- /dev/null
+++ b/src/utils/request.ts
@@ -0,0 +1,33 @@
+import type { Config } from '#/core/config';
+
+export const getStatsUrl = (method: string, config: Config) => {
+ const { __vkidDomain: domain, app } = config.get();
+
+ return `https://${domain}/${method}?app_id=${app}&v=5.207`;
+};
+
+const makeParams = (params: Record): string => {
+ const pairs = Object.keys(params).map((key) => {
+ let param = params[key];
+ key = encodeURIComponent(key || '');
+ param = encodeURIComponent(param === undefined ? '' : param);
+
+ return `${key}=${param}`;
+ });
+
+ return pairs.join('&');
+};
+
+export const request = (url: string, params: Record) => {
+ const paramsString = makeParams(params);
+
+ return fetch(url, {
+ method: 'POST',
+ body: paramsString,
+ mode: 'cors',
+ credentials: 'include',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ }).then((res) => res.json());
+};
diff --git a/src/utils/url/index.ts b/src/utils/url/index.ts
new file mode 100644
index 0000000..c71c26a
--- /dev/null
+++ b/src/utils/url/index.ts
@@ -0,0 +1,2 @@
+export { getVKIDUrl, getRedirectWithPayloadUrl } from './url';
+export type { RedirectPayload } from './types';
diff --git a/src/utils/url/types.ts b/src/utils/url/types.ts
new file mode 100644
index 0000000..b883c72
--- /dev/null
+++ b/src/utils/url/types.ts
@@ -0,0 +1,8 @@
+import { AuthToken } from '#/auth/types';
+
+export interface RedirectPayload {
+ code: string;
+ type: AuthToken;
+ state: string;
+ device_id: string;
+}
diff --git a/src/utils/url.ts b/src/utils/url/url.ts
similarity index 61%
rename from src/utils/url.ts
rename to src/utils/url/url.ts
index 97a12ba..a5fcec2 100644
--- a/src/utils/url.ts
+++ b/src/utils/url/url.ts
@@ -2,17 +2,16 @@ import { querystring } from '@vkontakte/vkjs';
import { VERSION } from '#/constants';
import { Config, ConfigData } from '#/core/config';
-import { uuid } from '#/utils/uuid';
+
+import { RedirectPayload } from './types';
export const getVKIDUrl = (module: string, params: Record, config: ConfigData): string => {
const queryParams: Record = {
...params,
- uuid: params.uuid || uuid(),
v: VERSION,
sdk_type: 'vkid',
app_id: config.app,
redirect_uri: config.redirectUrl,
- redirect_state: config.state,
debug: config.__debug ? 1 : null,
localhost: config.__localhost ? 1 : null,
@@ -23,12 +22,7 @@ export const getVKIDUrl = (module: string, params: Record, config:
return `https://${config.__vkidDomain}/${module}?${queryParamsString}`;
};
-// TODO: добавить типы
-export const getRedirectWithPayloadUrl = (payload: any, config: Config): string => {
- let url = `${config.get().redirectUrl}?payload=${encodeURIComponent(JSON.stringify(payload))}`;
- if (config.get().state) {
- url += `&state=${config.get().state}`;
- }
-
- return url;
+export const getRedirectWithPayloadUrl = (payload: RedirectPayload, config: Config): string => {
+ const params = Object.keys(payload).map((key: keyof RedirectPayload) => encodeURIComponent(key) + '=' + encodeURIComponent(payload[key])).join('&');
+ return `${config.get().redirectUrl}?${params}`;
};
diff --git a/src/widgets/agreementsDialog/agreementsDialog.ts b/src/widgets/agreementsDialog/agreementsDialog.ts
index 05c646e..2bbb970 100644
--- a/src/widgets/agreementsDialog/agreementsDialog.ts
+++ b/src/widgets/agreementsDialog/agreementsDialog.ts
@@ -1,14 +1,14 @@
-import { BridgeMessage } from '#/core/bridge';
-import { Widget, WidgetEvents } from '#/core/widget';
+import { Widget } from '#/core/widget';
import { AgreementsDialogInternalEvents, AgreementsDialogPublicEvents } from './events';
import { getAgreementsDialogTemplate } from './template';
+import { AgreementsDialogBridgeMessage, AgreementsDialogParams } from './types';
-export class AgreementsDialog extends Widget {
+export class AgreementsDialog extends Widget {
protected vkidAppName = 'user_policy_agreements';
protected templateRenderer = getAgreementsDialogTemplate;
- protected onBridgeMessageHandler(event: BridgeMessage) {
+ protected onBridgeMessageHandler(event: AgreementsDialogBridgeMessage) {
switch (event.handler) {
case AgreementsDialogInternalEvents.DECLINE: {
this.close();
diff --git a/src/widgets/agreementsDialog/index.ts b/src/widgets/agreementsDialog/index.ts
index c53bc1a..b1982d0 100644
--- a/src/widgets/agreementsDialog/index.ts
+++ b/src/widgets/agreementsDialog/index.ts
@@ -1,2 +1,3 @@
export { AgreementsDialog } from './agreementsDialog';
export { AgreementsDialogPublicEvents } from './events';
+export { AgreementsDialogBridgeMessage } from './types';
diff --git a/src/widgets/agreementsDialog/types.ts b/src/widgets/agreementsDialog/types.ts
new file mode 100644
index 0000000..04264d5
--- /dev/null
+++ b/src/widgets/agreementsDialog/types.ts
@@ -0,0 +1,15 @@
+import { BridgeMessage } from '#/core/bridge';
+import { WidgetEvents, WidgetParams } from '#/core/widget';
+
+import { AgreementsDialogInternalEvents } from './events';
+
+export type AgreementsDialogBridgeMessage = BridgeMessage;
+
+export enum AgreementsDialogStatsFlowSource {
+ BUTTON_ONE_TAP = 'button_one_tap',
+ FLOATING_ONE_TAP = 'floating_one_tap',
+}
+
+export interface AgreementsDialogParams extends WidgetParams {
+ stats_flow_source: AgreementsDialogStatsFlowSource;
+}
diff --git a/src/widgets/floatingOneTap/analytics/FloatingOneTapStatsCollector.ts b/src/widgets/floatingOneTap/analytics/FloatingOneTapStatsCollector.ts
new file mode 100644
index 0000000..1139236
--- /dev/null
+++ b/src/widgets/floatingOneTap/analytics/FloatingOneTapStatsCollector.ts
@@ -0,0 +1,58 @@
+import { RegistrationStatsCollector, ProductionStatsEventScreen } from '#/core/analytics';
+
+import { TEXT_TYPE } from './constants';
+import { ScreenProcessedParams } from './types';
+
+export class FloatingOneTapStatsCollector extends RegistrationStatsCollector {
+ private getFields() {
+ return [{
+ name: 'sdk_type',
+ value: 'vkid',
+ }];
+ }
+
+ public sendScreenProcessed(params: ScreenProcessedParams) {
+ void this.logEvent(ProductionStatsEventScreen.NOWHERE, {
+ event_type: 'screen_proceed',
+ screen_to: ProductionStatsEventScreen.FLOATING_ONE_TAP,
+ fields: [...this.getFields(), {
+ name: 'theme_type',
+ value: params.scheme,
+ }, {
+ name: 'language',
+ value: params.lang.toString(),
+ }, {
+ name: 'text_type',
+ value: TEXT_TYPE[params.contentId],
+ }],
+ });
+ }
+
+ public sendIframeLoadingFailed() {
+ void this.logEvent(ProductionStatsEventScreen.FLOATING_ONE_TAP, {
+ event_type: 'iframe_loading_failed',
+ fields: this.getFields(),
+ });
+ }
+
+ public sendNoUserButtonShow() {
+ void this.logEvent(ProductionStatsEventScreen.FLOATING_ONE_TAP, {
+ event_type: 'no_user_button_show',
+ fields: this.getFields(),
+ });
+ }
+
+ public sendNoUserButtonTap() {
+ return this.logEvent(ProductionStatsEventScreen.FLOATING_ONE_TAP, {
+ event_type: 'no_user_button_tap',
+ fields: this.getFields(),
+ });
+ }
+
+ public sendSdkInit() {
+ void this.logEvent(ProductionStatsEventScreen.FLOATING_ONE_TAP, {
+ event_type: 'sdk_init',
+ fields: this.getFields(),
+ });
+ }
+}
diff --git a/src/widgets/floatingOneTap/analytics/constants.ts b/src/widgets/floatingOneTap/analytics/constants.ts
new file mode 100644
index 0000000..c24f763
--- /dev/null
+++ b/src/widgets/floatingOneTap/analytics/constants.ts
@@ -0,0 +1,10 @@
+import { FloatingOneTapContentId } from '../types';
+
+export const TEXT_TYPE: Record = {
+ [FloatingOneTapContentId.SIGN_IN_TO_SERVICE]: 'service_sign_in',
+ [FloatingOneTapContentId.REGISTRATION_FOR_EVENT]: 'event_reg',
+ [FloatingOneTapContentId.SUBMIT_APPLICATIONS]: 'request',
+ [FloatingOneTapContentId.MAKE_ORDER_WITH_SERVICE]: 'service_order_placing',
+ [FloatingOneTapContentId.MAKE_ORDER_WITHOUT_SERVICE]: 'vkid_order_placing',
+ [FloatingOneTapContentId.SIGN_IN_TO_ACCOUNT]: 'account_sign_in',
+};
diff --git a/src/widgets/floatingOneTap/analytics/index.ts b/src/widgets/floatingOneTap/analytics/index.ts
new file mode 100644
index 0000000..2e8ee79
--- /dev/null
+++ b/src/widgets/floatingOneTap/analytics/index.ts
@@ -0,0 +1 @@
+export { FloatingOneTapStatsCollector } from './FloatingOneTapStatsCollector';
diff --git a/src/widgets/floatingOneTap/analytics/types.ts b/src/widgets/floatingOneTap/analytics/types.ts
new file mode 100644
index 0000000..6b7c799
--- /dev/null
+++ b/src/widgets/floatingOneTap/analytics/types.ts
@@ -0,0 +1,9 @@
+import { Languages, Scheme } from '#/types';
+
+import { FloatingOneTapContentId } from '../types';
+
+export interface ScreenProcessedParams {
+ lang: Languages;
+ scheme: Scheme;
+ contentId: FloatingOneTapContentId;
+}
diff --git a/src/widgets/floatingOneTap/floatingOneTap.ts b/src/widgets/floatingOneTap/floatingOneTap.ts
index 2f736b5..399af68 100644
--- a/src/widgets/floatingOneTap/floatingOneTap.ts
+++ b/src/widgets/floatingOneTap/floatingOneTap.ts
@@ -1,17 +1,19 @@
-import { AuthParams } from '#/auth/types';
-import { BridgeMessage } from '#/core/bridge';
+import { AuthError, AuthParams, AuthStatsFlowSource } from '#/auth/types';
+import { ProductionStatsEventScreen } from '#/core/analytics';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { isRequired, validator } from '#/core/validator';
import { Widget, WidgetEvents } from '#/core/widget';
-import { WidgetState } from '#/core/widget/types';
+import { WidgetError, WidgetErrorCode, WidgetState } from '#/core/widget/types';
import { Languages, Scheme } from '#/types';
-import { AgreementsDialog } from '#/widgets/agreementsDialog/agreementsDialog';
-import { AgreementsDialogInternalEvents } from '#/widgets/agreementsDialog/events';
+import { RedirectPayload } from '#/utils/url';
+import { AgreementsDialog, AgreementsDialogPublicEvents, AgreementsDialogBridgeMessage } from '#/widgets/agreementsDialog';
+import { AgreementsDialogStatsFlowSource } from '#/widgets/agreementsDialog/types';
import { OAuthList, OAuthListParams, OAuthName } from '#/widgets/oauthList';
+import { FloatingOneTapStatsCollector } from './analytics';
import { FloatingOneTapInternalEvents } from './events';
import { getFloatingOneTapTemplate } from './template';
-import { FloatingOneTapContentId, FloatingOneTapIndent, FloatingOneTapParams } from './types';
+import { FloatingOneTapBridgeFullAuthParams, FloatingOneTapBridgeMessage, FloatingOneTapContentId, FloatingOneTapIndent, FloatingOneTapParams } from './types';
const defaultIndent: Required = {
top: 12,
@@ -20,23 +22,35 @@ const defaultIndent: Required = {
};
export class FloatingOneTap extends Widget> {
+ private readonly analytics: FloatingOneTapStatsCollector;
protected vkidAppName = 'floating_one_tap_auth';
- protected onBridgeMessageHandler(event: BridgeMessage) {
+ public constructor() {
+ super();
+ this.analytics = new FloatingOneTapStatsCollector(FloatingOneTap.config);
+ }
+
+ protected onBridgeMessageHandler(event: FloatingOneTapBridgeMessage) {
switch (event.handler) {
case FloatingOneTapInternalEvents.LOGIN_SUCCESS: {
- this.redirectWithPayload(event.params);
+ const params = event.params as RedirectPayload;
+ this.redirectWithPayload(params);
break;
}
case FloatingOneTapInternalEvents.SHOW_FULL_AUTH: {
- const params: Partial = {};
- if (event.params.screen) {
- params.screen = event.params.screen;
+ const params = event.params as FloatingOneTapBridgeFullAuthParams;
+ const authParams: Partial = {};
+
+ if (params.screen) {
+ authParams.screen = params.screen;
+ authParams.statsFlowSource = AuthStatsFlowSource.FLOATING_ONE_TAP_ALTERNATIVE;
}
- if (event.params.sdk_oauth) {
- params.action = { name: 'sdk_oauth', params: { oauth: event.params.sdk_oauth } };
+
+ if (params.sdk_oauth) {
+ authParams.provider = params.sdk_oauth;
}
- this.openFullAuth(params);
+
+ this.openFullAuth(authParams);
break;
}
case FloatingOneTapInternalEvents.NOT_AUTHORIZED: {
@@ -59,33 +73,55 @@ export class FloatingOneTap extends Widget
}
}
+ protected onErrorHandler(error: WidgetError) {
+ this.analytics.sendIframeLoadingFailed();
+ this.analytics.sendNoUserButtonShow();
+ super.onErrorHandler(error);
+ }
+
private createAgreementsDialogWidget() {
const params = {
container: document.body,
lang: this.lang,
scheme: this.scheme,
+ stats_flow_source: AgreementsDialogStatsFlowSource.FLOATING_ONE_TAP,
};
const agreementsDialog = new AgreementsDialog();
- const acceptHandler = (event: BridgeMessage) => {
+ const acceptHandler = (event: AgreementsDialogBridgeMessage) => {
this.bridge.sendMessage({
handler: FloatingOneTapInternalEvents.START_AUTHORIZE,
params: event.params,
});
- agreementsDialog.off(AgreementsDialogInternalEvents.ACCEPT, acceptHandler);
+ agreementsDialog.off(AgreementsDialogPublicEvents.ACCEPT, acceptHandler);
agreementsDialog.close();
};
- agreementsDialog.on(AgreementsDialogInternalEvents.ACCEPT, acceptHandler);
+ agreementsDialog.on(AgreementsDialogPublicEvents.ACCEPT, acceptHandler);
agreementsDialog.render(params);
}
private openFullAuth(value?: AuthParams) {
const params = {
+ statsFlowSource: AuthStatsFlowSource.FLOATING_ONE_TAP,
...value,
lang: this.lang,
scheme: this.scheme,
};
- FloatingOneTap.__auth.login(params);
+
+ FloatingOneTap.auth.login(params)
+ .catch((error: AuthError) => {
+ this.events.emit(WidgetEvents.ERROR, {
+ code: WidgetErrorCode.AuthError,
+ text: error.error,
+ });
+ });
+ }
+
+ private login(value?: AuthParams) {
+ this.analytics.sendNoUserButtonTap()
+ .finally(() => {
+ this.openFullAuth(value);
+ });
}
private renderOAuthList(params: OAuthListParams) {
@@ -93,7 +129,10 @@ export class FloatingOneTap extends Widget
return;
}
const oauthList = new OAuthList();
- oauthList.render(params);
+ oauthList.render({
+ ...params,
+ flowSource: ProductionStatsEventScreen.FLOATING_ONE_TAP,
+ });
}
@validator({ appName: [isRequired] })
@@ -110,8 +149,9 @@ export class FloatingOneTap extends Widget
providers: providers.join(','),
};
+ this.analytics.sendSdkInit();
this.templateRenderer = getFloatingOneTapTemplate({
- openFullAuth: this.openFullAuth.bind(this),
+ login: this.login.bind(this),
close: this.close.bind(this),
scheme: this.scheme,
lang: this.lang,
@@ -121,7 +161,11 @@ export class FloatingOneTap extends Widget
renderOAuthList: this.renderOAuthList.bind(this),
providers,
});
-
+ this.analytics.sendScreenProcessed({
+ scheme: this.scheme,
+ lang: this.lang,
+ contentId: queryParams.content_id,
+ });
return super.render({ container: document.body, ...queryParams });
}
}
diff --git a/src/widgets/floatingOneTap/langs/buttonLang.ts b/src/widgets/floatingOneTap/langs/buttonLang.ts
index d4541e3..2ef75d1 100644
--- a/src/widgets/floatingOneTap/langs/buttonLang.ts
+++ b/src/widgets/floatingOneTap/langs/buttonLang.ts
@@ -6,6 +6,9 @@ import { Lang } from './types';
const SIGN_IN: Lang = {
[Languages.RUS]: 'Войти c VK ID',
[Languages.UKR]: 'Увійти з VK ID',
+ [Languages.BEL]: 'Увайсці з VK ID',
+ [Languages.KAZ]: 'VK ID арқылы кіру',
+ [Languages.UZB]: 'VK ID yordamida kirish',
[Languages.ENG]: 'Sign in with VK ID',
[Languages.SPA]: 'Iniciar sesión con VK ID',
[Languages.GERMAN]: 'Mit VK-ID anmelden',
@@ -17,6 +20,9 @@ const SIGN_IN: Lang = {
const MAKE_ORDER: Lang = {
[Languages.RUS]: 'Оформить с VK ID',
[Languages.UKR]: 'Оформити з VK ID',
+ [Languages.BEL]: 'Аформіць з VK ID',
+ [Languages.KAZ]: 'VK ID арқылы рәсімдеу',
+ [Languages.UZB]: 'VK ID yordamida shakllantirish',
[Languages.ENG]: 'Order with VK ID',
[Languages.SPA]: 'Pedir con VK ID',
[Languages.GERMAN]: 'Mit VK-ID bestellen',
diff --git a/src/widgets/floatingOneTap/langs/descriptionLang.ts b/src/widgets/floatingOneTap/langs/descriptionLang.ts
index d8fc274..627f57b 100644
--- a/src/widgets/floatingOneTap/langs/descriptionLang.ts
+++ b/src/widgets/floatingOneTap/langs/descriptionLang.ts
@@ -5,6 +5,9 @@ import { Lang } from './types';
const DESCRIPTION: Lang = {
[Languages.RUS]: 'После этого вам станут доступны все возможности сервиса. Ваши данные будут надёжно защищены.',
[Languages.UKR]: 'Після цього вам стануть доступні всі можливості сервісу. Ваші дані будуть надійно захищені.',
+ [Languages.BEL]: 'Пасля гэтага вам стануць даступны ўсе магчымасці сэрвісу. Вашы даныя будуць надзейна абаронены.',
+ [Languages.KAZ]: 'Содан кейін сізге сервистің барлық мүмкіндігі қолжетімді болып, деректеріңіз сенімді қораулы болады.',
+ [Languages.UZB]: 'Bundan so‘ng, sizga xizmatning barcha imkoniyatlari ochiladi. Maʼlumotlaringiz ishonchli himoyalanadi.',
[Languages.ENG]: 'Afterwards, you\'ll have access to\u00A0all of\u00A0the\u00A0service\'s features. Your personal data will be carefully protected.',
[Languages.SPA]: 'Después, tendrás acceso a\u00A0todas las funciones del\u00A0servicio. Tus datos personales estarán cuidadosamente protegidos.',
[Languages.GERMAN]: 'Anschließend stehen Ihnen alle Funktionen des Dienstes zur Verfügung. Ihre\u00A0persönlichen Daten werden sorgfältig geschützt.',
diff --git a/src/widgets/floatingOneTap/langs/titleLang.ts b/src/widgets/floatingOneTap/langs/titleLang.ts
index fc2aa0c..8269d75 100644
--- a/src/widgets/floatingOneTap/langs/titleLang.ts
+++ b/src/widgets/floatingOneTap/langs/titleLang.ts
@@ -6,6 +6,9 @@ import { Lang } from './types';
const SIGN_IN_TO_SERVICE: Lang = {
[Languages.RUS]: 'Войдите в\u00A0сервис или\u00A0зарегистрируйтесь',
[Languages.UKR]: 'Увійдіть у\u00A0сервіс або\u00A0зареєструйтеся',
+ [Languages.BEL]: 'Увайдзіце ў\u00A0сэрвіс ці\u00A0зарэгіструйцеся',
+ [Languages.KAZ]: 'Сервиске кіріңіз немесе тіркеліңіз',
+ [Languages.UZB]: 'Xizmatga\u00A0kiring va\u00A0ro‘yxatdan o‘ting',
[Languages.ENG]: 'Sign in to\u00A0service or\u00A0sign up',
[Languages.SPA]: 'Acceder al\u00A0servicio o\u00A0registrarse',
[Languages.GERMAN]: 'Melden Sie sich beim\u00A0Dienst\u00A0an oder registrieren Sie\u00A0sich',
@@ -17,6 +20,9 @@ const SIGN_IN_TO_SERVICE: Lang = {
const SIGN_IN_TO_ACCOUNT: Lang = {
[Languages.RUS]: 'Войдите в учётную запись {service}',
[Languages.UKR]: 'Увійдіть в обліковий запис {service}',
+ [Languages.BEL]: 'Увайдзіце ва ўліковы запіс {service}',
+ [Languages.KAZ]: '{service} есептік жазбасына кіріңіз',
+ [Languages.UZB]: '{service} hisobiga kiring',
[Languages.ENG]: 'Sign in to\u00A0{service} account',
[Languages.SPA]: 'Acceder a la cuenta\u00A0{service}',
[Languages.GERMAN]: 'Melden Sie sich bei Ihrem\u00A0{service}-Konto an',
@@ -28,6 +34,9 @@ const SIGN_IN_TO_ACCOUNT: Lang = {
const REGISTRATION_FOR_EVENT: Lang = {
[Languages.RUS]: 'Зарегистрируйтесь на\u00A0мероприятие',
[Languages.UKR]: 'Зареєструйтеся на\u00A0захід',
+ [Languages.BEL]: 'Зарэгіструйцеся на\u00A0мерапрыемства',
+ [Languages.KAZ]: 'Шараға тіркеліңіз',
+ [Languages.UZB]: 'Tadbirda\u00A0ro‘yxatdan o‘ting',
[Languages.ENG]: 'Sign up for\u00A0event',
[Languages.SPA]: 'Registrarse en\u00A0el\u00A0evento',
[Languages.GERMAN]: 'Melden\u00A0Sie\u00A0sich für\u00A0die\u00A0Veranstaltung\u00A0an',
@@ -39,6 +48,9 @@ const REGISTRATION_FOR_EVENT: Lang = {
const SUBMIT_APPLICATIONS: Lang = {
[Languages.RUS]: 'Подайте заявку с\u00A0VK\u00A0ID',
[Languages.UKR]: 'Подайте запит з\u00A0VK\u00A0ID',
+ [Languages.BEL]: 'Падайце заяўку з\u00A0VK\u00A0ID',
+ [Languages.KAZ]: 'VK\u00A0ID арқылы тапсырыс жасаңыз',
+ [Languages.UZB]: 'VK\u00A0ID\u00A0yordamida talabnoma berish',
[Languages.ENG]: 'Apply with\u00A0VK\u00A0ID',
[Languages.SPA]: 'Solicitar con\u00A0VK\u00A0ID',
[Languages.GERMAN]: 'Bewerben Sie mit\u00A0VK-ID',
@@ -50,6 +62,9 @@ const SUBMIT_APPLICATIONS: Lang = {
const MAKE_ORDER_WITH_SERVICE: Lang = {
[Languages.RUS]: 'Оформите заказ в\u00A0{service} с\u00A0VK\u00A0ID',
[Languages.UKR]: 'Оформіть замовлення в\u00A0{service} з\u00A0VK\u00A0ID',
+ [Languages.BEL]: 'Аформіце заказ у\u00A0{service} з\u00A0VK\u00A0ID',
+ [Languages.KAZ]: '{service} сервисінде \u00A0VK\u00A0ID арқылы тапсырыс жасаңыз',
+ [Languages.UZB]: 'VK\u00A0ID\u00A0orqali {service}\u00A0da buyurtma\u00A0shakllantirish',
[Languages.ENG]: 'Place order on\u00A0{service} with\u00A0VK\u00A0ID',
[Languages.SPA]: 'Realizar pedido en\u00A0{service} con\u00A0VK\u00A0ID',
[Languages.GERMAN]: 'Machen Sie eine\u00A0Bestellung auf\u00A0{service} mit\u00A0VK-ID',
@@ -61,6 +76,9 @@ const MAKE_ORDER_WITH_SERVICE: Lang = {
const MAKE_ORDER_WITHOUT_SERVICE: Lang = {
[Languages.RUS]: 'Оформите заказ с\u00A0VK\u00A0ID',
[Languages.UKR]: 'Оформіть замовлення з\u00A0VK\u00A0ID',
+ [Languages.BEL]: 'Аформіце заказ з\u00A0VK\u00A0ID',
+ [Languages.KAZ]: 'VK\u00A0ID арқылы тапсырыс жасаңыз',
+ [Languages.UZB]: 'VK\u00A0ID\u00A0orqali buyurtmani shakllantirish',
[Languages.ENG]: 'Place order with\u00A0VK\u00A0ID',
[Languages.SPA]: 'Realizar pedido con\u00A0VK\u00A0ID',
[Languages.GERMAN]: 'Machen Sie eine\u00A0Bestellung mit\u00A0VK-ID',
diff --git a/src/widgets/floatingOneTap/template.ts b/src/widgets/floatingOneTap/template.ts
index b336338..60aa42c 100644
--- a/src/widgets/floatingOneTap/template.ts
+++ b/src/widgets/floatingOneTap/template.ts
@@ -7,7 +7,7 @@ type FloatingOneTapTemplateParams = Required<
Pick &
Pick
> & {
- openFullAuth?: VoidFunction;
+ login?: VoidFunction;
close?: VoidFunction;
renderOAuthList: (params: OAuthListParams) => void;
providers?: OAuthName[];
@@ -53,7 +53,7 @@ const getIndent = (value?: number) => {
export const getFloatingOneTapTemplate = ({
scheme,
indent,
- openFullAuth,
+ login,
close,
lang,
contentId,
@@ -104,7 +104,7 @@ export const getFloatingOneTapTemplate = ({
const buttonEl = document.createElement('button');
buttonEl.classList.add(`VkIdWebSdk__floating_button_reset_${id}`);
buttonEl.classList.add(`VkIdWebSdk__floating_button_${id}`);
- openFullAuth && (buttonEl.onclick = openFullAuth);
+ login && (buttonEl.onclick = login);
const buttonContentEl = document.createElement('div');
buttonContentEl.classList.add(`VkIdWebSdk__floating_button_content_${id}`);
diff --git a/src/widgets/floatingOneTap/types.ts b/src/widgets/floatingOneTap/types.ts
index a0fd4a4..174fdf0 100644
--- a/src/widgets/floatingOneTap/types.ts
+++ b/src/widgets/floatingOneTap/types.ts
@@ -1,6 +1,10 @@
-import { WidgetParams } from '#/core/widget';
+import { BridgeMessage } from '#/core/bridge';
+import { WidgetEvents, WidgetParams } from '#/core/widget';
+import { RedirectPayload } from '#/utils/url';
import { OAuthName } from '#/widgets/oauthList';
+import { FloatingOneTapInternalEvents } from './events';
+
export interface FloatingOneTapIndent {
/**
* Отступ от верхней границы окна (не учитывается в мобильном отображении)
@@ -65,3 +69,14 @@ export interface FloatingOneTapParams extends Omit {
*/
oauthList?: OAuthName[];
}
+
+export interface FloatingOneTapBridgeFullAuthParams {
+ uuid: string;
+ screen?: string;
+ sdk_oauth?: OAuthName;
+}
+
+type FloatingOneTapBridgeParams = FloatingOneTapBridgeFullAuthParams | RedirectPayload;
+type FloatingOneTapEvents = FloatingOneTapInternalEvents | WidgetEvents;
+
+export type FloatingOneTapBridgeMessage = BridgeMessage;
diff --git a/src/widgets/oauthList/analytics/OAuthListStatsCollector.ts b/src/widgets/oauthList/analytics/OAuthListStatsCollector.ts
new file mode 100644
index 0000000..5de3064
--- /dev/null
+++ b/src/widgets/oauthList/analytics/OAuthListStatsCollector.ts
@@ -0,0 +1,85 @@
+import { RegistrationStatsCollector } from '#/core/analytics';
+import { MultibrandingButtonShowParams, MultibrandingButtonTapParams, MultibrandingOauthAddedParams, MultibrandingOauthParamsScreen } from '#/widgets/oauthList/analytics/types';
+
+export class OAuthListStatsCollector extends RegistrationStatsCollector {
+ private getFields() {
+ return [{
+ name: 'sdk_type',
+ value: 'vkid',
+ }];
+ }
+
+ public sendMultibrandingOauthAdded({ screen, fields }: MultibrandingOauthAddedParams) {
+ void this.logEvent(screen, {
+ event_type: 'multibranding_oauth_added',
+ fields: [...this.getFields(), ...fields],
+ });
+ }
+
+ public sendOkButtonShow({ screen, isIcon }: MultibrandingButtonShowParams) {
+ void this.logEvent(screen, {
+ event_type: 'ok_button_show',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: isIcon ? 'icon' : 'default',
+ }],
+ });
+ }
+
+ public sendVkButtonShow({ screen, isIcon }: MultibrandingButtonShowParams) {
+ void this.logEvent(screen, {
+ event_type: 'vk_button_show',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: isIcon ? 'icon' : 'default',
+ }],
+ });
+ }
+
+ public sendMailButtonShow({ screen, isIcon }: MultibrandingButtonShowParams) {
+ void this.logEvent(screen, {
+ event_type: 'mail_button_show',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: isIcon ? 'icon' : 'default',
+ }],
+ });
+ }
+
+ public sendVkButtonTap({ screen, isIcon }: MultibrandingButtonTapParams) {
+ return this.logEvent(screen, {
+ event_type: 'vk_button_tap',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: isIcon ? 'icon' : 'default',
+ }],
+ });
+ }
+
+ public sendOkButtonTap({ screen, isIcon }: MultibrandingButtonTapParams) {
+ return this.logEvent(screen, {
+ event_type: 'ok_button_tap',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: isIcon ? 'icon' : 'default',
+ }],
+ });
+ }
+
+ public sendMailButtonTap({ screen, isIcon }: MultibrandingButtonTapParams) {
+ return this.logEvent(screen, {
+ event_type: 'mail_button_tap',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: isIcon ? 'icon' : 'default',
+ }],
+ });
+ }
+
+ public sendSdkInit(screen: MultibrandingOauthParamsScreen) {
+ void this.logEvent(screen, {
+ event_type: 'sdk_init',
+ fields: this.getFields(),
+ });
+ }
+}
diff --git a/src/widgets/oauthList/analytics/index.ts b/src/widgets/oauthList/analytics/index.ts
new file mode 100644
index 0000000..1a848b4
--- /dev/null
+++ b/src/widgets/oauthList/analytics/index.ts
@@ -0,0 +1,2 @@
+export { OAuthListStatsCollector } from './OAuthListStatsCollector';
+export { MultibrandingStatsProviders, MultibrandingOauthAddedParams } from './types';
diff --git a/src/widgets/oauthList/analytics/types.ts b/src/widgets/oauthList/analytics/types.ts
new file mode 100644
index 0000000..1994955
--- /dev/null
+++ b/src/widgets/oauthList/analytics/types.ts
@@ -0,0 +1,25 @@
+import { ProductionStatsEventScreen, ProductionStatsFieldsItem } from '#/core/analytics';
+
+export enum MultibrandingStatsProviders {
+ VK = 'vk',
+ OK = 'ok',
+ MAIL = 'mail',
+}
+
+interface MultibrandingOauthAddedParamsFieldsItem extends ProductionStatsFieldsItem {
+ name: MultibrandingStatsProviders;
+}
+
+export type MultibrandingOauthParamsScreen = ProductionStatsEventScreen.MULTIBRANDING | ProductionStatsEventScreen.NOWHERE | ProductionStatsEventScreen.FLOATING_ONE_TAP;
+
+export interface MultibrandingOauthAddedParams {
+ screen: MultibrandingOauthParamsScreen;
+ fields: MultibrandingOauthAddedParamsFieldsItem[];
+}
+
+export interface MultibrandingButtonShowParams {
+ screen: MultibrandingOauthParamsScreen;
+ isIcon: boolean;
+}
+
+export type MultibrandingButtonTapParams = MultibrandingButtonShowParams;
diff --git a/src/widgets/oauthList/index.ts b/src/widgets/oauthList/index.ts
index 9dc0525..c0a5376 100644
--- a/src/widgets/oauthList/index.ts
+++ b/src/widgets/oauthList/index.ts
@@ -1,2 +1,2 @@
export { OAuthList } from './oauthList';
-export { OAuthListParams, OAuthName, OAuthListStyles } from './types';
+export { OAuthListParams, OAuthName, ExternalOAuthName, OAuthListStyles } from './types';
diff --git a/src/widgets/oauthList/lang.ts b/src/widgets/oauthList/lang.ts
index 40cf679..6d1de73 100644
--- a/src/widgets/oauthList/lang.ts
+++ b/src/widgets/oauthList/lang.ts
@@ -6,6 +6,9 @@ type Text = Record;
export const linkTextLang: Text = {
[Languages.RUS]: 'или войти через VK ID с использованием данных из сервиса',
[Languages.UKR]: 'або увійти через VK ID з використанням даних із сервісу',
+ [Languages.BEL]: 'ці ўвайсці праз VK ID з выкарыстаннем даных з сэрвісу',
+ [Languages.KAZ]: 'сервистегі деректерді пайдаланып VK ID арқылы кіру',
+ [Languages.UZB]: 'yoki xizmatning maʼlumotlaridan foydalangan holda VK ID orqali kirish',
[Languages.ENG]: 'or sign in with VK ID using information from a service',
[Languages.SPA]: 'o iniciar sesión con VK ID utilizando la información de un servicio',
[Languages.GERMAN]: 'oder melden Sie sich mit Ihrer VK-ID an, indem Sie Informationen aus dem Dienst verwenden',
@@ -21,6 +24,9 @@ export const singleButtonText = {
[OAuthName.VK]: 'Войти с VK ID',
},
[Languages.UKR]: 'Увійти з {provider}',
+ [Languages.BEL]: 'Увайсці з {provider}',
+ [Languages.KAZ]: '{provider} кіру',
+ [Languages.UZB]: '{provider} orqali kirish',
[Languages.ENG]: 'Sign in with {provider}',
[Languages.SPA]: 'Iniciar sesión con {provider}',
[Languages.GERMAN]: 'Mit {provider} anmelden',
diff --git a/src/widgets/oauthList/oauthList.ts b/src/widgets/oauthList/oauthList.ts
index 107ab95..29bb176 100644
--- a/src/widgets/oauthList/oauthList.ts
+++ b/src/widgets/oauthList/oauthList.ts
@@ -1,26 +1,87 @@
+import type { AuthError, AuthParams } from '#/auth';
+import { ProductionStatsEventScreen } from '#/core/analytics';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { isNotEmptyOAuthList, validator } from '#/core/validator';
-import { Widget } from '#/core/widget';
-import { WidgetState } from '#/core/widget/types';
+import { Widget, WidgetEvents } from '#/core/widget';
+import { WidgetErrorCode, WidgetState } from '#/core/widget/types';
+import { Languages, Scheme } from '#/types';
+import { MultibrandingOauthParamsScreen } from '#/widgets/oauthList/analytics/types';
+import { MultibrandingStatsProviders, OAuthListStatsCollector } from './analytics';
import { getOAuthListTemplate } from './template';
-import { OAuthListParams } from './types';
+import { OAuthListParams, OAuthName } from './types';
export class OAuthList extends Widget {
+ private readonly analytics: OAuthListStatsCollector;
+ private providers: OAuthName[];
+ private flowSource: MultibrandingOauthParamsScreen;
+
+ public constructor() {
+ super();
+ this.analytics = new OAuthListStatsCollector(this.config);
+ }
+
+ private sendStartAnalytics() {
+ const providers = new Set(this.providers);
+ this.analytics.sendMultibrandingOauthAdded({
+ screen: this.flowSource,
+ fields: [{
+ name: MultibrandingStatsProviders.VK,
+ value: (+providers.has(OAuthName.VK)).toString(),
+ }, {
+ name: MultibrandingStatsProviders.OK,
+ value: (+providers.has(OAuthName.OK)).toString(),
+ }, {
+ name: MultibrandingStatsProviders.MAIL,
+ value: (+providers.has(OAuthName.MAIL)).toString(),
+ }],
+ });
+
+ if (providers.has(OAuthName.VK)) {
+ this.analytics.sendVkButtonShow({
+ screen: this.flowSource,
+ isIcon: providers.size > 1,
+ });
+ }
+
+ if (providers.has(OAuthName.OK)) {
+ this.analytics.sendOkButtonShow({
+ screen: this.flowSource,
+ isIcon: providers.size > 1,
+ });
+ }
+
+ if (providers.has(OAuthName.MAIL)) {
+ this.analytics.sendMailButtonShow({
+ screen: this.flowSource,
+ isIcon: providers.size > 1,
+ });
+ }
+ }
+
@validator({ oauthList: [isNotEmptyOAuthList] })
public render(params: OAuthListParams): this {
+ this.lang = params?.lang || Languages.RUS;
+ this.scheme = params?.scheme || Scheme.LIGHT;
+ this.providers = params.oauthList;
+ this.flowSource = params?.flowSource || ProductionStatsEventScreen.MULTIBRANDING;
+
+ if (this.flowSource === ProductionStatsEventScreen.MULTIBRANDING) {
+ this.analytics.sendSdkInit(this.flowSource);
+ }
+
this.templateRenderer = getOAuthListTemplate({
- lang: params.lang,
+ lang: this.lang,
oauthList: params.oauthList,
height: params.styles?.height,
borderRadius: params.styles?.borderRadius,
- scheme: params.scheme,
+ scheme: this.scheme,
});
this.container = params.container;
this.renderTemplate();
this.registerElements();
this.setState(WidgetState.LOADED);
-
+ this.sendStartAnalytics();
this.elements.root.addEventListener('click', this.handleClick.bind(this));
return this;
@@ -32,8 +93,57 @@ export class OAuthList extends Widget {
return;
}
- const oauth = target.getAttribute('data-oauth');
+ const oauth = target.getAttribute('data-oauth') as OAuthName;
- OAuthList.__auth.login({ action: { name: 'sdk_oauth', params: { oauth } } });
+ const params: AuthParams = {
+ lang: this.lang,
+ scheme: this.scheme,
+ provider: oauth,
+ };
+
+ switch (oauth) {
+ case OAuthName.VK:
+ this.analytics.sendVkButtonTap({
+ screen: this.flowSource,
+ isIcon: this.providers.length > 1,
+ }).finally(() => {
+ OAuthList.auth.login(params)
+ .catch((error: AuthError) => {
+ this.events.emit(WidgetEvents.ERROR, {
+ code: WidgetErrorCode.AuthError,
+ text: error.error,
+ });
+ });
+ });
+ break;
+ case OAuthName.OK:
+ this.analytics.sendOkButtonTap({
+ screen: this.flowSource,
+ isIcon: this.providers.length > 1,
+ }).finally(() => {
+ OAuthList.auth.login(params)
+ .catch((error: AuthError) => {
+ this.events.emit(WidgetEvents.ERROR, {
+ code: WidgetErrorCode.AuthError,
+ text: error.error,
+ });
+ });
+ });
+ break;
+ case OAuthName.MAIL:
+ this.analytics.sendMailButtonTap({
+ screen: this.flowSource,
+ isIcon: this.providers.length > 1,
+ }).finally(() => {
+ OAuthList.auth.login(params)
+ .catch((error: AuthError) => {
+ this.events.emit(WidgetEvents.ERROR, {
+ code: WidgetErrorCode.AuthError,
+ text: error.error,
+ });
+ });
+ });
+ break;
+ }
}
}
diff --git a/src/widgets/oauthList/types.ts b/src/widgets/oauthList/types.ts
index 2326a77..e8b7cf2 100644
--- a/src/widgets/oauthList/types.ts
+++ b/src/widgets/oauthList/types.ts
@@ -1,3 +1,4 @@
+import { ProductionStatsEventScreen } from '#/core/analytics';
import { WidgetParams } from '#/core/widget';
export enum OAuthName {
@@ -6,6 +7,11 @@ export enum OAuthName {
VK = 'vkid',
}
+export enum ExternalOAuthName {
+ OK = OAuthName.OK,
+ MAIL = OAuthName.MAIL,
+}
+
export interface OAuthListStyles {
/**
* Высота кнопки
@@ -26,4 +32,8 @@ export interface OAuthListParams extends WidgetParams {
* Список внешних сервисов авторизации
*/
oauthList: OAuthName[];
+ /**
+ * @ignore
+ */
+ flowSource?: ProductionStatsEventScreen.MULTIBRANDING | ProductionStatsEventScreen.NOWHERE | ProductionStatsEventScreen.FLOATING_ONE_TAP;
}
diff --git a/src/widgets/oneTap/analytics/OneTapStatsCollector.ts b/src/widgets/oneTap/analytics/OneTapStatsCollector.ts
new file mode 100644
index 0000000..f72b9ac
--- /dev/null
+++ b/src/widgets/oneTap/analytics/OneTapStatsCollector.ts
@@ -0,0 +1,53 @@
+import { RegistrationStatsCollector, ProductionStatsEventScreen } from '#/core/analytics';
+
+import { OneTapStatsButtonType } from './types';
+
+export class OneTapStatsCollector extends RegistrationStatsCollector {
+ private getFields() {
+ return [{
+ name: 'sdk_type',
+ value: 'vkid',
+ }];
+ }
+
+ public sendFrameLoadingFailed() {
+ void this.logEvent(ProductionStatsEventScreen.NOWHERE, {
+ event_type: 'iframe_loading_failed',
+ fields: this.getFields(),
+ });
+ }
+
+ public sendNoSessionFound() {
+ void this.logEvent(ProductionStatsEventScreen.NOWHERE, {
+ event_type: 'no_session_found',
+ fields: this.getFields(),
+ });
+ }
+
+ public sendOneTapButtonNoUserShow(buttonType: OneTapStatsButtonType = 'default') {
+ void this.logEvent(ProductionStatsEventScreen.NOWHERE, {
+ event_type: 'onetap_button_no_user_show',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: buttonType,
+ }],
+ });
+ }
+
+ public sendOneTapButtonNoUserTap(buttonType: OneTapStatsButtonType = 'default') {
+ return this.logEvent(ProductionStatsEventScreen.NOWHERE, {
+ event_type: 'onetap_button_no_user_tap',
+ fields: [...this.getFields(), {
+ name: 'button_type',
+ value: buttonType,
+ }],
+ });
+ }
+
+ public sendSdkInit() {
+ void this.logEvent(ProductionStatsEventScreen.NOWHERE, {
+ event_type: 'sdk_init',
+ fields: this.getFields(),
+ });
+ }
+}
diff --git a/src/widgets/oneTap/analytics/index.ts b/src/widgets/oneTap/analytics/index.ts
new file mode 100644
index 0000000..c224d3c
--- /dev/null
+++ b/src/widgets/oneTap/analytics/index.ts
@@ -0,0 +1,2 @@
+export { OneTapStatsCollector } from './OneTapStatsCollector';
+export { OneTapStatsButtonType } from './types';
diff --git a/src/widgets/oneTap/analytics/types.ts b/src/widgets/oneTap/analytics/types.ts
new file mode 100644
index 0000000..e300331
--- /dev/null
+++ b/src/widgets/oneTap/analytics/types.ts
@@ -0,0 +1 @@
+export type OneTapStatsButtonType = 'default' | 'icon';
diff --git a/src/widgets/oneTap/lang.ts b/src/widgets/oneTap/lang.ts
index d205c57..7b3e40d 100644
--- a/src/widgets/oneTap/lang.ts
+++ b/src/widgets/oneTap/lang.ts
@@ -7,6 +7,9 @@ export const providerLang = 'VK ID';
export const longLang: Text = {
[Languages.RUS]: 'Войти c VK ID',
[Languages.UKR]: 'Увійти з VK ID',
+ [Languages.BEL]: 'Увайсці з VК ID',
+ [Languages.KAZ]: 'VK ID арқылы кіру',
+ [Languages.UZB]: 'VK ID dan kirish',
[Languages.ENG]: 'Sign in with VK ID',
[Languages.SPA]: 'Iniciar sesión con VK ID',
[Languages.GERMAN]: 'Mit VK-ID anmelden',
@@ -18,6 +21,9 @@ export const longLang: Text = {
export const shortLang: Text = {
[Languages.RUS]: 'Продолжить',
[Languages.UKR]: 'Продовжити',
+ [Languages.BEL]: 'Працягнуць',
+ [Languages.KAZ]: 'Жалғастыру',
+ [Languages.UZB]: 'Davom etish',
[Languages.ENG]: 'Continue',
[Languages.SPA]: 'Continuar',
[Languages.GERMAN]: 'Fortfahren',
diff --git a/src/widgets/oneTap/oneTap.ts b/src/widgets/oneTap/oneTap.ts
index 99ed250..7b707c9 100644
--- a/src/widgets/oneTap/oneTap.ts
+++ b/src/widgets/oneTap/oneTap.ts
@@ -1,17 +1,19 @@
-import { AuthParams } from '#/auth/types';
-import { BridgeMessage } from '#/core/bridge';
+import { AuthError, AuthParams, AuthStatsFlowSource } from '#/auth/types';
+import { ProductionStatsEventScreen } from '#/core/analytics';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { isValidHeight, validator } from '#/core/validator';
import { Widget, WidgetEvents } from '#/core/widget';
-import { WidgetState } from '#/core/widget/types';
+import { WidgetError, WidgetErrorCode, WidgetState } from '#/core/widget/types';
import { Languages, Scheme } from '#/types';
-import { AgreementsDialog } from '#/widgets/agreementsDialog/agreementsDialog';
-import { AgreementsDialogPublicEvents } from '#/widgets/agreementsDialog/events';
+import { RedirectPayload } from '#/utils/url';
+import { AgreementsDialog, AgreementsDialogBridgeMessage, AgreementsDialogPublicEvents } from '#/widgets/agreementsDialog';
+import { AgreementsDialogStatsFlowSource } from '#/widgets/agreementsDialog/types';
import { OAuthList, OAuthListParams, OAuthName } from '#/widgets/oauthList';
+import { OneTapStatsButtonType, OneTapStatsCollector } from './analytics';
import { OneTapInternalEvents } from './events';
import { getOneTapTemplate } from './template';
-import { OneTapParams, OneTapStyles } from './types';
+import { OneTapBridgeFullAuthParams, OneTapBridgeMessage, OneTapParams, OneTapStyles } from './types';
const defaultStylesParams: Required = {
width: 0,
@@ -22,27 +24,47 @@ const defaultStylesParams: Required = {
const BUTTON_SPACING = 12;
export class OneTap extends Widget {
+ private readonly analytics: OneTapStatsCollector;
protected vkidAppName = 'button_one_tap_auth';
+ private statsBtnType: OneTapStatsButtonType | null = null;
- protected onBridgeMessageHandler(event: BridgeMessage) {
+ public constructor() {
+ super();
+ this.analytics = new OneTapStatsCollector(OneTap.config);
+ }
+
+ private readonly setStatsButtonType = (type: OneTapStatsButtonType) => {
+ if (!this.statsBtnType) {
+ this.statsBtnType = type;
+ }
+ }
+
+ protected onBridgeMessageHandler(event: OneTapBridgeMessage) {
switch (event.handler) {
// TODO: hidePreloadButton на событие ошибки
case OneTapInternalEvents.LOGIN_SUCCESS: {
- this.redirectWithPayload(event.params);
+ const params = event.params as RedirectPayload;
+ this.redirectWithPayload(params);
break;
}
case OneTapInternalEvents.SHOW_FULL_AUTH: {
- const params: Partial = {};
- if (event.params.screen) {
- params.screen = event.params.screen;
+ const params = event.params as OneTapBridgeFullAuthParams;
+ const authParams: Partial = {};
+
+ if (params.screen) {
+ authParams.screen = params.screen;
+ authParams.statsFlowSource = AuthStatsFlowSource.BUTTON_ONE_TAP_ALTERNATIVE;
}
- if (event.params.sdk_oauth) {
- params.action = { name: 'sdk_oauth', params: { oauth: event.params.sdk_oauth } };
+
+ if (params.sdk_oauth) {
+ authParams.provider = params.sdk_oauth;
}
- this.openFullAuth(params);
+
+ this.openFullAuth(authParams);
break;
}
case OneTapInternalEvents.NOT_AUTHORIZED: {
+ this.analytics.sendNoSessionFound();
this.setState(WidgetState.NOT_LOADED);
clearTimeout(this.timeoutTimer);
this.elements?.iframe?.remove();
@@ -58,15 +80,21 @@ export class OneTap extends Widget {
}
}
}
+ protected onErrorHandler(error: WidgetError) {
+ this.statsBtnType && this.analytics.sendOneTapButtonNoUserShow(this.statsBtnType);
+ this.analytics.sendFrameLoadingFailed();
+ super.onErrorHandler(error);
+ }
private createAgreementsDialogWidget() {
const params = {
container: document.body,
- lang: this.lang,
+ lang_id: this.lang,
scheme: this.scheme,
+ stats_flow_source: AgreementsDialogStatsFlowSource.BUTTON_ONE_TAP,
};
const agreementsDialog = new AgreementsDialog();
- const acceptHandler = (event: BridgeMessage) => {
+ const acceptHandler = (event: AgreementsDialogBridgeMessage) => {
this.bridge.sendMessage({
handler: OneTapInternalEvents.START_AUTHORIZE,
params: event.params,
@@ -81,11 +109,26 @@ export class OneTap extends Widget {
private openFullAuth(value?: AuthParams) {
const params = {
+ statsFlowSource: AuthStatsFlowSource.BUTTON_ONE_TAP,
...value,
lang: this.lang,
scheme: this.scheme,
};
- OneTap.__auth.login(params);
+
+ OneTap.auth.login(params)
+ .catch((error: AuthError) => {
+ this.events.emit(WidgetEvents.ERROR, {
+ code: WidgetErrorCode.AuthError,
+ text: error.error,
+ });
+ });
+ }
+
+ private login(value?: AuthParams) {
+ this.statsBtnType && this.analytics.sendOneTapButtonNoUserTap(this.statsBtnType)
+ .finally(() => {
+ this.openFullAuth(value);
+ });
}
private renderOAuthList(params: OAuthListParams) {
@@ -93,7 +136,10 @@ export class OneTap extends Widget {
return;
}
const oauthList = new OAuthList();
- oauthList.render(params);
+ oauthList.render({
+ ...params,
+ flowSource: ProductionStatsEventScreen.NOWHERE,
+ });
}
@validator({ styles: [isValidHeight] })
@@ -112,17 +158,19 @@ export class OneTap extends Widget {
providers: providers.join(','),
};
+ this.analytics.sendSdkInit();
this.templateRenderer = getOneTapTemplate({
width: params.styles?.width || defaultStylesParams.width,
iframeHeight: oneTapParams.show_alternative_login ? oneTapParams.style_height * 2 + BUTTON_SPACING : oneTapParams.style_height,
height: oneTapParams.style_height,
borderRadius: oneTapParams.style_border_radius,
- openFullAuth: this.openFullAuth.bind(this),
+ login: this.login.bind(this),
skin: oneTapParams.button_skin,
scheme: oneTapParams.scheme,
lang: oneTapParams.lang_id,
renderOAuthList: this.renderOAuthList.bind(this),
providers,
+ setStatsButtonType: this.setStatsButtonType.bind(this),
});
return super.render({ container: params.container, ...oneTapParams });
diff --git a/src/widgets/oneTap/template.ts b/src/widgets/oneTap/template.ts
index 9969f8c..100a5d8 100644
--- a/src/widgets/oneTap/template.ts
+++ b/src/widgets/oneTap/template.ts
@@ -7,13 +7,15 @@ import { getButtonFontSize, getButtonLogoSize, getButtonPadding } from '#/utils/
import { OAuthListParams, OAuthName } from '#/widgets/oauthList';
import { longLang, providerLang, shortLang } from '#/widgets/oneTap/lang';
+import { OneTapStatsButtonType } from './analytics';
import { OneTapParams, OneTapStyles } from './types';
type OneTapTemplateParams = Required & Pick & Pick & {
- openFullAuth?: void;
+ login?: VoidFunction;
iframeHeight?: number;
renderOAuthList: (params: OAuthListParams) => void;
providers?: OAuthName[];
+ setStatsButtonType: (type: OneTapStatsButtonType) => void;
};
const logoSvg = `
@@ -34,12 +36,13 @@ export const getOneTapTemplate = ({
height,
iframeHeight,
borderRadius,
- openFullAuth,
+ login,
skin,
scheme,
lang = Languages.RUS,
renderOAuthList,
providers,
+ setStatsButtonType,
}: OneTapTemplateParams) => (id: string) => {
let textIconLimit = 0;
let textLongLimit = 0;
@@ -61,7 +64,7 @@ export const getOneTapTemplate = ({
}, 100);
buttonEl.classList.add(`VkIdWebSdk__button_${id}`);
buttonEl.classList.add(`VkIdWebSdk__button_reset_${id}`);
- openFullAuth && (buttonEl.onclick = openFullAuth);
+ login && (buttonEl.onclick = login);
const btnInEl = document.createElement('span');
btnInEl.classList.add(`VkIdWebSdk__button_in_${id}`);
@@ -105,6 +108,7 @@ export const getOneTapTemplate = ({
const containerWidth = containerEl.clientWidth;
if (hasTextContainer && containerWidth < textIconLimit) {
+ setStatsButtonType('icon');
buttonEl.setAttribute('style', `width: ${height}px;`);
textContainerEl.remove();
spinnerEl.remove();
@@ -137,6 +141,8 @@ export const getOneTapTemplate = ({
textContainerEl.appendChild(textLongEl);
}, ANIMATION_TIMEOUT);
}
+
+ setStatsButtonType('default');
};
const observer = new ResizeObserver(debounce(observeCallback, 500));
observer.observe(containerEl);
diff --git a/src/widgets/oneTap/types.ts b/src/widgets/oneTap/types.ts
index 5bbba7f..e29babf 100644
--- a/src/widgets/oneTap/types.ts
+++ b/src/widgets/oneTap/types.ts
@@ -1,6 +1,10 @@
-import { WidgetParams } from '#/core/widget';
+import { BridgeMessage } from '#/core/bridge';
+import { WidgetEvents, WidgetParams } from '#/core/widget';
+import { RedirectPayload } from '#/utils/url';
import { OAuthName } from '#/widgets/oauthList';
+import { OneTapInternalEvents } from './events';
+
export interface OneTapStyles {
/**
* Ширина кнопки
@@ -39,3 +43,15 @@ export interface OneTapParams extends WidgetParams {
*/
oauthList?: OAuthName[];
}
+
+export interface OneTapBridgeFullAuthParams {
+ uuid: string;
+ screen?: string;
+ sdk_oauth?: OAuthName;
+}
+
+type OneTapBridgeParams = OneTapBridgeFullAuthParams | RedirectPayload;
+type OneTapEvents = OneTapInternalEvents | WidgetEvents;
+
+export type OneTapBridgeMessage = BridgeMessage;
+
diff --git a/yarn.lock b/yarn.lock
index af9f7f3..5e1122d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -364,6 +364,38 @@
resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a"
integrity sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==
+"@gitbeaker/core@^35.8.1":
+ version "35.8.1"
+ resolved "https://registry.yarnpkg.com/@gitbeaker/core/-/core-35.8.1.tgz#b4ce2d08d344ff50e76c38ff81b800bec6dfe851"
+ integrity sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA==
+ dependencies:
+ "@gitbeaker/requester-utils" "^35.8.1"
+ form-data "^4.0.0"
+ li "^1.3.0"
+ mime "^3.0.0"
+ query-string "^7.0.0"
+ xcase "^2.0.1"
+
+"@gitbeaker/node@^35.8.1":
+ version "35.8.1"
+ resolved "https://registry.yarnpkg.com/@gitbeaker/node/-/node-35.8.1.tgz#d67885c827f2d7405afd7e39538a230721756e5c"
+ integrity sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g==
+ dependencies:
+ "@gitbeaker/core" "^35.8.1"
+ "@gitbeaker/requester-utils" "^35.8.1"
+ delay "^5.0.0"
+ got "^11.8.3"
+ xcase "^2.0.1"
+
+"@gitbeaker/requester-utils@^35.8.1":
+ version "35.8.1"
+ resolved "https://registry.yarnpkg.com/@gitbeaker/requester-utils/-/requester-utils-35.8.1.tgz#f345cdd05abd4169cfcd239d202db6283eb17dc8"
+ integrity sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==
+ dependencies:
+ form-data "^4.0.0"
+ qs "^6.10.1"
+ xcase "^2.0.1"
+
"@humanwhocodes/config-array@^0.11.8":
version "0.11.8"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
@@ -898,6 +930,107 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@octokit/auth-token@^2.4.4":
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36"
+ integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+
+"@octokit/core@^3.5.1":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085"
+ integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==
+ dependencies:
+ "@octokit/auth-token" "^2.4.4"
+ "@octokit/graphql" "^4.5.8"
+ "@octokit/request" "^5.6.3"
+ "@octokit/request-error" "^2.0.5"
+ "@octokit/types" "^6.0.3"
+ before-after-hook "^2.2.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/endpoint@^6.0.1":
+ version "6.0.12"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658"
+ integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ is-plain-object "^5.0.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/graphql@^4.5.8":
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3"
+ integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==
+ dependencies:
+ "@octokit/request" "^5.6.0"
+ "@octokit/types" "^6.0.3"
+ universal-user-agent "^6.0.0"
+
+"@octokit/openapi-types@^12.11.0":
+ version "12.11.0"
+ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0"
+ integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==
+
+"@octokit/plugin-paginate-rest@^2.16.8":
+ version "2.21.3"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e"
+ integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==
+ dependencies:
+ "@octokit/types" "^6.40.0"
+
+"@octokit/plugin-request-log@^1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"
+ integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==
+
+"@octokit/plugin-rest-endpoint-methods@^5.12.0":
+ version "5.16.2"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342"
+ integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==
+ dependencies:
+ "@octokit/types" "^6.39.0"
+ deprecation "^2.3.1"
+
+"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677"
+ integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ deprecation "^2.0.0"
+ once "^1.4.0"
+
+"@octokit/request@^5.6.0", "@octokit/request@^5.6.3":
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0"
+ integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==
+ dependencies:
+ "@octokit/endpoint" "^6.0.1"
+ "@octokit/request-error" "^2.1.0"
+ "@octokit/types" "^6.16.1"
+ is-plain-object "^5.0.0"
+ node-fetch "^2.6.7"
+ universal-user-agent "^6.0.0"
+
+"@octokit/rest@^16.43.0 || ^17.11.0 || ^18.12.0", "@octokit/rest@^18.12.0":
+ version "18.12.0"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881"
+ integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==
+ dependencies:
+ "@octokit/core" "^3.5.1"
+ "@octokit/plugin-paginate-rest" "^2.16.8"
+ "@octokit/plugin-request-log" "^1.0.4"
+ "@octokit/plugin-rest-endpoint-methods" "^5.12.0"
+
+"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0":
+ version "6.41.0"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04"
+ integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==
+ dependencies:
+ "@octokit/openapi-types" "^12.11.0"
+
"@rollup/plugin-commonjs@^25.0.4":
version "25.0.4"
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz#a7547a0c4ec3fa79818eb313e1de0023e548f4e6"
@@ -957,6 +1090,11 @@
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+"@sindresorhus/is@^4.0.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+ integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
"@sinonjs/commons@^1.7.0":
version "1.8.6"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9"
@@ -1073,6 +1211,13 @@
resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.4.tgz#8d647e111dc97a8e2881bf71c2ee2d011698ff10"
integrity sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==
+"@szmarczak/http-timer@^4.0.5":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+ integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+ dependencies:
+ defer-to-connect "^2.0.0"
+
"@tootallnate/once@2":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
@@ -1141,6 +1286,16 @@
dependencies:
"@babel/types" "^7.20.7"
+"@types/cacheable-request@^6.0.1":
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+ integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+ dependencies:
+ "@types/http-cache-semantics" "*"
+ "@types/keyv" "^3.1.4"
+ "@types/node" "*"
+ "@types/responselike" "^1.0.0"
+
"@types/crypto-js@^4.1.1":
version "4.1.1"
resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d"
@@ -1165,6 +1320,11 @@
dependencies:
"@types/node" "*"
+"@types/http-cache-semantics@*":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
+ integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
@@ -1216,6 +1376,13 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/keyv@^3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+ integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+ dependencies:
+ "@types/node" "*"
+
"@types/node@*":
version "20.2.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb"
@@ -1251,6 +1418,13 @@
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
+"@types/responselike@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
+ integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
+ dependencies:
+ "@types/node" "*"
+
"@types/semver@^7.3.12":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
@@ -1667,6 +1841,13 @@ astral-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+async-retry@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0"
+ integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==
+ dependencies:
+ retry "0.12.0"
+
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -1742,6 +1923,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+before-after-hook@^2.2.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c"
+ integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
+
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -1813,6 +1999,11 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+ integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
+
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -1823,6 +2014,24 @@ builtin-modules@^3.3.0:
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+cacheable-lookup@^5.0.3:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+ integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
+ integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^4.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^6.0.1"
+ responselike "^2.0.0"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -1866,7 +2075,7 @@ caniuse-lite@^1.0.30001489:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001491.tgz#eab0e0f392de6f7411751d148de9b5bd6b203e46"
integrity sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA==
-chalk@^2.0.0:
+chalk@^2.0.0, chalk@^2.3.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -1950,6 +2159,13 @@ cliui@^8.0.1:
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
+clone-response@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+ integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
+ dependencies:
+ mimic-response "^1.0.0"
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -1994,6 +2210,11 @@ colorette@^2.0.16:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+colors@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -2001,6 +2222,11 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
+commander@^2.18.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@@ -2046,6 +2272,11 @@ convert-source-map@^2.0.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+core-js@^3.8.2:
+ version "3.36.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68"
+ integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==
+
cosmiconfig@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
@@ -2293,6 +2524,50 @@ cssstyle@^2.3.0:
dependencies:
cssom "~0.3.6"
+danger@^11.3.1:
+ version "11.3.1"
+ resolved "https://registry.yarnpkg.com/danger/-/danger-11.3.1.tgz#9df659fb58c15a82d9880231ba3f676c934e565d"
+ integrity sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==
+ dependencies:
+ "@gitbeaker/core" "^35.8.1"
+ "@gitbeaker/node" "^35.8.1"
+ "@octokit/rest" "^18.12.0"
+ async-retry "1.2.3"
+ chalk "^2.3.0"
+ commander "^2.18.0"
+ core-js "^3.8.2"
+ debug "^4.1.1"
+ fast-json-patch "^3.0.0-1"
+ get-stdin "^6.0.0"
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.1"
+ hyperlinker "^1.0.0"
+ json5 "^2.1.0"
+ jsonpointer "^5.0.0"
+ jsonwebtoken "^9.0.0"
+ lodash.find "^4.6.0"
+ lodash.includes "^4.3.0"
+ lodash.isobject "^3.0.2"
+ lodash.keys "^4.0.8"
+ lodash.mapvalues "^4.6.0"
+ lodash.memoize "^4.1.2"
+ memfs-or-file-map-to-github-branch "^1.2.1"
+ micromatch "^4.0.4"
+ node-cleanup "^2.1.2"
+ node-fetch "^2.6.7"
+ override-require "^1.1.1"
+ p-limit "^2.1.0"
+ parse-diff "^0.7.0"
+ parse-git-config "^2.0.3"
+ parse-github-url "^1.0.2"
+ parse-link-header "^2.0.0"
+ pinpoint "^1.1.0"
+ prettyjson "^1.2.1"
+ readline-sync "^1.4.9"
+ regenerator-runtime "^0.13.9"
+ require-from-string "^2.0.2"
+ supports-hyperlinks "^1.0.1"
+
data-urls@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
@@ -2333,6 +2608,13 @@ decode-uri-component@^0.2.2:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
@@ -2348,6 +2630,11 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+defer-to-connect@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+ integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
@@ -2356,11 +2643,21 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+delay@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d"
+ integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+deprecation@^2.0.0, deprecation@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
+ integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+
detect-newline@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -2469,6 +2766,13 @@ eastasianwidth@^0.2.0:
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+ecdsa-sig-formatter@1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
+ integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
electron-to-chromium@^1.4.411:
version "1.4.414"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz#f9eedb6fb01b50439d8228d8ee3a6fa5e0108437"
@@ -2494,6 +2798,13 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
enhanced-resolve@^5.0.0:
version "5.14.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3"
@@ -2819,6 +3130,13 @@ exit@^0.1.2:
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
expect@^28.0.0, expect@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec"
@@ -2842,6 +3160,13 @@ expect@^29.6.2:
jest-message-util "^29.6.2"
jest-util "^29.6.2"
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -2858,6 +3183,11 @@ fast-glob@^3.2.9:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-json-patch@^3.0.0-1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947"
+ integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==
+
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -2951,6 +3281,11 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+fs-exists-sync@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
+ integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==
+
fs-extra@^10.0.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@@ -3038,6 +3373,18 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
get-stream@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@@ -3058,6 +3405,15 @@ get-tsconfig@^4.6.2:
dependencies:
resolve-pkg-maps "^1.0.0"
+git-config-path@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664"
+ integrity sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ fs-exists-sync "^0.1.0"
+ homedir-polyfill "^1.0.0"
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -3142,6 +3498,23 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
+got@^11.8.3:
+ version "11.8.6"
+ resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+ integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+ dependencies:
+ "@sindresorhus/is" "^4.0.0"
+ "@szmarczak/http-timer" "^4.0.5"
+ "@types/cacheable-request" "^6.0.1"
+ "@types/responselike" "^1.0.0"
+ cacheable-lookup "^5.0.3"
+ cacheable-request "^7.0.2"
+ decompress-response "^6.0.0"
+ http2-wrapper "^1.0.0-beta.5.2"
+ lowercase-keys "^2.0.0"
+ p-cancelable "^2.0.0"
+ responselike "^2.0.0"
+
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
@@ -3157,6 +3530,11 @@ has-bigints@^1.0.1, has-bigints@^1.0.2:
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+ integrity sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -3198,6 +3576,13 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
html-encoding-sniffer@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
@@ -3210,6 +3595,11 @@ html-escaper@^2.0.0:
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+http-cache-semantics@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+ integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
http-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
@@ -3219,7 +3609,15 @@ http-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
-https-proxy-agent@^5.0.0:
+http2-wrapper@^1.0.0-beta.5.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+ integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+ dependencies:
+ quick-lru "^5.1.1"
+ resolve-alpn "^1.0.0"
+
+https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
@@ -3237,6 +3635,11 @@ husky@^8.0.3:
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
+hyperlinker@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e"
+ integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==
+
iconv-lite@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
@@ -3376,6 +3779,11 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
+is-extendable@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -3430,6 +3838,11 @@ is-path-inside@^3.0.3:
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+is-plain-object@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+
is-potential-custom-element-name@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
@@ -4208,6 +4621,11 @@ jsesc@^2.5.1:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -4230,7 +4648,7 @@ json5@^1.0.2:
dependencies:
minimist "^1.2.0"
-json5@^2.2.1, json5@^2.2.2:
+json5@^2.1.0, json5@^2.2.1, json5@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
@@ -4256,6 +4674,51 @@ jsonfile@^6.0.1:
optionalDependencies:
graceful-fs "^4.1.6"
+jsonpointer@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
+ integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
+
+jsonwebtoken@^9.0.0:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
+ integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
+ dependencies:
+ jws "^3.2.2"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.1.1"
+ semver "^7.5.4"
+
+jwa@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
+ integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
+ dependencies:
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jws@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
+ integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
+ dependencies:
+ jwa "^1.4.1"
+ safe-buffer "^5.0.1"
+
+keyv@^4.0.0:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
@@ -4287,6 +4750,11 @@ levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+li@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b"
+ integrity sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==
+
lilconfig@2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25"
@@ -4365,6 +4833,56 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
+lodash.find@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
+ integrity sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==
+
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+ integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+ integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+ integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
+
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+ integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
+
+lodash.isobject@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"
+ integrity sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+ integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
+
+lodash.keys@^4.0.8:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205"
+ integrity sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==
+
+lodash.mapvalues@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
+ integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==
+
lodash.memoize@4.x, lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -4375,6 +4893,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
+
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
@@ -4395,6 +4918,11 @@ log-update@^4.0.0:
slice-ansi "^4.0.0"
wrap-ansi "^6.2.0"
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
@@ -4467,6 +4995,13 @@ mdn-data@2.0.30:
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+memfs-or-file-map-to-github-branch@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/memfs-or-file-map-to-github-branch/-/memfs-or-file-map-to-github-branch-1.2.1.tgz#fdb9a85408262316a9bd5567409bf89be7d72f96"
+ integrity sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==
+ dependencies:
+ "@octokit/rest" "^16.43.0 || ^17.11.0 || ^18.12.0"
+
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -4497,7 +5032,7 @@ mime-types@^2.1.12, mime-types@^2.1.34:
dependencies:
mime-db "1.52.0"
-mime@>=2.4.6:
+mime@>=2.4.6, mime@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
@@ -4512,6 +5047,16 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+mimic-response@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -4563,6 +5108,11 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+node-cleanup@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c"
+ integrity sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==
+
node-fetch@^2.6.11:
version "2.6.11"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
@@ -4570,6 +5120,13 @@ node-fetch@^2.6.11:
dependencies:
whatwg-url "^5.0.0"
+node-fetch@^2.6.7:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+ integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -4648,7 +5205,7 @@ object.values@^1.1.6:
define-properties "^1.1.4"
es-abstract "^1.20.4"
-once@^1.3.0:
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@@ -4696,12 +5253,22 @@ optionator@^0.9.1:
resolved "https://registry.yarnpkg.com/opts/-/opts-2.0.2.tgz#a17e189fbbfee171da559edd8a42423bc5993ce1"
integrity sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==
+override-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df"
+ integrity sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==
+
+p-cancelable@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+ integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-p-limit@^2.2.0:
+p-limit@^2.1.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -4763,6 +5330,25 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+parse-diff@^0.7.0:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4"
+ integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==
+
+parse-git-config@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-2.0.3.tgz#6fb840d4a956e28b971c97b33a5deb73a6d5b6bb"
+ integrity sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==
+ dependencies:
+ expand-tilde "^2.0.2"
+ git-config-path "^1.0.1"
+ ini "^1.3.5"
+
+parse-github-url@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395"
+ integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==
+
parse-json@^5.0.0, parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -4773,6 +5359,18 @@ parse-json@^5.0.0, parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-link-header@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-2.0.0.tgz#949353e284f8aa01f2ac857a98f692b57733f6b7"
+ integrity sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==
+ dependencies:
+ xtend "~4.0.1"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
@@ -4818,6 +5416,11 @@ pidtree@^0.5.0:
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1"
integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==
+pinpoint@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874"
+ integrity sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==
+
pirates@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
@@ -5311,6 +5914,14 @@ pretty-format@^29.6.2:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+prettyjson@^1.2.1:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.5.tgz#ef3cfffcc70505c032abc59785884b4027031835"
+ integrity sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==
+ dependencies:
+ colors "1.4.0"
+ minimist "^1.2.0"
+
promise-polyfill@^8.1.3:
version "8.3.0"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.3.0.tgz#9284810268138d103807b11f4e23d5e945a4db63"
@@ -5329,12 +5940,27 @@ psl@^1.1.33:
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
punycode@^2.1.0, punycode@^2.1.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
-query-string@^7.1.0:
+qs@^6.10.1:
+ version "6.11.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
+ integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
+ dependencies:
+ side-channel "^1.0.4"
+
+query-string@^7.0.0, query-string@^7.1.0:
version "7.1.3"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328"
integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==
@@ -5354,6 +5980,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
@@ -5366,6 +5997,16 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+readline-sync@^1.4.9:
+ version "1.4.10"
+ resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b"
+ integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==
+
+regenerator-runtime@^0.13.9:
+ version "0.13.11"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+ integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
regenerator-runtime@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
@@ -5390,6 +6031,11 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
requireindex@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
@@ -5405,6 +6051,11 @@ resize-observer-polyfill@^1.5.1:
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+resolve-alpn@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+ integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
@@ -5455,6 +6106,13 @@ resolve@^1.21.0, resolve@^1.22.2:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+responselike@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+ integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+ dependencies:
+ lowercase-keys "^2.0.0"
+
restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
@@ -5463,6 +6121,11 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
+retry@0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -5480,6 +6143,11 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
+rollup-plugin-analyzer@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-analyzer/-/rollup-plugin-analyzer-4.0.0.tgz#96b757ed64a098b59d72f085319e68cdd86d5798"
+ integrity sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==
+
rollup-plugin-generate-html-template@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/rollup-plugin-generate-html-template/-/rollup-plugin-generate-html-template-1.7.0.tgz#f0a4c29cef054d038efd07738efa36d287b1c7da"
@@ -5577,6 +6245,11 @@ rxjs@^7.5.5, rxjs@^7.8.1:
dependencies:
tslib "^2.1.0"
+safe-buffer@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
safe-regex-test@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
@@ -5617,6 +6290,13 @@ semver@^7.5.3:
dependencies:
lru-cache "^6.0.0"
+semver@^7.5.4:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -5869,7 +6549,7 @@ stylehacks@^6.0.0:
browserslist "^4.21.4"
postcss-selector-parser "^6.0.4"
-supports-color@^5.3.0:
+supports-color@^5.0.0, supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
@@ -5895,6 +6575,14 @@ supports-color@^9.2.2:
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.3.1.tgz#34e4ad3c71c9a39dae3254ecc46c9b74e89e15a6"
integrity sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==
+supports-hyperlinks@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7"
+ integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==
+ dependencies:
+ has-flag "^2.0.0"
+ supports-color "^5.0.0"
+
supports-hyperlinks@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
@@ -6176,6 +6864,11 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
+universal-user-agent@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa"
+ integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==
+
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -6398,6 +7091,11 @@ ws@^8.2.3:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+xcase@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/xcase/-/xcase-2.0.1.tgz#c7fa72caa0f440db78fd5673432038ac984450b9"
+ integrity sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==
+
xml-name-validator@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
@@ -6413,6 +7111,11 @@ xmlcreate@^1.0.1:
resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f"
integrity sha512-Mbe56Dvj00onbnSo9J0qj/XlY5bfN9KidsOnpd5tRCsR3ekB3hyyNU9fGrTdqNT5ZNvv4BsA2TcQlignsZyVcw==
+xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
Новая вкладка была закрыта
+