rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
25 lines (24 loc) • 837 B
JavaScript
"use client";
import { useCallback, useRef } from "react";
export function useTurnstile(siteKey) {
const containerRef = useRef(null);
const resolverRef = useRef(Promise.withResolvers());
const widgetIdRef = useRef(null);
const challenge = useCallback(async () => {
if (!widgetIdRef.current &&
containerRef.current &&
window.turnstile) {
widgetIdRef.current = window.turnstile.render(containerRef.current, {
sitekey: import.meta.env.VITE_IS_DEV_SERVER
? "1x00000000000000000000AA"
: siteKey,
callback: (token) => resolverRef.current.resolve(token),
});
}
return resolverRef.current.promise;
}, [siteKey]);
return {
ref: containerRef,
challenge,
};
}