import { DefaultSettingsCrudOptions , PbContext } from "~/graphql/types" ; import { Plugin } from "@webiny/plugins/types" ; import { UpgradePlugin } from "@webiny/api-upgrade" ; export * from "./graphql/types" ; category export interface PageElement { id : string ; name : string ; type : "element" | "block" ; category : string ; content : File ; preview : File ; createdOn : string ; createdBy : { type : string ; id : string ; displayName : string ; } ; tenant : string ; locale : string ; } category export interface Menu { title : string ; slug : string ; description : string ; items : any [ ] ; createdOn : string ; createdBy : { type : string ; id : string ; displayName : string ; } ; tenant : string ; locale : string ; } category export interface Category { name : string ; slug : string ; url : string ; layout : string ; createdOn : string ; createdBy : { type : string ; id : string ; displayName : string ; } ; tenant : string ; locale : string ; } export type PageStatus = "published" | "unpublished" | "reviewRequested" | "changesRequested" | "draft" ; export type PageSpecialType = "home" | "notFound" ; export interface Page { id : string ; pid : string ; locale : string ; tenant : string ; title : string ; editor : string ; createdFrom : string ; path : string ; category : string ; content : Record < string , any > ; publishedOn : string ; version : number ; settings ? : { social ? : { title : string ; description : string ; image : File ; meta : Array < { property : string ; content : string ; } > ; } ; seo ? : { title : string ; description : string ; meta : Array < { name : string ; content : string ; } > ; } ; general ? : { tags : string [ ] ; snippet : string ; layout : string ; image : File ; } ; } ; locked : boolean ; status : PageStatus ; visibility : { list : { latest : boolean ; published : boolean ; } ; get : { latest : boolean ; published : boolean ; } ; } ; home : boolean ; notFound : boolean ; createdOn : string ; savedOn : string ; createdBy : { type : string ; id : string ; displayName : string ; } ; ownedBy : { type : string ; id : string ; displayName : string ; } ; webinyVersion : string ; } export interface File { id : string ; src : string ; } export interface MetaResponse { cursor : string | null ; totalCount : number ; hasMoreItems : boolean ; } category category export interface CategoryStorageOperationsGetParams { where : { tenant : string ; locale : string ; slug : string ; } ; } category category export interface CategoryStorageOperationsListParams { where : { tenant : string ; locale : string ; createdBy ? : string ; } ; sort ? : string [ ] ; limit ? : number ; after ? : string | null ; } category category export type CategoryStorageOperationsListResponse = [ Category [ ] , MetaResponse ] ; category category export interface CategoryStorageOperationsCreateParams { input : Record < string , any > ; category : Category ; } category category export interface CategoryStorageOperationsUpdateParams { input : Record < string , any > ; original : Category ; category : Category ; } category category export interface CategoryStorageOperationsDeleteParams { category : Category ; } category category export interface CategoryStorageOperations { /**
     * Get the category by given slug.
     */ get ( params ) : Promise < Category | null > ; /**
     * List all the categories.
     */ list ( params ) : Promise < CategoryStorageOperationsListResponse > ; create ( params ) : Promise < Category > ; update ( params ) : Promise < Category > ; delete ( params ) : Promise < Category > ; } category category export interface MenuStorageOperationsGetParams { where : { slug : string ; tenant : string ; locale : string ; } ; } category category export interface MenuStorageOperationsListParams { where : { tenant : string ; locale : string ; createdBy ? : string ; } ; sort ? : string [ ] ; limit ? : number ; after ? : string | null ; } category category export type MenuStorageOperationsListResponse = [ Menu [ ] , MetaResponse ] ; category category export interface MenuStorageOperationsCreateParams { input : Record < string , any > ; menu : Menu ; } category category export interface MenuStorageOperationsUpdateParams { input : Record < string , any > ; original : Menu ; menu : Menu ; } category category export interface MenuStorageOperationsDeleteParams { menu : Menu ; } category category export interface MenuStorageOperations { /**
     * Get a single menu item by given params.
     */ get ( params ) : Promise < Menu > ; /**
     * Get all menu items by given params.
     */ list ( params ) : Promise < MenuStorageOperationsListResponse > ; create ( params ) : Promise < Menu > ; update ( params ) : Promise < Menu > ; delete ( params ) : Promise < Menu > ; } category category export interface PageElementStorageOperationsGetParams { where : { id : string ; tenant : string ; locale : string ; } ; } category category export interface PageElementStorageOperationsListParams { where : { tenant : string ; locale : string ; createdBy ? : string ; } ; sort ? : string [ ] ; limit ? : number ; after ? : string | null ; } category category export type PageElementStorageOperationsListResponse = [ PageElement [ ] , MetaResponse ] ; category category export interface PageElementStorageOperationsCreateParams { input : Record < string , any > ; pageElement : PageElement ; } category category export interface PageElementStorageOperationsUpdateParams { input : Record < string , any > ; original : PageElement ; pageElement : PageElement ; } category category export interface PageElementStorageOperationsDeleteParams { pageElement : PageElement ; } category category export interface PageElementStorageOperations { /**
     * Get a single page element item by given params.
     */ get ( params ) : Promise < PageElement | null > ; /**
     * Get all page element items by given params.
     */ list ( params ) : Promise < PageElementStorageOperationsListResponse > ; create ( params ) : Promise < PageElement > ; update ( params ) : Promise < PageElement > ; delete ( params ) : Promise < PageElement > ; } category export interface System { version : string ; tenant : string ; } category category export interface SystemStorageOperationsGetParams { tenant : string ; } category category export interface SystemStorageOperationsCreateParams { system : System ; } category category export interface SystemStorageOperationsUpdateParams { original : System ; system : System ; } category category export interface SystemStorageOperations { get : ( params : SystemStorageOperationsGetParams ) => Promise < System | null > ; create ( params ) : Promise < System > ; update ( params ) : Promise < System > ; } category export interface Settings { name : string ; websiteUrl : string ; websitePreviewUrl : string ; favicon : File ; logo : File ; prerendering : { app : { url : string ; } ; storage : { name : string ; } ; meta : Record < string , any > ; } ; social : { facebook : string ; twitter : string ; instagram : string ; image : File ; } ; pages : { home : string ; notFound : string ; } ; type : string ; tenant : string | undefined | false ; locale : string | undefined | false ; } category category export interface SettingsStorageOperationsGetParams { where : { type : string ; tenant : string | undefined | false ; locale : string | undefined | false ; } ; } category category export interface SettingsStorageOperationsCreateParams { input : Record < string , any > ; settings : Settings ; } category category export interface SettingsStorageOperationsUpdateParams { input : Record < string , any > ; original : Settings ; settings : Settings ; } category category export interface SettingsStorageOperations { /**
     * To identify different settings (global, default, per tenant, per locale) we must have some kind of identifier.
     * In our initial code it was the partition key and sort key combined.
     * Different storage operations can have what ever suits those storages.
     */ createCacheKey : ( params : DefaultSettingsCrudOptions ) => string ; get : ( params : SettingsStorageOperationsGetParams ) => Promise < Settings | null > ; create : ( params : SettingsStorageOperationsCreateParams ) => Promise < Settings > ; update : ( params : SettingsStorageOperationsUpdateParams ) => Promise < Settings > ; } category category export interface PageStorageOperationsListResponse { items : Page [ ] ; meta : MetaResponse ; } category category export interface PageStorageOperationsGetWhereParams { /**
     * pid + version
     */ id ? : string ; pid ? : string ; version ? : number ; path ? : string ; published ? : boolean ; latest ? : boolean ; tenant : string ; locale : string ; } category category export interface PageStorageOperationsGetParams { where : PageStorageOperationsGetWhereParams ; } category category export interface PageStorageOperationsGetByPathWhereParams { path : string ; tenant : string ; locale : string ; } category category export interface PageStorageOperationsGetByPathParams { where : PageStorageOperationsGetByPathWhereParams ; } category category export interface PageStorageOperationsListWhere { /**
     * pid + version
     */ id ? : string ; pid ? : string ; search ? : string ; title_contains ? : string ; createdBy ? : string ; tenant : string ; locale : string ; pid_not_in ? : string [ ] ; path_not_in ? : string [ ] ; tags_in ? : string [ ] ; tags_and_in ? : string [ ] ; /**
     * This is special condition which should not be transformed into database query but its used to determine
     * if pages we are trying to load need to have any of given tags or all of them.
     */ tags_rule ? : "all" | "any" ; /**
     * It should always be either latest or published defined as true.
     * If both are not defined, storage operations should throw an error.
     */ latest ? : boolean ; published ? : boolean ; } category category export interface PageStorageOperationsListParams { where : PageStorageOperationsListWhere ; sort : string [ ] ; limit : number ; after ? : string ; } category category export interface PageStorageOperationsListRevisionsParams { where : { pid : string ; tenant : string ; locale : string ; } ; limit : number ; after ? : string ; } category category export interface PageStorageOperationsListTagsParams { where : { search : string ; locale : string ; tenant : string ; } ; } category category export interface PageStorageOperationsCreateParams { input : Record < string , any > ; page : Page ; } category category export interface PageStorageOperationsCreateFromParams { original : Page ; latestPage : Page ; page : Page ; } category category export interface PageStorageOperationsUpdateParams { input : Record < string , any > ; original : Page ; page : Page ; } category category export interface PageStorageOperationsDeleteParams { page : Page ; latestPage : Page ; publishedPage : Page | null ; } category category export interface PageStorageOperationsDeleteAllParams { page : Page ; latestPage : Page ; publishedPage : Page | null ; } category category export interface PageStorageOperationsPublishParams { original : Page ; page : Page ; latestPage : Page ; publishedPage : Page | null ; publishedPathPage : Page | null ; } category category export interface PageStorageOperationsUnpublishParams { original : Page ; page : Page ; latestPage : Page ; } category category export interface PageStorageOperationsRequestReviewParams { original : Page ; page : Page ; latestPage : Page ; } category category export interface PageStorageOperationsRequestChangesParams { original : Page ; page : Page ; latestPage : Page ; } category category export interface PageStorageOperations { get : ( params : PageStorageOperationsGetParams ) => Promise < Page | null > ; list : ( params : PageStorageOperationsListParams ) => Promise < PageStorageOperationsListResponse > ; listRevisions : ( params : PageStorageOperationsListRevisionsParams ) => Promise < Page [ ] > ; listTags : ( params : PageStorageOperationsListTagsParams ) => Promise < string [ ] > ; create : ( params : PageStorageOperationsCreateParams ) => Promise < Page > ; createFrom : ( params : PageStorageOperationsCreateFromParams ) => Promise < Page > ; update : ( params : PageStorageOperationsUpdateParams ) => Promise < Page > ; /**
     * Deletes a certain page version.
     * If required set new latest and published pages.
     * Second page in the tuple must be new latest page, if any.
     */ delete : ( params : PageStorageOperationsDeleteParams ) => Promise < [ Page , Page | null ] > ; /**
     * Deletes ALL of the certain page versions.
     */ deleteAll : ( params : PageStorageOperationsDeleteAllParams ) => Promise < [ Page ] > ; publish : ( params : PageStorageOperationsPublishParams ) => Promise < Page > ; unpublish : ( params : PageStorageOperationsUnpublishParams ) => Promise < Page > ; requestReview : ( params : PageStorageOperationsRequestReviewParams ) => Promise < Page > ; requestChanges : ( params : PageStorageOperationsRequestChangesParams ) => Promise < Page > ; } export interface PageBuilderStorageOperations { system : SystemStorageOperations ; settings : SettingsStorageOperations ; categories : CategoryStorageOperations ; menus : MenuStorageOperations ; pageElements : PageElementStorageOperations ; pages : PageStorageOperations ; init ? : ( context : PbContext ) => Promise < void > ; /**
     * Plugins to be attached to the main context.
     */ plugins ? : Plugin [ ] | Plugin [ ] [ ] ; /**
     * An upgrade to run if necessary.
     */ upgrade ? : UpgradePlugin | null ; }