@xyo-network/image-thumbnail-plugin 2.73.3 → 2.74.0

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.
Files changed (147) hide show
  1. package/dist/Diviner/Config.d.mts +11 -0
  2. package/dist/Diviner/Config.d.mts.map +1 -0
  3. package/dist/{types/Diviner → Diviner}/Config.d.ts +1 -1
  4. package/dist/Diviner/Config.d.ts.map +1 -0
  5. package/dist/Diviner/Diviner.d.mts +30 -0
  6. package/dist/Diviner/Diviner.d.mts.map +1 -0
  7. package/dist/{types/Diviner → Diviner}/Diviner.d.ts +1 -1
  8. package/dist/Diviner/Diviner.d.ts.map +1 -0
  9. package/dist/Diviner/Params.d.mts.map +1 -0
  10. package/dist/Diviner/Params.d.ts +5 -0
  11. package/dist/Diviner/Params.d.ts.map +1 -0
  12. package/dist/Diviner/index.d.mts.map +1 -0
  13. package/dist/{esm/Diviner/index.js → Diviner/index.d.ts} +1 -1
  14. package/dist/Diviner/index.d.ts.map +1 -0
  15. package/dist/Plugin.d.mts +116 -0
  16. package/dist/Plugin.d.mts.map +1 -0
  17. package/dist/{types/Plugin.d.ts → Plugin.d.ts} +11 -11
  18. package/dist/Plugin.d.ts.map +1 -0
  19. package/dist/Witness/Config.d.mts.map +1 -0
  20. package/dist/Witness/Config.d.ts +16 -0
  21. package/dist/Witness/Config.d.ts.map +1 -0
  22. package/dist/Witness/Params.d.mts.map +1 -0
  23. package/dist/Witness/Params.d.ts +7 -0
  24. package/dist/Witness/Params.d.ts.map +1 -0
  25. package/dist/Witness/Witness.d.mts.map +1 -0
  26. package/dist/Witness/Witness.d.ts +66 -0
  27. package/dist/Witness/Witness.d.ts.map +1 -0
  28. package/dist/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.mts.map +1 -0
  29. package/dist/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts +8 -0
  30. package/dist/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts.map +1 -0
  31. package/dist/Witness/ffmpeg/fluent/index.d.mts.map +1 -0
  32. package/dist/{esm/Witness/ffmpeg/fluent/index.js → Witness/ffmpeg/fluent/index.d.ts} +1 -1
  33. package/dist/Witness/ffmpeg/fluent/index.d.ts.map +1 -0
  34. package/dist/Witness/ffmpeg/index.d.mts.map +1 -0
  35. package/dist/{esm/Witness/ffmpeg/index.js → Witness/ffmpeg/index.d.ts} +1 -1
  36. package/dist/Witness/ffmpeg/index.d.ts.map +1 -0
  37. package/dist/Witness/ffmpeg/spawn/executeFfmpeg.d.mts.map +1 -0
  38. package/dist/Witness/ffmpeg/spawn/executeFfmpeg.d.ts +9 -0
  39. package/dist/Witness/ffmpeg/spawn/executeFfmpeg.d.ts.map +1 -0
  40. package/dist/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.mts.map +1 -0
  41. package/dist/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts +8 -0
  42. package/dist/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts.map +1 -0
  43. package/dist/Witness/ffmpeg/spawn/index.d.mts.map +1 -0
  44. package/dist/{esm/Witness/ffmpeg/spawn/index.js → Witness/ffmpeg/spawn/index.d.ts} +1 -1
  45. package/dist/Witness/ffmpeg/spawn/index.d.ts.map +1 -0
  46. package/dist/Witness/index.d.mts.map +1 -0
  47. package/dist/{esm/Witness/index.js → Witness/index.d.ts} +1 -1
  48. package/dist/Witness/index.d.ts.map +1 -0
  49. package/dist/index.d.mts.map +1 -0
  50. package/dist/{esm/index.js → index.d.ts} +1 -2
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +565 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/index.mjs +524 -0
  55. package/dist/index.mjs.map +1 -0
  56. package/package.json +39 -32
  57. package/src/Diviner/Config.ts +1 -1
  58. package/src/Diviner/Diviner.ts +5 -1
  59. package/src/Witness/Witness.ts +9 -6
  60. package/dist/cjs/Diviner/Config.js +0 -6
  61. package/dist/cjs/Diviner/Config.js.map +0 -1
  62. package/dist/cjs/Diviner/Diviner.js +0 -204
  63. package/dist/cjs/Diviner/Diviner.js.map +0 -1
  64. package/dist/cjs/Diviner/Params.js +0 -3
  65. package/dist/cjs/Diviner/Params.js.map +0 -1
  66. package/dist/cjs/Diviner/index.js +0 -7
  67. package/dist/cjs/Diviner/index.js.map +0 -1
  68. package/dist/cjs/Plugin.js +0 -21
  69. package/dist/cjs/Plugin.js.map +0 -1
  70. package/dist/cjs/Witness/Config.js +0 -6
  71. package/dist/cjs/Witness/Config.js.map +0 -1
  72. package/dist/cjs/Witness/Params.js +0 -3
  73. package/dist/cjs/Witness/Params.js.map +0 -1
  74. package/dist/cjs/Witness/Witness.js +0 -321
  75. package/dist/cjs/Witness/Witness.js.map +0 -1
  76. package/dist/cjs/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js +0 -74
  77. package/dist/cjs/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js.map +0 -1
  78. package/dist/cjs/Witness/ffmpeg/fluent/index.js +0 -5
  79. package/dist/cjs/Witness/ffmpeg/fluent/index.js.map +0 -1
  80. package/dist/cjs/Witness/ffmpeg/index.js +0 -6
  81. package/dist/cjs/Witness/ffmpeg/index.js.map +0 -1
  82. package/dist/cjs/Witness/ffmpeg/spawn/executeFfmpeg.js +0 -32
  83. package/dist/cjs/Witness/ffmpeg/spawn/executeFfmpeg.js.map +0 -1
  84. package/dist/cjs/Witness/ffmpeg/spawn/getVideoFrameAsImage.js +0 -16
  85. package/dist/cjs/Witness/ffmpeg/spawn/getVideoFrameAsImage.js.map +0 -1
  86. package/dist/cjs/Witness/ffmpeg/spawn/index.js +0 -6
  87. package/dist/cjs/Witness/ffmpeg/spawn/index.js.map +0 -1
  88. package/dist/cjs/Witness/index.js +0 -7
  89. package/dist/cjs/Witness/index.js.map +0 -1
  90. package/dist/cjs/index.js +0 -11
  91. package/dist/cjs/index.js.map +0 -1
  92. package/dist/docs.json +0 -51225
  93. package/dist/esm/Diviner/Config.js +0 -3
  94. package/dist/esm/Diviner/Config.js.map +0 -1
  95. package/dist/esm/Diviner/Diviner.js +0 -179
  96. package/dist/esm/Diviner/Diviner.js.map +0 -1
  97. package/dist/esm/Diviner/Params.js +0 -2
  98. package/dist/esm/Diviner/Params.js.map +0 -1
  99. package/dist/esm/Diviner/index.js.map +0 -1
  100. package/dist/esm/Plugin.js +0 -16
  101. package/dist/esm/Plugin.js.map +0 -1
  102. package/dist/esm/Witness/Config.js +0 -3
  103. package/dist/esm/Witness/Config.js.map +0 -1
  104. package/dist/esm/Witness/Params.js +0 -2
  105. package/dist/esm/Witness/Params.js.map +0 -1
  106. package/dist/esm/Witness/Witness.js +0 -292
  107. package/dist/esm/Witness/Witness.js.map +0 -1
  108. package/dist/esm/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js +0 -69
  109. package/dist/esm/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js.map +0 -1
  110. package/dist/esm/Witness/ffmpeg/fluent/index.js.map +0 -1
  111. package/dist/esm/Witness/ffmpeg/index.js.map +0 -1
  112. package/dist/esm/Witness/ffmpeg/spawn/executeFfmpeg.js +0 -28
  113. package/dist/esm/Witness/ffmpeg/spawn/executeFfmpeg.js.map +0 -1
  114. package/dist/esm/Witness/ffmpeg/spawn/getVideoFrameAsImage.js +0 -11
  115. package/dist/esm/Witness/ffmpeg/spawn/getVideoFrameAsImage.js.map +0 -1
  116. package/dist/esm/Witness/ffmpeg/spawn/index.js.map +0 -1
  117. package/dist/esm/Witness/index.js.map +0 -1
  118. package/dist/esm/index.js.map +0 -1
  119. package/dist/types/Diviner/Config.d.ts.map +0 -1
  120. package/dist/types/Diviner/Diviner.d.ts.map +0 -1
  121. package/dist/types/Diviner/Params.d.ts.map +0 -1
  122. package/dist/types/Diviner/index.d.ts.map +0 -1
  123. package/dist/types/Plugin.d.ts.map +0 -1
  124. package/dist/types/Witness/Config.d.ts.map +0 -1
  125. package/dist/types/Witness/Params.d.ts.map +0 -1
  126. package/dist/types/Witness/Witness.d.ts.map +0 -1
  127. package/dist/types/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts.map +0 -1
  128. package/dist/types/Witness/ffmpeg/fluent/index.d.ts.map +0 -1
  129. package/dist/types/Witness/ffmpeg/index.d.ts.map +0 -1
  130. package/dist/types/Witness/ffmpeg/spawn/executeFfmpeg.d.ts.map +0 -1
  131. package/dist/types/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts.map +0 -1
  132. package/dist/types/Witness/ffmpeg/spawn/index.d.ts.map +0 -1
  133. package/dist/types/Witness/index.d.ts.map +0 -1
  134. package/dist/types/index.d.ts.map +0 -1
  135. /package/dist/{types/Diviner/Params.d.ts → Diviner/Params.d.mts} +0 -0
  136. /package/dist/{types/Diviner/index.d.ts → Diviner/index.d.mts} +0 -0
  137. /package/dist/{types/Witness/Config.d.ts → Witness/Config.d.mts} +0 -0
  138. /package/dist/{types/Witness/Params.d.ts → Witness/Params.d.mts} +0 -0
  139. /package/dist/{types/Witness/Witness.d.ts → Witness/Witness.d.mts} +0 -0
  140. /package/dist/{types/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts → Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.mts} +0 -0
  141. /package/dist/{types/Witness/ffmpeg/fluent/index.d.ts → Witness/ffmpeg/fluent/index.d.mts} +0 -0
  142. /package/dist/{types/Witness/ffmpeg/index.d.ts → Witness/ffmpeg/index.d.mts} +0 -0
  143. /package/dist/{types/Witness/ffmpeg/spawn/executeFfmpeg.d.ts → Witness/ffmpeg/spawn/executeFfmpeg.d.mts} +0 -0
  144. /package/dist/{types/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts → Witness/ffmpeg/spawn/getVideoFrameAsImage.d.mts} +0 -0
  145. /package/dist/{types/Witness/ffmpeg/spawn/index.d.ts → Witness/ffmpeg/spawn/index.d.mts} +0 -0
  146. /package/dist/{types/Witness/index.d.ts → Witness/index.d.mts} +0 -0
  147. /package/dist/{types/index.d.ts → index.d.mts} +0 -0
