@ngx-rock/yandex-smart-captcha 17.0.1 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/README_RU.md +0 -235
package/package.json
CHANGED
package/README_RU.md
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
# Angular Yandex Smart Captcha
|
|
2
|
-
|
|
3
|
-
[](https://badge.fury.io/js/@ngx-rock%2Fyandex-smart-captcha) [](https://github.com/ngx-rock/memoize-pipe/blob/main/LICENSE)
|
|
4
|
-
|
|
5
|
-
Angular библиотека для интеграции Yandex SmartCaptcha в ваше приложение. Пакет предоставляет Angular-компоненты-обертки для JavaScript библиотеки Yandex SmartCaptcha, поддерживая как стандартный, так и невидимый режим работы.
|
|
6
|
-
Компоненты реализуют интерфейсы `ControlValueAccessor` и `Validator` для интеграции с реактивными формами Angular, а также используют современные возможности Angular (сигналы и эффекты) для работы в `zoneless` режиме.
|
|
7
|
-
|
|
8
|
-
> **Примечание:** Документация основана на концепциях [Yandex SmartCaptcha для React](https://yandex.cloud/en-ru/docs/smartcaptcha/concepts/react?utm_referrer=about%3Ablank) и адаптирована под особенности Angular.
|
|
9
|
-
|
|
10
|
-
## Установка
|
|
11
|
-
|
|
12
|
-
Установите пакет через npm:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
npm install @ngx-rock/yandex-smart-captcha
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Компоненты
|
|
19
|
-
|
|
20
|
-
Библиотека предоставляет два основных standalone-компонента:
|
|
21
|
-
|
|
22
|
-
- **SmartCaptchaComponent**: Стандартный компонент Yandex SmartCaptcha.
|
|
23
|
-
- **InvisibleSmartCaptchaComponent**: Расширение компонента SmartCaptchaComponent, настроенное для невидимого режима (invisible captcha).
|
|
24
|
-
|
|
25
|
-
Оба компонента реализуют интерфейсы `ControlValueAccessor` и `Validator`, что обеспечивает лёгкую интеграцию с реактивными формами Angular.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Использование
|
|
30
|
-
|
|
31
|
-
### Импорт компонента
|
|
32
|
-
|
|
33
|
-
Так как компоненты являются standalone, вы можете напрямую импортировать их в модуль или компонент вашего приложения:
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
import { SmartCaptchaComponent } from '@ngx-rock/yandex-smart-captcha';
|
|
37
|
-
// либо для невидимого капчи
|
|
38
|
-
import { InvisibleSmartCaptchaComponent } from '@ngx-rock/yandex-smart-captcha';
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Пример шаблона (Стандартная капча)
|
|
42
|
-
|
|
43
|
-
```html
|
|
44
|
-
<form [formGroup]="form">
|
|
45
|
-
<smart-captcha
|
|
46
|
-
formControlName="captcha"
|
|
47
|
-
[sitekey]="'YOUR_SITE_KEY'"
|
|
48
|
-
[theme]="'light'"
|
|
49
|
-
[language]="'ru'"
|
|
50
|
-
(challengeVisible)="onChallengeVisible()"
|
|
51
|
-
(challengeHidden)="onChallengeHidden()"
|
|
52
|
-
(success)="onSuccess($event)"
|
|
53
|
-
(networkError)="onNetworkError()"
|
|
54
|
-
(tokenExpired)="onTokenExpired()"
|
|
55
|
-
(javascriptError)="onJavascriptError($event)"
|
|
56
|
-
></smart-captcha>
|
|
57
|
-
|
|
58
|
-
<button type="submit" [disabled]="form.invalid">Отправить</button>
|
|
59
|
-
</form>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Пример шаблона (Невидимая капча)
|
|
63
|
-
|
|
64
|
-
```html
|
|
65
|
-
<form [formGroup]="form">
|
|
66
|
-
<invisible-smart-captcha
|
|
67
|
-
formControlName="captcha"
|
|
68
|
-
[sitekey]="'YOUR_SITE_KEY'"
|
|
69
|
-
[theme]="'dark'"
|
|
70
|
-
[language]="'ru'"
|
|
71
|
-
(challengeVisible)="onChallengeVisible()"
|
|
72
|
-
(challengeHidden)="onChallengeHidden()"
|
|
73
|
-
(success)="onSuccess($event)"
|
|
74
|
-
(networkError)="onNetworkError()"
|
|
75
|
-
(tokenExpired)="onTokenExpired()"
|
|
76
|
-
(javascriptError)="onJavascriptError($event)"
|
|
77
|
-
></invisible-smart-captcha>
|
|
78
|
-
|
|
79
|
-
<button type="submit" [disabled]="form.invalid">Отправить</button>
|
|
80
|
-
</form>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## API Компонента
|
|
86
|
-
|
|
87
|
-
### Входные параметры (Inputs)
|
|
88
|
-
|
|
89
|
-
#### Общие (для обоих компонентов)
|
|
90
|
-
- **sitekey** (`string`, **обязательный**): Ваш ключ сайта для Yandex SmartCaptcha.
|
|
91
|
-
- **theme** (`'light' | 'dark'`, по умолчанию: `'light'`): Визуальная тема капчи.
|
|
92
|
-
- **language** (`string`): Локаль для отображения капчи (например, `'ru'` или `'en'`).
|
|
93
|
-
- **test** (`boolean`): Включает тестовый режим для разработки.
|
|
94
|
-
- **webview** (`boolean`): Включает специальное поведение для вебвью.
|
|
95
|
-
|
|
96
|
-
#### Специфичные
|
|
97
|
-
- **invisible** (`boolean`):
|
|
98
|
-
- **SmartCaptchaComponent**: Определяет, работает ли капча в невидимом режиме.
|
|
99
|
-
- **InvisibleSmartCaptchaComponent**: Всегда имеет значение `true`.
|
|
100
|
-
- **visible** (`boolean`): Триггер для выполнения невидимой капчи при изменении.
|
|
101
|
-
- **hideShield** (`boolean`): Опция для скрытия блока уведомления об обработке данных.
|
|
102
|
-
- **shieldPosition** (`'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'`): Позиция блока, если он отображается.
|
|
103
|
-
|
|
104
|
-
### Исходящие события (Outputs)
|
|
105
|
-
|
|
106
|
-
- **challengeVisible**: Событие, возникающее при отображении капчи.
|
|
107
|
-
- **challengeHidden**: Событие, возникающее при скрытии капчи.
|
|
108
|
-
- **success**: Событие, которое передаёт токен капчи при успешном прохождении проверки.
|
|
109
|
-
- **networkError**: Событие, возникающее при ошибке загрузки капчи (сетевая ошибка).
|
|
110
|
-
- **tokenExpired**: Событие, возникающее при истечении срока действия полученного токена.
|
|
111
|
-
- **javascriptError**: Событие, передающее информацию об ошибке, возникшей в JavaScript капчи.
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Как это работает
|
|
116
|
-
|
|
117
|
-
1. **Загрузка скрипта и инициализация**
|
|
118
|
-
Компонент динамически создаёт и добавляет элемент `<script>` для загрузки API Yandex SmartCaptcha. Глобальный колбэк гарантирует, что капча будет отрисована сразу после загрузки скрипта.
|
|
119
|
-
|
|
120
|
-
2. **Отрисовка капчи**
|
|
121
|
-
После загрузки API компонент отрисовывает капчу в контейнере, указанном в шаблоне. Конфигурационные параметры (например, sitekey, тема, язык) передаются в экземпляр Yandex SmartCaptcha.
|
|
122
|
-
|
|
123
|
-
3. **Обработка событий и подписки**
|
|
124
|
-
Компонент устанавливает подписки на различные события (например, отображение/скрытие, успешное прохождение проверки, сетевые ошибки) и эмиттирует соответствующие Angular-события. Это позволяет добавлять пользовательскую логику на каждом этапе жизненного цикла.
|
|
125
|
-
|
|
126
|
-
4. **Валидация и доступ к значению**
|
|
127
|
-
После успешного прохождения капчи токен сохраняется во внутреннем состоянии и передается в Angular форму. Валидатор проверяет наличие токена (или откладывает валидацию для невидимой капчи до взаимодействия пользователя).
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## Пример компонента
|
|
132
|
-
|
|
133
|
-
Ниже приведён пример использования компонента с реактивной формой:
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
import { Component, OnInit } from '@angular/core';
|
|
137
|
-
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
138
|
-
|
|
139
|
-
@Component({
|
|
140
|
-
selector: 'app-captcha-form',
|
|
141
|
-
templateUrl: './captcha-form.component.html',
|
|
142
|
-
})
|
|
143
|
-
export class CaptchaFormComponent {
|
|
144
|
-
form: FormGroup;
|
|
145
|
-
|
|
146
|
-
constructor(private fb: FormBuilder) {
|
|
147
|
-
this.form = this.fb.group({
|
|
148
|
-
// Контрол для капчи будет хранить токен, возвращённый капчей
|
|
149
|
-
captcha: [null, Validators.required],
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
onChallengeVisible(): void {
|
|
154
|
-
console.log('Капча отображена');
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
onChallengeHidden(): void {
|
|
158
|
-
console.log('Капча скрыта');
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
onSuccess(token: string): void {
|
|
162
|
-
console.log('Капча пройдена, токен:', token);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
onNetworkError(): void {
|
|
166
|
-
console.error('Ошибка сети при загрузке капчи');
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
onTokenExpired(): void {
|
|
170
|
-
console.warn('Срок действия токена капчи истёк');
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
onJavascriptError(error: any): void {
|
|
174
|
-
console.error('Ошибка JavaScript в капче:', error);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
onSubmit(): void {
|
|
178
|
-
if (this.form.valid) {
|
|
179
|
-
// Обработка отправки формы
|
|
180
|
-
console.log('Форма отправлена с токеном капчи:', this.form.value.captcha);
|
|
181
|
-
} else {
|
|
182
|
-
console.error('Форма невалидна');
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Опции настройки
|
|
191
|
-
|
|
192
|
-
Вы можете настраивать различные параметры капчи, передавая соответствующие входные значения:
|
|
193
|
-
- **Тема (theme)**: Переключайтесь между `'light'` и `'dark'`.
|
|
194
|
-
- **Язык (language)**: Задавайте локаль с помощью параметра `language`.
|
|
195
|
-
- **Настройка уведомления об обработке данных.**: Определяйте видимость и позицию блока с помощью `hideShield` и `shieldPosition`.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Решение проблем
|
|
200
|
-
|
|
201
|
-
- **Ошибка неверного host**
|
|
202
|
-
Убедитесь, что значение параметра host соответствует необходимому формату (например, `domain.ru` или `localhost:3000`). Неверное значение приведёт к логированию ошибки и отмене отрисовки капчи.
|
|
203
|
-
|
|
204
|
-
- **Проблемы с загрузкой скрипта**
|
|
205
|
-
Проверьте, что ваша сеть позволяет доступ к API Yandex SmartCaptcha. Если скрипт не загружается, обратитесь к консоли браузера для получения подробной информации об ошибке.
|
|
206
|
-
|
|
207
|
-
- **Проблемы валидации формы**
|
|
208
|
-
Если контрол капчи остаётся невалидным, убедитесь, что пользователь взаимодействует с капчей (для невидимой капчи необходимо установить параметр `visible`).
|
|
209
|
-
|
|
210
|
-
---
|
|
211
|
-
|
|
212
|
-
## Вклад и развитие
|
|
213
|
-
|
|
214
|
-
Мы будем рады принять ваш вклад! Вы можете форкнуть репозиторий, внести изменения и отправить pull request. Если планируется серьёзное изменение, пожалуйста, сначала создайте issue для обсуждения.
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
## Лицензия
|
|
219
|
-
|
|
220
|
-
Распространяется под лицензией MIT.
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## Ссылки и источники
|
|
225
|
-
|
|
226
|
-
- [Документация Yandex SmartCaptcha (React)](https://yandex.cloud/en-ru/docs/smartcaptcha/concepts/react?utm_referrer=about%3Ablank)
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
Эта документация предоставляет полный гайд для разработчиков по интеграции Yandex SmartCaptcha в Angular приложения с использованием **@ngx-rock/yandex-smart-captcha**.
|
|
231
|
-
Наслаждайтесь безопасной и удобной интеграцией капчи в ваши проекты!
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
[English](README.md) | **[Русский](README_RU.md)**
|