@redseat/api 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,231 @@
1
+ import { IFile, ITag, IPerson, ISerie, IMovie, MediaRequest, IEpisode, ExternalImage, IBackupFile, ILibrary, SerieInMedia } from './interfaces';
2
+ import { EncryptFileOptions, EncryptedFile } from './encryption';
3
+ export interface MediaForUpdate {
4
+ name?: string;
5
+ description?: string;
6
+ mimetype?: string;
7
+ size?: number;
8
+ md5?: string;
9
+ modified?: number;
10
+ created?: number;
11
+ width?: number;
12
+ height?: number;
13
+ orientation?: number;
14
+ color_space?: string;
15
+ icc?: string;
16
+ mp?: number;
17
+ vcodecs?: string[];
18
+ acodecs?: string[];
19
+ fps?: number;
20
+ bitrate?: number;
21
+ focal?: number;
22
+ iso?: number;
23
+ model?: string;
24
+ sspeed?: string;
25
+ f_number?: number;
26
+ duration?: number;
27
+ progress?: number;
28
+ addTags?: {
29
+ id: string;
30
+ conf?: number;
31
+ }[];
32
+ removeTags?: string[];
33
+ tagsLookup?: string[];
34
+ addSeries?: SerieInMedia[];
35
+ removeSeries?: SerieInMedia[];
36
+ addPeople?: {
37
+ id: string;
38
+ conf?: number;
39
+ }[];
40
+ removePeople?: string[];
41
+ peopleLookup?: string[];
42
+ long?: number;
43
+ lat?: number;
44
+ gps?: string;
45
+ origin?: any;
46
+ originUrl?: string;
47
+ movie?: string;
48
+ lang?: string;
49
+ rating?: number;
50
+ thumbsize?: number;
51
+ iv?: string;
52
+ uploader?: string;
53
+ uploadkey?: string;
54
+ uploadId?: string;
55
+ }
56
+ export interface LibraryHttpClient {
57
+ get<T = unknown>(url: string, config?: any): Promise<{
58
+ data: T;
59
+ }>;
60
+ post<T = unknown>(url: string, data?: unknown, config?: any): Promise<{
61
+ data: T;
62
+ }>;
63
+ put<T = unknown>(url: string, data?: unknown, config?: any): Promise<{
64
+ data: T;
65
+ }>;
66
+ patch<T = unknown>(url: string, data?: unknown, config?: any): Promise<{
67
+ data: T;
68
+ }>;
69
+ delete<T = unknown>(url: string, config?: any): Promise<{
70
+ data: T;
71
+ }>;
72
+ }
73
+ export declare class LibraryApi {
74
+ private client;
75
+ private libraryId;
76
+ private library;
77
+ private key?;
78
+ private keyText?;
79
+ constructor(client: LibraryHttpClient, libraryId: string, library: ILibrary);
80
+ setKey(passPhrase: string): Promise<void>;
81
+ private getUrl;
82
+ getTags(): Promise<ITag[]>;
83
+ getPeople(): Promise<IPerson[]>;
84
+ getSeries(): Promise<ISerie[]>;
85
+ getMovies(): Promise<IMovie[]>;
86
+ getMedias(filter?: MediaRequest): Promise<IFile[]>;
87
+ createTag(tag: Partial<ITag>): Promise<ITag>;
88
+ removeTag(tagId: string): Promise<void>;
89
+ renameTag(tagId: string, newName: string): Promise<ITag>;
90
+ tagChangeParent(tagId: string, newParent?: string): Promise<ITag>;
91
+ tagMerge(fromId: string, intoId: string): Promise<ITag>;
92
+ tagAddAlt(tagId: string, alt: string): Promise<ITag>;
93
+ tagRemoveAlt(tagId: string, alt: string): Promise<ITag>;
94
+ mediaTransfer(formData: FormData): Promise<void>;
95
+ mediaTransferMany(medias: string[], deleteOriginal: boolean, toLibraryId: string): Promise<void>;
96
+ mediaTransferSingle(mediaId: string, toLibraryId: string, formData: FormData, params?: Map<string, string>): Promise<void>;
97
+ removeMedias(mediaIds: string[]): Promise<void>;
98
+ getMediaMetadata(mediaId: string): Promise<IFile>;
99
+ getMediaBackupMetadatas(mediaId: string): Promise<IBackupFile[]>;
100
+ clean(): Promise<string>;
101
+ locs(): Promise<any>;
102
+ createPerson(person: Partial<IPerson>): Promise<IPerson>;
103
+ removePerson(personId: string): Promise<void>;
104
+ updatePerson(personId: string, updates: Partial<IPerson>): Promise<IPerson>;
105
+ createSerie(serie: Partial<ISerie>): Promise<ISerie>;
106
+ createEpisode(episode: Partial<IEpisode>): Promise<IEpisode>;
107
+ serieScrap(serieId: string, date?: number): Promise<void>;
108
+ removeSerie(serieId: string): Promise<void>;
109
+ updateSerie(serieId: string, updates: Partial<ISerie>): Promise<ISerie>;
110
+ getSerieImages(serieId: string): Promise<ExternalImage[]>;
111
+ updateSeriePoster(serieId: string, poster: FormData, type: string): Promise<void>;
112
+ updateSerieImageFetch(serieId: string, image: ExternalImage): Promise<void>;
113
+ updateSeriePosterWithMediaThumb(serieId: string, mediaId: string, type: string): Promise<ISerie>;
114
+ createMovie(movie: Partial<IMovie>): Promise<IMovie>;
115
+ movieScrap(movieId: string, date?: number): Promise<void>;
116
+ removeMovie(movieId: string): Promise<void>;
117
+ updateMovie(movieId: string, updates: Partial<IMovie>): Promise<IMovie>;
118
+ getMovieImages(movieId: string): Promise<ExternalImage[]>;
119
+ setMovieWatched(movieId: string, date: number): Promise<void>;
120
+ searchMovies(name: string): Promise<IMovie[]>;
121
+ movieRename(movieId: string, newName: string): Promise<IMovie>;
122
+ updateMoviePoster(movieId: string, poster: FormData, type: string): Promise<void>;
123
+ updateMovieImageFetch(movieId: string, image: ExternalImage): Promise<void>;
124
+ addTagToMedia(mediaId: string, tagId: string): Promise<void>;
125
+ removeTagFromMedia(mediaId: string, tagId: string): Promise<void>;
126
+ getCryptChallenge(): Promise<string>;
127
+ getChannels(): Promise<any[]>;
128
+ personRename(personId: string, newName: string): Promise<IPerson>;
129
+ personUpdate(personId: string, updates: Partial<IPerson>): Promise<IPerson>;
130
+ personAddAlt(personId: string, alt: string): Promise<IPerson>;
131
+ personRemoveAlt(personId: string, alt: string): Promise<IPerson>;
132
+ personAddSocial(personId: string, social: any): Promise<IPerson>;
133
+ personRemoveSocial(personId: string, social: any): Promise<IPerson>;
134
+ serieRename(serieId: string, newName: string): Promise<ISerie>;
135
+ serieAddAlt(serieId: string, alt: string): Promise<ISerie>;
136
+ serieRemoveAlt(serieId: string, alt: string): Promise<ISerie>;
137
+ updatePersonPortrait(personId: string, portrait: FormData): Promise<void>;
138
+ searchSeries(name: string): Promise<ISerie[]>;
139
+ setEpisodeWatched(serieId: string, season: number, number: number, date: number): Promise<void>;
140
+ getUnassignedFaces(params?: Map<string, string>): Promise<any>;
141
+ getClusters(): Promise<any>;
142
+ assignFaces(request: any): Promise<any>;
143
+ createPersonFromCluster(request: any): Promise<any>;
144
+ splitCluster(request: any): Promise<any>;
145
+ unassignFace(request: any): Promise<any>;
146
+ deleteFace(faceId: string): Promise<any>;
147
+ getAssignedFaces(personId: string): Promise<any>;
148
+ faceClusterPerson(personId: string): Promise<void>;
149
+ mergePeople(request: any): Promise<any>;
150
+ clusterFaces(personId: string): Promise<any>;
151
+ getMediaPureMetadata(mediaId: string): Promise<IFile>;
152
+ mergeMedias(request: any): Promise<IFile>;
153
+ mediaUpdateMany(update: any, ids: string[]): Promise<IFile[]>;
154
+ mediaUpdateProgress(mediaId: string, progress: number): Promise<{
155
+ progress: number;
156
+ }>;
157
+ mediaUpdateChannel(mediaId: string, update: any): Promise<IFile[]>;
158
+ refreshMedia(mediaId: string): Promise<IFile[]>;
159
+ aiTagMedia(mediaId: string): Promise<IFile[]>;
160
+ mediaUpdate(mediaId: string, update: any): Promise<IFile[]>;
161
+ splitZip(mediaId: string, from: number, to: number): Promise<IFile>;
162
+ deleteFromZip(mediaId: string, pages: number[]): Promise<IFile>;
163
+ updateMediaThumb(mediaId: string, thumb: FormData): Promise<void>;
164
+ getMediaShares(mediaId: string): Promise<any>;
165
+ shareMediaToProvider(mediaId: string, provider: string, formData?: FormData): Promise<any>;
166
+ expandUrl(parsedUrl: any): Promise<string | undefined>;
167
+ parseUrl(url: string): Promise<any>;
168
+ listVideoConvertPlugins(): Promise<any[]>;
169
+ getMedia(mediaId: string, options?: {
170
+ type?: 'stream' | 'arraybuffer' | 'blob';
171
+ }): Promise<ReadableStream | ArrayBuffer | Blob>;
172
+ getThumb(mediaId: string, options?: {
173
+ type?: 'stream' | 'arraybuffer' | 'blob';
174
+ }): Promise<ReadableStream | ArrayBuffer | Blob>;
175
+ getWatermarks(): Promise<string[]>;
176
+ getWatermark(watermark: string, options?: {
177
+ type?: 'blob' | 'arraybuffer';
178
+ }): Promise<Blob | ArrayBuffer>;
179
+ /**
180
+ * Encrypt a text string using a passphrase
181
+ * Returns format: `${base64ToBase64Url(IV)}.${base64ToBase64Url(encryptedData)}`
182
+ */
183
+ encryptText(passPhrase: string, text: string): Promise<string>;
184
+ /**
185
+ * Decrypt a text string using a passphrase
186
+ * Expects format: `${base64ToBase64Url(IV)}.${base64ToBase64Url(encryptedData)}`
187
+ */
188
+ decryptText(passPhrase: string, encryptedText: string): Promise<string>;
189
+ /**
190
+ * Encrypt a media file buffer using a passphrase
191
+ */
192
+ encryptMedia(passPhrase: string, buffer: ArrayBuffer | Uint8Array, iv?: ArrayBuffer | Uint8Array): Promise<ArrayBuffer>;
193
+ /**
194
+ * Decrypt a media file buffer using a passphrase
195
+ */
196
+ decryptMedia(passPhrase: string, buffer: ArrayBuffer | Uint8Array, iv: ArrayBuffer | Uint8Array): Promise<ArrayBuffer>;
197
+ /**
198
+ * Encrypt a complete file with thumbnail and metadata
199
+ */
200
+ encryptFile(passPhrase: string, options: EncryptFileOptions): Promise<EncryptedFile>;
201
+ /**
202
+ * Decrypt a file buffer (extracts and decrypts file data from encrypted file structure)
203
+ */
204
+ decryptFile(passPhrase: string, buffer: ArrayBuffer): Promise<ArrayBuffer>;
205
+ /**
206
+ * Decrypt a file thumbnail (extracts and decrypts thumbnail from encrypted file structure)
207
+ */
208
+ decryptMediaThumb(passPhrase: string, buffer: ArrayBuffer): Promise<ArrayBuffer>;
209
+ /**
210
+ * Encrypt a filename using a passphrase
211
+ * Returns base64url encoded encrypted filename
212
+ */
213
+ encryptFilename(passPhrase: string, filename: string, iv: ArrayBuffer | Uint8Array): Promise<string>;
214
+ /**
215
+ * Generate a random 16-byte IV (Initialization Vector)
216
+ */
217
+ getRandomIV(): Uint8Array;
218
+ /**
219
+ * Upload media file to the server
220
+ * @param data - The file data as ArrayBuffer or Uint8Array (clients must convert streams/buffers before calling)
221
+ * @param options - Upload options including thumbnail, metadata, mime types, and progress callback
222
+ * @returns Promise resolving to array of created IFile objects (IV will be in IFile.iv for encrypted files)
223
+ */
224
+ uploadMedia(data: ArrayBuffer | Uint8Array, options: {
225
+ thumb?: ArrayBuffer | Uint8Array;
226
+ metadata: Omit<MediaForUpdate, 'id'>;
227
+ fileMime: string;
228
+ thumbMime?: string;
229
+ progressCallback?: (loaded: number, total: number) => void;
230
+ }): Promise<IFile>;
231
+ }