@zlooks.cn/images-server 1.1.1 → 1.1.2
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/mcp/provider.js +2 -2
- package/dist/mcp/provider.js.map +1 -1
- package/dist/messages/images/delete.msg.d.ts +1 -0
- package/dist/messages/images/events.msg.d.ts +1 -0
- package/dist/messages/images/list.msg.d.ts +1 -0
- package/dist/messages/images/read.msg.d.ts +1 -0
- package/dist/messages/images/upload.msg.d.ts +2 -0
- package/dist/messages/model-message.d.ts +1 -1
- package/dist/models/upload-image.model.d.ts +1 -0
- package/dist/models/upload-image.model.js +10 -3
- package/dist/models/upload-image.model.js.map +1 -1
- package/dist/storage/compress-image.d.ts +3 -0
- package/dist/storage/compress-image.d.ts.map +1 -0
- package/dist/storage/compress-image.js +37 -0
- package/dist/storage/compress-image.js.map +1 -0
- package/dist/storage/inspect-image.d.ts +5 -0
- package/dist/storage/inspect-image.d.ts.map +1 -1
- package/dist/storage/inspect-image.js +8 -4
- package/dist/storage/inspect-image.js.map +1 -1
- package/package.json +3 -3
package/dist/mcp/provider.js
CHANGED
|
@@ -20,7 +20,7 @@ export function createImagesProvider(images) {
|
|
|
20
20
|
title: '上传图片',
|
|
21
21
|
inputSchema: uploadImageSchema,
|
|
22
22
|
outputSchema: imageMetadataSchema,
|
|
23
|
-
description: '通过 Base64(解码后至多 6 MiB)上传调用方持有的 JPEG、PNG、WebP、GIF 或 AVIF
|
|
23
|
+
description: '通过 Base64(解码后至多 6 MiB)上传调用方持有的 JPEG、PNG、WebP、GIF 或 AVIF 图片;不接受 URL 导入或本地路径,不下载远程图片。compress=true 时保持格式、尺寸和最终文件名,以重新编码后的文件替换原始字节;小文件或已高度压缩的输入不保证变小。省略或 false 时原样保存。对完整文件字节进行标准 Base64 编码,提交前按 base64 参数说明检查字符、填充、长度和大小,不要提交截断内容。总像素最多 40 MP(动画按全部帧计),不接受 SVG。只有持久化并提交 ready 后成功返回最终文件元数据与公开 URL。响应丢失时,同一调用方用原幂等键和完全相同输入重试,不会重复创建;IDEMPOTENCY_CONFLICT 表示同键输入不同。UPLOAD_NOT_READY 时先读取 images://image/{id} Resource 或调用 images.list-image 确认状态:uploading 不另建重复上传,确认 failed 后新上传使用新幂等键,deleted 不会复活。文件名仅用于搜索,不能指定存储路径。',
|
|
24
24
|
access: writeAccess,
|
|
25
25
|
annotations: {
|
|
26
26
|
readOnlyHint: false,
|
|
@@ -48,7 +48,7 @@ export function createImagesProvider(images) {
|
|
|
48
48
|
title: '删除图片',
|
|
49
49
|
inputSchema: deleteImageSchema,
|
|
50
50
|
outputSchema: imageMetadataSchema,
|
|
51
|
-
description: '
|
|
51
|
+
description: '永久删除本地图片文件并禁用新的源站读取。先读取 images://image/{id} Resource 核对目标并向用户确认,再提交 id 和 expectedSha256,无需删除幂等键。只允许 ready、deleting 或已 deleted 的记录;HASH_CONFLICT 或 STATE_CONFLICT 时重新读取,不能猜测摘要重试。清理失败或响应丢失后用原 ID 与摘要重试;并发和重复删除安全,成功返回 deleted 元数据且保留首次 deletedAt。此操作不能撤销,也无法清除浏览器或第三方已缓存的副本。',
|
|
52
52
|
access: writeAccess,
|
|
53
53
|
annotations: {
|
|
54
54
|
readOnlyHint: false,
|
package/dist/mcp/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mcp/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,GAEd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,iBAAiB,GAIlB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;AAC/C,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;AACjD,MAAM,aAAa,GAAG;IACpB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,OAAO,iBAAiB,CAAC;QACvB,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE;YACL,cAAc,EAAE,aAAa,CAAC;gBAC5B,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,iBAAiB;gBAC9B,YAAY,EAAE,mBAAmB;gBACjC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mcp/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,7 @@ declare const _default: import("@hile/micro").MicroContractMessage<{
|
|
|
36
36
|
code: import("zod").ZodEnum<{
|
|
37
37
|
HASH_CONFLICT: "HASH_CONFLICT";
|
|
38
38
|
IDEMPOTENCY_CONFLICT: "IDEMPOTENCY_CONFLICT";
|
|
39
|
+
IMAGE_COMPRESSION_FAILED: "IMAGE_COMPRESSION_FAILED";
|
|
39
40
|
IMAGE_TOO_LARGE: "IMAGE_TOO_LARGE";
|
|
40
41
|
INVALID_BASE64: "INVALID_BASE64";
|
|
41
42
|
INVALID_CURSOR: "INVALID_CURSOR";
|
|
@@ -6,6 +6,7 @@ declare const _default: import("@hile/micro").MicroContractMessage<{
|
|
|
6
6
|
code: import("zod").ZodEnum<{
|
|
7
7
|
HASH_CONFLICT: "HASH_CONFLICT";
|
|
8
8
|
IDEMPOTENCY_CONFLICT: "IDEMPOTENCY_CONFLICT";
|
|
9
|
+
IMAGE_COMPRESSION_FAILED: "IMAGE_COMPRESSION_FAILED";
|
|
9
10
|
IMAGE_TOO_LARGE: "IMAGE_TOO_LARGE";
|
|
10
11
|
INVALID_BASE64: "INVALID_BASE64";
|
|
11
12
|
INVALID_CURSOR: "INVALID_CURSOR";
|
|
@@ -69,6 +69,7 @@ declare const _default: import("@hile/micro").MicroContractMessage<{
|
|
|
69
69
|
code: import("zod").ZodEnum<{
|
|
70
70
|
HASH_CONFLICT: "HASH_CONFLICT";
|
|
71
71
|
IDEMPOTENCY_CONFLICT: "IDEMPOTENCY_CONFLICT";
|
|
72
|
+
IMAGE_COMPRESSION_FAILED: "IMAGE_COMPRESSION_FAILED";
|
|
72
73
|
IMAGE_TOO_LARGE: "IMAGE_TOO_LARGE";
|
|
73
74
|
INVALID_BASE64: "INVALID_BASE64";
|
|
74
75
|
INVALID_CURSOR: "INVALID_CURSOR";
|
|
@@ -35,6 +35,7 @@ declare const _default: import("@hile/micro").MicroContractMessage<{
|
|
|
35
35
|
code: import("zod").ZodEnum<{
|
|
36
36
|
HASH_CONFLICT: "HASH_CONFLICT";
|
|
37
37
|
IDEMPOTENCY_CONFLICT: "IDEMPOTENCY_CONFLICT";
|
|
38
|
+
IMAGE_COMPRESSION_FAILED: "IMAGE_COMPRESSION_FAILED";
|
|
38
39
|
IMAGE_TOO_LARGE: "IMAGE_TOO_LARGE";
|
|
39
40
|
INVALID_BASE64: "INVALID_BASE64";
|
|
40
41
|
INVALID_CURSOR: "INVALID_CURSOR";
|
|
@@ -7,6 +7,7 @@ declare const _default: import("@hile/micro").MicroContractMessage<{
|
|
|
7
7
|
filename: import("zod").ZodOptional<import("zod").ZodString>;
|
|
8
8
|
source: import("zod").ZodLiteral<"base64">;
|
|
9
9
|
base64: import("zod").ZodString;
|
|
10
|
+
compress: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
10
11
|
}, import("zod/v4/core").$strict>;
|
|
11
12
|
}, import("zod/v4/core").$strict>;
|
|
12
13
|
readonly output: import("zod").ZodUnion<readonly [import("zod").ZodObject<{
|
|
@@ -41,6 +42,7 @@ declare const _default: import("@hile/micro").MicroContractMessage<{
|
|
|
41
42
|
code: import("zod").ZodEnum<{
|
|
42
43
|
HASH_CONFLICT: "HASH_CONFLICT";
|
|
43
44
|
IDEMPOTENCY_CONFLICT: "IDEMPOTENCY_CONFLICT";
|
|
45
|
+
IMAGE_COMPRESSION_FAILED: "IMAGE_COMPRESSION_FAILED";
|
|
44
46
|
IMAGE_TOO_LARGE: "IMAGE_TOO_LARGE";
|
|
45
47
|
INVALID_BASE64: "INVALID_BASE64";
|
|
46
48
|
INVALID_CURSOR: "INVALID_CURSOR";
|
|
@@ -2,7 +2,7 @@ import type { InvocationContext } from '@hile/context';
|
|
|
2
2
|
import { type ModelDefinition } from '@hile/model';
|
|
3
3
|
export declare function loadImageModel<TInput extends object, TOutput>(model: ModelDefinition<TInput, TOutput>, input: TInput, invocation: InvocationContext): Promise<TOutput | {
|
|
4
4
|
outcome: "error";
|
|
5
|
-
code: "HASH_CONFLICT" | "IDEMPOTENCY_CONFLICT" | "IMAGE_TOO_LARGE" | "INVALID_BASE64" | "INVALID_CURSOR" | "INVALID_IMAGE" | "INVALID_PATH" | "NOT_FOUND" | "STATE_CONFLICT" | "UPLOAD_NOT_READY";
|
|
5
|
+
code: "HASH_CONFLICT" | "IDEMPOTENCY_CONFLICT" | "IMAGE_COMPRESSION_FAILED" | "IMAGE_TOO_LARGE" | "INVALID_BASE64" | "INVALID_CURSOR" | "INVALID_IMAGE" | "INVALID_PATH" | "NOT_FOUND" | "STATE_CONFLICT" | "UPLOAD_NOT_READY";
|
|
6
6
|
message: string;
|
|
7
7
|
}>;
|
|
8
8
|
//# sourceMappingURL=model-message.d.ts.map
|
|
@@ -3,6 +3,7 @@ import { loadService } from '@hile/core';
|
|
|
3
3
|
import { defineModel } from '@hile/model';
|
|
4
4
|
import { imageUploadCommandSchema } from '@zlooks.cn/images-shared';
|
|
5
5
|
import { ImageError } from '../domain/image-error.js';
|
|
6
|
+
import { compressImage } from '../storage/compress-image.js';
|
|
6
7
|
import { inspectImage } from '../storage/inspect-image.js';
|
|
7
8
|
import { imageRelativePath } from '../storage/image-path.js';
|
|
8
9
|
import { readUploadBytes } from '../storage/read-upload-bytes.js';
|
|
@@ -15,7 +16,9 @@ export default defineModel(async (input, invocation) => {
|
|
|
15
16
|
const { store, storage, origin } = await loadService(imagesRuntimeService);
|
|
16
17
|
const signal = AbortSignal.any([invocation.signal, AbortSignal.timeout(45_000)]);
|
|
17
18
|
signal.throwIfAborted();
|
|
18
|
-
const
|
|
19
|
+
const { compress, ...legacyUpload } = upload;
|
|
20
|
+
const fingerprintInput = compress ? upload : legacyUpload;
|
|
21
|
+
const hash = createHash('sha256').update(JSON.stringify(fingerprintInput)).digest('hex');
|
|
19
22
|
const reserved = await store.reserve(command.actor, upload.idempotencyKey, hash, upload.filename ?? null);
|
|
20
23
|
if (!reserved.created) {
|
|
21
24
|
if (reserved.row.status === 'ready')
|
|
@@ -24,9 +27,13 @@ export default defineModel(async (input, invocation) => {
|
|
|
24
27
|
}
|
|
25
28
|
const id = reserved.row.id;
|
|
26
29
|
try {
|
|
27
|
-
const
|
|
30
|
+
const source = await readUploadBytes(upload, signal);
|
|
28
31
|
signal.throwIfAborted();
|
|
29
|
-
const
|
|
32
|
+
const sourceMetadata = await inspectImage(source);
|
|
33
|
+
const bytes = compress
|
|
34
|
+
? await compressImage(source, sourceMetadata.mediaType, signal)
|
|
35
|
+
: source;
|
|
36
|
+
const metadata = compress ? await inspectImage(bytes) : sourceMetadata;
|
|
30
37
|
signal.throwIfAborted();
|
|
31
38
|
const relativePath = imageRelativePath(id, metadata.extension, reserved.row.createdAt);
|
|
32
39
|
await store.transition(id, 'uploading', { ...metadata, relativePath }, signal);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-image.model.js","sourceRoot":"","sources":["../../src/models/upload-image.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAsB,MAAM,qCAAqC,CAAC;AAC1F,OAAO,oBAAoB,MAAM,uCAAuC,CAAC;AAEzE,eAAe,WAAW,CACxB,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAC1B,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"upload-image.model.js","sourceRoot":"","sources":["../../src/models/upload-image.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compress-image.d.ts","sourceRoot":"","sources":["../../src/storage/compress-image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAClD,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import sharp from 'sharp';
|
|
2
|
+
import { ImageError } from '../domain/image-error.js';
|
|
3
|
+
import { imageInputOptions } from './inspect-image.js';
|
|
4
|
+
export async function compressImage(bytes, mediaType, signal) {
|
|
5
|
+
signal.throwIfAborted();
|
|
6
|
+
try {
|
|
7
|
+
const image = sharp(bytes, imageInputOptions)
|
|
8
|
+
.keepMetadata()
|
|
9
|
+
.timeout({ seconds: 10 });
|
|
10
|
+
const compressed = await encode(image, mediaType).toBuffer();
|
|
11
|
+
signal.throwIfAborted();
|
|
12
|
+
return compressed;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
signal.throwIfAborted();
|
|
16
|
+
throw new ImageError('IMAGE_COMPRESSION_FAILED', '图片压缩失败');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function encode(image, mediaType) {
|
|
20
|
+
if (mediaType === 'image/jpeg')
|
|
21
|
+
return image.jpeg({ quality: 80, mozjpeg: true });
|
|
22
|
+
if (mediaType === 'image/png') {
|
|
23
|
+
return image.png({
|
|
24
|
+
compressionLevel: 9,
|
|
25
|
+
adaptiveFiltering: true,
|
|
26
|
+
palette: true,
|
|
27
|
+
quality: 80,
|
|
28
|
+
effort: 10,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (mediaType === 'image/webp')
|
|
32
|
+
return image.webp({ quality: 80, effort: 6 });
|
|
33
|
+
if (mediaType === 'image/gif')
|
|
34
|
+
return image.gif({ colours: 128, effort: 10 });
|
|
35
|
+
return image.avif({ quality: 50, effort: 6 });
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=compress-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compress-image.js","sourceRoot":"","sources":["../../src/storage/compress-image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,SAAkD,EAClD,MAAmB;IAEnB,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC;aAC1C,YAAY,EAAE;aACd,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7D,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CACb,KAA+B,EAC/B,SAAkD;IAElD,IAAI,SAAS,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,IAAI;YACvB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,IAAI,SAAS,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export declare const imageInputOptions: {
|
|
2
|
+
animated: boolean;
|
|
3
|
+
limitInputPixels: number;
|
|
4
|
+
failOn: 'warning';
|
|
5
|
+
};
|
|
1
6
|
export declare function inspectImage(bytes: Buffer): Promise<{
|
|
2
7
|
mediaType: "image/avif" | "image/gif" | "image/jpeg" | "image/png" | "image/webp";
|
|
3
8
|
extension: "avif" | "gif" | "jpg" | "png" | "webp";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect-image.d.ts","sourceRoot":"","sources":["../../src/storage/inspect-image.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inspect-image.d.ts","sourceRoot":"","sources":["../../src/storage/inspect-image.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,iBAAiB;IAC5B,QAAQ;IACR,gBAAgB;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM;;;;;;;GAsB/C"}
|
|
@@ -6,24 +6,28 @@ const formats = {
|
|
|
6
6
|
jpeg: ['image/jpeg', 'jpg'], png: ['image/png', 'png'], webp: ['image/webp', 'webp'],
|
|
7
7
|
gif: ['image/gif', 'gif'], heif: ['image/avif', 'avif'],
|
|
8
8
|
};
|
|
9
|
+
export const imageInputOptions = {
|
|
10
|
+
animated: true,
|
|
11
|
+
limitInputPixels: 40_000_000,
|
|
12
|
+
failOn: 'warning',
|
|
13
|
+
};
|
|
9
14
|
export async function inspectImage(bytes) {
|
|
10
15
|
if (!bytes.length || bytes.length > IMAGE_MAX_BYTES) {
|
|
11
16
|
throw new ImageError('IMAGE_TOO_LARGE', '图片为空或超过大小限制');
|
|
12
17
|
}
|
|
13
18
|
try {
|
|
14
|
-
const
|
|
15
|
-
const metadata = await sharp(bytes, options).metadata();
|
|
19
|
+
const metadata = await sharp(bytes, imageInputOptions).metadata();
|
|
16
20
|
if (!Object.hasOwn(formats, metadata.format))
|
|
17
21
|
throw new Error('Unsupported format');
|
|
18
22
|
const format = formats[metadata.format];
|
|
19
23
|
const width = metadata.width;
|
|
20
24
|
const height = metadata.pageHeight ?? metadata.height;
|
|
21
|
-
if (!width || !height || width * height * (metadata.pages ?? 1) >
|
|
25
|
+
if (!width || !height || width * height * (metadata.pages ?? 1) > imageInputOptions.limitInputPixels) {
|
|
22
26
|
throw new Error('Pixel limit exceeded');
|
|
23
27
|
}
|
|
24
28
|
if (metadata.format === 'heif' && metadata.compression !== 'av1')
|
|
25
29
|
throw new Error('Not AVIF');
|
|
26
|
-
await sharp(bytes,
|
|
30
|
+
await sharp(bytes, imageInputOptions).timeout({ seconds: 10 }).stats();
|
|
27
31
|
return {
|
|
28
32
|
mediaType: format[0], extension: format[1], width, height, byteSize: bytes.length,
|
|
29
33
|
sha256: createHash('sha256').update(bytes).digest('hex'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect-image.js","sourceRoot":"","sources":["../../src/storage/inspect-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;IACpF,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/C,CAAC;
|
|
1
|
+
{"version":3,"file":"inspect-image.js","sourceRoot":"","sources":["../../src/storage/inspect-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;IACpF,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/C,CAAC;AACX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,UAAU;IAC5B,MAAM,EAAE,SAAkB;CAC3B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa;IAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAA8B,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YACrG,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,WAAW,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9F,MAAM,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM;YACjF,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACzD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zlooks.cn/images-server",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@zlooks.cn/database-command": "1.0.5",
|
|
40
40
|
"@zlooks.cn/event-bus": "1.0.3",
|
|
41
41
|
"@zlooks.cn/event-client": "1.1.0",
|
|
42
|
-
"@zlooks.cn/images-shared": "1.1.
|
|
42
|
+
"@zlooks.cn/images-shared": "1.1.1",
|
|
43
43
|
"@zlooks.cn/infrastructure": "1.0.0",
|
|
44
44
|
"@zlooks.cn/public-asset": "1.0.3",
|
|
45
45
|
"@zlooks.cn/public-host-contract": "1.0.0",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"typescript": "7.0.2",
|
|
72
72
|
"vitest": "4.1.11"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "f2515fb0ac13702f7af0f7000ad8696f1c1c09a4"
|
|
75
75
|
}
|