@zlooks.cn/images-server 1.0.1 → 1.0.3
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/command/index.js +2 -2
- package/dist/command/index.js.map +1 -1
- package/dist/events/image-domain-events.d.ts +127 -0
- package/dist/events/image-domain-events.d.ts.map +1 -0
- package/dist/events/image-domain-events.js +38 -0
- package/dist/events/image-domain-events.js.map +1 -0
- package/dist/mcp/provider.d.ts.map +1 -1
- package/dist/mcp/provider.js +15 -0
- package/dist/mcp/provider.js.map +1 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +44 -2
- package/dist/migrations/index.js.map +1 -1
- package/dist/persistence/entities.d.ts +2 -0
- package/dist/persistence/entities.d.ts.map +1 -1
- package/dist/persistence/entities.js +3 -0
- package/dist/persistence/entities.js.map +1 -1
- package/dist/persistence/image-store.d.ts +4 -1
- package/dist/persistence/image-store.d.ts.map +1 -1
- package/dist/persistence/image-store.js +21 -3
- package/dist/persistence/image-store.js.map +1 -1
- package/dist/services/database.service.js +2 -2
- package/dist/services/database.service.js.map +1 -1
- package/dist/services/images-runtime.service.d.ts.map +1 -1
- package/dist/services/images-runtime.service.js +7 -2
- package/dist/services/images-runtime.service.js.map +1 -1
- package/dist/services/images.boot.js +6 -2
- package/dist/services/images.boot.js.map +1 -1
- package/package.json +9 -3
package/dist/command/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
3
3
|
import { createRegistryDatabaseDataSource, registerDatabaseCommands } from '@zlooks.cn/database-command';
|
|
4
4
|
import { runServiceCommand } from '@zlooks.cn/service-command';
|
|
5
5
|
import { imagesMigrations } from '../migrations/index.js';
|
|
6
|
-
import {
|
|
6
|
+
import { imageEntities } from '../persistence/entities.js';
|
|
7
7
|
import { IMAGES_NAMESPACE } from '../identity.js';
|
|
8
8
|
await runServiceCommand({
|
|
9
9
|
packageRoot: fileURLToPath(new URL('../../', import.meta.url)),
|
|
@@ -11,7 +11,7 @@ await runServiceCommand({
|
|
|
11
11
|
configure(program) {
|
|
12
12
|
registerDatabaseCommands(program, {
|
|
13
13
|
createDataSource: (envFile) => createRegistryDatabaseDataSource(envFile, {
|
|
14
|
-
commandNamespace: `${IMAGES_NAMESPACE}.db.command`, entities: [
|
|
14
|
+
commandNamespace: `${IMAGES_NAMESPACE}.db.command`, entities: [...imageEntities],
|
|
15
15
|
}),
|
|
16
16
|
migrations: imagesMigrations,
|
|
17
17
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/command/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/command/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,iBAAiB,CAAC;IACtB,WAAW,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,mBAAmB,EAAE,KAAK;IAC1B,SAAS,CAAC,OAAO;QACf,wBAAwB,CAAC,OAAO,EAAE;YAChC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,gCAAgC,CAAC,OAAO,EAAE;gBACvE,gBAAgB,EAAE,GAAG,gBAAgB,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC;aACjF,CAAC;YACF,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { ImageRow } from '../persistence/entities.js';
|
|
2
|
+
export declare function buildImageLifecycleEvent(image: ImageRow, publicOrigin: string, occurredAt: Date): Readonly<{
|
|
3
|
+
protocol: 'zlooks.event';
|
|
4
|
+
protocolVersion: 1;
|
|
5
|
+
eventId: string;
|
|
6
|
+
type: "cn.zlooks.images.deleted.v1";
|
|
7
|
+
producer: string;
|
|
8
|
+
aggregate: Readonly<{
|
|
9
|
+
type: string;
|
|
10
|
+
id: string;
|
|
11
|
+
}>;
|
|
12
|
+
occurredAt: string;
|
|
13
|
+
data: Readonly<{
|
|
14
|
+
image: Readonly<{
|
|
15
|
+
id: string;
|
|
16
|
+
originalFilename: string | null;
|
|
17
|
+
createdBy: string;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
version: number;
|
|
20
|
+
mediaType: string;
|
|
21
|
+
extension: string;
|
|
22
|
+
byteSize: number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
sha256: string;
|
|
26
|
+
status: "deleted";
|
|
27
|
+
publicUrl: string;
|
|
28
|
+
readyAt: string;
|
|
29
|
+
deletedAt: string;
|
|
30
|
+
failureCode: null;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
}> | Readonly<{
|
|
34
|
+
protocol: 'zlooks.event';
|
|
35
|
+
protocolVersion: 1;
|
|
36
|
+
eventId: string;
|
|
37
|
+
type: "cn.zlooks.images.ready.v1";
|
|
38
|
+
producer: string;
|
|
39
|
+
aggregate: Readonly<{
|
|
40
|
+
type: string;
|
|
41
|
+
id: string;
|
|
42
|
+
}>;
|
|
43
|
+
occurredAt: string;
|
|
44
|
+
data: Readonly<{
|
|
45
|
+
image: Readonly<{
|
|
46
|
+
id: string;
|
|
47
|
+
originalFilename: string | null;
|
|
48
|
+
createdBy: string;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
version: number;
|
|
51
|
+
mediaType: string;
|
|
52
|
+
extension: string;
|
|
53
|
+
byteSize: number;
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
sha256: string;
|
|
57
|
+
status: "ready";
|
|
58
|
+
publicUrl: string;
|
|
59
|
+
readyAt: string;
|
|
60
|
+
deletedAt: null;
|
|
61
|
+
failureCode: null;
|
|
62
|
+
}>;
|
|
63
|
+
}>;
|
|
64
|
+
}> | Readonly<{
|
|
65
|
+
protocol: 'zlooks.event';
|
|
66
|
+
protocolVersion: 1;
|
|
67
|
+
eventId: string;
|
|
68
|
+
type: "cn.zlooks.images.unavailable.v1";
|
|
69
|
+
producer: string;
|
|
70
|
+
aggregate: Readonly<{
|
|
71
|
+
type: string;
|
|
72
|
+
id: string;
|
|
73
|
+
}>;
|
|
74
|
+
occurredAt: string;
|
|
75
|
+
data: Readonly<{
|
|
76
|
+
image: Readonly<{
|
|
77
|
+
id: string;
|
|
78
|
+
originalFilename: string | null;
|
|
79
|
+
createdBy: string;
|
|
80
|
+
createdAt: string;
|
|
81
|
+
version: number;
|
|
82
|
+
mediaType: string;
|
|
83
|
+
extension: string;
|
|
84
|
+
byteSize: number;
|
|
85
|
+
width: number;
|
|
86
|
+
height: number;
|
|
87
|
+
sha256: string;
|
|
88
|
+
status: "deleting";
|
|
89
|
+
publicUrl: string;
|
|
90
|
+
readyAt: string;
|
|
91
|
+
deletedAt: null;
|
|
92
|
+
failureCode: null;
|
|
93
|
+
}>;
|
|
94
|
+
}>;
|
|
95
|
+
}> | Readonly<{
|
|
96
|
+
protocol: 'zlooks.event';
|
|
97
|
+
protocolVersion: 1;
|
|
98
|
+
eventId: string;
|
|
99
|
+
type: "cn.zlooks.images.upload-failed.v1";
|
|
100
|
+
producer: string;
|
|
101
|
+
aggregate: Readonly<{
|
|
102
|
+
type: string;
|
|
103
|
+
id: string;
|
|
104
|
+
}>;
|
|
105
|
+
occurredAt: string;
|
|
106
|
+
data: Readonly<{
|
|
107
|
+
image: Readonly<{
|
|
108
|
+
id: string;
|
|
109
|
+
originalFilename: string | null;
|
|
110
|
+
createdBy: string;
|
|
111
|
+
createdAt: string;
|
|
112
|
+
version: number;
|
|
113
|
+
mediaType: string | null;
|
|
114
|
+
extension: string | null;
|
|
115
|
+
byteSize: number | null;
|
|
116
|
+
width: number | null;
|
|
117
|
+
height: number | null;
|
|
118
|
+
sha256: string | null;
|
|
119
|
+
status: "failed";
|
|
120
|
+
publicUrl: null;
|
|
121
|
+
readyAt: null;
|
|
122
|
+
deletedAt: null;
|
|
123
|
+
failureCode: string;
|
|
124
|
+
}>;
|
|
125
|
+
}>;
|
|
126
|
+
}> | undefined;
|
|
127
|
+
//# sourceMappingURL=image-domain-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-domain-events.d.ts","sourceRoot":"","sources":["../../src/events/image-domain-events.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAQ/F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createDomainEventId } from '@zlooks.cn/event-bus';
|
|
2
|
+
import { IMAGES_SERVICE_NAMESPACE, imageDeletedEvent, imageReadyEvent, imageUnavailableEvent, imageUploadFailedEvent, } from '@zlooks.cn/images-shared';
|
|
3
|
+
export function buildImageLifecycleEvent(image, publicOrigin, occurredAt) {
|
|
4
|
+
switch (image.status) {
|
|
5
|
+
case 'ready': return build(imageReadyEvent, image, publicOrigin, occurredAt);
|
|
6
|
+
case 'deleting': return build(imageUnavailableEvent, image, publicOrigin, occurredAt);
|
|
7
|
+
case 'deleted': return build(imageDeletedEvent, image, publicOrigin, occurredAt);
|
|
8
|
+
case 'failed': return build(imageUploadFailedEvent, image, publicOrigin, occurredAt);
|
|
9
|
+
default: return undefined;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function build(definition, image, publicOrigin, occurredAt) {
|
|
13
|
+
return definition.parse({
|
|
14
|
+
protocol: 'zlooks.event', protocolVersion: 1,
|
|
15
|
+
eventId: createDomainEventId(definition.type, image.id, image.version),
|
|
16
|
+
type: definition.type, producer: IMAGES_SERVICE_NAMESPACE,
|
|
17
|
+
aggregate: { type: 'image', id: image.id }, occurredAt: occurredAt.toISOString(),
|
|
18
|
+
data: { image: toSnapshot(image, publicOrigin) },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function toSnapshot(image, publicOrigin) {
|
|
22
|
+
const publicUrl = image.status === 'failed'
|
|
23
|
+
? null
|
|
24
|
+
: new URL(`/media/images/${image.id}.${required(image.extension, 'extension')}`, publicOrigin).href;
|
|
25
|
+
return {
|
|
26
|
+
id: image.id, originalFilename: image.originalFilename, status: image.status, publicUrl,
|
|
27
|
+
mediaType: image.mediaType, extension: image.extension, byteSize: image.byteSize,
|
|
28
|
+
width: image.width, height: image.height, sha256: image.sha256, createdBy: image.createdBy,
|
|
29
|
+
createdAt: image.createdAt.toISOString(), readyAt: image.readyAt?.toISOString() ?? null,
|
|
30
|
+
deletedAt: image.deletedAt?.toISOString() ?? null, failureCode: image.failureCode, version: image.version,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function required(value, name) {
|
|
34
|
+
if (value === null)
|
|
35
|
+
throw new TypeError(`Image event requires ${name}`);
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=image-domain-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-domain-events.js","sourceRoot":"","sources":["../../src/events/image-domain-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/mcp/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/mcp/provider.ts"],"names":[],"mappings":"AAoBA,wBAAgB,oBAAoB,8CAmEnC"}
|
package/dist/mcp/provider.js
CHANGED
|
@@ -2,6 +2,7 @@ import { createInvocationContext } from '@hile/context';
|
|
|
2
2
|
import { defineMcpProvider, defineMcpResource, defineMcpTool } from '@hile/mcp';
|
|
3
3
|
import { loadModel } from '@hile/model';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
import { IMAGES_EVENT_CATALOG } from '@zlooks.cn/images-shared';
|
|
5
6
|
import { IMAGES_ID } from '../identity.js';
|
|
6
7
|
import { ImageError } from '../domain/image-error.js';
|
|
7
8
|
import { deleteImageSchema, listImageSchema, readImageSchema, uploadImageSchema } from '../domain/schema.js';
|
|
@@ -65,6 +66,20 @@ export function createImagesProvider() {
|
|
|
65
66
|
throw safeError(error);
|
|
66
67
|
}
|
|
67
68
|
}),
|
|
69
|
+
'event-catalog': defineMcpResource({
|
|
70
|
+
kind: 'static', name: 'event-catalog', uri: 'hile://images/events',
|
|
71
|
+
title: '图片领域事件目录', mimeType: 'application/json', access: readAccess,
|
|
72
|
+
description: `当前图片服务实例提供 ${IMAGES_EVENT_CATALOG.count} 个领域事件契约;创建或修改消费服务前读取此目录。`,
|
|
73
|
+
}, async (uri, context) => {
|
|
74
|
+
assertAccess(context, 'images:read');
|
|
75
|
+
return {
|
|
76
|
+
contents: [{
|
|
77
|
+
uri: uri.toString(),
|
|
78
|
+
mimeType: 'application/json',
|
|
79
|
+
text: JSON.stringify(IMAGES_EVENT_CATALOG),
|
|
80
|
+
}],
|
|
81
|
+
};
|
|
82
|
+
}),
|
|
68
83
|
},
|
|
69
84
|
});
|
|
70
85
|
}
|
package/dist/mcp/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mcp/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mcp/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA2CrE,eAAO,MAAM,gBAAgB,EAAE,SAAS,iBAAiB,EAA4B,CAAC"}
|
package/dist/migrations/index.js
CHANGED
|
@@ -1,3 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { IsNull, TableColumn } from 'typeorm';
|
|
2
|
+
const backfillEventVersions = {
|
|
3
|
+
name: '20260909-backfill-image-event-versions',
|
|
4
|
+
async run(dataSource) {
|
|
5
|
+
const runner = dataSource.createQueryRunner();
|
|
6
|
+
await runner.connect();
|
|
7
|
+
try {
|
|
8
|
+
await runner.startTransaction();
|
|
9
|
+
const table = await runner.getTable('images');
|
|
10
|
+
if (!table) {
|
|
11
|
+
await runner.commitTransaction();
|
|
12
|
+
return 'skipped';
|
|
13
|
+
}
|
|
14
|
+
let versionColumn = table.findColumnByName('version');
|
|
15
|
+
if (versionColumn && !versionColumn.isNullable) {
|
|
16
|
+
await runner.commitTransaction();
|
|
17
|
+
return 'skipped';
|
|
18
|
+
}
|
|
19
|
+
if (!versionColumn) {
|
|
20
|
+
versionColumn = new TableColumn({ name: 'version', type: 'integer', isNullable: true });
|
|
21
|
+
await runner.addColumn('images', versionColumn);
|
|
22
|
+
}
|
|
23
|
+
await runner.manager.createQueryBuilder()
|
|
24
|
+
.update('images')
|
|
25
|
+
.set({ version: 1 })
|
|
26
|
+
.where({ version: IsNull() })
|
|
27
|
+
.execute();
|
|
28
|
+
const requiredVersionColumn = versionColumn.clone();
|
|
29
|
+
requiredVersionColumn.isNullable = false;
|
|
30
|
+
await runner.changeColumn('images', 'version', requiredVersionColumn);
|
|
31
|
+
await runner.commitTransaction();
|
|
32
|
+
return 'applied';
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (runner.isTransactionActive)
|
|
36
|
+
await runner.rollbackTransaction();
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await runner.release();
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
export const imagesMigrations = [backfillEventVersions];
|
|
3
45
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAmB,MAAM,SAAS,CAAC;AAE/D,MAAM,qBAAqB,GAAsB;IAC/C,IAAI,EAAE,wCAAwC;IAC9C,KAAK,CAAC,GAAG,CAAC,UAAsB;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC9C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACjC,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;gBAC/C,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACjC,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxF,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE;iBACtC,MAAM,CAAC,QAAQ,CAAC;iBAChB,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;iBACnB,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;iBAC5B,OAAO,EAAE,CAAC;YACb,MAAM,qBAAqB,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;YACpD,qBAAqB,CAAC,UAAU,GAAG,KAAK,CAAC;YACzC,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;YACtE,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,mBAAmB;gBAAE,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAiC,CAAC,qBAAqB,CAAC,CAAC"}
|
|
@@ -17,6 +17,8 @@ export interface ImageRow {
|
|
|
17
17
|
createdAt: Date;
|
|
18
18
|
readyAt: Date | null;
|
|
19
19
|
deletedAt: Date | null;
|
|
20
|
+
version: number;
|
|
20
21
|
}
|
|
21
22
|
export declare const ImageEntity: EntitySchema<ImageRow>;
|
|
23
|
+
export declare const imageEntities: readonly [EntitySchema<ImageRow>];
|
|
22
24
|
//# sourceMappingURL=entities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/persistence/entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9F,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAClE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5F,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/persistence/entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9F,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAClE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5F,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9D,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,eAAO,MAAM,WAAW,wBAmBtB,CAAC;AAEH,eAAO,MAAM,aAAa,mCAAyB,CAAC"}
|
|
@@ -13,8 +13,11 @@ export const ImageEntity = new EntitySchema({
|
|
|
13
13
|
createdAt: { name: 'created_at', type: 'timestamptz', precision: 3, createDate: true },
|
|
14
14
|
readyAt: { name: 'ready_at', type: 'timestamptz', precision: 3, nullable: true },
|
|
15
15
|
deletedAt: { name: 'deleted_at', type: 'timestamptz', precision: 3, nullable: true },
|
|
16
|
+
version: { type: 'integer', version: true },
|
|
16
17
|
},
|
|
17
18
|
uniques: [{ name: 'images_upload_actor_key', columns: ['createdBy', 'uploadIdempotencyKey'] }],
|
|
19
|
+
checks: [{ name: 'chk_images_version', expression: `"version" > 0` }],
|
|
18
20
|
indices: [{ columns: ['createdAt', 'id'] }, { columns: ['status', 'createdAt', 'id'] }, { columns: ['createdBy', 'createdAt', 'id'] }, { columns: ['sha256'] }],
|
|
19
21
|
});
|
|
22
|
+
export const imageEntities = [ImageEntity];
|
|
20
23
|
//# sourceMappingURL=entities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/persistence/entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/persistence/entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { Redis } from 'ioredis';
|
|
2
|
+
import type { DomainEventPublisher } from '@zlooks.cn/event-client';
|
|
2
3
|
import { type DataSource } from 'typeorm';
|
|
3
4
|
import type { ListImageInput } from '../domain/schema.js';
|
|
4
5
|
import { type ImageRow } from './entities.js';
|
|
5
6
|
export declare class ImageStore {
|
|
6
7
|
#private;
|
|
7
|
-
|
|
8
|
+
private readonly publicOrigin;
|
|
9
|
+
private readonly events;
|
|
10
|
+
constructor(database: DataSource, redis: Redis, cachePrefix: string, publicOrigin: () => string, events: DomainEventPublisher);
|
|
8
11
|
reserve(createdBy: string, key: string, hash: string, filename: string | null): Promise<{
|
|
9
12
|
row: ImageRow;
|
|
10
13
|
created: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-store.d.ts","sourceRoot":"","sources":["../../src/persistence/image-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"image-store.d.ts","sourceRoot":"","sources":["../../src/persistence/image-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAgB,KAAK,UAAU,EAAmB,MAAM,SAAS,CAAC;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI3D,qBAAa,UAAU;;IASnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,YACE,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EACF,YAAY,EAAE,MAAM,MAAM,EAC1B,MAAM,EAAE,oBAAoB,EAK9C;IACK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;;;OAWlF;IACK,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAIxC;IACD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;;;;;;;mBAExC;IACK,IAAI,CAAC,KAAK,EAAE,cAAc;;;;OAK/B;IAEK,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1H;IAEK,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAchI;IAEK,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CASvD;CACF"}
|
|
@@ -5,10 +5,17 @@ import { encodeCursor } from '../domain/list-cursor.js';
|
|
|
5
5
|
import { ImageError } from '../domain/image-error.js';
|
|
6
6
|
import { ImageEntity } from './entities.js';
|
|
7
7
|
import { imageQueryOptions } from './image-query.js';
|
|
8
|
+
import { buildImageLifecycleEvent } from '../events/image-domain-events.js';
|
|
8
9
|
export class ImageStore {
|
|
10
|
+
publicOrigin;
|
|
11
|
+
events;
|
|
12
|
+
#database;
|
|
9
13
|
#rows;
|
|
10
14
|
#publicImages;
|
|
11
|
-
constructor(database, redis, cachePrefix) {
|
|
15
|
+
constructor(database, redis, cachePrefix, publicOrigin, events) {
|
|
16
|
+
this.publicOrigin = publicOrigin;
|
|
17
|
+
this.events = events;
|
|
18
|
+
this.#database = database;
|
|
12
19
|
this.#rows = database.getRepository(ImageEntity);
|
|
13
20
|
this.#publicImages = new PublicImageCache(redis, cachePrefix, (id) => this.read(id));
|
|
14
21
|
}
|
|
@@ -45,8 +52,19 @@ export class ImageStore {
|
|
|
45
52
|
}
|
|
46
53
|
async compareAndSet(id, expected, changes, signal) {
|
|
47
54
|
return this.#publicImages.change(id, async () => {
|
|
48
|
-
const result = await this.#
|
|
49
|
-
|
|
55
|
+
const result = await this.#database.transaction(async (manager) => {
|
|
56
|
+
const result = await manager.getRepository(ImageEntity).update({ id, status: expected }, changes);
|
|
57
|
+
if (result.affected !== 1)
|
|
58
|
+
return { changed: false };
|
|
59
|
+
const updated = await manager.getRepository(ImageEntity).findOneByOrFail({ id });
|
|
60
|
+
const event = updated.status !== expected
|
|
61
|
+
? buildImageLifecycleEvent(updated, this.publicOrigin(), changes.readyAt ?? changes.deletedAt ?? new Date())
|
|
62
|
+
: undefined;
|
|
63
|
+
return { changed: true, event };
|
|
64
|
+
});
|
|
65
|
+
if (result.event)
|
|
66
|
+
await this.events.publish(result.event);
|
|
67
|
+
return result.changed;
|
|
50
68
|
}, signal);
|
|
51
69
|
}
|
|
52
70
|
async interrupted(afterId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-store.js","sourceRoot":"","sources":["../../src/persistence/image-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"image-store.js","sourceRoot":"","sources":["../../src/persistence/image-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineService, loadService } from '@hile/core';
|
|
2
2
|
import { createDataSource } from '@hile/typeorm';
|
|
3
|
-
import {
|
|
3
|
+
import { imageEntities } from '../persistence/entities.js';
|
|
4
4
|
import configService from './config.service.js';
|
|
5
5
|
export default defineService('zlooks.images.database', async (shutdown) => {
|
|
6
6
|
const config = (await loadService(configService)).snapshot().postgres;
|
|
@@ -15,7 +15,7 @@ export default defineService('zlooks.images.database', async (shutdown) => {
|
|
|
15
15
|
poolSize: config.poolSize,
|
|
16
16
|
synchronize: true,
|
|
17
17
|
migrationsRun: false,
|
|
18
|
-
entities: [
|
|
18
|
+
entities: [...imageEntities],
|
|
19
19
|
});
|
|
20
20
|
shutdown(() => database.destroy());
|
|
21
21
|
return database;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.service.js","sourceRoot":"","sources":["../../src/services/database.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"database.service.js","sourceRoot":"","sources":["../../src/services/database.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,eAAe,aAAa,CAAC,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC;QACtC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images-runtime.service.d.ts","sourceRoot":"","sources":["../../src/services/images-runtime.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"images-runtime.service.d.ts","sourceRoot":"","sources":["../../src/services/images-runtime.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { defineService, loadService } from '@hile/core';
|
|
2
|
+
import { createExecutionContext } from '@hile/context';
|
|
3
|
+
import { ContextualEventPublisher, EventClient } from '@zlooks.cn/event-client';
|
|
2
4
|
import { ImageStore } from '../persistence/image-store.js';
|
|
3
5
|
import { recoverImages } from '../runtime/recover-images.js';
|
|
4
6
|
import { LocalImageStorage } from '../storage/local-storage.js';
|
|
5
7
|
import configService from './config.service.js';
|
|
6
8
|
import redisService from './redis.service.js';
|
|
7
9
|
import databaseService from './database.service.js';
|
|
10
|
+
import applicationService from './application.service.js';
|
|
8
11
|
export default defineService('zlooks.images.runtime', async () => {
|
|
9
|
-
const [database, configs, redis] = await Promise.all([
|
|
10
|
-
|
|
12
|
+
const [database, configs, redis, application] = await Promise.all([
|
|
13
|
+
loadService(databaseService), loadService(configService), loadService(redisService), loadService(applicationService),
|
|
14
|
+
]);
|
|
15
|
+
const store = new ImageStore(database, redis, `${configs.snapshot().redis.keyPrefix}images:public:v1:`, () => configs.snapshot().publicHost.origin, new ContextualEventPublisher(new EventClient(application), () => createExecutionContext({ source: 'cn.zlooks.images' })));
|
|
11
16
|
const storage = new LocalImageStorage();
|
|
12
17
|
await storage.initialize();
|
|
13
18
|
await recoverImages(store, storage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images-runtime.service.js","sourceRoot":"","sources":["../../src/services/images-runtime.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,eAAe,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"images-runtime.service.js","sourceRoot":"","sources":["../../src/services/images-runtime.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,eAAe,aAAa,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;IAC/D,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChE,WAAW,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC;KACrH,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,QAAQ,EACR,KAAK,EACL,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,mBAAmB,EACxD,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,EAC1C,IAAI,wBAAwB,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CACzH,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACxC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC3B,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AAChF,CAAC,CAAC,CAAC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { defineService, loadService } from '@hile/core';
|
|
2
2
|
import publicAssetsService from './public-assets.service.js';
|
|
3
3
|
import mcpProviderService from './mcp-provider.service.js';
|
|
4
|
+
import imagesRuntimeService from './images-runtime.service.js';
|
|
4
5
|
export default defineService('zlooks.images.boot', async () => {
|
|
5
|
-
await loadService(
|
|
6
|
-
await
|
|
6
|
+
await loadService(imagesRuntimeService);
|
|
7
|
+
await Promise.all([
|
|
8
|
+
loadService(publicAssetsService),
|
|
9
|
+
loadService(mcpProviderService),
|
|
10
|
+
]);
|
|
7
11
|
});
|
|
8
12
|
//# sourceMappingURL=images.boot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.boot.js","sourceRoot":"","sources":["../../src/services/images.boot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"images.boot.js","sourceRoot":"","sources":["../../src/services/images.boot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,oBAAoB,MAAM,6BAA6B,CAAC;AAE/D,eAAe,aAAa,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;IAC5D,MAAM,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,WAAW,CAAC,mBAAmB,CAAC;QAChC,WAAW,CAAC,kBAAkB,CAAC;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zlooks.cn/images-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
"zlooks": {
|
|
16
16
|
"kind": "service",
|
|
17
17
|
"description": "独立 MCP 图床服务",
|
|
18
|
-
"dependsOn": [
|
|
18
|
+
"dependsOn": [
|
|
19
|
+
"@zlooks.cn/event-server"
|
|
20
|
+
],
|
|
19
21
|
"commands": {
|
|
20
22
|
"db": [
|
|
21
23
|
"migrate"
|
|
@@ -35,11 +37,15 @@
|
|
|
35
37
|
"@hile/redis-lock": "4.0.1",
|
|
36
38
|
"@hile/typeorm": "4.0.1",
|
|
37
39
|
"@zlooks.cn/database-command": "1.0.2",
|
|
40
|
+
"@zlooks.cn/event-bus": "1.0.1",
|
|
41
|
+
"@zlooks.cn/event-client": "1.0.1",
|
|
42
|
+
"@zlooks.cn/images-shared": "1.0.1",
|
|
38
43
|
"@zlooks.cn/infrastructure": "1.0.0",
|
|
39
44
|
"@zlooks.cn/public-asset": "1.0.1",
|
|
40
45
|
"@zlooks.cn/public-host-contract": "1.0.0",
|
|
41
46
|
"@zlooks.cn/registry-config": "1.0.0",
|
|
42
47
|
"@zlooks.cn/service-command": "1.0.0",
|
|
48
|
+
"@zlooks.cn/utils": "1.0.0",
|
|
43
49
|
"detect-port": "2.1.0",
|
|
44
50
|
"ioredis": "5.11.1",
|
|
45
51
|
"pg": "8.23.0",
|
|
@@ -65,5 +71,5 @@
|
|
|
65
71
|
"typescript": "7.0.2",
|
|
66
72
|
"vitest": "4.1.11"
|
|
67
73
|
},
|
|
68
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "610337508f9d567e36dce225462a4381f975cffe"
|
|
69
75
|
}
|