export type AccessLevel = 'read' | 'write'; export interface NotebookGrant { notebook_id: string; access: AccessLevel; } export interface ClientPermissions { full_access: boolean; create_notebooks: boolean; create_tags: boolean; notebooks: NotebookGrant[]; } export interface ClientIdentity { client_id: string; permissions: ClientPermissions; } export interface Notebook { id: string; parent_id: string; title: string; created_time?: number; updated_time?: number; deleted_time?: number; } export type NotebookView = Notebook & { access: AccessLevel | 'path_only'; children: NotebookView[]; }; export interface Note { id: string; parent_id: string; title: string; body: string; created_time: number; updated_time: number; user_created_time?: number; user_updated_time?: number; deleted_time: number; is_todo: number; is_conflict: number; } export interface Tag { id: string; title: string; created_time?: number; updated_time?: number; } export interface RevisionRecord { id: string; parent_id: string; item_id: string; item_type: number; item_updated_time: number; title_diff: string; body_diff: string; metadata_diff: string; encryption_applied: number; created_time?: number; updated_time?: number; } export interface NoteRevision { id: string; note_id: string; item_updated_time: number; title: string; body: string; parent_id: string; user_created_time?: number; user_updated_time?: number; } export interface Change { id: number; item_type: number | string; item_id: string; type: number | string; created_time: number; } export interface Page { items: T[]; page: number; limit: number; has_more: boolean; } export interface ChangePage { items: Change[]; cursor: string; has_more: boolean; } export interface Pagination { page: number; limit: number; order_by?: string; order_dir?: 'ASC' | 'DESC'; } export type SyncStatus = | { status: 'synced'; local_change_applied: boolean } | { status: 'pending'; local_change_applied: true; operation_id: string; warning: string; }; export interface OperationResult { data: T; sync: SyncStatus; }