npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ya-invisible-captcha-client

v1.2.0

Published

Лёгкий клиент для невидимой Яндекс.Каптчи с поддержкой форм и модальных окон. Поддерживает auto-init через data-атрибуты и гибкое встроение в DOM.

Readme

ya-invisible-captcha-client

Лёгкий TypeScript-клиент для невидимой Yandex SmartCaptcha: автоматически загружает скрипт капчи, рендерит invisible-widget, возвращает токен в callback и умеет подключаться к обычным HTML-формам через data-* атрибуты.

Возможности

  • invisible captcha по умолчанию;
  • автоинициализация форм через data-ya-captcha-form;
  • ручной контроль через execute(), reset() и destroy();
  • ESM, CommonJS, UMD/CDN и TypeScript-типы;
  • поддержка test, webview, shieldPosition, hideShield и языков Yandex SmartCaptcha;
  • примеры для Vanilla, Vite, React, Next.js, Vue, Nuxt, Svelte, Astro, Angular, Solid, Alpine.js и Web Components.

Установка

npm install ya-invisible-captcha-client
import YaInvisibleCaptcha from 'ya-invisible-captcha-client';

Для CDN/UMD:

<script src="https://unpkg.com/ya-invisible-captcha-client@latest/ya-invisible-captcha-client.umd.js"></script>

Быстрый старт: автоматическая форма

<form action="/api/contact" method="post" data-ya-captcha-form>
	<input name="email" type="email" required />
	<button type="submit">Отправить</button>
</form>

<script type="module">
	import YaInvisibleCaptcha from 'ya-invisible-captcha-client';

	YaInvisibleCaptcha.autoInit({
		sitekey: 'YANDEX_SMARTCAPTCHA_SITEKEY',
		tokenFieldName: 'smart-token',
		lang: 'ru',
	});
</script>

При первом submit пакет:

  1. создаст hidden input, если его нет;
  2. выполнит invisible captcha;
  3. положит токен в hidden input;
  4. отправит форму повторно через native form.submit().

Быстрый старт: ручной контроль

import YaInvisibleCaptcha from 'ya-invisible-captcha-client';

const form = document.querySelector<HTMLFormElement>('#contact-form');
const tokenInput = document.querySelector<HTMLInputElement>('[name="smart-token"]');

const captcha = new YaInvisibleCaptcha({
	sitekey: 'YANDEX_SMARTCAPTCHA_SITEKEY',
	lang: 'ru',
	callback: token => {
		if (!form || !tokenInput) return;
		tokenInput.value = token;
		form.submit();
	},
});

form?.addEventListener('submit', event => {
	event.preventDefault();
	captcha.execute();
});

API

new YaInvisibleCaptcha(config)

Создаёт invisible captcha widget и автоматически загружает Yandex SmartCaptcha script, если window.smartCaptcha ещё нет.

import YaInvisibleCaptcha, { type YaCaptchaConfig } from 'ya-invisible-captcha-client';

const config: YaCaptchaConfig = {
	sitekey: 'YANDEX_SMARTCAPTCHA_SITEKEY',
	callback: token => console.log(token),
	container: 'captcha-container',
	invisible: true,
	lang: 'ru',
	test: false,
	webview: false,
	shieldPosition: 'bottom-right',
	hideShield: false,
};

const captcha = new YaInvisibleCaptcha(config);

Методы инстанса

| Метод | Что делает | | --- | --- | | execute() | Запускает проверку. Если валидный токен уже получен и ещё не сброшен, повторно отдаёт cached token в callback. | | reset() | Очищает cached token и вызывает smartCaptcha.reset(widgetId). Используйте после отправки токена на backend. | | destroy() | Удаляет автоматически созданный hidden container и очищает внутренний widgetId. |

YaInvisibleCaptcha.autoInit(config)

Подключает captcha ко всем формам form[data-ya-captcha-form].

import YaInvisibleCaptcha, { type YaCaptchaAutoInitConfig } from 'ya-invisible-captcha-client';

const config: YaCaptchaAutoInitConfig = {
	sitekey: 'YANDEX_SMARTCAPTCHA_SITEKEY',
	tokenFieldName: 'smart-token',
	lang: 'ru',
	test: false,
};

YaInvisibleCaptcha.autoInit(config);

Конфигурация

| Поле | Тип | По умолчанию | Описание | | --- | --- | --- | --- | | sitekey | string | — | Ключ сайта из Yandex Cloud. | | callback | (token: string) => void | — | Только для ручного режима. Получает token. | | container | string \| HTMLElement | auto hidden div | Контейнер widget. Для invisible mode можно не задавать. | | invisible | boolean | true | Режим invisible captcha. | | debug | boolean | false | Логи диагностики. | | lang | 'ru' \| 'en' \| 'be' \| 'kk' \| 'tt' \| 'uk' \| 'uz' \| 'tr' | 'ru' | Язык widget. | | test | boolean | false | Тестовый режим Yandex SmartCaptcha. | | webview | boolean | false | Режим WebView. | | shieldPosition | top-left / center-left / bottom-left / top-right / center-right / bottom-right | Yandex default | Положение блока обработки данных. | | hideShield | boolean | false | Скрыть shield block, если это разрешено настройками Yandex. | | tokenFieldName | string | 'token' | Только для autoInit: name hidden input. |

Примеры для современных инструментов

См. docs/EXAMPLES.md:

  • Vanilla ESM и CDN/UMD;
  • Vite;
  • React;
  • Next.js App Router;
  • Vue 3;
  • Nuxt 3;
  • Svelte / SvelteKit;
  • Astro;
  • Angular;
  • Solid;
  • Alpine.js;
  • Web Components.

Готовые snippets лежат в examples/.

Backend-проверка токена

Frontend только получает token. Проверять token нужно на backend через Yandex SmartCaptcha API, до выполнения защищённого действия.

Общий поток:

  1. frontend получает token;
  2. frontend отправляет token вместе с формой/API-запросом;
  3. backend валидирует token в Yandex;
  4. backend выполняет действие только при успешной проверке.

Разработка

npm install
npm test
npm run check
npm run build
npm run demos

npm run check запускает unit-тесты, сборку, подготовку package/ и npm pack --dry-run.

Лицензия

MIT