@@ -1,321 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageThumbnailWitness = void 0;
4
- const tslib_1 = require("tslib");
5
- /* eslint-disable max-statements */
6
- const node_dns_1 = require("node:dns");
7
- const lodash_1 = require("@xylabs/lodash");
8
- const url_1 = require("@xylabs/url");
9
- const axios_1 = require("@xyo-network/axios");
10
- const core_1 = require("@xyo-network/core");
11
- const image_thumbnail_payload_plugin_1 = require("@xyo-network/image-thumbnail-payload-plugin");
12
- const url_payload_plugin_1 = require("@xyo-network/url-payload-plugin");
13
- const witness_1 = require("@xyo-network/witness");
14
- const async_mutex_1 = require("async-mutex");
15
- const file_type_1 = tslib_1.__importDefault(require("file-type"));
16
- const gm_1 = require("gm");
17
- const hasbin_1 = require("hasbin");
18
- const hash_wasm_1 = require("hash-wasm");
19
- const lru_cache_1 = require("lru-cache");
20
- const sha_js_1 = tslib_1.__importDefault(require("sha.js"));
21
- const url_parse_1 = tslib_1.__importDefault(require("url-parse"));
22
- const Config_1 = require("./Config");
23
- const ffmpeg_1 = require("./ffmpeg");
24
- //TODO: Break this into two Witnesses?
25
- // setFfmpegPath(ffmpegPath)
26
- const gm = (0, gm_1.subClass)({ imageMagick: '7+' });
27
- class ImageThumbnailWitness extends witness_1.AbstractWitness {
28
- constructor() {
29
- super(...arguments);
30
- this._semaphore = new async_mutex_1.Semaphore(this.maxAsyncProcesses);
31
- }
32
- get cache() {
33
- var _a;
34
- this._cache =
35
- (_a = this._cache) !== null && _a !== void 0 ? _a : new lru_cache_1.LRUCache({
36
- max: this.maxCacheEntries,
37
- maxSize: this.maxCacheBytes,
38
- //just returning the size of the data
39
- sizeCalculation: (value) => { var _a, _b; return (_b = (_a = value.url) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 1; },
40
- });
41
- return this._cache;
42
- }
43
- get encoding() {
44
- var _a;
45
- return (_a = this.config.encoding) !== null && _a !== void 0 ? _a : 'PNG';
46
- }
47
- get height() {
48
- var _a;
49
- return (_a = this.config.height) !== null && _a !== void 0 ? _a : 128;
50
- }
51
- get ipfGateway() {
52
- var _a;
53
- return (_a = this.config.ipfsGateway) !== null && _a !== void 0 ? _a : '5d7b6582.beta.decentralnetworkservices.com';
54
- }
55
- get maxAsyncProcesses() {
56
- var _a;
57
- return (_a = this.config.maxAsyncProcesses) !== null && _a !== void 0 ? _a : 2;
58
- }
59
- get maxCacheBytes() {
60
- var _a;
61
- return (_a = this.config.maxCacheBytes) !== null && _a !== void 0 ? _a : 1024 * 1024 * 16; //64MB max size
62
- }
63
- get maxCacheEntries() {
64
- var _a;
65
- return (_a = this.config.maxCacheEntries) !== null && _a !== void 0 ? _a : 500;
66
- }
67
- get quality() {
68
- var _a;
69
- return (_a = this.config.quality) !== null && _a !== void 0 ? _a : 50;
70
- }
71
- get width() {
72
- var _a;
73
- return (_a = this.config.width) !== null && _a !== void 0 ? _a : 128;
74
- }
75
- static binaryToSha256(data) {
76
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
77
- yield core_1.PayloadHasher.wasmInitialized;
78
- if (core_1.PayloadHasher.wasmSupport.canUseWasm) {
79
- try {
80
- return yield (0, hash_wasm_1.sha256)(data);
81
- }
82
- catch (ex) {
83
- core_1.PayloadHasher.wasmSupport.allowWasm = false;
84
- }
85
- }
86
- // eslint-disable-next-line deprecation/deprecation
87
- return (0, sha_js_1.default)('sha256').update(data).digest().toString();
88
- });
89
- }
90
- static bufferFromDataUrl(url) {
91
- if (url.startsWith('data:image')) {
92
- const data = url.split(',')[1];
93
- if (data) {
94
- return Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)));
95
- }
96
- else {
97
- const error = {
98
- message: 'Invalid data Url',
99
- name: 'ImageThumbnailWitnessError',
100
- url,
101
- };
102
- throw error;
103
- }
104
- }
105
- }
106
- /**
107
- * Returns the equivalent IPFS gateway URL for the supplied URL.
108
- * @param urlToCheck The URL to check
109
- * @returns If the supplied URL is an IPFS URL, it converts the URL to the
110
- * equivalent IPFS gateway URL. Otherwise, returns the original URL.
111
- */
112
- checkIpfsUrl(urlToCheck) {
113
- const url = new url_1.URL(urlToCheck);
114
- let protocol = url.protocol;
115
- let host = url.host;
116
- let path = url.pathname;
117
- const query = url.search;
118
- if (protocol === 'ipfs:') {
119
- protocol = 'https:';
120
- host = this.ipfGateway;
121
- path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`;
122
- const root = `${protocol}//${host}/${path}`;
123
- return (query === null || query === void 0 ? void 0 : query.length) > 0 ? `${root}?${query}` : root;
124
- }
125
- else {
126
- return urlToCheck;
127
- }
128
- }
129
- observeHandler(payloads = []) {
130
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
131
- if (!(0, hasbin_1.sync)('magick')) {
132
- throw Error('ImageMagick is required for this witness');
133
- }
134
- const urlPayloads = payloads.filter((payload) => payload.schema === url_payload_plugin_1.UrlSchema);
135
- return yield this._semaphore.runExclusive(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
136
- return (0, lodash_1.compact)(yield Promise.all(urlPayloads.map(({ url }) => tslib_1.__awaiter(this, void 0, void 0, function* () {
137
- const cachedResult = this.cache.get(url);
138
- if (cachedResult) {
139
- return cachedResult;
140
- }
141
- let result;
142
- //if it is a data URL, return a Buffer
143
- const dataBuffer = ImageThumbnailWitness.bufferFromDataUrl(url);
144
- if (dataBuffer) {
145
- result = {
146
- schema: image_thumbnail_payload_plugin_1.ImageThumbnailSchema,
147
- sourceHash: yield ImageThumbnailWitness.binaryToSha256(dataBuffer),
148
- sourceUrl: url,
149
- url,
150
- };
151
- }
152
- else {
153
- //if it is ipfs, go through cloud flair
154
- const mutatedUrl = this.checkIpfsUrl(url);
155
- result = yield this.fromHttp(mutatedUrl, url);
156
- }
157
- this.cache.set(url, result);
158
- return result;
159
- }))));
160
- }));
161
- });
162
- }
163
- createThumbnailDataUrl(sourceBuffer, encoding) {
164
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
165
- const thumb = yield new Promise((resolve, reject) => {
166
- gm(sourceBuffer)
167
- .quality(this.quality)
168
- .resize(this.width, this.height)
169
- .flatten()
170
- .toBuffer(encoding !== null && encoding !== void 0 ? encoding : this.encoding, (error, buffer) => {
171
- if (error) {
172
- reject(error);
173
- }
174
- else {
175
- resolve(buffer);
176
- }
177
- });
178
- });
179
- return `data:image/png;base64,${thumb.toString('base64')}`;
180
- });
181
- }
182
- /**
183
- * Creates an image thumbnail from a video.
184
- * @param videoBuffer The input video buffer.
185
- * @returns An buffer containing an image thumbnail for the video.
186
- */
187
- createThumbnailFromVideo(videoBuffer) {
188
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
189
- const imageBuffer = yield (0, ffmpeg_1.getVideoFrameAsImageFluent)(videoBuffer);
190
- return this.createThumbnailDataUrl(imageBuffer);
191
- });
192
- }
193
- fromHttp(url, sourceUrl) {
194
- var _a, _b, _c, _d, _e, _f, _g;
195
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
196
- let response;
197
- let dnsResult;
198
- try {
199
- const urlObj = new url_parse_1.default(url);
200
- dnsResult = yield node_dns_1.promises.resolve(urlObj.host);
201
- // console.log(`dnsResult: ${JSON.stringify(dnsResult, null, 2)}`)
202
- }
203
- catch (ex) {
204
- const error = ex;
205
- const result = {
206
- http: {
207
- dnsError: error.code,
208
- },
209
- schema: image_thumbnail_payload_plugin_1.ImageThumbnailSchema,
210
- sourceUrl: sourceUrl !== null && sourceUrl !== void 0 ? sourceUrl : url,
211
- };
212
- return result;
213
- }
214
- try {
215
- response = yield axios_1.axios.get(url, {
216
- responseType: 'arraybuffer',
217
- });
218
- }
219
- catch (ex) {
220
- const axiosError = ex;
221
- if (axiosError.isAxiosError) {
222
- //selectively pick fields from AxiosError
223
- const result = {
224
- http: {
225
- ipAddress: dnsResult[0],
226
- status: (_a = axiosError === null || axiosError === void 0 ? void 0 : axiosError.response) === null || _a === void 0 ? void 0 : _a.status,
227
- },
228
- schema: image_thumbnail_payload_plugin_1.ImageThumbnailSchema,
229
- sourceUrl: sourceUrl !== null && sourceUrl !== void 0 ? sourceUrl : url,
230
- };
231
- return result;
232
- }
233
- else {
234
- throw ex;
235
- }
236
- }
237
- const result = {
238
- http: {
239
- status: response.status,
240
- },
241
- schema: image_thumbnail_payload_plugin_1.ImageThumbnailSchema,
242
- sourceUrl: sourceUrl !== null && sourceUrl !== void 0 ? sourceUrl : url,
243
- };
244
- if (response.status >= 200 && response.status < 300) {
245
- const contentType = (_b = response.headers['content-type']) === null || _b === void 0 ? void 0 : _b.toString();
246
- const [mediaType, fileType] = contentType.split('/');
247
- result.mime = (_c = result.mime) !== null && _c !== void 0 ? _c : {};
248
- result.mime.returned = mediaType;
249
- const sourceBuffer = Buffer.from(response.data, 'binary');
250
- try {
251
- result.mime.detected = yield file_type_1.default.fromBuffer(sourceBuffer);
252
- }
253
- catch (ex) {
254
- const error = ex;
255
- (_d = this.logger) === null || _d === void 0 ? void 0 : _d.error(`FileType error: ${error.message}`);
256
- }
257
- const processImage = (encoding) => tslib_1.__awaiter(this, void 0, void 0, function* () {
258
- result.sourceHash = yield ImageThumbnailWitness.binaryToSha256(sourceBuffer);
259
- result.url = yield this.createThumbnailDataUrl(sourceBuffer, encoding);
260
- });
261
- const processVideo = () => tslib_1.__awaiter(this, void 0, void 0, function* () {
262
- var _h;
263
- // Gracefully handle the case where ffmpeg is not installed.
264
- if ((0, hasbin_1.sync)('ffmpeg')) {
265
- result.sourceHash = yield ImageThumbnailWitness.binaryToSha256(sourceBuffer);
266
- result.url = yield this.createThumbnailFromVideo(sourceBuffer);
267
- }
268
- else {
269
- result.mime = (_h = result.mime) !== null && _h !== void 0 ? _h : {};
270
- result.mime.invalid = true;
271
- }
272
- });
273
- let encoding = 'PNG';
274
- switch (fileType.toUpperCase()) {
275
- case 'GIF':
276
- encoding = 'GIF';
277
- break;
278
- case 'JPG':
279
- case 'JPEG':
280
- encoding = 'JPG';
281
- break;
282
- }
283
- switch (mediaType) {
284
- case 'image': {
285
- yield processImage(encoding);
286
- result.mime.type = mediaType;
287
- break;
288
- }
289
- case 'video': {
290
- yield processVideo();
291
- result.mime.type = mediaType;
292
- break;
293
- }
294
- default: {
295
- switch ((_e = result.mime.detected) === null || _e === void 0 ? void 0 : _e.mime) {
296
- case 'image': {
297
- yield processImage();
298
- result.mime.type = (_f = result.mime.detected) === null || _f === void 0 ? void 0 : _f.mime;
299
- break;
300
- }
301
- case 'video': {
302
- yield processVideo();
303
- result.mime.type = (_g = result.mime.detected) === null || _g === void 0 ? void 0 : _g.mime;
304
- break;
305
- }
306
- default: {
307
- result.mime.invalid = true;
308
- break;
309
- }
310
- }
311
- break;
312
- }
313
- }
314
- }
315
- return result;
316
- });
317
- }
318
- }
319
- exports.ImageThumbnailWitness = ImageThumbnailWitness;
320
- ImageThumbnailWitness.configSchemas = [Config_1.ImageThumbnailWitnessConfigSchema];
321
- //# sourceMappingURL=Witness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"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"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVideoFrameAsImageFluent = void 0;
4
- const tslib_1 = require("tslib");
5
- const core_1 = require("@xyo-network/core");
6
- const fluent_ffmpeg_1 = tslib_1.__importDefault(require("fluent-ffmpeg"));
7
- const promises_1 = require("fs/promises");
8
- const os_1 = require("os");
9
- const stream_1 = require("stream");
10
- /**
11
- * A Writable stream that collects output from ffmpeg.
12
- */
13
- class FfmpegOutputStream extends stream_1.Writable {
14
- constructor(options) {
15
- super(options);
16
- this.chunks = [];
17
- /**
18
- * Collects the output from ffmpeg into a buffer.
19
- * @returns A buffer containing the concatenated
20
- * output from ffmpeg.
21
- */
22
- this.toBuffer = () => Buffer.concat(this.chunks);
23
- }
24
- _write(chunk, _encoding, callback) {
25
- this.chunks.push(chunk);
26
- callback();
27
- }
28
- }
29
- /**
30
- * Execute FFmpeg using fluent API with provided input buffer and video thumbnail image.
31
- * @param videoBuffer Input video buffer.
32
- * @returns Output buffer containing the video thumbnail image.
33
- */
34
- const getVideoFrameAsImageFluent = (videoBuffer) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
35
- // Get a temp file name
36
- const tmpFile = `/${(0, os_1.tmpdir)()}/${(0, core_1.uuid)()}`;
37
- try {
38
- // Write videoBuffer to temp file for use as input to ffmpeg to
39
- // avoid issues with ffmpeg inferring premature EOF from buffer
40
- // passed via stdin (happens when ffmpeg is trying to infer
41
- // input video format)
42
- yield (0, promises_1.writeFile)(tmpFile, videoBuffer, { encoding: 'binary' });
43
- const imageBuffer = yield new Promise((resolve, reject) => {
44
- // Create a Writable stream to collect PNG output from ffmpeg
45
- const ffmpegOutput = new FfmpegOutputStream();
46
- // Execute ffmpeg using fluent API
47
- (0, fluent_ffmpeg_1.default)()
48
- // NOTE: Uncomment to debug CLI args to ffmpeg
49
- // .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))
50
- .on('error', (err) => reject(err.message))
51
- // Listen for the 'end' event to combine the output into a buffer holding the PNG image
52
- .on('end', () => resolve(ffmpegOutput.toBuffer()))
53
- .input(tmpFile) // Use temp file as input
54
- .takeFrames(1) // Only take 1st video frame
55
- .withNoAudio() // Don't include audio
56
- .outputOptions('-f image2pipe') // Write output to stdout
57
- .videoCodec('png') // Force PNG output
58
- // Start processing and direct ffmpeg stdout to writable stream
59
- .pipe(ffmpegOutput);
60
- });
61
- return imageBuffer;
62
- }
63
- finally {
64
- // Cleanup temp file
65
- try {
66
- yield (0, promises_1.unlink)(tmpFile);
67
- }
68
- catch (_a) {
69
- // No error here since file doesn't exist
70
- }
71
- }
72
- });
73
- exports.getVideoFrameAsImageFluent = getVideoFrameAsImageFluent;
74
- //# sourceMappingURL=getVideoFrameAsImageFluent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getVideoFrameAsImageFluent.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":";;;;AAAA,4CAAwC;AACxC,0EAAkC;AAClC,0CAA+C;AAC/C,2BAA2B;AAC3B,mCAAkD;AAElD;;GAEG;AACH,MAAM,kBAAmB,SAAQ,iBAAQ;IAGvC,YAAY,OAAyB;QACnC,KAAK,CAAC,OAAO,CAAC,CAAA;QAHC,WAAM,GAAiB,EAAE,CAAA;QAW1C;;;;WAIG;QACH,aAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAZ3C,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;CAQF;AAED;;;;GAIG;AACI,MAAM,0BAA0B,GAAG,CAAO,WAAmB,EAAE,EAAE;IACtE,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAI,IAAA,WAAM,GAAE,IAAI,IAAA,WAAI,GAAE,EAAE,CAAA;IACxC,IAAI;QACF,+DAA+D;QAC/D,+DAA+D;QAC/D,2DAA2D;QAC3D,sBAAsB;QACtB,MAAM,IAAA,oBAAS,EAAC,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,IAAA,uBAAM,GAAE;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,IAAA,iBAAM,EAAC,OAAO,CAAC,CAAA;SACtB;QAAC,WAAM;YACN,yCAAyC;SAC1C;KACF;AACH,CAAC,CAAA,CAAA;AApCY,QAAA,0BAA0B,8BAoCtC"}
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./getVideoFrameAsImageFluent"), exports);
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/index.ts"],"names":[],"mappings":";;;AAAA,uEAA4C"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./fluent"), exports);
5
- tslib_1.__exportStar(require("./spawn"), exports);
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Witness/ffmpeg/index.ts"],"names":[],"mappings":";;;AAAA,mDAAwB;AACxB,kDAAuB"}
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeFFmpeg = void 0;
4
- const child_process_1 = require("child_process");
5
- /**
6
- * Execute FFmpeg with the provided arguments.
7
- * @param videoBuffer Input video buffer.
8
- * @param ffmpegArgs FFmpeg arguments.
9
- * @returns Output buffer containing the video thumbnail image.
10
- */
11
- const executeFFmpeg = (videoBuffer, ffmpegArgs) => {
12
- return new Promise((resolve, reject) => {
13
- const imageData = [];
14
- const ffmpeg = (0, child_process_1.spawn)('ffmpeg', ffmpegArgs);
15
- ffmpeg.stdout.on('data', (data) => imageData.push(data));
16
- // TODO: This is required as we're seeing errors thrown due to
17
- // how we're piping the data to ffmpeg. Works perfectly though.
18
- ffmpeg.stdin.on('error', () => { });
19
- ffmpeg.on('close', (code) => {
20
- if (code !== 0) {
21
- reject(new Error(`FFmpeg exited with code ${code}`));
22
- }
23
- else {
24
- resolve(Buffer.concat(imageData));
25
- }
26
- });
27
- // Pipe the input stream to ffmpeg's stdin
28
- ffmpeg.stdin.end(videoBuffer);
29
- });
30
- };
31
- exports.executeFFmpeg = executeFFmpeg;
32
- //# sourceMappingURL=executeFfmpeg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executeFfmpeg.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":";;;AAAA,iDAAqC;AAErC;;;;;GAKG;AACI,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,IAAA,qBAAK,EAAC,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;AAlBY,QAAA,aAAa,iBAkBzB"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVideoFrameAsImage = void 0;
4
- const tslib_1 = require("tslib");
5
- const executeFfmpeg_1 = require("./executeFfmpeg");
6
- /**
7
- * Execute FFmpeg with provided input buffer and return video thumbnail image.
8
- * @param videoBuffer Input video buffer.
9
- * @returns Output buffer containing the video thumbnail image.
10
- */
11
- const getVideoFrameAsImage = (videoBuffer) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
12
- const imageBuffer = yield (0, executeFfmpeg_1.executeFFmpeg)(videoBuffer, ['-i', 'pipe:', '-ss', '00:00:00', '-vframes', '1', '-f', 'image2pipe', '-']);
13
- return imageBuffer;
14
- });
15
- exports.getVideoFrameAsImage = getVideoFrameAsImage;
16
- //# sourceMappingURL=getVideoFrameAsImage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getVideoFrameAsImage.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/getVideoFrameAsImage.ts"],"names":[],"mappings":";;;;AAAA,mDAA+C;AAE/C;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAO,WAAmB,EAAE,EAAE;IAChE,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAa,EAAC,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAA;IAClI,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA,CAAA;AAHY,QAAA,oBAAoB,wBAGhC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./executeFfmpeg"), exports);
5
- tslib_1.__exportStar(require("./getVideoFrameAsImage"), exports);
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/index.ts"],"names":[],"mappings":";;;AAAA,0DAA+B;AAC/B,iEAAsC"}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./Config"), exports);
5
- tslib_1.__exportStar(require("./Params"), exports);
6
- tslib_1.__exportStar(require("./Witness"), exports);
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Witness/index.ts"],"names":[],"mappings":";;;AAAA,mDAAwB;AACxB,mDAAwB;AACxB,oDAAyB"}
package/dist/cjs/index.js DELETED
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageThumbnailPlugin = void 0;
4
- const tslib_1 = require("tslib");
5
- const Plugin_1 = require("./Plugin");
6
- Object.defineProperty(exports, "ImageThumbnailPlugin", { enumerable: true, get: function () { return Plugin_1.ImageThumbnailPlugin; } });
7
- tslib_1.__exportStar(require("./Diviner"), exports);
8
- tslib_1.__exportStar(require("./Witness"), exports);
9
- // eslint-disable-next-line import/no-default-export
10
- exports.default = Plugin_1.ImageThumbnailPlugin;
11
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,qCAA+C;AAKtC,qGALA,6BAAoB,OAKA;AAH7B,oDAAyB;AACzB,oDAAyB;AAIzB,oDAAoD;AACpD,kBAAe,6BAAoB,CAAA"}