
Security News
arXiv Is Rate Limiting Authors Following a Flood of AI Slop Submissions
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.
@korala/react
Advanced tools
React components and hooks for embedding Korala document signing in your application.
pnpm add @korala/react
The main component for embedding the signing experience:
import { KoralaSigner } from '@korala/react';
function SigningPage({ signingToken }: { signingToken: string }) {
return (
<KoralaSigner
token={signingToken}
signingUrl="https://sign.yourdomain.com" // Optional, defaults to env var
className="w-full h-[600px]"
onReady={() => console.log('Embed ready')}
onLoaded={(data) => console.log('Document loaded:', data)}
onViewed={(data) => console.log('Document viewed:', data)}
onFieldFilled={(data) => console.log('Field filled:', data)}
onSigned={(data) => console.log('Document signed:', data)}
onDeclined={(data) => console.log('Document declined:', data)}
onError={(data) => console.error('Error:', data)}
/>
);
}
| Prop | Type | Required | Description |
|---|---|---|---|
token | string | Yes | The signer's access token |
signingUrl | string | No | Base URL of the signing app. Defaults to NEXT_PUBLIC_KORALA_SIGNING_URL env var |
className | string | No | CSS class for the iframe |
style | CSSProperties | No | Inline styles for the iframe |
allowedOrigins | string[] | No | Override the signing URL origin used for postMessage validation |
onReady | (data) => void | No | Called when embed is initialized |
onLoaded | (data) => void | No | Called when document is loaded |
onViewed | (data) => void | No | Called when signer views the document |
onFieldFilled | (data) => void | No | Called when a field is filled |
onSigned | (data) => void | No | Called when signing is complete |
onDeclined | (data) => void | No | Called when signer declines |
onError | (data) => void | No | Called on errors |
Alternative to callbacks - listen to all events via a hook:
import { useKoralaEvents } from '@korala/react';
function SigningStatus() {
const { status, events, lastEvent } = useKoralaEvents({
signingUrl: 'https://app.korala.ai',
});
return (
<div>
<p>Status: {status}</p>
<p>Events received: {events.length}</p>
</div>
);
}
Returns:
status: 'loading' | 'ready' | 'loaded' | 'viewed' | 'signing' | 'signed' | 'declined' | 'error'events: Array of all received eventslastEvent: Most recent eventclearEvents: Function to clear stored eventsDrive the signing iframe from your own UI.
import { KoralaSigner, useKoralaSignerRef } from '@korala/react';
function ControlledSigner({ token }: { token: string }) {
const { ref, close, getStatus, gotoField, gotoPage, getFields } =
useKoralaSignerRef();
return (
<>
<KoralaSigner ref={ref} token={token} />
<button onClick={() => gotoField()}>Go to next field</button>
</>
);
}
| Method | Returns | What it does |
|---|---|---|
close() | None | Closes the signing session |
getStatus() | KoralaGetStatusResult | Document status and progress counts |
gotoField(fieldId?) | KoralaGotoFieldResult | Scrolls to a field; omit the id for the next unfilled one |
gotoPage(pageNumber) | KoralaGotoPageResult | Scrolls to a 1-based page |
getFields() | KoralaGetFieldsResult | Every field: type, label, page, required, filled |
getFields plus gotoField is what you need to build next/previous controls
or a field list in your own chrome. This helps on long agreements, where the
signature block is usually in the last third of the document.
Embeds hide the signing viewer's page and previous/next-field controls by
default. Your app can drive the viewer with gotoField and gotoPage, or pass
showNavigation to KoralaSigner to render Korala's controls. Direct signing
links show the controls.
The SDK and the signing app ship separately, so your app can be on a newer SDK
than the page it embeds. The ready event's commands array lists what the
viewer understands. Feature-detect against it because older signing apps omit it and
support only close and get_status.
Navigation moves the signer and nothing else. These methods will not fill a
field, tick a checkbox or open the signature pad. Your app cannot know what the
signer can see, so it takes them to the field and leaves the acting to
them. gotoField resolves once the viewer has stopped scrolling and reports
arrived, unreachable, or not_found.
{
documentId: string;
documentName: string;
signerName: string;
signerEmail: string;
totalFields: number;
requiredFields: number;
}
{
documentId: string;
signerId: string;
signedAt: string;
}
{
documentId: string;
signerId: string;
reason?: string;
declinedAt: string;
}
{
code: string;
message: string;
recoverable: boolean;
}
Set in your .env.local:
NEXT_PUBLIC_KORALA_SIGNING_URL=http://localhost:3003
FAQs
React components and hooks for Korala document signing integration
We found that @korala/react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.

Research
/Security News
A new GhostAction wave hits hundreds of GitHub repos, expanding CI/CD secret theft to cloud and AI credentials in source code and git history.

Research
/Security News
Tensorlake npm SDK version 0.5.144 was compromised in a ChainDrop / Shai-Hulud attack, delivering credential-stealing malware.