contentful-management
Version:
Client for Contentful's Content Management API
123 lines (122 loc) • 4.68 kB
TypeScript
import type { DefaultElements, ISO8601Timestamp, Link, MakeRequest, MakeRequestPayload, VersionedLink } from '../common-types';
import type { AsyncActionProcessingOptions } from '../methods/action';
/** Entity types supported by the BulkAction API */
type Entity = 'Entry' | 'Asset';
type Collection<T> = Array<T>;
type EntityError = {
entity: VersionedLink<Entity> | Link<Entity>;
error: any;
};
export type BulkActionType = 'publish' | 'unpublish' | 'validate';
/** Represents the state of the BulkAction */
export declare enum BulkActionStatus {
/** BulkAction is pending execution */
created = "created",
/** BulkAction has been started and pending completion */
inProgress = "inProgress",
/** BulkAction was completed successfully (terminal state) */
succeeded = "succeeded",
/** BulkAction failed to complete (terminal state) */
failed = "failed"
}
declare const STATUSES: BulkActionStatus[];
type BulkActionStatuses = (typeof STATUSES)[number];
interface BulkActionFailedError {
sys: {
type: 'Error';
id: 'BulkActionFailed';
};
message?: string;
details?: {
errors: Collection<EntityError>;
};
}
export type BulkActionPayload = BulkActionPublishPayload | BulkActionUnpublishPayload | BulkActionValidatePayload;
export interface BulkActionValidatePayload extends MakeRequestPayload {
action?: 'publish';
entities: {
sys?: {
type: 'Array';
};
items: Collection<Link<Entity>>;
};
}
export interface BulkActionUnpublishPayload extends MakeRequestPayload {
entities: {
sys?: {
type: 'Array';
};
items: Collection<Link<Entity>>;
};
}
export interface BulkActionPublishPayload extends MakeRequestPayload {
entities: {
sys?: {
type: 'Array';
};
items: Collection<VersionedLink<Entity>>;
};
}
interface AddFieldsEntity<L extends Link<Entity> | VersionedLink<Entity>> {
entity: L;
add?: {
fields: Record<'*', string[]>;
};
}
interface RemoveFieldsEntity<L extends Link<Entity> | VersionedLink<Entity>> {
entity: L;
remove?: {
fields: Record<'*', string[]>;
};
}
type BulkActionEntity<L extends Link<Entity> | VersionedLink<Entity>> = {
entity: L;
};
export interface PublishBulkActionV2Payload<PublishActionType extends 'add' | 'remove' = 'add'> {
action: 'publish';
entities: PublishActionType extends 'remove' ? RemoveFieldsEntity<VersionedLink<Entity>>[] : AddFieldsEntity<VersionedLink<Entity>>[];
}
export interface ValidateBulkActionV2Payload<PublishActionType extends 'add' | 'remove' = 'add'> {
action: 'validate';
entities: PublishActionType extends 'remove' ? RemoveFieldsEntity<Link<Entity>>[] : AddFieldsEntity<Link<Entity>>[];
}
export interface UnpublishBulkActionV2Payload {
action: 'unpublish';
entities: BulkActionEntity<Link<Entity>>[];
}
export type BulkActionV2Payload = PublishBulkActionV2Payload<'add'> | PublishBulkActionV2Payload<'remove'> | UnpublishBulkActionV2Payload | ValidateBulkActionV2Payload<'add'> | ValidateBulkActionV2Payload<'remove'>;
export type BulkActionSysProps = {
id: string;
type: 'BulkAction';
status: BulkActionStatuses;
space: Link<'Space'>;
environment: Link<'Environment'>;
createdBy: Link<'User'>;
createdAt: ISO8601Timestamp;
updatedAt: ISO8601Timestamp;
};
/** The object returned by the BulkActions API */
export interface BulkActionProps<TPayload extends BulkActionPayload | BulkActionV2Payload = any> {
sys: BulkActionSysProps;
action: BulkActionType;
/** original payload when BulkAction was created */
payload: TPayload;
/** error information, if present */
error?: BulkActionFailedError;
}
export interface BulkActionApiMethods {
/** Performs a new GET request and returns the wrapper BulkAction */
get(): BulkAction;
/** Waits until the BulkAction is in one of the final states (`succeeded` or `failed`) and returns it. */
waitProcessing(options?: AsyncActionProcessingOptions): Promise<BulkAction>;
}
export interface BulkAction<T extends BulkActionPayload | BulkActionV2Payload = any> extends BulkActionProps<T>, BulkActionApiMethods, DefaultElements<BulkActionProps<T>> {
}
/**
* @private
* @param makeRequest - function to make requests via an adapter
* @param data - Raw BulkAction data
* @return Wrapped BulkAction data
*/
export declare function wrapBulkAction<TPayload extends BulkActionPayload | BulkActionV2Payload = any>(makeRequest: MakeRequest, data: BulkActionProps<BulkActionPayload | BulkActionV2Payload>): BulkAction<TPayload>;
export {};