@xyo-network/image-thumbnail-plugin 2.99.6 → 3.0.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.
- package/dist/node/index.d.ts +91 -3
- package/dist/node/index.mjs +51 -56
- package/dist/node/index.mjs.map +1 -1
- package/package.json +24 -31
- package/src/Witness/Witness.ts +42 -44
- package/src/index.ts +1 -1
- package/xy.config.ts +2 -1
- package/dist/neutral/Plugin.d.cts +0 -32
- package/dist/neutral/Plugin.d.cts.map +0 -1
- package/dist/neutral/Plugin.d.mts +0 -32
- package/dist/neutral/Plugin.d.mts.map +0 -1
- package/dist/neutral/Plugin.d.ts +0 -32
- package/dist/neutral/Plugin.d.ts.map +0 -1
- package/dist/neutral/Witness/Config.d.cts +0 -18
- package/dist/neutral/Witness/Config.d.cts.map +0 -1
- package/dist/neutral/Witness/Config.d.mts +0 -18
- package/dist/neutral/Witness/Config.d.mts.map +0 -1
- package/dist/neutral/Witness/Config.d.ts +0 -18
- package/dist/neutral/Witness/Config.d.ts.map +0 -1
- package/dist/neutral/Witness/Params.d.cts +0 -7
- package/dist/neutral/Witness/Params.d.cts.map +0 -1
- package/dist/neutral/Witness/Params.d.mts +0 -7
- package/dist/neutral/Witness/Params.d.mts.map +0 -1
- package/dist/neutral/Witness/Params.d.ts +0 -7
- package/dist/neutral/Witness/Params.d.ts.map +0 -1
- package/dist/neutral/Witness/Witness.d.cts +0 -32
- package/dist/neutral/Witness/Witness.d.cts.map +0 -1
- package/dist/neutral/Witness/Witness.d.mts +0 -32
- package/dist/neutral/Witness/Witness.d.mts.map +0 -1
- package/dist/neutral/Witness/Witness.d.ts +0 -32
- package/dist/neutral/Witness/Witness.d.ts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.cts +0 -2
- package/dist/neutral/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.cts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.mts +0 -2
- package/dist/neutral/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.mts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts +0 -2
- package/dist/neutral/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/fluent/index.d.cts +0 -2
- package/dist/neutral/Witness/ffmpeg/fluent/index.d.cts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/fluent/index.d.mts +0 -2
- package/dist/neutral/Witness/ffmpeg/fluent/index.d.mts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/fluent/index.d.ts +0 -2
- package/dist/neutral/Witness/ffmpeg/fluent/index.d.ts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/index.d.cts +0 -3
- package/dist/neutral/Witness/ffmpeg/index.d.cts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/index.d.mts +0 -3
- package/dist/neutral/Witness/ffmpeg/index.d.mts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/index.d.ts +0 -3
- package/dist/neutral/Witness/ffmpeg/index.d.ts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/executeFfmpeg.d.cts +0 -2
- package/dist/neutral/Witness/ffmpeg/spawn/executeFfmpeg.d.cts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/executeFfmpeg.d.mts +0 -2
- package/dist/neutral/Witness/ffmpeg/spawn/executeFfmpeg.d.mts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/executeFfmpeg.d.ts +0 -2
- package/dist/neutral/Witness/ffmpeg/spawn/executeFfmpeg.d.ts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.cts +0 -2
- package/dist/neutral/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.cts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.mts +0 -2
- package/dist/neutral/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.mts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts +0 -2
- package/dist/neutral/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/index.d.cts +0 -3
- package/dist/neutral/Witness/ffmpeg/spawn/index.d.cts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/index.d.mts +0 -3
- package/dist/neutral/Witness/ffmpeg/spawn/index.d.mts.map +0 -1
- package/dist/neutral/Witness/ffmpeg/spawn/index.d.ts +0 -3
- package/dist/neutral/Witness/ffmpeg/spawn/index.d.ts.map +0 -1
- package/dist/neutral/Witness/index.d.cts +0 -4
- package/dist/neutral/Witness/index.d.cts.map +0 -1
- package/dist/neutral/Witness/index.d.mts +0 -4
- package/dist/neutral/Witness/index.d.mts.map +0 -1
- package/dist/neutral/Witness/index.d.ts +0 -4
- package/dist/neutral/Witness/index.d.ts.map +0 -1
- package/dist/neutral/Witness/lib/checkIpfsUrl.d.cts +0 -2
- package/dist/neutral/Witness/lib/checkIpfsUrl.d.cts.map +0 -1
- package/dist/neutral/Witness/lib/checkIpfsUrl.d.mts +0 -2
- package/dist/neutral/Witness/lib/checkIpfsUrl.d.mts.map +0 -1
- package/dist/neutral/Witness/lib/checkIpfsUrl.d.ts +0 -2
- package/dist/neutral/Witness/lib/checkIpfsUrl.d.ts.map +0 -1
- package/dist/neutral/Witness/lib/createDataUrl.d.cts +0 -2
- package/dist/neutral/Witness/lib/createDataUrl.d.cts.map +0 -1
- package/dist/neutral/Witness/lib/createDataUrl.d.mts +0 -2
- package/dist/neutral/Witness/lib/createDataUrl.d.mts.map +0 -1
- package/dist/neutral/Witness/lib/createDataUrl.d.ts +0 -2
- package/dist/neutral/Witness/lib/createDataUrl.d.ts.map +0 -1
- package/dist/neutral/Witness/lib/index.d.cts +0 -4
- package/dist/neutral/Witness/lib/index.d.cts.map +0 -1
- package/dist/neutral/Witness/lib/index.d.mts +0 -4
- package/dist/neutral/Witness/lib/index.d.mts.map +0 -1
- package/dist/neutral/Witness/lib/index.d.ts +0 -4
- package/dist/neutral/Witness/lib/index.d.ts.map +0 -1
- package/dist/neutral/Witness/lib/resolveDynamicSvg.d.cts +0 -2
- package/dist/neutral/Witness/lib/resolveDynamicSvg.d.cts.map +0 -1
- package/dist/neutral/Witness/lib/resolveDynamicSvg.d.mts +0 -2
- package/dist/neutral/Witness/lib/resolveDynamicSvg.d.mts.map +0 -1
- package/dist/neutral/Witness/lib/resolveDynamicSvg.d.ts +0 -2
- package/dist/neutral/Witness/lib/resolveDynamicSvg.d.ts.map +0 -1
- package/dist/neutral/index.cjs +0 -449
- package/dist/neutral/index.cjs.map +0 -1
- package/dist/neutral/index.d.cts +0 -4
- package/dist/neutral/index.d.cts.map +0 -1
- package/dist/neutral/index.d.mts +0 -4
- package/dist/neutral/index.d.mts.map +0 -1
- package/dist/neutral/index.d.ts +0 -4
- package/dist/neutral/index.d.ts.map +0 -1
- package/dist/neutral/index.mjs +0 -415
- package/dist/neutral/index.mjs.map +0 -1
- package/dist/node/Plugin.d.cts +0 -32
- package/dist/node/Plugin.d.cts.map +0 -1
- package/dist/node/Plugin.d.mts +0 -32
- package/dist/node/Plugin.d.mts.map +0 -1
- package/dist/node/Plugin.d.ts +0 -32
- package/dist/node/Plugin.d.ts.map +0 -1
- package/dist/node/Witness/Config.d.cts +0 -18
- package/dist/node/Witness/Config.d.cts.map +0 -1
- package/dist/node/Witness/Config.d.mts +0 -18
- package/dist/node/Witness/Config.d.mts.map +0 -1
- package/dist/node/Witness/Config.d.ts +0 -18
- package/dist/node/Witness/Config.d.ts.map +0 -1
- package/dist/node/Witness/Params.d.cts +0 -7
- package/dist/node/Witness/Params.d.cts.map +0 -1
- package/dist/node/Witness/Params.d.mts +0 -7
- package/dist/node/Witness/Params.d.mts.map +0 -1
- package/dist/node/Witness/Params.d.ts +0 -7
- package/dist/node/Witness/Params.d.ts.map +0 -1
- package/dist/node/Witness/Witness.d.cts +0 -32
- package/dist/node/Witness/Witness.d.cts.map +0 -1
- package/dist/node/Witness/Witness.d.mts +0 -32
- package/dist/node/Witness/Witness.d.mts.map +0 -1
- package/dist/node/Witness/Witness.d.ts +0 -32
- package/dist/node/Witness/Witness.d.ts.map +0 -1
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.cts +0 -2
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.cts.map +0 -1
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.mts +0 -2
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.mts.map +0 -1
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts +0 -2
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.ts.map +0 -1
- package/dist/node/Witness/ffmpeg/fluent/index.d.cts +0 -2
- package/dist/node/Witness/ffmpeg/fluent/index.d.cts.map +0 -1
- package/dist/node/Witness/ffmpeg/fluent/index.d.mts +0 -2
- package/dist/node/Witness/ffmpeg/fluent/index.d.mts.map +0 -1
- package/dist/node/Witness/ffmpeg/fluent/index.d.ts +0 -2
- package/dist/node/Witness/ffmpeg/fluent/index.d.ts.map +0 -1
- package/dist/node/Witness/ffmpeg/index.d.cts +0 -3
- package/dist/node/Witness/ffmpeg/index.d.cts.map +0 -1
- package/dist/node/Witness/ffmpeg/index.d.mts +0 -3
- package/dist/node/Witness/ffmpeg/index.d.mts.map +0 -1
- package/dist/node/Witness/ffmpeg/index.d.ts +0 -3
- package/dist/node/Witness/ffmpeg/index.d.ts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.cts +0 -2
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.cts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.mts +0 -2
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.mts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.ts +0 -2
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.ts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.cts +0 -2
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.cts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.mts +0 -2
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.mts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts +0 -2
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.ts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/index.d.cts +0 -3
- package/dist/node/Witness/ffmpeg/spawn/index.d.cts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/index.d.mts +0 -3
- package/dist/node/Witness/ffmpeg/spawn/index.d.mts.map +0 -1
- package/dist/node/Witness/ffmpeg/spawn/index.d.ts +0 -3
- package/dist/node/Witness/ffmpeg/spawn/index.d.ts.map +0 -1
- package/dist/node/Witness/index.d.cts +0 -4
- package/dist/node/Witness/index.d.cts.map +0 -1
- package/dist/node/Witness/index.d.mts +0 -4
- package/dist/node/Witness/index.d.mts.map +0 -1
- package/dist/node/Witness/index.d.ts +0 -4
- package/dist/node/Witness/index.d.ts.map +0 -1
- package/dist/node/Witness/lib/checkIpfsUrl.d.cts +0 -2
- package/dist/node/Witness/lib/checkIpfsUrl.d.cts.map +0 -1
- package/dist/node/Witness/lib/checkIpfsUrl.d.mts +0 -2
- package/dist/node/Witness/lib/checkIpfsUrl.d.mts.map +0 -1
- package/dist/node/Witness/lib/checkIpfsUrl.d.ts +0 -2
- package/dist/node/Witness/lib/checkIpfsUrl.d.ts.map +0 -1
- package/dist/node/Witness/lib/createDataUrl.d.cts +0 -2
- package/dist/node/Witness/lib/createDataUrl.d.cts.map +0 -1
- package/dist/node/Witness/lib/createDataUrl.d.mts +0 -2
- package/dist/node/Witness/lib/createDataUrl.d.mts.map +0 -1
- package/dist/node/Witness/lib/createDataUrl.d.ts +0 -2
- package/dist/node/Witness/lib/createDataUrl.d.ts.map +0 -1
- package/dist/node/Witness/lib/index.d.cts +0 -4
- package/dist/node/Witness/lib/index.d.cts.map +0 -1
- package/dist/node/Witness/lib/index.d.mts +0 -4
- package/dist/node/Witness/lib/index.d.mts.map +0 -1
- package/dist/node/Witness/lib/index.d.ts +0 -4
- package/dist/node/Witness/lib/index.d.ts.map +0 -1
- package/dist/node/Witness/lib/resolveDynamicSvg.d.cts +0 -2
- package/dist/node/Witness/lib/resolveDynamicSvg.d.cts.map +0 -1
- package/dist/node/Witness/lib/resolveDynamicSvg.d.mts +0 -2
- package/dist/node/Witness/lib/resolveDynamicSvg.d.mts.map +0 -1
- package/dist/node/Witness/lib/resolveDynamicSvg.d.ts +0 -2
- package/dist/node/Witness/lib/resolveDynamicSvg.d.ts.map +0 -1
- package/dist/node/index.cjs +0 -459
- package/dist/node/index.cjs.map +0 -1
- package/dist/node/index.d.cts +0 -4
- package/dist/node/index.d.cts.map +0 -1
- package/dist/node/index.d.mts +0 -4
- package/dist/node/index.d.mts.map +0 -1
- package/dist/node/index.d.ts.map +0 -1
package/dist/node/index.cjs
DELETED
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
-
|
|
31
|
-
// src/index.ts
|
|
32
|
-
var src_exports = {};
|
|
33
|
-
__export(src_exports, {
|
|
34
|
-
ImageThumbnailPlugin: () => ImageThumbnailPlugin,
|
|
35
|
-
ImageThumbnailWitness: () => ImageThumbnailWitness,
|
|
36
|
-
ImageThumbnailWitnessConfigSchema: () => ImageThumbnailWitnessConfigSchema,
|
|
37
|
-
default: () => ImageThumbnailPlugin
|
|
38
|
-
});
|
|
39
|
-
module.exports = __toCommonJS(src_exports);
|
|
40
|
-
|
|
41
|
-
// src/Plugin.ts
|
|
42
|
-
var import_diviner_image_thumbnail = require("@xyo-network/diviner-image-thumbnail");
|
|
43
|
-
var import_image_thumbnail_payload_plugin3 = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
44
|
-
var import_payload_model = require("@xyo-network/payload-model");
|
|
45
|
-
var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
|
|
46
|
-
|
|
47
|
-
// src/Witness/Config.ts
|
|
48
|
-
var import_image_thumbnail_payload_plugin = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
49
|
-
var ImageThumbnailWitnessConfigSchema = `${import_image_thumbnail_payload_plugin.ImageThumbnailSchema}.witness.config`;
|
|
50
|
-
|
|
51
|
-
// src/Witness/Witness.ts
|
|
52
|
-
var import_node_buffer = require("buffer");
|
|
53
|
-
var import_node_dns = require("dns");
|
|
54
|
-
var import_lodash = require("@xylabs/lodash");
|
|
55
|
-
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
56
|
-
var import_hash = require("@xyo-network/hash");
|
|
57
|
-
var import_image_thumbnail_payload_plugin2 = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
58
|
-
var import_url_payload_plugin = require("@xyo-network/url-payload-plugin");
|
|
59
|
-
var import_async_mutex = require("async-mutex");
|
|
60
|
-
var import_axios2 = __toESM(require("axios"), 1);
|
|
61
|
-
var import_file_type = __toESM(require("file-type"), 1);
|
|
62
|
-
var import_gm = __toESM(require("gm"), 1);
|
|
63
|
-
var import_hasbin = __toESM(require("hasbin"), 1);
|
|
64
|
-
var import_hash_wasm = require("hash-wasm");
|
|
65
|
-
var import_sha = __toESM(require("sha.js"), 1);
|
|
66
|
-
var import_url_parse = __toESM(require("url-parse"), 1);
|
|
67
|
-
|
|
68
|
-
// src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts
|
|
69
|
-
var import_promises = require("fs/promises");
|
|
70
|
-
var import_node_os = require("os");
|
|
71
|
-
var import_node_stream = require("stream");
|
|
72
|
-
var import_fluent_ffmpeg = __toESM(require("fluent-ffmpeg"), 1);
|
|
73
|
-
var import_uuid = require("uuid");
|
|
74
|
-
var FfmpegOutputStream = class extends import_node_stream.Writable {
|
|
75
|
-
chunks = [];
|
|
76
|
-
constructor(options) {
|
|
77
|
-
super(options);
|
|
78
|
-
}
|
|
79
|
-
_write(chunk, _encoding, callback) {
|
|
80
|
-
this.chunks.push(chunk);
|
|
81
|
-
callback();
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Collects the output from ffmpeg into a buffer.
|
|
85
|
-
* @returns A buffer containing the concatenated
|
|
86
|
-
* output from ffmpeg.
|
|
87
|
-
*/
|
|
88
|
-
toBuffer = () => Buffer.concat(this.chunks);
|
|
89
|
-
};
|
|
90
|
-
var getVideoFrameAsImageFluent = async (videoBuffer) => {
|
|
91
|
-
const tmpFile = `/${(0, import_node_os.tmpdir)()}/${(0, import_uuid.v4)()}`;
|
|
92
|
-
try {
|
|
93
|
-
await (0, import_promises.writeFile)(tmpFile, new Uint8Array(videoBuffer), { encoding: "binary" });
|
|
94
|
-
const imageBuffer = await new Promise((resolve, reject) => {
|
|
95
|
-
const ffmpegOutput = new FfmpegOutputStream();
|
|
96
|
-
(0, import_fluent_ffmpeg.default)().on("error", (err) => reject(err.message)).on("end", () => resolve(ffmpegOutput.toBuffer())).input(tmpFile).takeFrames(1).withNoAudio().outputOptions("-f image2pipe").videoCodec("png").pipe(ffmpegOutput);
|
|
97
|
-
});
|
|
98
|
-
return imageBuffer;
|
|
99
|
-
} finally {
|
|
100
|
-
try {
|
|
101
|
-
await (0, import_promises.unlink)(tmpFile);
|
|
102
|
-
} catch {
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
// src/Witness/lib/checkIpfsUrl.ts
|
|
108
|
-
var import_assert = require("@xylabs/assert");
|
|
109
|
-
var allowIpfsIoRepair = true;
|
|
110
|
-
var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
|
|
111
|
-
try {
|
|
112
|
-
const url = new URL(urlToCheck);
|
|
113
|
-
let protocol = url.protocol;
|
|
114
|
-
let host = url.host;
|
|
115
|
-
let path = url.pathname;
|
|
116
|
-
const query = url.search;
|
|
117
|
-
if (protocol === "ipfs:") {
|
|
118
|
-
protocol = "https:";
|
|
119
|
-
host = (0, import_assert.assertEx)(ipfsGateway, () => "No ipfsGateway provided");
|
|
120
|
-
path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
121
|
-
const root = `${protocol}//${host}/${path}`;
|
|
122
|
-
return (query == null ? void 0 : query.length) > 0 ? `${root}?${query}` : root;
|
|
123
|
-
} else if (allowIpfsIoRepair && protocol === "https" && host === "ipfs.io") {
|
|
124
|
-
protocol = "https:";
|
|
125
|
-
host = (0, import_assert.assertEx)(ipfsGateway, () => "No ipfsGateway provided");
|
|
126
|
-
const pathParts = path.split("/");
|
|
127
|
-
if (pathParts[0] === "ipfs") {
|
|
128
|
-
pathParts.shift();
|
|
129
|
-
}
|
|
130
|
-
path = pathParts.join("/");
|
|
131
|
-
const root = `${protocol}//${host}/${path}`;
|
|
132
|
-
return (query == null ? void 0 : query.length) > 0 ? `${root}?${query}` : root;
|
|
133
|
-
} else {
|
|
134
|
-
return urlToCheck;
|
|
135
|
-
}
|
|
136
|
-
} catch {
|
|
137
|
-
return urlToCheck;
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
// src/Witness/lib/createDataUrl.ts
|
|
142
|
-
var import_base64_js = require("base64-js");
|
|
143
|
-
var createDataUrl = (data, contextType, encoding = "base64") => {
|
|
144
|
-
return `data:${contextType};${encoding},${(0, import_base64_js.fromByteArray)(new Uint8Array(data))}`;
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// src/Witness/lib/resolveDynamicSvg.ts
|
|
148
|
-
var import_axios = __toESM(require("axios"), 1);
|
|
149
|
-
var import_base64_js2 = require("base64-js");
|
|
150
|
-
var import_xml2js = require("xml2js");
|
|
151
|
-
var resolveDynamicSvg = async (base64Bytes) => {
|
|
152
|
-
const decoder = new TextDecoder();
|
|
153
|
-
const bytes = (0, import_base64_js2.toByteArray)(base64Bytes);
|
|
154
|
-
const svg = decoder.decode(bytes);
|
|
155
|
-
const svgObj = await (0, import_xml2js.parseStringPromise)(svg);
|
|
156
|
-
const svgNode = svgObj["svg"];
|
|
157
|
-
const imageResults = await Promise.all(
|
|
158
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
159
|
-
svgNode["image"].map(async (img) => [
|
|
160
|
-
img.$,
|
|
161
|
-
await import_axios.default.get(img.$.href, {
|
|
162
|
-
responseType: "arraybuffer"
|
|
163
|
-
})
|
|
164
|
-
])
|
|
165
|
-
);
|
|
166
|
-
const image = imageResults.map(([href, response]) => {
|
|
167
|
-
var _a;
|
|
168
|
-
if (response.data) {
|
|
169
|
-
const sourceBuffer = Buffer.from(response.data, "binary");
|
|
170
|
-
return { $: { href: `data:${(_a = response.headers["content-type"]) == null ? void 0 : _a.toString()};base64,${sourceBuffer.toString("base64")}` } };
|
|
171
|
-
} else {
|
|
172
|
-
return { $: { href } };
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
const updatedSVG = { ...svgObj, svg: { ...svgNode, image } };
|
|
176
|
-
const builder = new import_xml2js.Builder();
|
|
177
|
-
return builder.buildObject(updatedSVG);
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
// src/Witness/Witness.ts
|
|
181
|
-
var gm = import_gm.default.subClass({ imageMagick: "7+" });
|
|
182
|
-
var ImageThumbnailWitness = class _ImageThumbnailWitness extends import_abstract_witness.AbstractWitness {
|
|
183
|
-
static configSchemas = [...super.configSchemas, ImageThumbnailWitnessConfigSchema];
|
|
184
|
-
static defaultConfigSchema = ImageThumbnailWitnessConfigSchema;
|
|
185
|
-
_semaphore = new import_async_mutex.Semaphore(this.maxAsyncProcesses);
|
|
186
|
-
get encoding() {
|
|
187
|
-
return this.config.encoding ?? "PNG";
|
|
188
|
-
}
|
|
189
|
-
get height() {
|
|
190
|
-
return this.config.height ?? 128;
|
|
191
|
-
}
|
|
192
|
-
get ipfsGateway() {
|
|
193
|
-
return this.config.ipfsGateway ?? "5d7b6582.beta.decentralnetworkservices.com";
|
|
194
|
-
}
|
|
195
|
-
get maxAsyncProcesses() {
|
|
196
|
-
return this.config.maxAsyncProcesses ?? 4;
|
|
197
|
-
}
|
|
198
|
-
get quality() {
|
|
199
|
-
return this.config.quality ?? 50;
|
|
200
|
-
}
|
|
201
|
-
get width() {
|
|
202
|
-
return this.config.width ?? 128;
|
|
203
|
-
}
|
|
204
|
-
static async binaryToSha256(data) {
|
|
205
|
-
const viewData = new Uint8Array(data);
|
|
206
|
-
await import_hash.PayloadHasher.wasmInitialized;
|
|
207
|
-
if (import_hash.PayloadHasher.wasmSupport.canUseWasm) {
|
|
208
|
-
try {
|
|
209
|
-
return await (0, import_hash_wasm.sha256)(viewData);
|
|
210
|
-
} catch {
|
|
211
|
-
import_hash.PayloadHasher.wasmSupport.allowWasm = false;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return (0, import_sha.default)("sha256").update(viewData).digest().toString();
|
|
215
|
-
}
|
|
216
|
-
static bufferFromDataUrl(url) {
|
|
217
|
-
if (url.startsWith("data:image")) {
|
|
218
|
-
const data = url.split(",")[1];
|
|
219
|
-
if (data) {
|
|
220
|
-
return Uint8Array.from(atob(data), (c) => c.codePointAt(0) ?? 0);
|
|
221
|
-
} else {
|
|
222
|
-
const error = {
|
|
223
|
-
message: "Invalid data Url",
|
|
224
|
-
name: "ImageThumbnailWitnessError",
|
|
225
|
-
url
|
|
226
|
-
};
|
|
227
|
-
throw error;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
async observeHandler(payloads = []) {
|
|
232
|
-
if (!import_hasbin.default.sync("magick")) {
|
|
233
|
-
throw new Error("ImageMagick is required for this witness");
|
|
234
|
-
}
|
|
235
|
-
const urlPayloads = payloads.filter((payload) => payload.schema === import_url_payload_plugin.UrlSchema);
|
|
236
|
-
const process = async () => {
|
|
237
|
-
return (0, import_lodash.compact)(
|
|
238
|
-
await Promise.all(
|
|
239
|
-
urlPayloads.map(async ({ url }) => {
|
|
240
|
-
let result;
|
|
241
|
-
const dataBuffer = _ImageThumbnailWitness.bufferFromDataUrl(url);
|
|
242
|
-
if (dataBuffer) {
|
|
243
|
-
if (this.config.dataUrlPassthrough) {
|
|
244
|
-
result = {
|
|
245
|
-
schema: import_image_thumbnail_payload_plugin2.ImageThumbnailSchema,
|
|
246
|
-
sourceHash: await _ImageThumbnailWitness.binaryToSha256(dataBuffer),
|
|
247
|
-
sourceUrl: url,
|
|
248
|
-
url
|
|
249
|
-
};
|
|
250
|
-
} else {
|
|
251
|
-
let cookedDataBuffer = dataBuffer;
|
|
252
|
-
const urlParts = url.split(";");
|
|
253
|
-
const [, contentType] = urlParts[0].split(":");
|
|
254
|
-
if (contentType.startsWith("image/svg")) {
|
|
255
|
-
const [encoding, byteString] = urlParts[1].split(",");
|
|
256
|
-
if (encoding === "base64") {
|
|
257
|
-
const newSvg = await resolveDynamicSvg(byteString);
|
|
258
|
-
const newSvgDataUrl = createDataUrl(import_node_buffer.Buffer.from(newSvg), contentType);
|
|
259
|
-
cookedDataBuffer = _ImageThumbnailWitness.bufferFromDataUrl(newSvgDataUrl) ?? dataBuffer;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
result = await this.processMedia(
|
|
263
|
-
cookedDataBuffer,
|
|
264
|
-
{
|
|
265
|
-
schema: import_image_thumbnail_payload_plugin2.ImageThumbnailSchema,
|
|
266
|
-
sourceUrl: url
|
|
267
|
-
},
|
|
268
|
-
contentType
|
|
269
|
-
);
|
|
270
|
-
}
|
|
271
|
-
} else {
|
|
272
|
-
const mutatedUrl = checkIpfsUrl(url, this.ipfsGateway);
|
|
273
|
-
result = await this.fromHttp(mutatedUrl, url);
|
|
274
|
-
}
|
|
275
|
-
return result;
|
|
276
|
-
})
|
|
277
|
-
)
|
|
278
|
-
);
|
|
279
|
-
};
|
|
280
|
-
return this.config.runExclusive ? await this._semaphore.runExclusive(() => process()) : process();
|
|
281
|
-
}
|
|
282
|
-
async createThumbnailDataUrl(sourceBuffer, encoding) {
|
|
283
|
-
const thumb = await new Promise((resolve, reject) => {
|
|
284
|
-
gm(import_node_buffer.Buffer.from(sourceBuffer)).quality(this.quality).resize(this.width, this.height).flatten().toBuffer(encoding ?? this.encoding, (error, buffer) => {
|
|
285
|
-
if (error) {
|
|
286
|
-
reject(error);
|
|
287
|
-
} else {
|
|
288
|
-
resolve(buffer);
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
return createDataUrl(thumb, "image/png");
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Creates an image thumbnail from a video.
|
|
296
|
-
* @param videoBuffer The input video buffer.
|
|
297
|
-
* @returns An buffer containing an image thumbnail for the video.
|
|
298
|
-
*/
|
|
299
|
-
async createThumbnailFromVideo(videoBuffer) {
|
|
300
|
-
const imageBuffer = await getVideoFrameAsImageFluent(videoBuffer);
|
|
301
|
-
return this.createThumbnailDataUrl(imageBuffer);
|
|
302
|
-
}
|
|
303
|
-
// eslint-disable-next-line complexity
|
|
304
|
-
async fromHttp(url, sourceUrl) {
|
|
305
|
-
var _a, _b, _c;
|
|
306
|
-
let response;
|
|
307
|
-
let dnsResult;
|
|
308
|
-
try {
|
|
309
|
-
const urlObj = new import_url_parse.default(url);
|
|
310
|
-
dnsResult = await import_node_dns.promises.resolve(urlObj.host);
|
|
311
|
-
} catch (ex) {
|
|
312
|
-
const error = ex;
|
|
313
|
-
const result2 = {
|
|
314
|
-
http: {
|
|
315
|
-
code: error.code
|
|
316
|
-
},
|
|
317
|
-
schema: import_image_thumbnail_payload_plugin2.ImageThumbnailSchema,
|
|
318
|
-
sourceUrl: sourceUrl ?? url
|
|
319
|
-
};
|
|
320
|
-
return result2;
|
|
321
|
-
}
|
|
322
|
-
try {
|
|
323
|
-
response = await import_axios2.default.get(url, {
|
|
324
|
-
responseType: "arraybuffer"
|
|
325
|
-
});
|
|
326
|
-
} catch (ex) {
|
|
327
|
-
const axiosError = ex;
|
|
328
|
-
if (axiosError.isAxiosError) {
|
|
329
|
-
const result2 = {
|
|
330
|
-
http: {
|
|
331
|
-
ipAddress: dnsResult[0]
|
|
332
|
-
},
|
|
333
|
-
schema: import_image_thumbnail_payload_plugin2.ImageThumbnailSchema,
|
|
334
|
-
sourceUrl: sourceUrl ?? url
|
|
335
|
-
};
|
|
336
|
-
if (((_a = axiosError == null ? void 0 : axiosError.response) == null ? void 0 : _a.status) !== void 0) {
|
|
337
|
-
result2.http = result2.http ?? {};
|
|
338
|
-
result2.http.status = (_b = axiosError == null ? void 0 : axiosError.response) == null ? void 0 : _b.status;
|
|
339
|
-
}
|
|
340
|
-
if ((axiosError == null ? void 0 : axiosError.code) !== void 0) {
|
|
341
|
-
result2.http = result2.http ?? {};
|
|
342
|
-
result2.http.code = axiosError == null ? void 0 : axiosError.code;
|
|
343
|
-
}
|
|
344
|
-
return result2;
|
|
345
|
-
} else {
|
|
346
|
-
throw ex;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
const result = {
|
|
350
|
-
http: {
|
|
351
|
-
status: response.status
|
|
352
|
-
},
|
|
353
|
-
schema: import_image_thumbnail_payload_plugin2.ImageThumbnailSchema,
|
|
354
|
-
sourceUrl: sourceUrl ?? url
|
|
355
|
-
};
|
|
356
|
-
if (response.status >= 200 && response.status < 300) {
|
|
357
|
-
const contentType = (_c = response.headers["content-type"]) == null ? void 0 : _c.toString();
|
|
358
|
-
const sourceBuffer = import_node_buffer.Buffer.from(response.data, "binary");
|
|
359
|
-
return this.processMedia(sourceBuffer, result, contentType);
|
|
360
|
-
}
|
|
361
|
-
return result;
|
|
362
|
-
}
|
|
363
|
-
async processMedia(sourceBuffer, imageThumbnail, contentType) {
|
|
364
|
-
var _a, _b, _c, _d, _e;
|
|
365
|
-
const [mediaType, fileType] = (contentType == null ? void 0 : contentType.split("/")) ?? ["", ""];
|
|
366
|
-
imageThumbnail.mime = imageThumbnail.mime ?? {};
|
|
367
|
-
imageThumbnail.mime.returned = mediaType;
|
|
368
|
-
try {
|
|
369
|
-
imageThumbnail.mime.detected = await import_file_type.default.fromBuffer(sourceBuffer);
|
|
370
|
-
} catch (ex) {
|
|
371
|
-
const error = ex;
|
|
372
|
-
(_a = this.logger) == null ? void 0 : _a.error(`FileType error: ${error.message}`);
|
|
373
|
-
}
|
|
374
|
-
const processImage = async (encoding2) => {
|
|
375
|
-
imageThumbnail.sourceHash = await _ImageThumbnailWitness.binaryToSha256(sourceBuffer);
|
|
376
|
-
imageThumbnail.url = await this.createThumbnailDataUrl(sourceBuffer, encoding2);
|
|
377
|
-
};
|
|
378
|
-
const processVideo = async () => {
|
|
379
|
-
if (import_hasbin.default.sync("ffmpeg")) {
|
|
380
|
-
imageThumbnail.sourceHash = await _ImageThumbnailWitness.binaryToSha256(sourceBuffer);
|
|
381
|
-
imageThumbnail.url = await this.createThumbnailFromVideo(sourceBuffer);
|
|
382
|
-
} else {
|
|
383
|
-
imageThumbnail.mime = imageThumbnail.mime ?? {};
|
|
384
|
-
imageThumbnail.mime.invalid = true;
|
|
385
|
-
}
|
|
386
|
-
};
|
|
387
|
-
let encoding = "PNG";
|
|
388
|
-
switch (fileType.toUpperCase()) {
|
|
389
|
-
case "GIF": {
|
|
390
|
-
encoding = "GIF";
|
|
391
|
-
break;
|
|
392
|
-
}
|
|
393
|
-
case "JPG":
|
|
394
|
-
case "JPEG": {
|
|
395
|
-
encoding = "JPG";
|
|
396
|
-
break;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
switch (mediaType) {
|
|
400
|
-
case "image": {
|
|
401
|
-
await processImage(encoding);
|
|
402
|
-
imageThumbnail.mime.type = mediaType;
|
|
403
|
-
break;
|
|
404
|
-
}
|
|
405
|
-
case "video": {
|
|
406
|
-
await processVideo();
|
|
407
|
-
imageThumbnail.mime.type = mediaType;
|
|
408
|
-
break;
|
|
409
|
-
}
|
|
410
|
-
default: {
|
|
411
|
-
const [detectedMediaType] = ((_c = (_b = imageThumbnail.mime.detected) == null ? void 0 : _b.mime) == null ? void 0 : _c.split("/")) ?? ["", ""];
|
|
412
|
-
switch (detectedMediaType) {
|
|
413
|
-
case "image": {
|
|
414
|
-
await processImage();
|
|
415
|
-
imageThumbnail.mime.type = (_d = imageThumbnail.mime.detected) == null ? void 0 : _d.mime;
|
|
416
|
-
break;
|
|
417
|
-
}
|
|
418
|
-
case "video": {
|
|
419
|
-
await processVideo();
|
|
420
|
-
imageThumbnail.mime.type = (_e = imageThumbnail.mime.detected) == null ? void 0 : _e.mime;
|
|
421
|
-
break;
|
|
422
|
-
}
|
|
423
|
-
default: {
|
|
424
|
-
imageThumbnail.mime.invalid = true;
|
|
425
|
-
break;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
break;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
return imageThumbnail;
|
|
432
|
-
}
|
|
433
|
-
};
|
|
434
|
-
|
|
435
|
-
// src/Plugin.ts
|
|
436
|
-
var ImageThumbnailPlugin = () => (0, import_payloadset_plugin.createPayloadSetDualPlugin)(
|
|
437
|
-
{ required: { [import_image_thumbnail_payload_plugin3.ImageThumbnailSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
438
|
-
{
|
|
439
|
-
diviner: async (params) => {
|
|
440
|
-
const result = await import_diviner_image_thumbnail.ImageThumbnailDiviner.create(params);
|
|
441
|
-
return result;
|
|
442
|
-
},
|
|
443
|
-
witness: async (params) => {
|
|
444
|
-
const result = await ImageThumbnailWitness.create(params);
|
|
445
|
-
return result;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
);
|
|
449
|
-
|
|
450
|
-
// src/index.ts
|
|
451
|
-
__reExport(src_exports, require("@xyo-network/diviner-image-thumbnail"), module.exports);
|
|
452
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
453
|
-
0 && (module.exports = {
|
|
454
|
-
ImageThumbnailPlugin,
|
|
455
|
-
ImageThumbnailWitness,
|
|
456
|
-
ImageThumbnailWitnessConfigSchema,
|
|
457
|
-
...require("@xyo-network/diviner-image-thumbnail")
|
|
458
|
-
});
|
|
459
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/node/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness/Config.ts","../../src/Witness/Witness.ts","../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts","../../src/Witness/lib/checkIpfsUrl.ts","../../src/Witness/lib/createDataUrl.ts","../../src/Witness/lib/resolveDynamicSvg.ts"],"sourcesContent":["// eslint-disable-next-line import/no-default-export\nexport { ImageThumbnailPlugin as default, ImageThumbnailPlugin } from './Plugin.ts'\nexport * from './Witness/index.ts'\nexport * from '@xyo-network/diviner-image-thumbnail'\n","import { ImageThumbnailDiviner } from '@xyo-network/diviner-image-thumbnail'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDualPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { ImageThumbnailWitness } from './Witness/index.ts'\n\nexport const ImageThumbnailPlugin = () =>\n createPayloadSetDualPlugin<ImageThumbnailWitness, ImageThumbnailDiviner>(\n { required: { [ImageThumbnailSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n const result = await ImageThumbnailDiviner.create(params)\n return result\n },\n witness: async (params) => {\n const result = await ImageThumbnailWitness.create(params)\n return result\n },\n },\n )\n","import { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nexport const ImageThumbnailWitnessConfigSchema = `${ImageThumbnailSchema}.witness.config` as const\nexport type ImageThumbnailWitnessConfigSchema = typeof ImageThumbnailWitnessConfigSchema\n\nexport type ImageThumbnailEncoding = 'PNG' | 'JPG' | 'GIF'\n\nexport type ImageThumbnailWitnessConfig = WitnessConfig<{\n dataUrlPassthrough?: boolean\n encoding?: ImageThumbnailEncoding\n height?: number\n ipfsGateway?: string\n maxAsyncProcesses?: number\n maxCacheBytes?: number\n maxCacheEntries?: number\n quality?: number\n runExclusive?: boolean\n schema: ImageThumbnailWitnessConfigSchema\n width?: number\n}>\n","/* eslint-disable max-statements */\nimport { Buffer } from 'node:buffer'\nimport { promises as dnsPromises } from 'node:dns'\n\nimport { compact } from '@xylabs/lodash'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { ImageThumbnail, ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { Schema } from '@xyo-network/payload-model'\nimport { UrlPayload, UrlSchema } from '@xyo-network/url-payload-plugin'\nimport { Semaphore } from 'async-mutex'\nimport type { AxiosError, AxiosResponse } from 'axios'\nimport axios from 'axios'\nimport FileType from 'file-type'\nimport graphicsMagick from 'gm'\nimport hasbin from 'hasbin'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport Url from 'url-parse'\n\nimport { ImageThumbnailEncoding, ImageThumbnailWitnessConfigSchema } from './Config.ts'\nimport { getVideoFrameAsImageFluent } from './ffmpeg/index.ts'\nimport { checkIpfsUrl, createDataUrl, resolveDynamicSvg } from './lib/index.ts'\nimport { ImageThumbnailWitnessParams } from './Params.ts'\n\n// TODO: Break this into two Witnesses?\n\n// setFfmpegPath(ffmpegPath)\n\nconst gm = graphicsMagick.subClass({ imageMagick: '7+' })\n\nexport interface ImageThumbnailWitnessError extends Error {\n name: 'ImageThumbnailWitnessError'\n url: string\n}\n\nexport interface DnsError extends Error {\n code: string\n}\n\nexport class ImageThumbnailWitness<TParams extends ImageThumbnailWitnessParams = ImageThumbnailWitnessParams> extends AbstractWitness<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailWitnessConfigSchema\n\n private _semaphore = new Semaphore(this.maxAsyncProcesses)\n\n get encoding() {\n return this.config.encoding ?? 'PNG'\n }\n\n get height() {\n return this.config.height ?? 128\n }\n\n get ipfsGateway() {\n return this.config.ipfsGateway ?? '5d7b6582.beta.decentralnetworkservices.com'\n }\n\n get maxAsyncProcesses() {\n return this.config.maxAsyncProcesses ?? 4\n }\n\n get quality() {\n return this.config.quality ?? 50\n }\n\n get width() {\n return this.config.width ?? 128\n }\n\n private static async binaryToSha256(data: ArrayBuffer) {\n const viewData = new Uint8Array(data)\n await PayloadHasher.wasmInitialized\n if (PayloadHasher.wasmSupport.canUseWasm) {\n try {\n return await sha256(viewData)\n } catch {\n PayloadHasher.wasmSupport.allowWasm = false\n }\n }\n\n return shajs('sha256').update(viewData).digest().toString()\n }\n\n private static bufferFromDataUrl(url: string): ArrayBuffer | undefined {\n if (url.startsWith('data:image')) {\n const data = url.split(',')[1]\n if (data) {\n return Uint8Array.from(atob(data), c => c.codePointAt(0) ?? 0)\n } else {\n const error: ImageThumbnailWitnessError = {\n message: 'Invalid data Url',\n name: 'ImageThumbnailWitnessError',\n url,\n }\n throw error\n }\n }\n }\n\n protected override async observeHandler(payloads: UrlPayload[] = []): Promise<ImageThumbnail[]> {\n if (!hasbin.sync('magick')) {\n throw new Error('ImageMagick is required for this witness')\n }\n const urlPayloads = payloads.filter(payload => payload.schema === UrlSchema)\n const process = async () => {\n return compact(\n await Promise.all(\n urlPayloads.map<Promise<ImageThumbnail>>(async ({ url }) => {\n let result: ImageThumbnail\n\n // if it is a data URL, return a Buffer\n const dataBuffer = ImageThumbnailWitness.bufferFromDataUrl(url)\n\n if (dataBuffer) {\n if (this.config.dataUrlPassthrough) {\n result = {\n schema: ImageThumbnailSchema,\n sourceHash: await ImageThumbnailWitness.binaryToSha256(dataBuffer),\n sourceUrl: url,\n url,\n }\n } else {\n let cookedDataBuffer = dataBuffer\n const urlParts = url.split(';')\n const [, contentType] = urlParts[0].split(':')\n if (contentType.startsWith('image/svg')) {\n const [encoding, byteString] = urlParts[1].split(',')\n if (encoding === 'base64') {\n const newSvg = await resolveDynamicSvg(byteString)\n const newSvgDataUrl = createDataUrl(Buffer.from(newSvg), contentType)\n cookedDataBuffer = ImageThumbnailWitness.bufferFromDataUrl(newSvgDataUrl) ?? dataBuffer\n }\n }\n result = await this.processMedia(\n cookedDataBuffer,\n {\n schema: ImageThumbnailSchema,\n sourceUrl: url,\n },\n contentType,\n )\n }\n } else {\n // if it is ipfs, go through cloud flair\n const mutatedUrl = checkIpfsUrl(url, this.ipfsGateway)\n result = await this.fromHttp(mutatedUrl, url)\n }\n return result\n }),\n ),\n )\n }\n return this.config.runExclusive ? await this._semaphore.runExclusive(() => process()) : process()\n }\n\n private async createThumbnailDataUrl(sourceBuffer: ArrayBuffer, encoding?: ImageThumbnailEncoding) {\n const thumb = await new Promise<Buffer>((resolve, reject) => {\n gm(Buffer.from(sourceBuffer))\n .quality(this.quality)\n .resize(this.width, this.height)\n .flatten()\n .toBuffer(encoding ?? this.encoding, (error, buffer) => {\n if (error) {\n reject(error)\n } else {\n resolve(buffer)\n }\n })\n })\n return createDataUrl(thumb, 'image/png')\n }\n\n /**\n * Creates an image thumbnail from a video.\n * @param videoBuffer The input video buffer.\n * @returns An buffer containing an image thumbnail for the video.\n */\n private async createThumbnailFromVideo(videoBuffer: ArrayBuffer) {\n const imageBuffer = await getVideoFrameAsImageFluent(videoBuffer)\n return this.createThumbnailDataUrl(imageBuffer)\n }\n\n // eslint-disable-next-line complexity\n private async fromHttp(url: string, sourceUrl?: string): Promise<ImageThumbnail> {\n let response: AxiosResponse\n let dnsResult: string[]\n try {\n const urlObj = new Url(url)\n dnsResult = await dnsPromises.resolve(urlObj.host)\n } catch (ex) {\n const error = ex as DnsError\n const result: ImageThumbnail = {\n http: {\n code: error.code,\n },\n schema: ImageThumbnailSchema,\n sourceUrl: sourceUrl ?? url,\n }\n return result\n }\n try {\n response = await axios.get(url, {\n responseType: 'arraybuffer',\n })\n } catch (ex) {\n const axiosError = ex as AxiosError\n if (axiosError.isAxiosError) {\n // selectively pick fields from AxiosError\n const result: ImageThumbnail = {\n http: {\n ipAddress: dnsResult[0],\n },\n schema: ImageThumbnailSchema,\n sourceUrl: sourceUrl ?? url,\n }\n if (axiosError?.response?.status !== undefined) {\n result.http = result.http ?? {}\n result.http.status = axiosError?.response?.status\n }\n if (axiosError?.code !== undefined) {\n result.http = result.http ?? {}\n result.http.code = axiosError?.code\n }\n return result\n } else {\n throw ex\n }\n }\n\n const result: ImageThumbnail = {\n http: {\n status: response.status,\n },\n schema: ImageThumbnailSchema,\n sourceUrl: sourceUrl ?? url,\n }\n\n if (response.status >= 200 && response.status < 300) {\n const contentType: string | undefined = response.headers['content-type']?.toString()\n const sourceBuffer = Buffer.from(response.data, 'binary')\n\n return this.processMedia(sourceBuffer, result, contentType)\n }\n return result\n }\n\n private async processMedia(sourceBuffer: ArrayBuffer, imageThumbnail: ImageThumbnail, contentType?: string): Promise<ImageThumbnail> {\n const [mediaType, fileType] = contentType?.split('/') ?? ['', '']\n imageThumbnail.mime = imageThumbnail.mime ?? {}\n imageThumbnail.mime.returned = mediaType\n\n try {\n imageThumbnail.mime.detected = await FileType.fromBuffer(sourceBuffer)\n } catch (ex) {\n const error = ex as Error\n this.logger?.error(`FileType error: ${error.message}`)\n }\n\n const processImage = async (encoding?: ImageThumbnailEncoding) => {\n imageThumbnail.sourceHash = await ImageThumbnailWitness.binaryToSha256(sourceBuffer)\n imageThumbnail.url = await this.createThumbnailDataUrl(sourceBuffer, encoding)\n }\n\n const processVideo = async () => {\n // Gracefully handle the case where ffmpeg is not installed.\n\n if (hasbin.sync('ffmpeg')) {\n imageThumbnail.sourceHash = await ImageThumbnailWitness.binaryToSha256(sourceBuffer)\n imageThumbnail.url = await this.createThumbnailFromVideo(sourceBuffer)\n } else {\n imageThumbnail.mime = imageThumbnail.mime ?? {}\n imageThumbnail.mime.invalid = true\n }\n }\n\n let encoding: ImageThumbnailEncoding = 'PNG'\n\n switch (fileType.toUpperCase()) {\n case 'GIF': {\n encoding = 'GIF'\n break\n }\n case 'JPG':\n case 'JPEG': {\n encoding = 'JPG'\n break\n }\n }\n\n switch (mediaType) {\n case 'image': {\n await processImage(encoding)\n imageThumbnail.mime.type = mediaType\n break\n }\n case 'video': {\n await processVideo()\n imageThumbnail.mime.type = mediaType\n break\n }\n default: {\n const [detectedMediaType] = imageThumbnail.mime.detected?.mime?.split('/') ?? ['', '']\n switch (detectedMediaType) {\n case 'image': {\n await processImage()\n imageThumbnail.mime.type = imageThumbnail.mime.detected?.mime\n break\n }\n case 'video': {\n await processVideo()\n imageThumbnail.mime.type = imageThumbnail.mime.detected?.mime\n break\n }\n default: {\n imageThumbnail.mime.invalid = true\n break\n }\n }\n break\n }\n }\n return imageThumbnail\n }\n}\n","import { unlink, writeFile } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { Writable, WritableOptions } from 'node:stream'\n\nimport ffmpeg from 'fluent-ffmpeg'\nimport { v4 as uuid } from 'uuid'\n\n/**\n * A Writable stream that collects output from ffmpeg.\n */\nclass FfmpegOutputStream extends Writable {\n private readonly chunks: Uint8Array[] = []\n\n constructor(options?: WritableOptions) {\n super(options)\n }\n\n override _write(chunk: never, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.chunks.push(chunk)\n callback()\n }\n\n /**\n * Collects the output from ffmpeg into a buffer.\n * @returns A buffer containing the concatenated\n * output from ffmpeg.\n */\n toBuffer = () => Buffer.concat(this.chunks)\n}\n\n/**\n * Execute FFmpeg using fluent API with provided input buffer and video thumbnail image.\n * @param videoBuffer Input video buffer.\n * @returns Output buffer containing the video thumbnail image.\n */\nexport const getVideoFrameAsImageFluent = async (videoBuffer: ArrayBuffer) => {\n // Get a temp file name\n const tmpFile = `/${tmpdir()}/${uuid()}`\n try {\n // Write videoBuffer to temp file for use as input to ffmpeg to\n // avoid issues with ffmpeg inferring premature EOF from buffer\n // passed via stdin (happens when ffmpeg is trying to infer\n // input video format)\n await writeFile(tmpFile, new Uint8Array(videoBuffer), { encoding: 'binary' })\n const imageBuffer = await new Promise<Buffer>((resolve, reject) => {\n // Create a Writable stream to collect PNG output from ffmpeg\n const ffmpegOutput = new FfmpegOutputStream()\n // Execute ffmpeg using fluent API\n ffmpeg()\n // NOTE: Uncomment to debug CLI args to ffmpeg\n // .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))\n .on('error', err => reject(err.message))\n // Listen for the 'end' event to combine the output into a buffer holding the PNG image\n .on('end', () => resolve(ffmpegOutput.toBuffer()))\n .input(tmpFile) // Use temp file as input\n .takeFrames(1) // Only take 1st video frame\n .withNoAudio() // Don't include audio\n .outputOptions('-f image2pipe') // Write output to stdout\n .videoCodec('png') // Force PNG output\n // Start processing and direct ffmpeg stdout to writable stream\n .pipe(ffmpegOutput)\n })\n return imageBuffer\n } finally {\n // Cleanup temp file\n try {\n await unlink(tmpFile)\n } catch {\n // No error here since file doesn't exist\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nconst allowIpfsIoRepair = true\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway?: string): string => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, () => 'No ipfsGateway provided')\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else if (allowIpfsIoRepair && protocol === 'https' && host === 'ipfs.io') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, () => 'No ipfsGateway provided')\n const pathParts = path.split('/')\n if (pathParts[0] === 'ipfs') {\n pathParts.shift()\n }\n path = pathParts.join('/')\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch {\n // const error = ex as Error\n // console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n // console.log(error.stack)\n return urlToCheck\n }\n}\n","import { fromByteArray } from 'base64-js'\n\nexport const createDataUrl = (data: ArrayBuffer, contextType: string, encoding: 'base64' = 'base64') => {\n return `data:${contextType};${encoding},${fromByteArray(new Uint8Array(data))}`\n}\n","import axios, { AxiosResponse } from 'axios'\nimport { toByteArray } from 'base64-js'\nimport { Builder, parseStringPromise } from 'xml2js'\n\nexport const resolveDynamicSvg = async (base64Bytes: string) => {\n const decoder = new TextDecoder()\n const bytes = toByteArray(base64Bytes)\n const svg = decoder.decode(bytes)\n const svgObj = await parseStringPromise(svg)\n const svgNode = svgObj['svg']\n const imageResults = (await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n svgNode['image'].map(async (img: any) => [\n img.$,\n await axios.get(img.$.href, {\n responseType: 'arraybuffer',\n }),\n ]),\n )) as [string, AxiosResponse][]\n const image = imageResults.map(([href, response]) => {\n if (response.data) {\n const sourceBuffer = Buffer.from(response.data, 'binary')\n return { $: { href: `data:${response.headers['content-type']?.toString()};base64,${sourceBuffer.toString('base64')}` } }\n } else {\n return { $: { href } }\n }\n })\n const updatedSVG = { ...svgObj, svg: { ...svgNode, image } }\n const builder = new Builder()\n return builder.buildObject(updatedSVG)\n}\n"],"mappings":"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","names":["import_image_thumbnail_payload_plugin","import_image_thumbnail_payload_plugin","import_axios","uuid","ffmpeg","import_base64_js","axios","graphicsMagick","shajs","hasbin","Url","dnsPromises","result","axios","FileType","encoding"]}
|
package/dist/node/index.d.cts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACnF,cAAc,oBAAoB,CAAA;AAClC,cAAc,sCAAsC,CAAA"}
|
package/dist/node/index.d.mts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACnF,cAAc,oBAAoB,CAAA;AAClC,cAAc,sCAAsC,CAAA"}
|
package/dist/node/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACnF,cAAc,oBAAoB,CAAA;AAClC,cAAc,sCAAsC,CAAA"}
|