Use LLMs to prefill forms.
Currently supports Google Forms and JotForm. You can also define your own custom form providers using the FormProvider interface.
npm install form-genie
# or
yarn add form-genie
import { FormGenie, GoogleFormProvider, JotFormProvider } from 'form-genie';
const formGenie = new FormGenie({
formProviders: [
new GoogleFormProvider(),
new JotFormProvider(process.env.JOTFORM_API_KEY),
],
openAISecret: 'sk-proj-...',
});
// Example 1: Get form parameters
const googleFormParameters = await formGenie.getUrlParameters('https://docs.google.com/forms/d/e/1FAIpQLScdKjyHqtiUA7_wZX0Tt5GZw7JUSoRVlnHHR3i2j0pPKH-o_A/viewform');
console.log('Google Form parameters:', googleFormParameters);
const jotFormParameters = await formGenie.getUrlParameters('https://form.jotform.com/24261751757616');
console.log('JotForm parameters:', jotFormParameters);
// Example 2: Transform user data to parameters
const userData = 'John Doe, 30 years old, software engineer';
const transformedGoogleData = await formGenie.transformUserDataToParameters(
googleFormParameters,
userData,
'https://docs.google.com/forms/d/e/1FAIpQLScdKjyHqtiUA7_wZX0Tt5GZw7JUSoRVlnHHR3i2j0pPKH-o_A/viewform',
);
console.log('Transformed Google Form data:', transformedGoogleData);
// Example 3: Create a prefilled form link
const prefilledGoogleUrl = await formGenie.createPrefilledFormLink(
'https://docs.google.com/forms/d/e/1FAIpQLScdKjyHqtiUA7_wZX0Tt5GZw7JUSoRVlnHHR3i2j0pPKH-o_A/viewform',
userData
);
console.log('Prefilled Google Form URL:', prefilledGoogleUrl);
const prefilledJotFormUrl = await formGenie.createPrefilledFormLink(
'https://form.jotform.com/24261751757616',
userData
);
console.log('Prefilled JotForm URL:', prefilledJotFormUrl);
You can create your own custom form provider by implementing the FormProvider interface:
import { FormGenie, FormProvider } from 'form-genie';
import { Parameter } from 'form-genie/types/parameter';
class CustomFormProvider implements FormProvider {
formProviderName = 'Custom Form Provider';
canHandle(formUrl: string): boolean {
// Implement logic to determine if this provider can handle the given URL
return formUrl.includes('custom-form-provider.com');
}
async getFormParametersFromUrl(formUrl: string): Promise<Parameter[]> {
// Implement your own logic to get form parameters from the URL
return [];
}
createPrefilledLink(formUrl: string, parameters: Record<string, string>): string {
// Implement your own logic to create a prefilled form link
return '';
}
}
const formGenie = new FormGenie({
formProviders: [new CustomFormProvider()],
openAISecret: 'sk-proj-...',
});
- [ ] Add more form providers
- [ ] Support non-OpenAI providers (Anthropic, Groq, etc.)
- [ ] Add more examples
- [ ] Add more tests
Contributions are welcome! Please feel free to submit a Pull Request.