@xyo-network/image-thumbnail-plugin 2.99.5 → 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 +98 -135
- package/dist/node/index.mjs.map +1 -1
- package/package.json +25 -32
- package/src/Witness/Witness.ts +44 -45
- package/src/Witness/lib/resolveDynamicSvg.ts +1 -1
- 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 -477
- 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 -445
- 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 -488
- 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.d.ts
CHANGED
|
@@ -1,4 +1,92 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import * as _xyo_network_payloadset_plugin from '@xyo-network/payloadset-plugin';
|
|
2
|
+
import { WitnessConfig, WitnessParams } from '@xyo-network/witness-model';
|
|
3
|
+
import * as _xyo_network_module_model from '@xyo-network/module-model';
|
|
4
|
+
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
5
|
+
import * as _xyo_network_payload_model from '@xyo-network/payload-model';
|
|
6
|
+
import { Schema } from '@xyo-network/payload-model';
|
|
7
|
+
import * as _store__xyo_network_account_model_virtual_3afa553815_package from '.store/@xyo-network-account-model-virtual-3afa553815/package';
|
|
8
|
+
import * as _store__xylabs_object_npm_4_0_0_ffd6151301_package from '.store/@xylabs-object-npm-4.0.0-ffd6151301/package';
|
|
9
|
+
import { ImageThumbnailDiviner } from '@xyo-network/diviner-image-thumbnail';
|
|
3
10
|
export * from '@xyo-network/diviner-image-thumbnail';
|
|
4
|
-
|
|
11
|
+
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
12
|
+
import { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin';
|
|
13
|
+
import { UrlPayload } from '@xyo-network/url-payload-plugin';
|
|
14
|
+
|
|
15
|
+
declare const ImageThumbnailWitnessConfigSchema: "network.xyo.image.thumbnail.witness.config";
|
|
16
|
+
type ImageThumbnailWitnessConfigSchema = typeof ImageThumbnailWitnessConfigSchema;
|
|
17
|
+
type ImageThumbnailEncoding = 'PNG' | 'JPG' | 'GIF';
|
|
18
|
+
type ImageThumbnailWitnessConfig = WitnessConfig<{
|
|
19
|
+
dataUrlPassthrough?: boolean;
|
|
20
|
+
encoding?: ImageThumbnailEncoding;
|
|
21
|
+
height?: number;
|
|
22
|
+
ipfsGateway?: string;
|
|
23
|
+
maxAsyncProcesses?: number;
|
|
24
|
+
maxCacheBytes?: number;
|
|
25
|
+
maxCacheEntries?: number;
|
|
26
|
+
quality?: number;
|
|
27
|
+
runExclusive?: boolean;
|
|
28
|
+
schema: ImageThumbnailWitnessConfigSchema;
|
|
29
|
+
width?: number;
|
|
30
|
+
}>;
|
|
31
|
+
|
|
32
|
+
type ImageThumbnailWitnessParams = WitnessParams<AnyConfigSchema<ImageThumbnailWitnessConfig>, {
|
|
33
|
+
loaders?: string[];
|
|
34
|
+
}>;
|
|
35
|
+
|
|
36
|
+
interface ImageThumbnailWitnessError extends Error {
|
|
37
|
+
name: 'ImageThumbnailWitnessError';
|
|
38
|
+
url: string;
|
|
39
|
+
}
|
|
40
|
+
interface DnsError extends Error {
|
|
41
|
+
code: string;
|
|
42
|
+
}
|
|
43
|
+
declare class ImageThumbnailWitness<TParams extends ImageThumbnailWitnessParams = ImageThumbnailWitnessParams> extends AbstractWitness<TParams> {
|
|
44
|
+
static readonly configSchemas: Schema[];
|
|
45
|
+
static readonly defaultConfigSchema: Schema;
|
|
46
|
+
private _semaphore;
|
|
47
|
+
get encoding(): ImageThumbnailEncoding;
|
|
48
|
+
get height(): number;
|
|
49
|
+
get ipfsGateway(): string;
|
|
50
|
+
get maxAsyncProcesses(): number;
|
|
51
|
+
get quality(): number;
|
|
52
|
+
get width(): number;
|
|
53
|
+
private static binaryToSha256;
|
|
54
|
+
private static bufferFromDataUrl;
|
|
55
|
+
protected observeHandler(payloads?: UrlPayload[]): Promise<ImageThumbnail[]>;
|
|
56
|
+
private createThumbnailDataUrl;
|
|
57
|
+
private createThumbnailFromVideo;
|
|
58
|
+
private fromHttp;
|
|
59
|
+
private processMedia;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
declare const ImageThumbnailPlugin: () => _xyo_network_payloadset_plugin.PayloadSetDualPlugin<ImageThumbnailWitness<_store__xylabs_object_npm_4_0_0_ffd6151301_package.BaseParamsFields & {
|
|
63
|
+
account?: _store__xyo_network_account_model_virtual_3afa553815_package.AccountInstance | "random";
|
|
64
|
+
addToResolvers?: boolean;
|
|
65
|
+
additionalSigners?: _store__xyo_network_account_model_virtual_3afa553815_package.AccountInstance[];
|
|
66
|
+
allowNameResolution?: boolean;
|
|
67
|
+
config: _xyo_network_payload_model.SchemaFields & _xyo_network_payload_model.PayloadFields & Omit<_xyo_network_module_model.ArchivingModuleConfig & _xyo_network_module_model.ModuleConfigFields & _xyo_network_payload_model.SchemaFields & _xyo_network_payload_model.PayloadFields & Omit<_xyo_network_module_model.ArchivingModuleConfig & _xyo_network_module_model.ModuleConfigFields & {
|
|
68
|
+
schema: "network.xyo.image.thumbnail.witness.config";
|
|
69
|
+
} & {
|
|
70
|
+
dataUrlPassthrough?: boolean;
|
|
71
|
+
encoding?: ImageThumbnailEncoding;
|
|
72
|
+
height?: number;
|
|
73
|
+
ipfsGateway?: string;
|
|
74
|
+
maxAsyncProcesses?: number;
|
|
75
|
+
maxCacheBytes?: number;
|
|
76
|
+
maxCacheEntries?: number;
|
|
77
|
+
quality?: number;
|
|
78
|
+
runExclusive?: boolean;
|
|
79
|
+
schema: ImageThumbnailWitnessConfigSchema;
|
|
80
|
+
width?: number;
|
|
81
|
+
}, "schema"> & {
|
|
82
|
+
schema: "network.xyo.image.thumbnail.witness.config";
|
|
83
|
+
}, "schema"> & {
|
|
84
|
+
schema: string;
|
|
85
|
+
};
|
|
86
|
+
ephemeralQueryAccountEnabled?: boolean;
|
|
87
|
+
moduleIdentifierTransformers?: _xyo_network_module_model.ModuleIdentifierTransformer[];
|
|
88
|
+
} & {
|
|
89
|
+
loaders?: string[];
|
|
90
|
+
}>, ImageThumbnailDiviner>;
|
|
91
|
+
|
|
92
|
+
export { type DnsError, type ImageThumbnailEncoding, ImageThumbnailPlugin, ImageThumbnailWitness, type ImageThumbnailWitnessConfig, ImageThumbnailWitnessConfigSchema, type ImageThumbnailWitnessError, type ImageThumbnailWitnessParams, ImageThumbnailPlugin as default };
|
package/dist/node/index.mjs
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
-
var __reflectGet = Reflect.get;
|
|
4
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
-
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
8
|
-
|
|
9
1
|
// src/Plugin.ts
|
|
10
2
|
import { ImageThumbnailDiviner } from "@xyo-network/diviner-image-thumbnail";
|
|
11
3
|
import { ImageThumbnailSchema as ImageThumbnailSchema3 } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
@@ -19,13 +11,13 @@ var ImageThumbnailWitnessConfigSchema = `${ImageThumbnailSchema}.witness.config`
|
|
|
19
11
|
// src/Witness/Witness.ts
|
|
20
12
|
import { Buffer as Buffer2 } from "node:buffer";
|
|
21
13
|
import { promises as dnsPromises } from "node:dns";
|
|
22
|
-
import {
|
|
23
|
-
import { compact } from "@xylabs/lodash";
|
|
14
|
+
import { exists } from "@xylabs/exists";
|
|
24
15
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
25
16
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
26
17
|
import { ImageThumbnailSchema as ImageThumbnailSchema2 } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
27
18
|
import { UrlSchema } from "@xyo-network/url-payload-plugin";
|
|
28
19
|
import { Semaphore } from "async-mutex";
|
|
20
|
+
import axios2 from "axios";
|
|
29
21
|
import FileType from "file-type";
|
|
30
22
|
import graphicsMagick from "gm";
|
|
31
23
|
import hasbin from "hasbin";
|
|
@@ -39,8 +31,7 @@ import { tmpdir } from "node:os";
|
|
|
39
31
|
import { Writable } from "node:stream";
|
|
40
32
|
import ffmpeg from "fluent-ffmpeg";
|
|
41
33
|
import { v4 as uuid } from "uuid";
|
|
42
|
-
var
|
|
43
|
-
var FfmpegOutputStream = (_a = class extends Writable {
|
|
34
|
+
var FfmpegOutputStream = class extends Writable {
|
|
44
35
|
chunks = [];
|
|
45
36
|
constructor(options) {
|
|
46
37
|
super(options);
|
|
@@ -50,18 +41,16 @@ var FfmpegOutputStream = (_a = class extends Writable {
|
|
|
50
41
|
callback();
|
|
51
42
|
}
|
|
52
43
|
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
toBuffer =
|
|
58
|
-
}
|
|
59
|
-
var getVideoFrameAsImageFluent =
|
|
44
|
+
* Collects the output from ffmpeg into a buffer.
|
|
45
|
+
* @returns A buffer containing the concatenated
|
|
46
|
+
* output from ffmpeg.
|
|
47
|
+
*/
|
|
48
|
+
toBuffer = () => Buffer.concat(this.chunks);
|
|
49
|
+
};
|
|
50
|
+
var getVideoFrameAsImageFluent = async (videoBuffer) => {
|
|
60
51
|
const tmpFile = `/${tmpdir()}/${uuid()}`;
|
|
61
52
|
try {
|
|
62
|
-
await writeFile(tmpFile, new Uint8Array(videoBuffer), {
|
|
63
|
-
encoding: "binary"
|
|
64
|
-
});
|
|
53
|
+
await writeFile(tmpFile, new Uint8Array(videoBuffer), { encoding: "binary" });
|
|
65
54
|
const imageBuffer = await new Promise((resolve, reject) => {
|
|
66
55
|
const ffmpegOutput = new FfmpegOutputStream();
|
|
67
56
|
ffmpeg().on("error", (err) => reject(err.message)).on("end", () => resolve(ffmpegOutput.toBuffer())).input(tmpFile).takeFrames(1).withNoAudio().outputOptions("-f image2pipe").videoCodec("png").pipe(ffmpegOutput);
|
|
@@ -73,12 +62,12 @@ var getVideoFrameAsImageFluent = /* @__PURE__ */ __name(async (videoBuffer) => {
|
|
|
73
62
|
} catch {
|
|
74
63
|
}
|
|
75
64
|
}
|
|
76
|
-
}
|
|
65
|
+
};
|
|
77
66
|
|
|
78
67
|
// src/Witness/lib/checkIpfsUrl.ts
|
|
79
68
|
import { assertEx } from "@xylabs/assert";
|
|
80
69
|
var allowIpfsIoRepair = true;
|
|
81
|
-
var checkIpfsUrl =
|
|
70
|
+
var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
|
|
82
71
|
try {
|
|
83
72
|
const url = new URL(urlToCheck);
|
|
84
73
|
let protocol = url.protocol;
|
|
@@ -90,7 +79,7 @@ var checkIpfsUrl = /* @__PURE__ */ __name((urlToCheck, ipfsGateway) => {
|
|
|
90
79
|
host = assertEx(ipfsGateway, () => "No ipfsGateway provided");
|
|
91
80
|
path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
92
81
|
const root = `${protocol}//${host}/${path}`;
|
|
93
|
-
return
|
|
82
|
+
return query?.length > 0 ? `${root}?${query}` : root;
|
|
94
83
|
} else if (allowIpfsIoRepair && protocol === "https" && host === "ipfs.io") {
|
|
95
84
|
protocol = "https:";
|
|
96
85
|
host = assertEx(ipfsGateway, () => "No ipfsGateway provided");
|
|
@@ -100,26 +89,26 @@ var checkIpfsUrl = /* @__PURE__ */ __name((urlToCheck, ipfsGateway) => {
|
|
|
100
89
|
}
|
|
101
90
|
path = pathParts.join("/");
|
|
102
91
|
const root = `${protocol}//${host}/${path}`;
|
|
103
|
-
return
|
|
92
|
+
return query?.length > 0 ? `${root}?${query}` : root;
|
|
104
93
|
} else {
|
|
105
94
|
return urlToCheck;
|
|
106
95
|
}
|
|
107
96
|
} catch {
|
|
108
97
|
return urlToCheck;
|
|
109
98
|
}
|
|
110
|
-
}
|
|
99
|
+
};
|
|
111
100
|
|
|
112
101
|
// src/Witness/lib/createDataUrl.ts
|
|
113
102
|
import { fromByteArray } from "base64-js";
|
|
114
|
-
var createDataUrl =
|
|
103
|
+
var createDataUrl = (data, contextType, encoding = "base64") => {
|
|
115
104
|
return `data:${contextType};${encoding},${fromByteArray(new Uint8Array(data))}`;
|
|
116
|
-
}
|
|
105
|
+
};
|
|
117
106
|
|
|
118
107
|
// src/Witness/lib/resolveDynamicSvg.ts
|
|
119
|
-
import
|
|
108
|
+
import axios from "axios";
|
|
120
109
|
import { toByteArray } from "base64-js";
|
|
121
110
|
import { Builder, parseStringPromise } from "xml2js";
|
|
122
|
-
var resolveDynamicSvg =
|
|
111
|
+
var resolveDynamicSvg = async (base64Bytes) => {
|
|
123
112
|
const decoder = new TextDecoder();
|
|
124
113
|
const bytes = toByteArray(base64Bytes);
|
|
125
114
|
const svg = decoder.decode(bytes);
|
|
@@ -135,38 +124,23 @@ var resolveDynamicSvg = /* @__PURE__ */ __name(async (base64Bytes) => {
|
|
|
135
124
|
])
|
|
136
125
|
);
|
|
137
126
|
const image = imageResults.map(([href, response]) => {
|
|
138
|
-
var _a2;
|
|
139
127
|
if (response.data) {
|
|
140
128
|
const sourceBuffer = Buffer.from(response.data, "binary");
|
|
141
|
-
return {
|
|
142
|
-
$: {
|
|
143
|
-
href: `data:${(_a2 = response.headers["content-type"]) == null ? void 0 : _a2.toString()};base64,${sourceBuffer.toString("base64")}`
|
|
144
|
-
}
|
|
145
|
-
};
|
|
129
|
+
return { $: { href: `data:${response.headers["content-type"]?.toString()};base64,${sourceBuffer.toString("base64")}` } };
|
|
146
130
|
} else {
|
|
147
|
-
return {
|
|
148
|
-
$: {
|
|
149
|
-
href
|
|
150
|
-
}
|
|
151
|
-
};
|
|
131
|
+
return { $: { href } };
|
|
152
132
|
}
|
|
153
133
|
});
|
|
154
|
-
const updatedSVG = {
|
|
155
|
-
...svgObj,
|
|
156
|
-
svg: {
|
|
157
|
-
...svgNode,
|
|
158
|
-
image
|
|
159
|
-
}
|
|
160
|
-
};
|
|
134
|
+
const updatedSVG = { ...svgObj, svg: { ...svgNode, image } };
|
|
161
135
|
const builder = new Builder();
|
|
162
136
|
return builder.buildObject(updatedSVG);
|
|
163
|
-
}
|
|
137
|
+
};
|
|
164
138
|
|
|
165
139
|
// src/Witness/Witness.ts
|
|
166
|
-
var gm = graphicsMagick.subClass({
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
140
|
+
var gm = graphicsMagick.subClass({ imageMagick: "7+" });
|
|
141
|
+
var ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitness {
|
|
142
|
+
static configSchemas = [...super.configSchemas, ImageThumbnailWitnessConfigSchema];
|
|
143
|
+
static defaultConfigSchema = ImageThumbnailWitnessConfigSchema;
|
|
170
144
|
_semaphore = new Semaphore(this.maxAsyncProcesses);
|
|
171
145
|
get encoding() {
|
|
172
146
|
return this.config.encoding ?? "PNG";
|
|
@@ -218,42 +192,48 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
218
192
|
throw new Error("ImageMagick is required for this witness");
|
|
219
193
|
}
|
|
220
194
|
const urlPayloads = payloads.filter((payload) => payload.schema === UrlSchema);
|
|
221
|
-
const process =
|
|
222
|
-
return
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
195
|
+
const process = async () => {
|
|
196
|
+
return (await Promise.all(
|
|
197
|
+
urlPayloads.map(async ({ url }) => {
|
|
198
|
+
let result;
|
|
199
|
+
const dataBuffer = _ImageThumbnailWitness.bufferFromDataUrl(url);
|
|
200
|
+
if (dataBuffer) {
|
|
201
|
+
if (this.config.dataUrlPassthrough) {
|
|
202
|
+
result = {
|
|
203
|
+
schema: ImageThumbnailSchema2,
|
|
204
|
+
sourceHash: await _ImageThumbnailWitness.binaryToSha256(dataBuffer),
|
|
205
|
+
sourceUrl: url,
|
|
206
|
+
url
|
|
207
|
+
};
|
|
208
|
+
} else {
|
|
209
|
+
let cookedDataBuffer = dataBuffer;
|
|
210
|
+
const urlParts = url.split(";");
|
|
211
|
+
const [, contentType] = urlParts[0].split(":");
|
|
212
|
+
if (contentType.startsWith("image/svg")) {
|
|
213
|
+
const [encoding, byteString] = urlParts[1].split(",");
|
|
214
|
+
if (encoding === "base64") {
|
|
215
|
+
const newSvg = await resolveDynamicSvg(byteString);
|
|
216
|
+
const newSvgDataUrl = createDataUrl(Buffer2.from(newSvg), contentType);
|
|
217
|
+
cookedDataBuffer = _ImageThumbnailWitness.bufferFromDataUrl(newSvgDataUrl) ?? dataBuffer;
|
|
218
|
+
}
|
|
243
219
|
}
|
|
220
|
+
result = await this.processMedia(
|
|
221
|
+
cookedDataBuffer,
|
|
222
|
+
{
|
|
223
|
+
schema: ImageThumbnailSchema2,
|
|
224
|
+
sourceUrl: url
|
|
225
|
+
},
|
|
226
|
+
contentType
|
|
227
|
+
);
|
|
244
228
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}, contentType);
|
|
229
|
+
} else {
|
|
230
|
+
const mutatedUrl = checkIpfsUrl(url, this.ipfsGateway);
|
|
231
|
+
result = await this.fromHttp(mutatedUrl, url);
|
|
249
232
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
return result;
|
|
255
|
-
})));
|
|
256
|
-
}, "process");
|
|
233
|
+
return result;
|
|
234
|
+
})
|
|
235
|
+
)).filter(exists);
|
|
236
|
+
};
|
|
257
237
|
return this.config.runExclusive ? await this._semaphore.runExclusive(() => process()) : process();
|
|
258
238
|
}
|
|
259
239
|
async createThumbnailDataUrl(sourceBuffer, encoding) {
|
|
@@ -269,17 +249,16 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
269
249
|
return createDataUrl(thumb, "image/png");
|
|
270
250
|
}
|
|
271
251
|
/**
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
252
|
+
* Creates an image thumbnail from a video.
|
|
253
|
+
* @param videoBuffer The input video buffer.
|
|
254
|
+
* @returns An buffer containing an image thumbnail for the video.
|
|
255
|
+
*/
|
|
276
256
|
async createThumbnailFromVideo(videoBuffer) {
|
|
277
257
|
const imageBuffer = await getVideoFrameAsImageFluent(videoBuffer);
|
|
278
258
|
return this.createThumbnailDataUrl(imageBuffer);
|
|
279
259
|
}
|
|
280
260
|
// eslint-disable-next-line complexity
|
|
281
261
|
async fromHttp(url, sourceUrl) {
|
|
282
|
-
var _a2, _b, _c;
|
|
283
262
|
let response;
|
|
284
263
|
let dnsResult;
|
|
285
264
|
try {
|
|
@@ -310,13 +289,13 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
310
289
|
schema: ImageThumbnailSchema2,
|
|
311
290
|
sourceUrl: sourceUrl ?? url
|
|
312
291
|
};
|
|
313
|
-
if (
|
|
292
|
+
if (axiosError?.response?.status !== void 0) {
|
|
314
293
|
result2.http = result2.http ?? {};
|
|
315
|
-
result2.http.status =
|
|
294
|
+
result2.http.status = axiosError?.response?.status;
|
|
316
295
|
}
|
|
317
|
-
if (
|
|
296
|
+
if (axiosError?.code !== void 0) {
|
|
318
297
|
result2.http = result2.http ?? {};
|
|
319
|
-
result2.http.code = axiosError
|
|
298
|
+
result2.http.code = axiosError?.code;
|
|
320
299
|
}
|
|
321
300
|
return result2;
|
|
322
301
|
} else {
|
|
@@ -331,31 +310,27 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
331
310
|
sourceUrl: sourceUrl ?? url
|
|
332
311
|
};
|
|
333
312
|
if (response.status >= 200 && response.status < 300) {
|
|
334
|
-
const contentType =
|
|
313
|
+
const contentType = response.headers["content-type"]?.toString();
|
|
335
314
|
const sourceBuffer = Buffer2.from(response.data, "binary");
|
|
336
315
|
return this.processMedia(sourceBuffer, result, contentType);
|
|
337
316
|
}
|
|
338
317
|
return result;
|
|
339
318
|
}
|
|
340
319
|
async processMedia(sourceBuffer, imageThumbnail, contentType) {
|
|
341
|
-
|
|
342
|
-
const [mediaType, fileType] = (contentType == null ? void 0 : contentType.split("/")) ?? [
|
|
343
|
-
"",
|
|
344
|
-
""
|
|
345
|
-
];
|
|
320
|
+
const [mediaType, fileType] = contentType?.split("/") ?? ["", ""];
|
|
346
321
|
imageThumbnail.mime = imageThumbnail.mime ?? {};
|
|
347
322
|
imageThumbnail.mime.returned = mediaType;
|
|
348
323
|
try {
|
|
349
324
|
imageThumbnail.mime.detected = await FileType.fromBuffer(sourceBuffer);
|
|
350
325
|
} catch (ex) {
|
|
351
326
|
const error = ex;
|
|
352
|
-
|
|
327
|
+
this.logger?.error(`FileType error: ${error.message}`);
|
|
353
328
|
}
|
|
354
|
-
const processImage =
|
|
329
|
+
const processImage = async (encoding2) => {
|
|
355
330
|
imageThumbnail.sourceHash = await _ImageThumbnailWitness.binaryToSha256(sourceBuffer);
|
|
356
331
|
imageThumbnail.url = await this.createThumbnailDataUrl(sourceBuffer, encoding2);
|
|
357
|
-
}
|
|
358
|
-
const processVideo =
|
|
332
|
+
};
|
|
333
|
+
const processVideo = async () => {
|
|
359
334
|
if (hasbin.sync("ffmpeg")) {
|
|
360
335
|
imageThumbnail.sourceHash = await _ImageThumbnailWitness.binaryToSha256(sourceBuffer);
|
|
361
336
|
imageThumbnail.url = await this.createThumbnailFromVideo(sourceBuffer);
|
|
@@ -363,7 +338,7 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
363
338
|
imageThumbnail.mime = imageThumbnail.mime ?? {};
|
|
364
339
|
imageThumbnail.mime.invalid = true;
|
|
365
340
|
}
|
|
366
|
-
}
|
|
341
|
+
};
|
|
367
342
|
let encoding = "PNG";
|
|
368
343
|
switch (fileType.toUpperCase()) {
|
|
369
344
|
case "GIF": {
|
|
@@ -388,19 +363,16 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
388
363
|
break;
|
|
389
364
|
}
|
|
390
365
|
default: {
|
|
391
|
-
const [detectedMediaType] =
|
|
392
|
-
"",
|
|
393
|
-
""
|
|
394
|
-
];
|
|
366
|
+
const [detectedMediaType] = imageThumbnail.mime.detected?.mime?.split("/") ?? ["", ""];
|
|
395
367
|
switch (detectedMediaType) {
|
|
396
368
|
case "image": {
|
|
397
369
|
await processImage();
|
|
398
|
-
imageThumbnail.mime.type =
|
|
370
|
+
imageThumbnail.mime.type = imageThumbnail.mime.detected?.mime;
|
|
399
371
|
break;
|
|
400
372
|
}
|
|
401
373
|
case "video": {
|
|
402
374
|
await processVideo();
|
|
403
|
-
imageThumbnail.mime.type =
|
|
375
|
+
imageThumbnail.mime.type = imageThumbnail.mime.detected?.mime;
|
|
404
376
|
break;
|
|
405
377
|
}
|
|
406
378
|
default: {
|
|
@@ -414,30 +386,21 @@ var _ImageThumbnailWitness = class _ImageThumbnailWitness extends AbstractWitnes
|
|
|
414
386
|
return imageThumbnail;
|
|
415
387
|
}
|
|
416
388
|
};
|
|
417
|
-
__name(_ImageThumbnailWitness, "ImageThumbnailWitness");
|
|
418
|
-
__publicField(_ImageThumbnailWitness, "configSchemas", [
|
|
419
|
-
...__superGet(_ImageThumbnailWitness, _ImageThumbnailWitness, "configSchemas"),
|
|
420
|
-
ImageThumbnailWitnessConfigSchema
|
|
421
|
-
]);
|
|
422
|
-
__publicField(_ImageThumbnailWitness, "defaultConfigSchema", ImageThumbnailWitnessConfigSchema);
|
|
423
|
-
var ImageThumbnailWitness = _ImageThumbnailWitness;
|
|
424
389
|
|
|
425
390
|
// src/Plugin.ts
|
|
426
|
-
var ImageThumbnailPlugin =
|
|
427
|
-
required: {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
}, "witness")
|
|
440
|
-
}), "ImageThumbnailPlugin");
|
|
391
|
+
var ImageThumbnailPlugin = () => createPayloadSetDualPlugin(
|
|
392
|
+
{ required: { [ImageThumbnailSchema3]: 1 }, schema: PayloadSetSchema },
|
|
393
|
+
{
|
|
394
|
+
diviner: async (params) => {
|
|
395
|
+
const result = await ImageThumbnailDiviner.create(params);
|
|
396
|
+
return result;
|
|
397
|
+
},
|
|
398
|
+
witness: async (params) => {
|
|
399
|
+
const result = await ImageThumbnailWitness.create(params);
|
|
400
|
+
return result;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
);
|
|
441
404
|
|
|
442
405
|
// src/index.ts
|
|
443
406
|
export * from "@xyo-network/diviner-image-thumbnail";
|