chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
import * as sdk from '@botpress/sdk'
|
||||
|
||||
const BASE_ITEM = (itemType: 'file' | 'folder' | 'item' = 'item') =>
|
||||
sdk.z.object({
|
||||
id: sdk.z
|
||||
.string()
|
||||
.describe(
|
||||
`The ${itemType}'s ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique.`
|
||||
),
|
||||
type: sdk.z.union([sdk.z.literal('file'), sdk.z.literal('folder')]).describe('The entity type'),
|
||||
name: sdk.z
|
||||
.string()
|
||||
.describe(
|
||||
`The ${itemType}'s name. This will be displayed in the Botpress UI and be used as the ${itemType}'s name on Files API."`
|
||||
),
|
||||
parentId: sdk.z
|
||||
.string()
|
||||
.optional()
|
||||
.describe(`The parent folder ID. Leave empty if the ${itemType} is in the root folder.`),
|
||||
absolutePath: sdk.z
|
||||
.string()
|
||||
.optional()
|
||||
.describe(`The absolute path of the ${itemType}. Leave empty if not available.`),
|
||||
})
|
||||
|
||||
const FOLDER = BASE_ITEM('folder').extend({
|
||||
type: sdk.z.literal('folder'),
|
||||
})
|
||||
|
||||
const FILE = BASE_ITEM('file').extend({
|
||||
type: sdk.z.literal('file'),
|
||||
sizeInBytes: sdk.z.number().optional().describe('The file size in bytes, if available'),
|
||||
lastModifiedDate: sdk.z.string().datetime().optional().describe('The last modified date of the file, if available'),
|
||||
contentHash: sdk.z
|
||||
.string()
|
||||
.optional()
|
||||
.describe('The hash of the file content, or version/revision number, if available'),
|
||||
})
|
||||
|
||||
const FILE_WITH_PATH = FILE.extend({
|
||||
absolutePath: sdk.z.string().describe('The full path of the file'),
|
||||
})
|
||||
|
||||
const FOLDER_WITH_PATH = FOLDER.extend({
|
||||
absolutePath: sdk.z.string().describe('The full path of the folder'),
|
||||
})
|
||||
|
||||
const NEXT_TOKEN = sdk.z.string().optional().describe('The token to get the next page of items.')
|
||||
|
||||
export default new sdk.InterfaceDefinition({
|
||||
name: 'files-readonly',
|
||||
version: '0.3.0',
|
||||
actions: {
|
||||
listItemsInFolder: {
|
||||
attributes: {
|
||||
...sdk.WELL_KNOWN_ATTRIBUTES.HIDDEN_IN_STUDIO,
|
||||
},
|
||||
title: 'List items in folder',
|
||||
description: 'List the files and folders in a folder',
|
||||
input: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
folderId: FOLDER.shape.id
|
||||
.optional()
|
||||
.title('Folder ID')
|
||||
.describe('The folder ID to list the items from. Leave empty to list items from the root folder.'),
|
||||
filters: sdk.z
|
||||
.object({
|
||||
itemType: BASE_ITEM().shape.type.optional().describe('Filter the items by type'),
|
||||
maxSizeInBytes: FILE.shape.sizeInBytes
|
||||
.optional()
|
||||
.describe('Filter the items by maximum size (in bytes)'),
|
||||
modifiedAfter: FILE.shape.lastModifiedDate
|
||||
.optional()
|
||||
.describe('Filter the items modified after the given date'),
|
||||
})
|
||||
.optional()
|
||||
.title('Search Filters')
|
||||
.describe('Optional search filters'),
|
||||
nextToken: NEXT_TOKEN.title('Next Page Token').describe(
|
||||
'The token to get the next page of items. Leave empty to get the first page.'
|
||||
),
|
||||
}),
|
||||
},
|
||||
output: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
items: sdk.z
|
||||
.array(sdk.z.union([FILE, FOLDER]))
|
||||
.title('Folder Items')
|
||||
.describe('The files and folders in the folder'),
|
||||
meta: sdk.z
|
||||
.object({
|
||||
nextToken: NEXT_TOKEN,
|
||||
})
|
||||
.title('Metadata')
|
||||
.describe('List items in folder metadata'),
|
||||
}),
|
||||
},
|
||||
},
|
||||
transferFileToBotpress: {
|
||||
attributes: {
|
||||
...sdk.WELL_KNOWN_ATTRIBUTES.HIDDEN_IN_STUDIO,
|
||||
},
|
||||
title: 'Transfer file to Botpress',
|
||||
description: 'Transfer a file from an external service to Botpress',
|
||||
input: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
file: FILE.title('File to transfer').describe('The file to transfer'),
|
||||
fileKey: sdk.z.string().title('File key').describe('The file key to use in Botpress'),
|
||||
shouldIndex: sdk.z
|
||||
.boolean()
|
||||
.optional()
|
||||
.title('Should index file?')
|
||||
.describe('Whether to index the file in vector storage'),
|
||||
}),
|
||||
},
|
||||
output: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
botpressFileId: sdk.z.string().title('File ID').describe('The file ID of the uploaded file on Botpress'),
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
events: {
|
||||
fileCreated: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
file: FILE_WITH_PATH.title('Created File').describe('The created file'),
|
||||
}),
|
||||
},
|
||||
fileUpdated: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
file: FILE_WITH_PATH.title('Updated File').describe('The updated file'),
|
||||
}),
|
||||
},
|
||||
fileDeleted: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
file: FILE_WITH_PATH.title('Deleted File').describe('The deleted file'),
|
||||
}),
|
||||
},
|
||||
folderDeletedRecursive: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
folder: FOLDER_WITH_PATH.title('Deleted Folder').describe('The deleted folder'),
|
||||
}),
|
||||
},
|
||||
aggregateFileChanges: {
|
||||
schema: () =>
|
||||
sdk.z.object({
|
||||
modifiedItems: sdk.z
|
||||
.object({
|
||||
created: sdk.z.array(FILE_WITH_PATH).describe('The files created'),
|
||||
updated: sdk.z.array(FILE_WITH_PATH).describe('The files updated'),
|
||||
deleted: sdk.z
|
||||
.array(sdk.z.union([FILE_WITH_PATH, FOLDER_WITH_PATH]))
|
||||
.describe('The files and folders deleted'),
|
||||
})
|
||||
.title('Modified Items')
|
||||
.describe('The modified items'),
|
||||
}),
|
||||
},
|
||||
},
|
||||
__advanced: {
|
||||
useLegacyZuiTransformer: true,
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user