@xyo-network/image-thumbnail-plugin 2.72.7 → 2.72.9
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.
- package/dist/cjs/Witness/Witness.js +25 -15
- package/dist/cjs/Witness/Witness.js.map +1 -1
- package/dist/cjs/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js +58 -37
- package/dist/cjs/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js.map +1 -1
- package/dist/cjs/Witness/ffmpeg/spawn/executeFfmpeg.js +8 -9
- package/dist/cjs/Witness/ffmpeg/spawn/executeFfmpeg.js.map +1 -1
- package/dist/docs.json +5895 -4334
- package/dist/esm/Witness/Witness.js +25 -15
- package/dist/esm/Witness/Witness.js.map +1 -1
- package/dist/esm/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js +59 -38
- package/dist/esm/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js.map +1 -1
- package/dist/esm/Witness/ffmpeg/spawn/executeFfmpeg.js +8 -9
- package/dist/esm/Witness/ffmpeg/spawn/executeFfmpeg.js.map +1 -1
- package/dist/types/Plugin.d.ts +5 -1
- package/dist/types/Plugin.d.ts.map +1 -1
- package/dist/types/Witness/Config.d.ts +2 -1
- package/dist/types/Witness/Config.d.ts.map +1 -1
- package/dist/types/Witness/Witness.d.ts +2 -1
- package/dist/types/Witness/Witness.d.ts.map +1 -1
- package/dist/types/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts.map +1 -1
- package/dist/types/Witness/ffmpeg/spawn/executeFfmpeg.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/Witness/Config.ts +3 -1
- package/src/Witness/Witness.ts +30 -18
- package/src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts +61 -43
- package/src/Witness/ffmpeg/spawn/executeFfmpeg.ts +7 -11
|
@@ -4,6 +4,7 @@ import { URL } from '@xylabs/url';
|
|
|
4
4
|
import { axios } from '@xyo-network/axios';
|
|
5
5
|
import { PayloadHasher } from '@xyo-network/core';
|
|
6
6
|
import { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin';
|
|
7
|
+
import { UrlSchema } from '@xyo-network/url-payload-plugin';
|
|
7
8
|
import { AbstractWitness } from '@xyo-network/witness';
|
|
8
9
|
import { Semaphore } from 'async-mutex';
|
|
9
10
|
import FileType from 'file-type';
|
|
@@ -75,9 +76,7 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
75
76
|
if (url.startsWith('data:image')) {
|
|
76
77
|
const data = url.split(',')[1];
|
|
77
78
|
if (data) {
|
|
78
|
-
|
|
79
|
-
console.log(`data buffer: ${buffer.length}`);
|
|
80
|
-
return buffer;
|
|
79
|
+
return Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)));
|
|
81
80
|
}
|
|
82
81
|
else {
|
|
83
82
|
const error = {
|
|
@@ -116,7 +115,8 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
116
115
|
if (!hasbin('magick')) {
|
|
117
116
|
throw Error('ImageMagick is required for this witness');
|
|
118
117
|
}
|
|
119
|
-
|
|
118
|
+
const urlPayloads = payloads.filter((payload) => payload.schema === UrlSchema);
|
|
119
|
+
return await this._semaphore.runExclusive(async () => compact(await Promise.all(urlPayloads.map(async ({ url }) => {
|
|
120
120
|
const cachedResult = this.cache.get(url);
|
|
121
121
|
if (cachedResult) {
|
|
122
122
|
return cachedResult;
|
|
@@ -135,19 +135,19 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
135
135
|
else {
|
|
136
136
|
//if it is ipfs, go through cloud flair
|
|
137
137
|
const mutatedUrl = this.checkIpfsUrl(url);
|
|
138
|
-
result = await this.fromHttp(mutatedUrl);
|
|
138
|
+
result = await this.fromHttp(mutatedUrl, url);
|
|
139
139
|
}
|
|
140
140
|
this.cache.set(url, result);
|
|
141
141
|
return result;
|
|
142
142
|
}))));
|
|
143
143
|
}
|
|
144
|
-
async createThumbnailDataUrl(sourceBuffer) {
|
|
144
|
+
async createThumbnailDataUrl(sourceBuffer, encoding) {
|
|
145
145
|
const thumb = await new Promise((resolve, reject) => {
|
|
146
146
|
gm(sourceBuffer)
|
|
147
147
|
.quality(this.quality)
|
|
148
148
|
.resize(this.width, this.height)
|
|
149
149
|
.flatten()
|
|
150
|
-
.toBuffer(this.encoding, (error, buffer) => {
|
|
150
|
+
.toBuffer(encoding ?? this.encoding, (error, buffer) => {
|
|
151
151
|
if (error) {
|
|
152
152
|
reject(error);
|
|
153
153
|
}
|
|
@@ -167,7 +167,7 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
167
167
|
const imageBuffer = await getVideoFrameAsImageFluent(videoBuffer);
|
|
168
168
|
return this.createThumbnailDataUrl(imageBuffer);
|
|
169
169
|
}
|
|
170
|
-
async fromHttp(url) {
|
|
170
|
+
async fromHttp(url, sourceUrl) {
|
|
171
171
|
let response;
|
|
172
172
|
let dnsResult;
|
|
173
173
|
try {
|
|
@@ -182,7 +182,7 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
182
182
|
dnsError: error.code,
|
|
183
183
|
},
|
|
184
184
|
schema: ImageThumbnailSchema,
|
|
185
|
-
sourceUrl: url,
|
|
185
|
+
sourceUrl: sourceUrl ?? url,
|
|
186
186
|
};
|
|
187
187
|
return result;
|
|
188
188
|
}
|
|
@@ -201,7 +201,7 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
201
201
|
status: axiosError?.response?.status,
|
|
202
202
|
},
|
|
203
203
|
schema: ImageThumbnailSchema,
|
|
204
|
-
sourceUrl: url,
|
|
204
|
+
sourceUrl: sourceUrl ?? url,
|
|
205
205
|
};
|
|
206
206
|
return result;
|
|
207
207
|
}
|
|
@@ -214,11 +214,11 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
214
214
|
status: response.status,
|
|
215
215
|
},
|
|
216
216
|
schema: ImageThumbnailSchema,
|
|
217
|
-
sourceUrl: url,
|
|
217
|
+
sourceUrl: sourceUrl ?? url,
|
|
218
218
|
};
|
|
219
219
|
if (response.status >= 200 && response.status < 300) {
|
|
220
220
|
const contentType = response.headers['content-type']?.toString();
|
|
221
|
-
const mediaType = contentType.split('/')
|
|
221
|
+
const [mediaType, fileType] = contentType.split('/');
|
|
222
222
|
result.mime = result.mime ?? {};
|
|
223
223
|
result.mime.returned = mediaType;
|
|
224
224
|
const sourceBuffer = Buffer.from(response.data, 'binary');
|
|
@@ -229,9 +229,9 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
229
229
|
const error = ex;
|
|
230
230
|
this.logger?.error(`FileType error: ${error.message}`);
|
|
231
231
|
}
|
|
232
|
-
const processImage = async () => {
|
|
232
|
+
const processImage = async (encoding) => {
|
|
233
233
|
result.sourceHash = await ImageThumbnailWitness.binaryToSha256(sourceBuffer);
|
|
234
|
-
result.url = await this.createThumbnailDataUrl(sourceBuffer);
|
|
234
|
+
result.url = await this.createThumbnailDataUrl(sourceBuffer, encoding);
|
|
235
235
|
};
|
|
236
236
|
const processVideo = async () => {
|
|
237
237
|
// Gracefully handle the case where ffmpeg is not installed.
|
|
@@ -244,9 +244,19 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
244
244
|
result.mime.invalid = true;
|
|
245
245
|
}
|
|
246
246
|
};
|
|
247
|
+
let encoding = 'PNG';
|
|
248
|
+
switch (fileType.toUpperCase()) {
|
|
249
|
+
case 'GIF':
|
|
250
|
+
encoding = 'GIF';
|
|
251
|
+
break;
|
|
252
|
+
case 'JPG':
|
|
253
|
+
case 'JPEG':
|
|
254
|
+
encoding = 'JPG';
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
247
257
|
switch (mediaType) {
|
|
248
258
|
case 'image': {
|
|
249
|
-
await processImage();
|
|
259
|
+
await processImage(encoding);
|
|
250
260
|
result.mime.type = mediaType;
|
|
251
261
|
break;
|
|
252
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,KAAK,EAA6B,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAkB,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;
|
|
1
|
+
{"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,69 @@
|
|
|
1
|
+
import { uuid } from '@xyo-network/core';
|
|
1
2
|
import ffmpeg from 'fluent-ffmpeg';
|
|
2
|
-
import {
|
|
3
|
+
import { unlink, writeFile } from 'fs/promises';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
5
|
+
import { Writable } from 'stream';
|
|
6
|
+
/**
|
|
7
|
+
* A Writable stream that collects output from ffmpeg.
|
|
8
|
+
*/
|
|
9
|
+
class FfmpegOutputStream extends Writable {
|
|
10
|
+
chunks = [];
|
|
11
|
+
constructor(options) {
|
|
12
|
+
super(options);
|
|
13
|
+
}
|
|
14
|
+
_write(chunk, _encoding, callback) {
|
|
15
|
+
this.chunks.push(chunk);
|
|
16
|
+
callback();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Collects the output from ffmpeg into a buffer.
|
|
20
|
+
* @returns A buffer containing the concatenated
|
|
21
|
+
* output from ffmpeg.
|
|
22
|
+
*/
|
|
23
|
+
toBuffer = () => Buffer.concat(this.chunks);
|
|
24
|
+
}
|
|
3
25
|
/**
|
|
4
26
|
* Execute FFmpeg using fluent API with provided input buffer and video thumbnail image.
|
|
5
27
|
* @param videoBuffer Input video buffer.
|
|
6
28
|
* @returns Output buffer containing the video thumbnail image.
|
|
7
29
|
*/
|
|
8
30
|
export const getVideoFrameAsImageFluent = async (videoBuffer) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
// Get a temp file name
|
|
32
|
+
const tmpFile = `/${tmpdir()}/${uuid()}`;
|
|
33
|
+
try {
|
|
34
|
+
// Write videoBuffer to temp file for use as input to ffmpeg to
|
|
35
|
+
// avoid issues with ffmpeg inferring premature EOF from buffer
|
|
36
|
+
// passed via stdin (happens when ffmpeg is trying to infer
|
|
37
|
+
// input video format)
|
|
38
|
+
await writeFile(tmpFile, videoBuffer, { encoding: 'binary' });
|
|
39
|
+
const imageBuffer = await new Promise((resolve, reject) => {
|
|
40
|
+
// Create a Writable stream to collect PNG output from ffmpeg
|
|
41
|
+
const ffmpegOutput = new FfmpegOutputStream();
|
|
42
|
+
// Execute ffmpeg using fluent API
|
|
43
|
+
ffmpeg()
|
|
44
|
+
// NOTE: Uncomment to debug CLI args to ffmpeg
|
|
45
|
+
// .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))
|
|
46
|
+
.on('error', (err) => reject(err.message))
|
|
47
|
+
// Listen for the 'end' event to combine the output into a buffer holding the PNG image
|
|
48
|
+
.on('end', () => resolve(ffmpegOutput.toBuffer()))
|
|
49
|
+
.input(tmpFile) // Use temp file as input
|
|
50
|
+
.takeFrames(1) // Only take 1st video frame
|
|
51
|
+
.withNoAudio() // Don't include audio
|
|
52
|
+
.outputOptions('-f image2pipe') // Write output to stdout
|
|
53
|
+
.videoCodec('png') // Force PNG output
|
|
54
|
+
// Start processing and direct ffmpeg stdout to writable stream
|
|
55
|
+
.pipe(ffmpegOutput);
|
|
25
56
|
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.on('end', () => resolve(Buffer.concat(pngChunks)))
|
|
38
|
-
.on('data', (chunk) => pngChunks.push(chunk))
|
|
39
|
-
// .toFormat('png')
|
|
40
|
-
.outputOptions('-f image2pipe');
|
|
41
|
-
// .outputOptions('-vcodec png')
|
|
42
|
-
// .output(writableStream, { end: true })
|
|
43
|
-
// Start processing
|
|
44
|
-
command.pipe(writableStream);
|
|
45
|
-
});
|
|
46
|
-
return imageBuffer;
|
|
57
|
+
return imageBuffer;
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
// Cleanup temp file
|
|
61
|
+
try {
|
|
62
|
+
await unlink(tmpFile);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// No error here since file doesn't exist
|
|
66
|
+
}
|
|
67
|
+
}
|
|
47
68
|
};
|
|
48
69
|
//# sourceMappingURL=getVideoFrameAsImageFluent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getVideoFrameAsImageFluent.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"getVideoFrameAsImageFluent.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAmB,MAAM,QAAQ,CAAA;AAElD;;GAEG;AACH,MAAM,kBAAmB,SAAQ,QAAQ;IACtB,MAAM,GAAiB,EAAE,CAAA;IAE1C,YAAY,OAAyB;QACnC,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;IAEQ,MAAM,CAAC,KAAY,EAAE,SAAyB,EAAE,QAAwC;QAC/F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,QAAQ,EAAE,CAAA;IACZ,CAAC;IAED;;;;OAIG;IACH,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;CAC5C;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IACtE,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;IACxC,IAAI;QACF,+DAA+D;QAC/D,+DAA+D;QAC/D,2DAA2D;QAC3D,sBAAsB;QACtB,MAAM,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC7D,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChE,6DAA6D;YAC7D,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAC7C,kCAAkC;YAClC,MAAM,EAAE;gBACN,8CAA8C;gBAC9C,4FAA4F;iBAC3F,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1C,uFAAuF;iBACtF,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACjD,KAAK,CAAC,OAAO,CAAC,CAAC,yBAAyB;iBACxC,UAAU,CAAC,CAAC,CAAC,CAAC,4BAA4B;iBAC1C,WAAW,EAAE,CAAC,sBAAsB;iBACpC,aAAa,CAAC,eAAe,CAAC,CAAC,yBAAyB;iBACxD,UAAU,CAAC,KAAK,CAAC,CAAC,mBAAmB;gBACtC,+DAA+D;iBAC9D,IAAI,CAAC,YAAY,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;QACF,OAAO,WAAW,CAAA;KACnB;YAAS;QACR,oBAAoB;QACpB,IAAI;YACF,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;SACtB;QAAC,MAAM;YACN,yCAAyC;SAC1C;KACF;AACH,CAAC,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
|
-
import { PassThrough } from 'stream';
|
|
3
2
|
/**
|
|
4
3
|
* Execute FFmpeg with the provided arguments.
|
|
5
4
|
* @param videoBuffer Input video buffer.
|
|
@@ -8,22 +7,22 @@ import { PassThrough } from 'stream';
|
|
|
8
7
|
*/
|
|
9
8
|
export const executeFFmpeg = (videoBuffer, ffmpegArgs) => {
|
|
10
9
|
return new Promise((resolve, reject) => {
|
|
10
|
+
const imageData = [];
|
|
11
11
|
const ffmpeg = spawn('ffmpeg', ffmpegArgs);
|
|
12
|
-
|
|
13
|
-
const videoStream = new PassThrough().end(videoBuffer);
|
|
14
|
-
// Pipe the input stream to ffmpeg's stdin
|
|
15
|
-
videoStream.pipe(ffmpeg.stdin);
|
|
16
|
-
const chunks = [];
|
|
17
|
-
ffmpeg.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
12
|
+
ffmpeg.stdout.on('data', (data) => imageData.push(data));
|
|
18
13
|
// TODO: This is required as we're seeing errors thrown due to
|
|
19
14
|
// how we're piping the data to ffmpeg. Works perfectly though.
|
|
20
15
|
ffmpeg.stdin.on('error', () => { });
|
|
21
16
|
ffmpeg.on('close', (code) => {
|
|
22
17
|
if (code !== 0) {
|
|
23
|
-
|
|
18
|
+
reject(new Error(`FFmpeg exited with code ${code}`));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
resolve(Buffer.concat(imageData));
|
|
24
22
|
}
|
|
25
|
-
resolve(Buffer.concat(chunks));
|
|
26
23
|
});
|
|
24
|
+
// Pipe the input stream to ffmpeg's stdin
|
|
25
|
+
ffmpeg.stdin.end(videoBuffer);
|
|
27
26
|
});
|
|
28
27
|
};
|
|
29
28
|
//# sourceMappingURL=executeFfmpeg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeFfmpeg.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"executeFfmpeg.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAE,UAAoB,EAAmB,EAAE;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,8DAA8D;QAC9D,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAA;aACrD;iBAAM;gBACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;aAClC;QACH,CAAC,CAAC,CAAA;QACF,0CAA0C;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/dist/types/Plugin.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare const ImageThumbnailPlugin: () => import("@xyo-network/payloadset
|
|
|
17
17
|
} | undefined;
|
|
18
18
|
readonly sign?: boolean | undefined;
|
|
19
19
|
readonly storeQueries?: boolean | undefined;
|
|
20
|
+
readonly timestamp?: boolean | undefined;
|
|
20
21
|
} & Omit<Omit<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
|
|
21
22
|
accountDerivationPath?: string | undefined;
|
|
22
23
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
@@ -32,6 +33,7 @@ export declare const ImageThumbnailPlugin: () => import("@xyo-network/payloadset
|
|
|
32
33
|
} | undefined;
|
|
33
34
|
readonly sign?: boolean | undefined;
|
|
34
35
|
readonly storeQueries?: boolean | undefined;
|
|
36
|
+
readonly timestamp?: boolean | undefined;
|
|
35
37
|
} & Omit<{
|
|
36
38
|
archivist?: string | undefined;
|
|
37
39
|
schema: "network.xyo.image.thumbnail.witness.config";
|
|
@@ -39,7 +41,7 @@ export declare const ImageThumbnailPlugin: () => import("@xyo-network/payloadset
|
|
|
39
41
|
schema: "network.xyo.payload.set";
|
|
40
42
|
}) | undefined;
|
|
41
43
|
} & {
|
|
42
|
-
encoding?: "
|
|
44
|
+
encoding?: import("./Witness").ImageThumbnailEncoding | undefined;
|
|
43
45
|
height?: number | undefined;
|
|
44
46
|
ipfsGateway?: string | undefined;
|
|
45
47
|
maxAsyncProcesses?: number | undefined;
|
|
@@ -76,6 +78,7 @@ export declare const ImageThumbnailPlugin: () => import("@xyo-network/payloadset
|
|
|
76
78
|
} | undefined;
|
|
77
79
|
readonly sign?: boolean | undefined;
|
|
78
80
|
readonly storeQueries?: boolean | undefined;
|
|
81
|
+
readonly timestamp?: boolean | undefined;
|
|
79
82
|
} & Omit<Omit<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
|
|
80
83
|
accountDerivationPath?: string | undefined;
|
|
81
84
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
@@ -91,6 +94,7 @@ export declare const ImageThumbnailPlugin: () => import("@xyo-network/payloadset
|
|
|
91
94
|
} | undefined;
|
|
92
95
|
readonly sign?: boolean | undefined;
|
|
93
96
|
readonly storeQueries?: boolean | undefined;
|
|
97
|
+
readonly timestamp?: boolean | undefined;
|
|
94
98
|
} & Omit<{
|
|
95
99
|
schema: "network.xyo.image.thumbnail.diviner.config";
|
|
96
100
|
} & Omit<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAa9B,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { WitnessConfig } from '@xyo-network/witness';
|
|
2
2
|
export declare const ImageThumbnailWitnessConfigSchema: "network.xyo.image.thumbnail.witness.config";
|
|
3
3
|
export type ImageThumbnailWitnessConfigSchema = typeof ImageThumbnailWitnessConfigSchema;
|
|
4
|
+
export type ImageThumbnailEncoding = 'PNG' | 'JPG' | 'GIF';
|
|
4
5
|
export type ImageThumbnailWitnessConfig = WitnessConfig<{
|
|
5
|
-
encoding?:
|
|
6
|
+
encoding?: ImageThumbnailEncoding;
|
|
6
7
|
height?: number;
|
|
7
8
|
ipfsGateway?: string;
|
|
8
9
|
maxAsyncProcesses?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/Witness/Config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,eAAO,MAAM,iCAAiC,8CAAoD,CAAA;AAClG,MAAM,MAAM,iCAAiC,GAAG,OAAO,iCAAiC,CAAA;AAExF,MAAM,MAAM,2BAA2B,GAAG,aAAa,CAAC;IACtD,QAAQ,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/Witness/Config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,eAAO,MAAM,iCAAiC,8CAAoD,CAAA;AAClG,MAAM,MAAM,iCAAiC,GAAG,OAAO,iCAAiC,CAAA;AAExF,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AAE1D,MAAM,MAAM,2BAA2B,GAAG,aAAa,CAAC;IACtD,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,iCAAiC,CAAA;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin';
|
|
|
2
2
|
import { UrlPayload } from '@xyo-network/url-payload-plugin';
|
|
3
3
|
import { AbstractWitness } from '@xyo-network/witness';
|
|
4
4
|
import { LRUCache } from 'lru-cache';
|
|
5
|
+
import { ImageThumbnailEncoding } from './Config';
|
|
5
6
|
import { ImageThumbnailWitnessParams } from './Params';
|
|
6
7
|
export interface ImageThumbnailWitnessError extends Error {
|
|
7
8
|
name: 'ImageThumbnailWitnessError';
|
|
@@ -35,7 +36,7 @@ export declare class ImageThumbnailWitness<TParams extends ImageThumbnailWitness
|
|
|
35
36
|
} & {
|
|
36
37
|
schema: "network.xyo.image.thumbnail";
|
|
37
38
|
}, unknown>;
|
|
38
|
-
get encoding():
|
|
39
|
+
get encoding(): ImageThumbnailEncoding;
|
|
39
40
|
get height(): number;
|
|
40
41
|
get ipfGateway(): string;
|
|
41
42
|
get maxAsyncProcesses(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAwB,MAAM,6CAA6C,CAAA;AAClG,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAwB,MAAM,6CAA6C,CAAA;AAClG,OAAO,EAAE,UAAU,EAAa,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAOtD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAIpC,OAAO,EAAE,sBAAsB,EAAqC,MAAM,UAAU,CAAA;AAEpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAQtD,MAAM,WAAW,0BAA2B,SAAQ,KAAK;IACvD,IAAI,EAAE,4BAA4B,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,qBAAqB,CAAC,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAC5I,OAAgB,aAAa,iDAAsC;IAEnE,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAwC;IAE1D,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;gBAUR;IAED,IAAI,QAAQ,2BAEX;IAED,IAAI,MAAM,WAET;IAED,IAAI,UAAU,WAEb;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,eAAe,WAElB;IAED,IAAI,OAAO,WAEV;IAED,IAAI,KAAK,WAER;mBAEoB,cAAc;IAanC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM;cAiBN,cAAc,CAAC,QAAQ,GAAE,UAAU,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAsCjF,sBAAsB;IAiBpC;;;;OAIG;YACW,wBAAwB;YAKxB,QAAQ;CA4HvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getVideoFrameAsImageFluent.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"getVideoFrameAsImageFluent.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":";AA6BA;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,gBAAuB,MAAM,oBAoCnE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeFfmpeg.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"executeFfmpeg.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,gBAAiB,MAAM,cAAc,MAAM,EAAE,KAAG,QAAQ,MAAM,CAkBvF,CAAA"}
|
package/package.json
CHANGED
|
@@ -13,18 +13,18 @@
|
|
|
13
13
|
"@xylabs/assert": "^2.9.3",
|
|
14
14
|
"@xylabs/delay": "^2.9.3",
|
|
15
15
|
"@xylabs/url": "^2.9.3",
|
|
16
|
-
"@xyo-network/abstract-diviner": "~2.72.
|
|
17
|
-
"@xyo-network/archivist-model": "~2.72.
|
|
18
|
-
"@xyo-network/axios": "~2.72.
|
|
19
|
-
"@xyo-network/core": "~2.72.
|
|
20
|
-
"@xyo-network/diviner-model": "~2.72.
|
|
21
|
-
"@xyo-network/diviner-payload-model": "~2.72.
|
|
22
|
-
"@xyo-network/image-thumbnail-payload-plugin": "~2.72.
|
|
23
|
-
"@xyo-network/module": "~2.72.
|
|
24
|
-
"@xyo-network/payload-model": "~2.72.
|
|
25
|
-
"@xyo-network/payloadset-plugin": "~2.72.
|
|
26
|
-
"@xyo-network/url-payload-plugin": "~2.72.
|
|
27
|
-
"@xyo-network/witness": "~2.72.
|
|
16
|
+
"@xyo-network/abstract-diviner": "~2.72.9",
|
|
17
|
+
"@xyo-network/archivist-model": "~2.72.9",
|
|
18
|
+
"@xyo-network/axios": "~2.72.9",
|
|
19
|
+
"@xyo-network/core": "~2.72.9",
|
|
20
|
+
"@xyo-network/diviner-model": "~2.72.9",
|
|
21
|
+
"@xyo-network/diviner-payload-model": "~2.72.9",
|
|
22
|
+
"@xyo-network/image-thumbnail-payload-plugin": "~2.72.9",
|
|
23
|
+
"@xyo-network/module": "~2.72.9",
|
|
24
|
+
"@xyo-network/payload-model": "~2.72.9",
|
|
25
|
+
"@xyo-network/payloadset-plugin": "~2.72.9",
|
|
26
|
+
"@xyo-network/url-payload-plugin": "~2.72.9",
|
|
27
|
+
"@xyo-network/witness": "~2.72.9",
|
|
28
28
|
"async-mutex": "^0.4.0",
|
|
29
29
|
"file-type": "^16.5.4",
|
|
30
30
|
"fluent-ffmpeg": "^2.1.2",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@types/fluent-ffmpeg": "^2.1.21",
|
|
41
41
|
"@types/gm": "^1.25.1",
|
|
42
42
|
"@types/hasbin": "^1.2.0",
|
|
43
|
-
"@types/lodash": "^4.14.
|
|
43
|
+
"@types/lodash": "^4.14.198",
|
|
44
44
|
"@xylabs/ts-scripts-yarn3": "^2.19.3",
|
|
45
45
|
"@xylabs/tsconfig": "^2.19.3",
|
|
46
46
|
"typescript": "^5.2.2"
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
},
|
|
79
79
|
"sideEffects": false,
|
|
80
80
|
"types": "dist/types/index.d.ts",
|
|
81
|
-
"version": "2.72.
|
|
81
|
+
"version": "2.72.9"
|
|
82
82
|
}
|
package/src/Witness/Config.ts
CHANGED
|
@@ -4,8 +4,10 @@ import { WitnessConfig } from '@xyo-network/witness'
|
|
|
4
4
|
export const ImageThumbnailWitnessConfigSchema = `${ImageThumbnailSchema}.witness.config` as const
|
|
5
5
|
export type ImageThumbnailWitnessConfigSchema = typeof ImageThumbnailWitnessConfigSchema
|
|
6
6
|
|
|
7
|
+
export type ImageThumbnailEncoding = 'PNG' | 'JPG' | 'GIF'
|
|
8
|
+
|
|
7
9
|
export type ImageThumbnailWitnessConfig = WitnessConfig<{
|
|
8
|
-
encoding?:
|
|
10
|
+
encoding?: ImageThumbnailEncoding
|
|
9
11
|
height?: number
|
|
10
12
|
ipfsGateway?: string
|
|
11
13
|
maxAsyncProcesses?: number
|