chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:34:48 +08:00
commit 77bb5bf71f
3762 changed files with 353249 additions and 0 deletions
@@ -0,0 +1,8 @@
import { formSchema } from './tally-events'
import { listSubmissionsInputSchema, listSubmissionsOuputSchema } from './tally-submissions'
export default {
listSubmissionsInputSchema,
listSubmissionsOuputSchema,
formSchema,
}
@@ -0,0 +1,26 @@
import { z } from '@botpress/sdk'
import { tallyFieldSchema } from './tally-fields'
export const formSchema = z.object({
formId: z.string().min(1).describe('Form ID').title('Form ID'),
fields: z.array(tallyFieldSchema).default([]).describe('Form fields').title('Fields'),
})
export const webhookSchema = z
.object({
eventId: z.string().describe('Event ID').title('Event ID'),
eventType: z.literal('FORM_RESPONSE').describe('Event Type').title('Event Type'),
createdAt: z.string().describe('Creation Date').title('Created At'),
data: z
.object({
responseId: z.string().optional().describe('Response ID').title('Response ID'),
submissionId: z.string().optional().describe('Submission ID').title('Submission ID'),
respondentId: z.string().optional().describe('Respondent ID').title('Respondent ID'),
formId: z.string().describe('Form ID').title('Form ID'),
formName: z.string().optional().describe('Form Name').title('Form Name'),
createdAt: z.string().optional().describe('Creation Date').title('Created At'),
fields: z.array(tallyFieldSchema).default([]).describe('Form fields').title('Fields'),
})
.passthrough(),
})
.passthrough()
@@ -0,0 +1,91 @@
import { z } from '@botpress/sdk'
const baseField = z
.object({
key: z.string().min(1).title('Key').describe('Field key identifier'),
label: z.string().nullable().optional().title('Label').describe('Field label'),
type: z.string().min(1).title('Type').describe('Field type'),
})
.passthrough()
const optionSchema = z
.object({
id: z.string().min(1).title('ID').describe('Option ID'),
text: z.string().nullable().optional().title('Text').describe('Option text'),
})
.passthrough()
const fileSchema = z
.object({
id: z.string().optional().title('ID').describe('File ID'),
name: z.string().nullable().optional().title('Name').describe('File name'),
url: z.string().url().optional().title('URL').describe('File URL'),
mimeType: z.string().nullable().optional().title('MIME Type').describe('File MIME type'),
size: z.number().optional().title('Size').describe('File size in bytes'),
})
.passthrough()
const optionsFieldBase = baseField.extend({
value: z.array(z.string()).nullable().optional().title('Value').describe('Selected option values'),
options: z.array(optionSchema).optional().title('Options').describe('Available options'),
})
const multiSelectField = optionsFieldBase.extend({
type: z.literal('MULTI_SELECT').title('Type').describe('Field type'),
})
const dropdownField = optionsFieldBase.extend({
type: z.literal('DROPDOWN').title('Type').describe('Field type'),
})
const multipleChoiceField = optionsFieldBase.extend({
type: z.literal('MULTIPLE_CHOICE').title('Type').describe('Field type'),
})
const rankingField = optionsFieldBase.extend({
type: z.literal('RANKING').title('Type').describe('Field type'),
})
const checkboxesField = baseField.extend({
type: z.literal('CHECKBOXES').title('Type').describe('Field type'),
value: z
.union([z.array(z.string()), z.boolean()])
.nullable()
.optional()
.title('Value')
.describe('Checkbox values'),
options: z.array(optionSchema).optional().title('Options').describe('Available checkbox options'),
})
const fileUploadField = baseField.extend({
type: z.literal('FILE_UPLOAD').title('Type').describe('Field type'),
value: z.array(fileSchema).nullable().optional().title('Value').describe('Uploaded files'),
})
const signatureField = baseField.extend({
type: z.literal('SIGNATURE').title('Type').describe('Field type'),
value: z.array(fileSchema).nullable().optional().title('Value').describe('Signature files'),
})
const matrixField = baseField.extend({
type: z.literal('MATRIX').title('Type').describe('Field type'),
value: z.record(z.array(z.string())).nullable().optional().title('Value').describe('Matrix values'),
rows: z.array(optionSchema).optional().title('Rows').describe('Matrix rows'),
columns: z.array(optionSchema).optional().title('Columns').describe('Matrix columns'),
})
const knownSpecialFieldSchema = z.discriminatedUnion('type', [
multiSelectField,
dropdownField,
checkboxesField,
multipleChoiceField,
rankingField,
fileUploadField,
signatureField,
matrixField,
])
const fallbackFieldSchema = baseField
.extend({
value: z.any().optional().title('Value').describe('Field value'),
options: z.any().optional().title('Options').describe('Field options'),
})
.passthrough()
export const tallyFieldSchema = z.union([knownSpecialFieldSchema, fallbackFieldSchema])
@@ -0,0 +1,41 @@
import { z } from '@botpress/sdk'
export const listSubmissionsInputSchema = z.object({
formId: z.string().title('Form ID').describe('Tally form ID'),
page: z.number().int().min(1).optional().describe('Page number for pagination').title('Page'),
filter: z.enum(['all', 'completed', 'partial']).optional().describe('Filter submissions by status').title('Filter'),
startDate: z.string().optional().describe('Start date for filtering submissions').title('Start Date'),
endDate: z.string().optional().describe('End date for filtering submissions').title('End Date'),
afterId: z.string().optional().describe('ID of the submission after which to start listing').title('After ID'),
})
export const listSubmissionsOuputSchema = z.object({
questions: z
.array(
z.object({
id: z.string().describe('Question ID').title('Question ID'),
type: z.string().optional().describe('Question type').title('Type'),
title: z.string().nullable().optional().describe('Question title').title('Title'),
})
)
.describe('List of questions')
.title('Questions'),
submissions: z
.array(
z.object({
id: z.string().describe('Submission ID').title('Submission ID'),
responses: z
.array(
z.object({
questionId: z.string().describe('Question ID').title('Question ID'),
value: z.any().optional().describe('Response value').title('Value'),
answer: z.any().optional().describe('Response answer').title('Answer'),
})
)
.describe('List of responses for this submission')
.title('Responses'),
})
)
.describe('List of submissions')
.title('Submissions'),
})