@artifact-project/recaptcha

reCAPTCHA API & Components
1,455 7
Install
npm install @artifact-project/recaptcha
Latest Version:1.2.0
Vue:2 · 3
License:MIT
Last Updated:Nov 15, 2023
Links: GitHub  ·  npm
Maintainer: rubaxa

reCAPTCHA

reCAPTCHA API & Components

npm i --save-dev @artifact-project/recaptcha

Features

  • API 🛠
  • Multi language 🇷🇺🇺🇸🇨🇳
  • Support mock for testing 🔬
  • Events💡& Analytics 📊(support ⚡️@perf-tools/keeper)
  • Components
    • React (ready to use)
      • Server side render
      • Dynamic properties
    • Vue (in progress, help wanted)
    • WebComponent (in progress, help wanted)

Usage

See examples

// As API
import { renderReCaptchaWidget } from '@artifact-project/recaptcha';

const widget = renderReCaptchaWidget({
	el: document.getElementById('captcha-box'),

	params: { // https://developers.google.com/recaptcha/docs/display#render_param
		sitekey: 'XXXX',
		theme: 'dark',
	},

	handle(type, code, error) {
		console.log('type:', type); // Enum('change', 'expired', 'error')
		console.log('code:', code); // 'XXXX' or null
	},

	// Events
	onchallengeshow(challengeRef) {},
	onchallengehide(challengeRef) {},
	onstartattempt(attempt) {
		console.log('attempt.start:', attempt); // {state: 'start', start: 132314124, duration: 0};
	},
	onattempt(attempt) {
		console.log('attempt.resolved:', attempt); // {state: 'verified', start: 132314124, duration: 325325};
	},
});

// As React Compomnent
import { ReCaptcha } from '@artifact-project/recaptcha/react';

const captcha = (
	<ReCaptcha
		sitekey={'XXXX'}
		loading={<span>⏳Loading...</span>}
		onReady={() => console.log('reCAPTCHA is ready')}
		onChange={(code) => console.log('reCAPTCHA code:', code)}
		onExpired={(code) => { /* ... */ }}
		onError={(err) => { /* ... */ }}

		onChallengeShow={() => { /* ... */ }}
		onChallengeHide={() => { /* ... */ }}
		onStartAttempt={(attempt) => { /* ... */ }}
		onAttempt={(attempt) => { /* ... */ }}
	/>
);

Advanced API

import {
	installReCaptchaSDK,
	renderReCaptchaWidget,
} from '@artifact-project/recaptcha';

installReCaptchaSDK().then(() => {
	console.log('reCAPTCHA SDK —> loaded');
});

renderReCaptchaWidget({ ... }).ready.then(widget => {
	console.log('reCAPTCHA SDK —> loaded');
	console.log('reCAPTCHA Widget —> rendered');
})

Enterprise recaptcha

Чтобы подключить enterprise версию рекаптчи, необходимо передать isEnterprise флаг.

// As API
import { renderReCaptchaWidget } from '@artifact-project/recaptcha';

const widget = renderReCaptchaWidget({
	params: {
		sitekey: 'XXXX',
		theme: 'dark',
		isEnterprise: true
	},
    ...
});

// As React Compomnent
import { ReCaptcha } from '@artifact-project/recaptcha/react';

const captcha = (
	<ReCaptcha
		sitekey={'XXXX'}
		isEnterprise
	/>
);

Testing / Mock

React component

See example

import { ReCaptcha, ReCaptchaContextMock } from '@artifact-project/recaptcha/react';

const captchaWithMock = (
	<ReCaptchaContextMock.Provider value={{
		code: 'xx123xx',
		ctrlProps: {'data-qa': 'recaptcha-btn'},
		okProps: {'data-qa': 'recaptcha-successfully'},
	}}>
		<ReCaptcha
			sitekey={'XXXX'}
			onChange={(code) => {
				console.log('reCAPTCHA code:', code); // always: 'xx123xx'
			}}
		/>
	</ReCaptchaContextMock.Provider>
);

Analytics

import { renderReCaptchaWidget } from '@artifact-project/recaptcha';
import { createReCaptchaAnalytics } from '@artifact-project/recaptcha/analytics';

const analytics = createReCaptchaAnalytics('LoginPage');

renderReCaptchaWidget({
	el: document.getElementById('captcha-box'),
	params: { /*...*/ },
	...analytics.mixin('native'), // added `on`-props
});

document.getElementById('login-form').addEventListener('submit', () => {
	const stats = analytics.get();

	sendToMyAnalytics(analytics.name, stats);
	analytics.clear();

	// ...
});
Using with ⚡️@perf-tools/keeper
import { system as systemKepper } from '@perf-tools/keeper';
import { createReCaptchaAnalytics } from '@artifact-project/recaptcha/analytics';

const analytics = createReCaptchaAnalytics('Login', {
	keeper: systemKepper,
});

// ... bla-bla-bla

Analytics in keeper

Related Packages

@aspect-ui-01/toast

Lightweight framework-agnostic toast notifications (~2KB)

3,926
web-c-theme

功能介绍 这是一个基于 **Web Component** 技术的主题组件库,主要功能是前端 **"主题...

3,688
auth.js

A simple authentication and authorization module for building APIs when using fr...

2,037
hyperchess-board-ui

HyperChess 2D board component for all frameworks

357 1

Version History

Version Released Vue License
1.2.0 >=2.6.9 MIT
1.1.0 >=2.6.9 MIT
1.0.1 >=2.6.9 MIT
1.0.0 >=2.6.9 MIT
0.8.0 >=2.6.9 MIT
Pre-releases (4)
Version Released Vue License
1.1.0-next.2 >=2.6.9 MIT
1.1.0-next.1 >=2.6.9 MIT
1.0.2-next.2 >=2.6.9 MIT
1.0.2-next.1 >=2.6.9 MIT