diff --git a/src/requests/typings/function.ts b/src/requests/typings/function.ts index a4d8c477..561bdad8 100644 --- a/src/requests/typings/function.ts +++ b/src/requests/typings/function.ts @@ -2,8 +2,23 @@ // https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/ROADMAP.md /*eslint-disable no-unused-vars*/ +import { + AppInstallationProps, + AssetProps, + BulkActionProps, + CommentProps, + ContentTypeProps, + EntryProps, + EnvironmentTemplateInstallationProps, + ReleaseActionProps, + ReleaseProps, + ScheduledActionProps, + TaskProps, +} from 'contentful-management' + const GRAPHQL_FIELD_MAPPING_EVENT = 'graphql.field.mapping' const GRAPHQL_QUERY_EVENT = 'graphql.query' +const APP_EVENT_FILTER = 'appevent.filter' type GraphQLFieldTypeMappingRequest = { type: typeof GRAPHQL_FIELD_MAPPING_EVENT @@ -45,6 +60,89 @@ export type GraphQLQueryResponse = { extensions?: Record } +type ContentTypeActions = 'create' | 'save' | 'publish' | 'unpublish' | 'delete' +type EntryActions = + | 'create' + | 'save' + | 'auto_save' + | 'publish' + | 'unpublish' + | 'archive' + | 'unarchive' + | 'delete' +type AssetActions = + | 'create' + | 'save' + | 'auto_save' + | 'publish' + | 'unpublish' + | 'archive' + | 'unarchive' + | 'delete' +type AppInstallationActions = 'create' | 'save' | 'delete' +type TaskActions = 'create' | 'save' | 'delete' +type CommentActions = 'create' | 'delete' +type ReleaseActions = 'create' | 'save' | 'delete' +type ReleaseActionActions = 'create' | 'execute' +type ScheduledActionActions = 'create' | 'save' | 'delete' | 'execute' +type BulkActionActions = 'create' | 'execute' +type TemplateInstallationActions = 'complete' + +type AppEventFilter = { + type: typeof APP_EVENT_FILTER + entityProps: EntityProps + entityAction: EntityActions // 'create' | 'publish' etc etc. +} +export type AppEventContentTypeFilter = { + entityType: 'ContentType' +} & AppEventFilter +export type AppEventEntryFilter = { + entityType: 'Entry' +} & AppEventFilter +export type AppEventAssetFilter = { + entityType: 'Asset' +} & AppEventFilter +export type AppEventAppInstallationFilter = { + entityType: 'AppInstallation' // is this AppInstallation or App Installation? +} & AppEventFilter +export type AppEventTaskFilter = { + entityType: 'Task' +} & AppEventFilter +export type AppEventCommentFilter = { + entityType: 'Comment' +} & AppEventFilter +export type AppEventReleaseFilter = { + entityType: 'Release' +} & AppEventFilter +export type AppEventReleaseActionFilter = { + entityType: 'ReleaseAction' // is this ReleaseAction or Release action? +} & AppEventFilter +export type AppEventScheduledActionFilter = { + entityType: 'ScheduledAction' // is this ScheduledAction or Scheduled action? +} & AppEventFilter +export type AppEventBulkActionFilter = { + entityType: 'BulkAction' // is this ScheduledAction or Scheduled action? +} & AppEventFilter +export type AppEventTemplateInstallationFilter = { + entityType: 'TemplateInstallation' // is this ScheduledAction or Scheduled action? +} & AppEventFilter +export type AppEventFilterRequest = + | AppEventEntryFilter + | AppEventAssetFilter + | AppEventContentTypeFilter + | AppEventAppInstallationFilter + | AppEventTaskFilter + | AppEventCommentFilter + | AppEventReleaseFilter + | AppEventReleaseActionFilter + | AppEventScheduledActionFilter + | AppEventBulkActionFilter + | AppEventTemplateInstallationFilter + +export type AppEventFilterResponse = { + result: boolean +} + /** * P: Possibility to type app installation parameters */ @@ -63,9 +161,16 @@ type FunctionEventHandlers = { event: GraphQLQueryRequest response: GraphQLQueryResponse } + [APP_EVENT_FILTER]: { + event: AppEventFilterRequest + response: AppEventFilterResponse + } } -export type FunctionEvent = GraphQLFieldTypeMappingRequest | GraphQLQueryRequest +export type FunctionEvent = + | GraphQLFieldTypeMappingRequest + | GraphQLQueryRequest + | AppEventFilterRequest export type FunctionEventType = keyof FunctionEventHandlers /**