Files
botpress--botpress/plugins/synchronizer/plugin.definition.ts
T
2026-07-13 13:34:48 +08:00

75 lines
1.9 KiB
TypeScript

import * as sdk from '@botpress/sdk'
import deletable from './bp_modules/deletable'
import listable from './bp_modules/listable'
const itemSchema = listable.definition.entities.item.schema
export default new sdk.PluginDefinition({
name: 'synchronizer',
version: '1.0.0',
configuration: {
schema: sdk.z.object({
tableName: sdk.z.string().title('Table Name').describe('The name of the table to store items'),
}),
},
actions: {
synchronize: {
title: 'Synchronize',
description: 'Manually synchronize a page of items without waiting for the cron job',
input: { schema: sdk.z.object({}) },
output: { schema: sdk.z.object({ itemsLeft: sdk.z.boolean() }) },
},
clear: {
title: 'Clear',
description: 'Clear the table',
input: { schema: sdk.z.object({}) },
output: { schema: sdk.z.object({}) },
},
},
states: {
table: {
type: 'bot',
schema: sdk.z.object({
tableCreated: sdk.z.boolean().optional().title('Table Created').describe('Whether the table has been created'),
}),
},
job: {
type: 'bot',
schema: sdk.z.object({
nextToken: sdk.z
.string()
.optional()
.title('Next Token')
.describe('The token to use to get the next page of items'),
}),
},
},
events: {
listItems: {
schema: sdk.z.object({}),
},
rowInserted: {
schema: sdk.z.object({ row: itemSchema }),
},
rowUpdated: {
schema: sdk.z.object({ row: itemSchema }),
},
rowDeleted: {
schema: sdk.z.object({ row: itemSchema.pick({ id: true }) }),
},
},
recurringEvents: {
runListItem: {
type: 'listItems',
payload: {},
schedule: {
cron: '* * * * *', // every minute
},
},
},
interfaces: {
listable: sdk.version.allWithinMajorOf(listable),
deletable: sdk.version.allWithinMajorOf(deletable),
},
})