UNPKG

@telefonica/confluence-sync

Version:

Creates/updates/deletes Confluence pages based on a list of objects containing the page contents. Supports nested pages and attachments upload

105 lines (104 loc) 3.93 kB
import type { LogLevel, LoggerInterface } from "@mocks-server/logger"; import type { ConfluencePage, ConfluencePageBasicInfo, ConfluenceId } from "./confluence/CustomConfluenceClient.types"; export declare enum SyncModes { TREE = "tree", FLAT = "flat", ID = "id" } /** Type for dictionary values */ export type ConfluencePagesDictionaryItem = { /** Confluence page id */ id: ConfluenceId; /** Confluence page title */ title: string; /** Confluence page version */ version: number; /** Confluence page ancestors */ ancestors?: ConfluencePageBasicInfo[]; /** Boolean to indicate if the page was updated */ visited?: boolean; }; /** Type of input pages */ export type ConfluenceInputPage = { /** Input page id */ id?: ConfluenceId; /** Input page title */ title: string; /** Input page content */ content?: string; /** Input page ancestors */ ancestors?: string[]; /** Input page attachments */ attachments?: Record<string, string>; }; /** Confluence page dictionary */ export type ConfluencePagesDictionary = Record<string, ConfluencePagesDictionaryItem>; export interface ConfluenceSyncPagesConfig { /** Confluence url */ url: string; /** Confluence space id */ spaceId: string; /** Confluence page under which all pages will be synced */ rootPageId?: ConfluenceId; /** Confluence personal access token */ personalAccessToken: string; /** Log level */ logLevel?: LogLevel; /** Dry run option */ dryRun?: boolean; /** Sync mode */ syncMode?: SyncModes; } /** Creates a ConfluenceSyncPages interface */ export interface ConfluenceSyncPagesConstructor { /** Returns ConfluenceSyncPages interface * @param config - Config for creating a ConfluenceSyncPages interface {@link ConfluenceSyncPagesConfig}. * @returns ConfluenceSyncPages instance {@link ConfluenceSyncPagesInterface}. * @example const confluenceSyncPages = new ConfluenceSyncPages({ personalAccessToken: "foo", url: "https://bar.com", spaceId: "CTO", rootPageId: "foo-root-id"}); */ new (config: ConfluenceSyncPagesConfig): ConfluenceSyncPagesInterface; } export interface ConfluenceSyncPagesInterface { /** Library logger. You can attach events, consult logs store, etc. */ logger: LoggerInterface; /** Sync pages in Confluence. * @param pages - Pages data {@link ConfluenceInputPage}. */ sync(pages: ConfluenceInputPage[]): Promise<void>; } export interface ConfluenceSyncPagesCreateTask { type: "create"; page: ConfluenceInputPage; } export interface ConfluenceSyncPagesInitSyncTask { type: "init"; pageId: string; } export interface ConfluenceSyncPagesUpdateTask { type: "update"; pageId: string; page: ConfluenceInputPage; } export interface ConfluenceSyncPagesDeleteTask { type: "delete"; pageId: string; } export interface ConfluenceSyncPagesCreateAttachmentsTask { type: "createAttachments"; pageId: string; pageTitle: string; attachments: Record<string, string>; } export interface ConfluenceSyncPagesDeleteAttachmentsTask { type: "deleteAttachments"; pageId: string; } export type ConfluenceSyncPagesTask = ConfluenceSyncPagesCreateTask | ConfluenceSyncPagesInitSyncTask | ConfluenceSyncPagesUpdateTask | ConfluenceSyncPagesDeleteTask | ConfluenceSyncPagesCreateAttachmentsTask | ConfluenceSyncPagesDeleteAttachmentsTask; export interface ConfluenceSyncPagesJob<Task extends ConfluenceSyncPagesTask = ConfluenceSyncPagesTask> { task: Task; enqueueTask: (task: ConfluenceSyncPagesTask) => void; getConfluencePageByTitle: (pageTitle: string) => ConfluencePage | undefined; getPageByTitle: (pageTitle: string) => ConfluenceInputPage | undefined; getPagesByAncestor: (ancestor: string, isRoot?: boolean) => ConfluenceInputPage[]; storeConfluencePage: (page: ConfluencePage) => void; }