import { DocumentElement } from './document-element'; export type DocumentOperation = { action: 'createElement'; element: DocumentElement; } | { action: 'updateElement'; elementId: string; changes: DocumentElementPatch; } | { action: 'deleteElement'; elementId: string; }; export type DocumentElementPatch = Partial>; interface WriteTransactionRequestBase { clientTransactionId?: string; clientCreatedOn?: string; } export interface InlineWriteTransactionRequest extends WriteTransactionRequestBase { operations: DocumentOperation[]; operationsS3Key?: never; } export interface S3WriteTransactionRequest extends WriteTransactionRequestBase { operations?: never; operationsS3Key: string; } export type WriteTransactionRequest = InlineWriteTransactionRequest | S3WriteTransactionRequest; export interface WriteTransactionResponse { sequenceNumber: number; createdOn: string; createdById: string; clientTransactionId?: string; } interface DocumentTransactionBase { sequenceNumber: number; clientTransactionId?: string; } export interface InlineDocumentTransaction extends DocumentTransactionBase { operations: DocumentOperation[]; operationsDownloadUrl?: never; } export interface S3DocumentTransaction extends DocumentTransactionBase { operations?: never; operationsDownloadUrl: string; } export type DocumentTransaction = InlineDocumentTransaction | S3DocumentTransaction; export interface GetDocumentTransactionsResponse { transactions: DocumentTransaction[]; hasMore: boolean; lastReturnedSequenceNumber: number; } interface DocumentTransactionMessageBase { type: 'DOCUMENT_TRANSACTION'; documentId: string; sequenceNumber: number; createdOn: string; clientTransactionId?: string; clientCreatedOn?: string; } export type DocumentTransactionMessage = (DocumentTransactionMessageBase & { operations: DocumentOperation[]; operationsDownloadUrl?: never; }) | (DocumentTransactionMessageBase & { operationsDownloadUrl: string; operations?: never; }); export interface TransactionUploadTarget { s3Key: string; presignedUploadUrl: string; expiresAt: string; } export type DocumentTransactionPayload = { clientTransactionId?: string; clientCreatedOn?: string; } & ({ operations: DocumentOperation[]; operationsS3Key?: never; } | { operationsS3Key: string; operations?: never; }); export {};