vona-module-image-native 5.0.5 → 5.0.6
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/.metadata/index.d.ts +0 -33
- package/dist/.metadata/index.d.ts.map +1 -1
- package/dist/bean/imageProvider.native.d.ts +4 -8
- package/dist/bean/imageProvider.native.d.ts.map +1 -1
- package/dist/index.js +66 -136
- package/dist/index.js.map +1 -1
- package/dist/service/imageNative.d.ts +11 -11
- package/dist/service/imageNative.d.ts.map +1 -1
- package/package.json +3 -7
- package/src/.metadata/index.ts +0 -37
- package/src/bean/imageProvider.native.ts +13 -36
- package/src/service/imageNative.ts +100 -113
- package/dist/controller/image.d.ts +0 -11
- package/dist/controller/image.d.ts.map +0 -1
- package/src/controller/image.ts +0 -57
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { TypeControllerOptionsActions } from 'vona-module-a-openapi';
|
|
2
1
|
/** service: begin */
|
|
3
2
|
export * from '../service/imageNative.ts';
|
|
4
3
|
import 'vona-module-a-bean';
|
|
@@ -55,38 +54,6 @@ export interface IModuleImageProvider {
|
|
|
55
54
|
'native': ImageProviderNative;
|
|
56
55
|
}
|
|
57
56
|
/** imageProvider: end */
|
|
58
|
-
/** controller: begin */
|
|
59
|
-
export * from '../controller/image.ts';
|
|
60
|
-
import type { IControllerOptionsImage } from '../controller/image.ts';
|
|
61
|
-
import 'vona-module-a-web';
|
|
62
|
-
declare module 'vona-module-a-web' {
|
|
63
|
-
interface IControllerRecord {
|
|
64
|
-
'image-native:image': IControllerOptionsImage;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
declare module 'vona-module-image-native' {
|
|
68
|
-
interface ControllerImage {
|
|
69
|
-
}
|
|
70
|
-
interface ControllerImage {
|
|
71
|
-
get $beanFullName(): 'image-native.controller.image';
|
|
72
|
-
get $onionName(): 'image-native:image';
|
|
73
|
-
get $onionOptions(): IControllerOptionsImage;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/** controller: end */
|
|
77
|
-
/** controller: begin */
|
|
78
|
-
import '../controller/image.ts';
|
|
79
|
-
declare module 'vona-module-image-native' {
|
|
80
|
-
interface IControllerOptionsImage {
|
|
81
|
-
actions?: TypeControllerOptionsActions<ControllerImage>;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
declare module 'vona-module-a-web' {
|
|
85
|
-
interface IApiPathPostRecord {
|
|
86
|
-
'/image-native/direct-upload/:resourceId': undefined;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/** controller: end */
|
|
90
57
|
/** config: begin */
|
|
91
58
|
export * from '../config/config.ts';
|
|
92
59
|
import type { config } from '../config/config.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,qBAAqB;AACrB,cAAc,2BAA2B,CAAC;AAE1C,OAAO,oBAAoB,CAAC;AAC5B,OAAO,QAAQ,oBAAoB,CAAC;IAEhC,UAAiB,cAAc;QAC7B,0BAA0B,EAAE,KAAK,CAAC;KACnC;CAGJ;AACD,OAAO,QAAQ,0BAA0B,CAAC;IAElC,UAAiB,kBAAkB;KAGlC;IAEC,UAAiB,kBAAkB;QACjC,IAAI,aAAa,IAAI,kCAAkC,CAAC;QACxD,IAAI,UAAU,IAAI,0BAA0B,CAAC;KAE9C;CACV;AACD,mBAAmB;AACnB,qBAAqB;AACrB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,kBAAkB,CAAC;CACnC;AACD,mBAAmB;AACnB,qBAAqB;AAErB,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,kBAAkB;QACjC,kCAAkC,EAAE,kBAAkB,CAAC;KACxD;CACF;AACD,mBAAmB;AACnB,2BAA2B;AAC3B,cAAc,iCAAiC,CAAC;AAChD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,qBAAqB,CAAC;AAC7B,OAAO,QAAQ,qBAAqB,CAAC;IAEjC,UAAiB,oBAAoB;QACnC,qBAAqB,EAAE,2BAA2B,CAAC;KACpD;CAGJ;AACD,OAAO,QAAQ,0BAA0B,CAAC;IAElC,UAAiB,mBAAmB;KAGnC;IAEC,UAAiB,mBAAmB;QAClC,IAAI,aAAa,IAAI,mCAAmC,CAAC;QACzD,IAAI,UAAU,IAAI,qBAAqB,CAAC;QACxC,IAAI,aAAa,IAAI,2BAA2B,CAAC;KAClD;CACV;AACD,yBAAyB;AACzB,2BAA2B;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AACD,yBAAyB;AACzB,oBAAoB;AACpB,cAAc,qBAAqB,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,kBAAkB;AAClB,oBAAoB;AACpB,cAAc,cAAc,CAAC;AAC7B,kBAAkB;AAClB,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAGhF,qBACa,sBAAuB,SAAQ,aAAa;CAAG;AAE5D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC,OAAO,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,oBAAoB,CAAC;CACnC;AAED,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,gBAAgB;QAC/B,cAAc,EAAE,sBAAsB,CAAC;KACxC;IAED,UAAiB,mBAAmB;QAClC,WAAW,EAAE,sBAAsB,CAAC;KACrC;IAED,UAAiB,gBAAgB;QAC/B,cAAc,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;KAC3C;CAKF;AACD,iBAAiB"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
import type { IDecoratorImageProviderOptions,
|
|
1
|
+
import type { IDecoratorImageProviderOptions, IImageDownloadResult, IImageProviderDeliveryOptions, IImageProviderClientOptions, IImageProviderClientRecord, IImageProviderExecute, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
|
|
2
2
|
import type { EntityImage } from 'vona-module-a-image';
|
|
3
3
|
import { BeanBase } from 'vona';
|
|
4
4
|
export interface IImageProviderNativeClientRecord extends IImageProviderClientRecord {
|
|
5
5
|
}
|
|
6
6
|
export interface IImageProviderNativeClientOptions extends IImageProviderClientOptions {
|
|
7
7
|
subdir?: string;
|
|
8
|
-
signingKey?: string;
|
|
9
|
-
tokenName?: string;
|
|
10
8
|
}
|
|
11
9
|
export interface IImageProviderOptionsNative extends IDecoratorImageProviderOptions<IImageProviderNativeClientRecord, IImageProviderNativeClientOptions> {
|
|
12
10
|
}
|
|
13
11
|
export declare class ImageProviderNative extends BeanBase implements IImageProviderExecute<IImageProviderNativeClientOptions, IImageProviderOptionsNative> {
|
|
14
12
|
upload(input: IImageUploadInput, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative): Promise<IImageProviderResource>;
|
|
15
|
-
createDirectUpload(input: IImageDirectUploadInput, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative): Promise<import("vona-module-a-image").IImageProviderDirectUploadResource<import("vona-module-a-image").TypeImageMeta, unknown>>;
|
|
16
|
-
finalizeDirectUpload(image: EntityImage, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative): Promise<IImageProviderResource<import("vona-module-a-image").TypeImageMeta, unknown> | undefined>;
|
|
17
13
|
get(image: EntityImage, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative): Promise<{
|
|
18
14
|
resourceId: string;
|
|
19
15
|
filename: string | undefined;
|
|
@@ -21,14 +17,14 @@ export declare class ImageProviderNative extends BeanBase implements IImageProvi
|
|
|
21
17
|
size: number | undefined;
|
|
22
18
|
width: number | undefined;
|
|
23
19
|
height: number | undefined;
|
|
24
|
-
|
|
20
|
+
public: boolean | undefined;
|
|
25
21
|
variants: Partial<Record<keyof import("vona-module-a-image").IImageVariantNameRecord, import("vona-module-a-image").IImageTransformOptions>> | undefined;
|
|
26
22
|
meta: Record<string, any> | undefined;
|
|
27
23
|
storagePath: string | undefined;
|
|
28
24
|
deliveryBaseUrl: string | undefined;
|
|
29
25
|
}>;
|
|
30
26
|
delete(image: EntityImage, _clientOptions: IImageProviderClientOptions, _options: IImageProviderOptionsNative): Promise<void>;
|
|
31
|
-
getVariantUrl(image: EntityImage, request: IImageVariantRequest, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative, deliveryOptions?:
|
|
32
|
-
download(image: EntityImage, request: IImageVariantRequest, clientOptions: IImageProviderNativeClientOptions, options: IImageProviderOptionsNative, deliveryOptions?:
|
|
27
|
+
getVariantUrl(image: EntityImage, request: IImageVariantRequest, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative, deliveryOptions?: IImageProviderDeliveryOptions): Promise<string>;
|
|
28
|
+
download(image: EntityImage, request: IImageVariantRequest, clientOptions: IImageProviderNativeClientOptions, options: IImageProviderOptionsNative, deliveryOptions?: IImageProviderDeliveryOptions): Promise<IImageDownloadResult>;
|
|
33
29
|
}
|
|
34
30
|
//# sourceMappingURL=imageProvider.native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageProvider.native.d.ts","sourceRoot":"","sources":["../../src/bean/imageProvider.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,
|
|
1
|
+
{"version":3,"file":"imageProvider.native.d.ts","sourceRoot":"","sources":["../../src/bean/imageProvider.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,gCAAiC,SAAQ,0BAA0B;CAAG;AAEvF,MAAM,WAAW,iCAAkC,SAAQ,2BAA2B;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA4B,SAAQ,8BAA8B,CACjF,gCAAgC,EAChC,iCAAiC,CAClC;CAAG;AAEJ,qBAOa,mBACX,SAAQ,QACR,YAAW,qBAAqB,CAAC,iCAAiC,EAAE,2BAA2B,CAAC;IAE1F,MAAM,CACV,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,iCAAiC,EAChD,QAAQ,EAAE,2BAA2B,GACpC,OAAO,CAAC,sBAAsB,CAAC;IAU5B,GAAG,CACP,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,iCAAiC,EAChD,QAAQ,EAAE,2BAA2B;;;;;;;;;;;;;IAiBjC,MAAM,CACV,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,2BAA2B,EAC3C,QAAQ,EAAE,2BAA2B;IAKjC,aAAa,CACjB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,iCAAiC,EAChD,QAAQ,EAAE,2BAA2B,EACrC,eAAe,CAAC,EAAE,6BAA6B;IAe3C,QAAQ,CACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,iCAAiC,EAChD,OAAO,EAAE,2BAA2B,EACpC,eAAe,CAAC,EAAE,6BAA6B,GAC9C,OAAO,CAAC,oBAAoB,CAAC;CAqBjC"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { BeanInfo, BeanBase, uuidv4, BeanSimple, cast, getPlatformArch, resolveAddon, BeanScopeBase } from 'vona';
|
|
2
|
-
import { __decorate
|
|
1
|
+
import { BeanInfo, BeanBase, uuidv4, getRuntimePathPhysicalRoot, BeanSimple, cast, getPlatformArch, resolveAddon, BeanScopeBase } from 'vona';
|
|
2
|
+
import { __decorate } from 'tslib';
|
|
3
3
|
import fse from 'fs-extra';
|
|
4
4
|
import { createHash } from 'node:crypto';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { Service, Scope } from 'vona-module-a-bean';
|
|
7
7
|
import { resolveImageVariantRequestToTransform, ImageProvider } from 'vona-module-a-image';
|
|
8
|
-
import { Core } from 'vona-module-a-core';
|
|
9
|
-
import { Passport } from 'vona-module-a-user';
|
|
10
|
-
import { Web, Arg, Controller } from 'vona-module-a-web';
|
|
11
8
|
|
|
12
9
|
let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
13
10
|
constructor(...args) {
|
|
@@ -22,78 +19,31 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
22
19
|
}
|
|
23
20
|
async upload(input, options) {
|
|
24
21
|
const resourceId = uuidv4();
|
|
25
|
-
const
|
|
22
|
+
const isPublic = input.public ?? options.public;
|
|
23
|
+
const targetPath = await this._getFinalPath(resourceId, input.filename, isPublic, options, input.file);
|
|
24
|
+
await fse.ensureDir(path.dirname(targetPath));
|
|
26
25
|
await fse.copy(input.file, targetPath);
|
|
27
26
|
return await this._buildStoredResource(targetPath, {
|
|
28
27
|
resourceId,
|
|
29
28
|
filename: input.filename,
|
|
30
29
|
contentType: input.contentType,
|
|
31
30
|
meta: input.meta,
|
|
32
|
-
|
|
31
|
+
public: isPublic,
|
|
33
32
|
variants: options.variants ?? this.scope.config.imageNative.variants,
|
|
34
33
|
deliveryBaseUrl: options.deliveryBaseUrl
|
|
35
34
|
});
|
|
36
35
|
}
|
|
37
|
-
async createDirectUpload(input, options) {
|
|
38
|
-
const resourceId = this._sanitizeResourceId(input.customId) ?? uuidv4();
|
|
39
|
-
const storagePath = await this._getFinalPath(resourceId, input.filename, options);
|
|
40
|
-
const routePath = this.scope.util.combineApiPath(`image-native/direct-upload/${encodeURIComponent(resourceId)}`, false, true);
|
|
41
|
-
const tokenPath = this.scope.util.combineApiPath('image-native/direct-upload/:resourceId', false, true);
|
|
42
|
-
const tokenPayload = await this.bean.imageUploadPolicy.createDirectUploadToken({
|
|
43
|
-
resourceId,
|
|
44
|
-
path: tokenPath
|
|
45
|
-
});
|
|
46
|
-
const uploadUrl = new URL(this.app.util.getAbsoluteUrlByApiPath(routePath));
|
|
47
|
-
uploadUrl.searchParams.set('token', tokenPayload.token);
|
|
48
|
-
return {
|
|
49
|
-
resourceId,
|
|
50
|
-
filename: input.filename,
|
|
51
|
-
contentType: input.contentType,
|
|
52
|
-
meta: input.meta,
|
|
53
|
-
requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
|
|
54
|
-
variants: options.variants ?? this.scope.config.imageNative.variants,
|
|
55
|
-
deliveryBaseUrl: options.deliveryBaseUrl,
|
|
56
|
-
storagePath,
|
|
57
|
-
uploadUrl: uploadUrl.toString(),
|
|
58
|
-
draft: true
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
async uploadDirectFile(image, file) {
|
|
62
|
-
const draftPath = this._getDraftPath(image.storagePath, image.resourceId);
|
|
63
|
-
await fse.ensureDir(path.dirname(draftPath));
|
|
64
|
-
await fse.move(file.file, draftPath, {
|
|
65
|
-
overwrite: true
|
|
66
|
-
});
|
|
67
|
-
return draftPath;
|
|
68
|
-
}
|
|
69
|
-
async finalizeDirectUpload(image, options) {
|
|
70
|
-
const storagePath = image.storagePath ?? (await this._getFinalPath(image.resourceId, image.filename, options));
|
|
71
|
-
const draftPath = this._getDraftPath(storagePath, image.resourceId);
|
|
72
|
-
if (!(await fse.pathExists(draftPath))) return undefined;
|
|
73
|
-
await fse.ensureDir(path.dirname(storagePath));
|
|
74
|
-
await fse.move(draftPath, storagePath, {
|
|
75
|
-
overwrite: true
|
|
76
|
-
});
|
|
77
|
-
return await this._buildStoredResource(storagePath, {
|
|
78
|
-
resourceId: image.resourceId,
|
|
79
|
-
filename: image.filename,
|
|
80
|
-
contentType: image.contentType,
|
|
81
|
-
meta: image.meta,
|
|
82
|
-
requireSignedURLs: image.requireSignedURLs ?? options.requireSignedURLs,
|
|
83
|
-
variants: image.variants ?? options.variants ?? this.scope.config.imageNative.variants,
|
|
84
|
-
deliveryBaseUrl: image.deliveryBaseUrl ?? options.deliveryBaseUrl
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
36
|
async remove(image) {
|
|
88
37
|
if (!image.storagePath) return;
|
|
89
38
|
const dir = path.dirname(image.storagePath);
|
|
90
39
|
if (!(await fse.pathExists(dir))) return;
|
|
91
|
-
const draftPath = this._getDraftPath(image.storagePath, image.resourceId);
|
|
92
|
-
await fse.remove(draftPath);
|
|
93
40
|
const entries = await fse.readdir(dir);
|
|
94
41
|
await Promise.all(entries.filter(name => name === path.basename(image.storagePath) || name.startsWith(`${image.resourceId}__`)).map(name => fse.remove(path.join(dir, name))));
|
|
95
42
|
}
|
|
96
43
|
async getVariantUrl(image, request, options, _deliveryOptions) {
|
|
44
|
+
if (!(image.public ?? options.public)) {
|
|
45
|
+
throw new Error(`Private image-native variant URL requires signed delivery: ${image.resourceId}`);
|
|
46
|
+
}
|
|
97
47
|
const resolved = resolveImageVariantRequestToTransform(request, 'original', image.variants);
|
|
98
48
|
if (resolved.variantName === 'original' && this._isOriginalTransform(resolved.transformOptions)) {
|
|
99
49
|
return await this._getOriginalUrl(image, options);
|
|
@@ -101,6 +51,19 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
101
51
|
const targetPath = await this._ensureVariantFile(image, resolved);
|
|
102
52
|
return await this._buildUrl(targetPath, options.deliveryBaseUrl);
|
|
103
53
|
}
|
|
54
|
+
async downloadBuffer(image, request) {
|
|
55
|
+
if (!image.storagePath) {
|
|
56
|
+
throw new Error(`Image storage path missing: ${image.resourceId}`);
|
|
57
|
+
}
|
|
58
|
+
const resolved = resolveImageVariantRequestToTransform(request, 'original', image.variants);
|
|
59
|
+
const targetPath = resolved.variantName === 'original' && this._isOriginalTransform(resolved.transformOptions) ? image.storagePath : await this._ensureVariantFile(image, resolved);
|
|
60
|
+
if (!(await fse.pathExists(targetPath))) return null;
|
|
61
|
+
return {
|
|
62
|
+
buffer: await fse.readFile(targetPath),
|
|
63
|
+
filename: image.filename,
|
|
64
|
+
contentType: this._resolveContentType(targetPath, image.contentType, resolved.transformOptions)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
104
67
|
async _buildStoredResource(targetPath, data) {
|
|
105
68
|
const sharp = await this.getSharp();
|
|
106
69
|
const metadata = await sharp(targetPath).metadata();
|
|
@@ -112,25 +75,26 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
112
75
|
size: Number(stat.size),
|
|
113
76
|
width: metadata.width,
|
|
114
77
|
height: metadata.height,
|
|
115
|
-
|
|
78
|
+
public: data.public,
|
|
116
79
|
variants: data.variants,
|
|
117
80
|
meta: data.meta,
|
|
118
81
|
storagePath: targetPath,
|
|
119
82
|
deliveryBaseUrl: data.deliveryBaseUrl
|
|
120
83
|
};
|
|
121
84
|
}
|
|
122
|
-
async _getFinalPath(resourceId, filename, options, filePath) {
|
|
123
|
-
const
|
|
85
|
+
async _getFinalPath(resourceId, filename, isPublic, options, filePath) {
|
|
86
|
+
const basePath = await this._getBasePath(isPublic, options);
|
|
124
87
|
const ext = this._getOriginalExt(filename, filePath ?? resourceId);
|
|
125
|
-
return path.join(
|
|
88
|
+
return path.join(basePath, `${resourceId}${ext}`);
|
|
126
89
|
}
|
|
127
|
-
|
|
128
|
-
if (
|
|
129
|
-
|
|
90
|
+
async _getBasePath(isPublic, options) {
|
|
91
|
+
if (isPublic) {
|
|
92
|
+
return await this.app.util.getPublicPathPhysical(path.join('image-native', options.subdir ?? 'default'), true);
|
|
130
93
|
}
|
|
131
|
-
const
|
|
132
|
-
const
|
|
133
|
-
|
|
94
|
+
const runtimeRoot = getRuntimePathPhysicalRoot(this.app);
|
|
95
|
+
const basePath = path.join(runtimeRoot, this.ctx.instance.id.toString(), 'image-native', options.subdir ?? 'default');
|
|
96
|
+
await fse.ensureDir(basePath);
|
|
97
|
+
return basePath;
|
|
134
98
|
}
|
|
135
99
|
async _ensureVariantFile(image, resolved) {
|
|
136
100
|
if (!image.storagePath) {
|
|
@@ -208,8 +172,11 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
208
172
|
}
|
|
209
173
|
async _getVariantStaticPath(targetPath) {
|
|
210
174
|
const publicRoot = await this.app.util.getPublicPathPhysical(undefined, true);
|
|
211
|
-
const relativePath = path.relative(publicRoot, targetPath)
|
|
212
|
-
|
|
175
|
+
const relativePath = path.relative(publicRoot, targetPath);
|
|
176
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
177
|
+
throw new Error(`Image target path is not publicly accessible: ${targetPath}`);
|
|
178
|
+
}
|
|
179
|
+
return path.posix.join('public', this.ctx.instance.id.toString(), relativePath.split(path.sep).join(path.posix.sep));
|
|
213
180
|
}
|
|
214
181
|
async _getVariantAbsolutePath(image, resolved) {
|
|
215
182
|
if (!image.storagePath) throw new Error(`Image storage path missing: ${image.resourceId}`);
|
|
@@ -219,8 +186,8 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
219
186
|
const variantName = this._sanitizeVariantName(resolved.variantName);
|
|
220
187
|
return path.join(dir, `${image.resourceId}__${variantName}${ext}`);
|
|
221
188
|
}
|
|
222
|
-
const
|
|
223
|
-
return path.join(dir, `${image.resourceId}__t_${
|
|
189
|
+
const transformKey = this._buildTransformKey(resolved.transformOptions);
|
|
190
|
+
return path.join(dir, `${image.resourceId}__t_${transformKey}${ext}`);
|
|
224
191
|
}
|
|
225
192
|
_getVariantExt(filename, storagePath, transformOptions) {
|
|
226
193
|
const format = this._normalizeFormat(transformOptions.format);
|
|
@@ -236,7 +203,20 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
236
203
|
if (!format || format === 'auto') return undefined;
|
|
237
204
|
return format === 'jpeg' ? 'jpeg' : format;
|
|
238
205
|
}
|
|
239
|
-
|
|
206
|
+
_resolveContentType(targetPath, contentType, transformOptions) {
|
|
207
|
+
const format = this._normalizeFormat(transformOptions.format);
|
|
208
|
+
if (format === 'jpeg') return 'image/jpeg';
|
|
209
|
+
if (format === 'png') return 'image/png';
|
|
210
|
+
if (format === 'webp') return 'image/webp';
|
|
211
|
+
if (format === 'avif') return 'image/avif';
|
|
212
|
+
const ext = path.extname(targetPath).toLowerCase();
|
|
213
|
+
if (ext === '.jpg' || ext === '.jpeg') return 'image/jpeg';
|
|
214
|
+
if (ext === '.png') return 'image/png';
|
|
215
|
+
if (ext === '.webp') return 'image/webp';
|
|
216
|
+
if (ext === '.avif') return 'image/avif';
|
|
217
|
+
return contentType;
|
|
218
|
+
}
|
|
219
|
+
_buildTransformKey(transformOptions) {
|
|
240
220
|
const stable = this._stableStringify(transformOptions);
|
|
241
221
|
return createHash('sha1').update(stable).digest('hex').slice(0, 12);
|
|
242
222
|
}
|
|
@@ -250,11 +230,6 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
|
|
|
250
230
|
}
|
|
251
231
|
return JSON.stringify(value);
|
|
252
232
|
}
|
|
253
|
-
_sanitizeResourceId(resourceId) {
|
|
254
|
-
if (!resourceId) return undefined;
|
|
255
|
-
const sanitized = resourceId.replace(/[^\w.-]/g, '-');
|
|
256
|
-
return sanitized || undefined;
|
|
257
|
-
}
|
|
258
233
|
_sanitizeVariantName(variantName) {
|
|
259
234
|
return variantName.replace(/[^\w.-]/g, '-');
|
|
260
235
|
}
|
|
@@ -289,12 +264,6 @@ let ImageProviderNative = class ImageProviderNative extends BeanBase {
|
|
|
289
264
|
meta: input.meta
|
|
290
265
|
};
|
|
291
266
|
}
|
|
292
|
-
async createDirectUpload(input, clientOptions, _options) {
|
|
293
|
-
return await this.scope.service.imageNative.createDirectUpload(input, clientOptions);
|
|
294
|
-
}
|
|
295
|
-
async finalizeDirectUpload(image, clientOptions, _options) {
|
|
296
|
-
return await this.scope.service.imageNative.finalizeDirectUpload(image, clientOptions);
|
|
297
|
-
}
|
|
298
267
|
async get(image, clientOptions, _options) {
|
|
299
268
|
return {
|
|
300
269
|
resourceId: image.resourceId,
|
|
@@ -303,7 +272,7 @@ let ImageProviderNative = class ImageProviderNative extends BeanBase {
|
|
|
303
272
|
size: image.size,
|
|
304
273
|
width: image.width,
|
|
305
274
|
height: image.height,
|
|
306
|
-
|
|
275
|
+
public: image.public ?? clientOptions.public,
|
|
307
276
|
variants: image.variants,
|
|
308
277
|
meta: image.meta,
|
|
309
278
|
storagePath: image.storagePath,
|
|
@@ -317,18 +286,19 @@ let ImageProviderNative = class ImageProviderNative extends BeanBase {
|
|
|
317
286
|
return await this.scope.service.imageNative.getVariantUrl(image, request, {
|
|
318
287
|
...clientOptions,
|
|
319
288
|
subdir: clientOptions.subdir ?? 'default',
|
|
320
|
-
deliveryBaseUrl: image.deliveryBaseUrl ?? clientOptions.deliveryBaseUrl
|
|
289
|
+
deliveryBaseUrl: image.deliveryBaseUrl ?? clientOptions.deliveryBaseUrl,
|
|
290
|
+
public: image.public ?? clientOptions.public
|
|
321
291
|
}, deliveryOptions);
|
|
322
292
|
}
|
|
323
293
|
async download(image, request, clientOptions, options, deliveryOptions) {
|
|
324
|
-
if ((deliveryOptions?.responseMode ?? 'auto') !== 'url'
|
|
325
|
-
const
|
|
326
|
-
if (
|
|
294
|
+
if ((deliveryOptions?.responseMode ?? 'auto') !== 'url') {
|
|
295
|
+
const result = await this.scope.service.imageNative.downloadBuffer(image, request);
|
|
296
|
+
if (result) {
|
|
327
297
|
return {
|
|
328
298
|
kind: 'buffer',
|
|
329
|
-
buffer,
|
|
330
|
-
filename:
|
|
331
|
-
contentType:
|
|
299
|
+
buffer: result.buffer,
|
|
300
|
+
filename: result.filename,
|
|
301
|
+
contentType: result.contentType,
|
|
332
302
|
signed: false
|
|
333
303
|
};
|
|
334
304
|
}
|
|
@@ -338,60 +308,20 @@ let ImageProviderNative = class ImageProviderNative extends BeanBase {
|
|
|
338
308
|
url: await this.getVariantUrl(image, request, clientOptions, options, deliveryOptions),
|
|
339
309
|
filename: image.filename,
|
|
340
310
|
contentType: image.contentType,
|
|
341
|
-
signed: !!deliveryOptions?.
|
|
311
|
+
signed: !!deliveryOptions?.protected
|
|
342
312
|
};
|
|
343
313
|
}
|
|
344
314
|
};
|
|
345
315
|
ImageProviderNative = __decorate([ImageProvider({
|
|
346
316
|
base: {
|
|
347
317
|
subdir: 'default',
|
|
318
|
+
public: false,
|
|
348
319
|
signedDeliveryKind: 'proxy'
|
|
349
320
|
}
|
|
350
321
|
}), BeanInfo({
|
|
351
322
|
module: "image-native"
|
|
352
323
|
})], ImageProviderNative);
|
|
353
324
|
|
|
354
|
-
let ControllerImage = class ControllerImage extends BeanBase {
|
|
355
|
-
async directUpload(resourceId, token, file) {
|
|
356
|
-
const payload = await this.bean.imageUploadPolicy.verifyDirectUploadToken(token, this.ctx.route.routePathRaw);
|
|
357
|
-
if (payload.resourceId !== resourceId) {
|
|
358
|
-
return this.app.throw(401);
|
|
359
|
-
}
|
|
360
|
-
const modelImage = this.app.bean._getBean('a-image.model.image');
|
|
361
|
-
const image = await modelImage.get({
|
|
362
|
-
providerName: 'image-native:native',
|
|
363
|
-
resourceId
|
|
364
|
-
});
|
|
365
|
-
if (!image || image.status !== 'draft') {
|
|
366
|
-
return this.app.throw(403, `image is not draft: ${resourceId}`);
|
|
367
|
-
}
|
|
368
|
-
if (!image.imageScene) {
|
|
369
|
-
throw new Error(`image scene missing: ${resourceId}`);
|
|
370
|
-
}
|
|
371
|
-
const stat = await fse.stat(file.file);
|
|
372
|
-
const policy = await this.bean.imageUploadPolicy.resolveUploadPolicy({
|
|
373
|
-
imageScene: image.imageScene,
|
|
374
|
-
size: Number(stat.size),
|
|
375
|
-
mimeType: file.info.mimeType
|
|
376
|
-
});
|
|
377
|
-
await this.bean.imageUploadPolicy.validateUploadFile({
|
|
378
|
-
file: file.file,
|
|
379
|
-
filename: file.info.filename,
|
|
380
|
-
mimeType: file.info.mimeType
|
|
381
|
-
}, policy);
|
|
382
|
-
await this.scope.service.imageNative.uploadDirectFile(image, file);
|
|
383
|
-
return {
|
|
384
|
-
ok: true
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
__decorate([Web.post('direct-upload/:resourceId'), Passport.public(), Core.fileUpload(), __param(0, Arg.param('resourceId')), __param(1, Arg.query('token')), __param(2, Arg.file('image')), __metadata("design:type", Function), __metadata("design:paramtypes", [String, String, Object]), __metadata("design:returntype", Promise)], ControllerImage.prototype, "directUpload", null);
|
|
389
|
-
ControllerImage = __decorate([Controller({
|
|
390
|
-
path: 'image-native'
|
|
391
|
-
}), BeanInfo({
|
|
392
|
-
module: "image-native"
|
|
393
|
-
})], ControllerImage);
|
|
394
|
-
|
|
395
325
|
function config(_app) {
|
|
396
326
|
return {
|
|
397
327
|
imageNative: {
|
|
@@ -431,5 +361,5 @@ ScopeModuleImageNative = __decorate([Scope(), BeanInfo({
|
|
|
431
361
|
})], ScopeModuleImageNative);
|
|
432
362
|
/** scope: end */
|
|
433
363
|
|
|
434
|
-
export {
|
|
364
|
+
export { ImageProviderNative, Monkey, ScopeModuleImageNative, ServiceImageNative, config };
|
|
435
365
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/service/imageNative.ts","../src/bean/imageProvider.native.ts","../src/controller/image.ts","../src/config/config.ts","../src/monkey.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["ServiceImageNative","BeanBase","constructor","args","_sharpInstance","getSharp","default","upload","input","options","resourceId","uuidv4","targetPath","_getFinalPath","filename","file","fse","copy","_buildStoredResource","contentType","meta","requireSignedURLs","variants","scope","config","imageNative","deliveryBaseUrl","createDirectUpload","_sanitizeResourceId","customId","storagePath","routePath","util","combineApiPath","encodeURIComponent","tokenPath","tokenPayload","bean","imageUploadPolicy","createDirectUploadToken","path","uploadUrl","URL","app","getAbsoluteUrlByApiPath","searchParams","set","token","toString","draft","uploadDirectFile","image","draftPath","_getDraftPath","ensureDir","dirname","move","overwrite","finalizeDirectUpload","pathExists","undefined","remove","dir","entries","readdir","Promise","all","filter","name","basename","startsWith","map","join","getVariantUrl","request","_deliveryOptions","resolved","resolveImageVariantRequestToTransform","variantName","_isOriginalTransform","transformOptions","_getOriginalUrl","_ensureVariantFile","_buildUrl","data","sharp","metadata","stat","size","Number","width","height","filePath","publicPath","getPublicPathPhysical","subdir","ext","_getOriginalExt","Error","extname","_getVariantAbsolutePath","_writeTransformedFile","sourcePath","pipeline","failOn","dpr","Math","round","fit","gravity","background","resize","_mapFit","position","_mapGravity","rotate","sharpen","sigma","format","_normalizeFormat","jpeg","quality","png","webp","avif","toFile","variantPath","_getVariantStaticPath","replace","combineStaticPath","publicRoot","relativePath","relative","split","sep","posix","ctx","instance","id","_getVariantExt","_sanitizeVariantName","cacheKey","_buildTransformCacheKey","stable","_stableStringify","createHash","update","digest","slice","value","Array","isArray","item","Object","sort","a","b","localeCompare","key","JSON","stringify","sanitized","keys","length","__decorate","Service","__z_BeanInfo","module","ImageProviderNative","clientOptions","_options","resource","service","get","delete","_clientOptions","deliveryOptions","download","responseMode","signed","buffer","readFile","kind","url","ImageProvider","base","signedDeliveryKind","ControllerImage","directUpload","payload","verifyDirectUploadToken","route","routePathRaw","throw","modelImage","_getBean","providerName","status","imageScene","policy","resolveUploadPolicy","mimeType","info","validateUploadFile","ok","Web","post","Passport","public","Core","fileUpload","__param","Arg","param","query","prototype","Controller","_app","original","__Version","__MapTargetNames","Monkey","BeanSimple","appStart","cast","__prepareSharpLibvips","platformArch","getPlatformArch","addonFileSrc","resolveAddon","addonDirDest","import","addonFileDest","existsSync","ensureDirSync","copyFileSync","ScopeModuleImageNative","BeanScopeBase","Scope"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/service/imageNative.ts","../src/bean/imageProvider.native.ts","../src/config/config.ts","../src/monkey.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null,null,null],"names":["ServiceImageNative","BeanBase","constructor","args","_sharpInstance","getSharp","default","upload","input","options","resourceId","uuidv4","isPublic","public","targetPath","_getFinalPath","filename","file","fse","ensureDir","path","dirname","copy","_buildStoredResource","contentType","meta","variants","scope","config","imageNative","deliveryBaseUrl","remove","image","storagePath","dir","pathExists","entries","readdir","Promise","all","filter","name","basename","startsWith","map","join","getVariantUrl","request","_deliveryOptions","Error","resolved","resolveImageVariantRequestToTransform","variantName","_isOriginalTransform","transformOptions","_getOriginalUrl","_ensureVariantFile","_buildUrl","downloadBuffer","buffer","readFile","_resolveContentType","data","sharp","metadata","stat","size","Number","width","height","filePath","basePath","_getBasePath","ext","_getOriginalExt","app","util","getPublicPathPhysical","subdir","runtimeRoot","getRuntimePathPhysicalRoot","ctx","instance","id","toString","_getVariantAbsolutePath","_writeTransformedFile","sourcePath","overwrite","pipeline","failOn","dpr","Math","round","fit","gravity","background","resize","_mapFit","position","_mapGravity","rotate","undefined","sharpen","sigma","format","_normalizeFormat","jpeg","quality","png","webp","avif","toFile","variantPath","_getVariantStaticPath","replace","combineStaticPath","publicRoot","relativePath","relative","isAbsolute","posix","split","sep","_getVariantExt","_sanitizeVariantName","transformKey","_buildTransformKey","extname","toLowerCase","stable","_stableStringify","createHash","update","digest","slice","value","Array","isArray","item","Object","sort","a","b","localeCompare","key","JSON","stringify","keys","length","__decorate","Service","__z_BeanInfo","module","ImageProviderNative","clientOptions","_options","resource","service","get","delete","_clientOptions","deliveryOptions","download","responseMode","result","kind","signed","url","protected","ImageProvider","base","signedDeliveryKind","_app","original","__Version","__MapTargetNames","Monkey","BeanSimple","appStart","cast","__prepareSharpLibvips","platformArch","getPlatformArch","addonFileSrc","resolveAddon","addonDirDest","import","addonFileDest","existsSync","ensureDirSync","copyFileSync","ScopeModuleImageNative","BeanScopeBase","Scope"],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type { EntityImage,
|
|
2
|
-
import type { IUploadFile } from 'vona-module-a-upload';
|
|
1
|
+
import type { EntityImage, IImageProviderDeliveryOptions, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
|
|
3
2
|
import { BeanBase } from 'vona';
|
|
4
3
|
import type { IImageProviderNativeClientOptions } from '../bean/imageProvider.native.ts';
|
|
5
|
-
type IImageNativeStoredImage = Pick<EntityImage, 'resourceId' | 'filename' | 'storagePath' | 'variants'>;
|
|
6
|
-
type IImageNativeDraftImage = Pick<EntityImage, 'resourceId' | 'filename' | 'contentType' | 'meta' | 'imageScene' | 'requireSignedURLs' | 'storagePath' | 'deliveryBaseUrl' | 'variants' | 'clientName'>;
|
|
4
|
+
type IImageNativeStoredImage = Pick<EntityImage, 'id' | 'resourceId' | 'filename' | 'contentType' | 'public' | 'storagePath' | 'variants'>;
|
|
7
5
|
export declare class ServiceImageNative extends BeanBase {
|
|
8
6
|
private _sharpInstance;
|
|
9
7
|
private getSharp;
|
|
10
8
|
upload(input: IImageUploadInput, options: IImageProviderNativeClientOptions): Promise<IImageProviderResource>;
|
|
11
|
-
createDirectUpload(input: IImageDirectUploadInput, options: IImageProviderNativeClientOptions): Promise<IImageProviderDirectUploadResource>;
|
|
12
|
-
uploadDirectFile(image: IImageNativeDraftImage, file: IUploadFile): Promise<string>;
|
|
13
|
-
finalizeDirectUpload(image: IImageNativeDraftImage, options: IImageProviderNativeClientOptions): Promise<IImageProviderResource | undefined>;
|
|
14
9
|
remove(image: IImageNativeStoredImage): Promise<void>;
|
|
15
|
-
getVariantUrl(image: IImageNativeStoredImage, request: IImageVariantRequest, options: IImageProviderNativeClientOptions, _deliveryOptions?:
|
|
10
|
+
getVariantUrl(image: IImageNativeStoredImage, request: IImageVariantRequest, options: IImageProviderNativeClientOptions, _deliveryOptions?: IImageProviderDeliveryOptions): Promise<string>;
|
|
11
|
+
downloadBuffer(image: IImageNativeStoredImage, request: IImageVariantRequest): Promise<{
|
|
12
|
+
buffer: Buffer;
|
|
13
|
+
filename?: string;
|
|
14
|
+
contentType?: string;
|
|
15
|
+
} | null>;
|
|
16
16
|
private _buildStoredResource;
|
|
17
17
|
private _getFinalPath;
|
|
18
|
-
private
|
|
18
|
+
private _getBasePath;
|
|
19
19
|
private _ensureVariantFile;
|
|
20
20
|
private _writeTransformedFile;
|
|
21
21
|
private _getOriginalUrl;
|
|
@@ -25,9 +25,9 @@ export declare class ServiceImageNative extends BeanBase {
|
|
|
25
25
|
private _getVariantExt;
|
|
26
26
|
private _getOriginalExt;
|
|
27
27
|
private _normalizeFormat;
|
|
28
|
-
private
|
|
28
|
+
private _resolveContentType;
|
|
29
|
+
private _buildTransformKey;
|
|
29
30
|
private _stableStringify;
|
|
30
|
-
private _sanitizeResourceId;
|
|
31
31
|
private _sanitizeVariantName;
|
|
32
32
|
private _isOriginalTransform;
|
|
33
33
|
private _mapFit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageNative.d.ts","sourceRoot":"","sources":["../../src/service/imageNative.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"imageNative.d.ts","sourceRoot":"","sources":["../../src/service/imageNative.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,6BAA6B,EAE7B,sBAAsB,EAEtB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,QAAQ,EAAsC,MAAM,MAAM,CAAC;AAIpE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAEzF,KAAK,uBAAuB,GAAG,IAAI,CACjC,WAAW,EACX,IAAI,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,CACzF,CAAC;AAEF,qBACa,kBAAmB,SAAQ,QAAQ;IAC9C,OAAO,CAAC,cAAc,CAAmB;YAE3B,QAAQ;IAOhB,MAAM,CACV,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,sBAAsB,CAAC;IAuB5B,MAAM,CAAC,KAAK,EAAE,uBAAuB;IAerC,aAAa,CACjB,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,iCAAiC,EAC1C,gBAAgB,CAAC,EAAE,6BAA6B;IAkB5C,cAAc,CAClB,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI,CAAC;YAqBK,oBAAoB;YA8BpB,aAAa;YAYb,YAAY;YAqBZ,kBAAkB;YAclB,qBAAqB;YAsDrB,eAAe;YAUf,SAAS;YAQT,qBAAqB;YAarB,uBAAuB;IAerC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;CAOpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona-module-image-native",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Vona Module"
|
|
@@ -38,11 +38,7 @@
|
|
|
38
38
|
"title": "image-native",
|
|
39
39
|
"vonaModule": {
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"a-
|
|
42
|
-
"a-image": "5.0.0",
|
|
43
|
-
"a-upload": "5.0.0",
|
|
44
|
-
"a-user": "5.0.0",
|
|
45
|
-
"a-web": "5.0.0"
|
|
41
|
+
"a-image": "5.0.0"
|
|
46
42
|
},
|
|
47
43
|
"globalDependencies": {
|
|
48
44
|
"sharp": true
|
|
@@ -56,5 +52,5 @@
|
|
|
56
52
|
"monkey": true
|
|
57
53
|
}
|
|
58
54
|
},
|
|
59
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "c11c57c30cfd0703183edbd23f203b78dc329427"
|
|
60
56
|
}
|
package/src/.metadata/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// eslint-disable
|
|
2
|
-
import type { TypeControllerOptionsActions } from 'vona-module-a-openapi';
|
|
3
2
|
/** service: begin */
|
|
4
3
|
export * from '../service/imageNative.ts';
|
|
5
4
|
|
|
@@ -73,42 +72,6 @@ export interface IModuleImageProvider {
|
|
|
73
72
|
'native': ImageProviderNative;
|
|
74
73
|
}
|
|
75
74
|
/** imageProvider: end */
|
|
76
|
-
/** controller: begin */
|
|
77
|
-
export * from '../controller/image.ts';
|
|
78
|
-
import type { IControllerOptionsImage } from '../controller/image.ts';
|
|
79
|
-
import 'vona-module-a-web';
|
|
80
|
-
declare module 'vona-module-a-web' {
|
|
81
|
-
export interface IControllerRecord {
|
|
82
|
-
'image-native:image': IControllerOptionsImage;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
declare module 'vona-module-image-native' {
|
|
86
|
-
export interface ControllerImage {
|
|
87
|
-
/** @internal */
|
|
88
|
-
get scope(): ScopeModuleImageNative;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export interface ControllerImage {
|
|
92
|
-
get $beanFullName(): 'image-native.controller.image';
|
|
93
|
-
get $onionName(): 'image-native:image';
|
|
94
|
-
get $onionOptions(): IControllerOptionsImage;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/** controller: end */
|
|
98
|
-
/** controller: begin */
|
|
99
|
-
// @ts-ignore ignore
|
|
100
|
-
import type { ControllerImage } from '../controller/image.ts';
|
|
101
|
-
declare module 'vona-module-image-native' {
|
|
102
|
-
export interface IControllerOptionsImage {
|
|
103
|
-
actions?: TypeControllerOptionsActions<ControllerImage>;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
declare module 'vona-module-a-web' {
|
|
107
|
-
export interface IApiPathPostRecord {
|
|
108
|
-
'/image-native/direct-upload/:resourceId': undefined;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/** controller: end */
|
|
112
75
|
/** config: begin */
|
|
113
76
|
export * from '../config/config.ts';
|
|
114
77
|
import type { config } from '../config/config.ts';
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
IDecoratorImageProviderOptions,
|
|
3
|
-
IImageDeliveryOptions,
|
|
4
|
-
IImageDirectUploadInput,
|
|
5
3
|
IImageDownloadResult,
|
|
4
|
+
IImageProviderDeliveryOptions,
|
|
6
5
|
IImageProviderClientOptions,
|
|
7
6
|
IImageProviderClientRecord,
|
|
8
7
|
IImageProviderExecute,
|
|
@@ -12,7 +11,6 @@ import type {
|
|
|
12
11
|
} from 'vona-module-a-image';
|
|
13
12
|
import type { EntityImage } from 'vona-module-a-image';
|
|
14
13
|
|
|
15
|
-
import fse from 'fs-extra';
|
|
16
14
|
import { BeanBase } from 'vona';
|
|
17
15
|
import { ImageProvider } from 'vona-module-a-image';
|
|
18
16
|
|
|
@@ -20,8 +18,6 @@ export interface IImageProviderNativeClientRecord extends IImageProviderClientRe
|
|
|
20
18
|
|
|
21
19
|
export interface IImageProviderNativeClientOptions extends IImageProviderClientOptions {
|
|
22
20
|
subdir?: string;
|
|
23
|
-
signingKey?: string;
|
|
24
|
-
tokenName?: string;
|
|
25
21
|
}
|
|
26
22
|
|
|
27
23
|
export interface IImageProviderOptionsNative extends IDecoratorImageProviderOptions<
|
|
@@ -32,6 +28,7 @@ export interface IImageProviderOptionsNative extends IDecoratorImageProviderOpti
|
|
|
32
28
|
@ImageProvider<IImageProviderOptionsNative>({
|
|
33
29
|
base: {
|
|
34
30
|
subdir: 'default',
|
|
31
|
+
public: false,
|
|
35
32
|
signedDeliveryKind: 'proxy',
|
|
36
33
|
},
|
|
37
34
|
})
|
|
@@ -53,22 +50,6 @@ export class ImageProviderNative
|
|
|
53
50
|
};
|
|
54
51
|
}
|
|
55
52
|
|
|
56
|
-
async createDirectUpload(
|
|
57
|
-
input: IImageDirectUploadInput,
|
|
58
|
-
clientOptions: IImageProviderNativeClientOptions,
|
|
59
|
-
_options: IImageProviderOptionsNative,
|
|
60
|
-
) {
|
|
61
|
-
return await this.scope.service.imageNative.createDirectUpload(input, clientOptions);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async finalizeDirectUpload(
|
|
65
|
-
image: EntityImage,
|
|
66
|
-
clientOptions: IImageProviderNativeClientOptions,
|
|
67
|
-
_options: IImageProviderOptionsNative,
|
|
68
|
-
) {
|
|
69
|
-
return await this.scope.service.imageNative.finalizeDirectUpload(image, clientOptions);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
53
|
async get(
|
|
73
54
|
image: EntityImage,
|
|
74
55
|
clientOptions: IImageProviderNativeClientOptions,
|
|
@@ -81,7 +62,7 @@ export class ImageProviderNative
|
|
|
81
62
|
size: image.size,
|
|
82
63
|
width: image.width,
|
|
83
64
|
height: image.height,
|
|
84
|
-
|
|
65
|
+
public: image.public ?? clientOptions.public,
|
|
85
66
|
variants: image.variants,
|
|
86
67
|
meta: image.meta,
|
|
87
68
|
storagePath: image.storagePath,
|
|
@@ -102,7 +83,7 @@ export class ImageProviderNative
|
|
|
102
83
|
request: IImageVariantRequest,
|
|
103
84
|
clientOptions: IImageProviderNativeClientOptions,
|
|
104
85
|
_options: IImageProviderOptionsNative,
|
|
105
|
-
deliveryOptions?:
|
|
86
|
+
deliveryOptions?: IImageProviderDeliveryOptions,
|
|
106
87
|
) {
|
|
107
88
|
return await this.scope.service.imageNative.getVariantUrl(
|
|
108
89
|
image,
|
|
@@ -111,6 +92,7 @@ export class ImageProviderNative
|
|
|
111
92
|
...clientOptions,
|
|
112
93
|
subdir: clientOptions.subdir ?? 'default',
|
|
113
94
|
deliveryBaseUrl: image.deliveryBaseUrl ?? clientOptions.deliveryBaseUrl,
|
|
95
|
+
public: image.public ?? clientOptions.public,
|
|
114
96
|
},
|
|
115
97
|
deliveryOptions,
|
|
116
98
|
);
|
|
@@ -121,21 +103,16 @@ export class ImageProviderNative
|
|
|
121
103
|
request: IImageVariantRequest,
|
|
122
104
|
clientOptions: IImageProviderNativeClientOptions,
|
|
123
105
|
options: IImageProviderOptionsNative,
|
|
124
|
-
deliveryOptions?:
|
|
106
|
+
deliveryOptions?: IImageProviderDeliveryOptions,
|
|
125
107
|
): Promise<IImageDownloadResult> {
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
request.variantName === 'original' &&
|
|
130
|
-
!request.transformOptions
|
|
131
|
-
) {
|
|
132
|
-
const buffer = image.storagePath ? await fse.readFile(image.storagePath) : undefined;
|
|
133
|
-
if (buffer) {
|
|
108
|
+
if ((deliveryOptions?.responseMode ?? 'auto') !== 'url') {
|
|
109
|
+
const result = await this.scope.service.imageNative.downloadBuffer(image, request);
|
|
110
|
+
if (result) {
|
|
134
111
|
return {
|
|
135
112
|
kind: 'buffer',
|
|
136
|
-
buffer,
|
|
137
|
-
filename:
|
|
138
|
-
contentType:
|
|
113
|
+
buffer: result.buffer,
|
|
114
|
+
filename: result.filename,
|
|
115
|
+
contentType: result.contentType,
|
|
139
116
|
signed: false,
|
|
140
117
|
};
|
|
141
118
|
}
|
|
@@ -145,7 +122,7 @@ export class ImageProviderNative
|
|
|
145
122
|
url: await this.getVariantUrl(image, request, clientOptions, options, deliveryOptions),
|
|
146
123
|
filename: image.filename,
|
|
147
124
|
contentType: image.contentType,
|
|
148
|
-
signed: !!deliveryOptions?.
|
|
125
|
+
signed: !!deliveryOptions?.protected,
|
|
149
126
|
};
|
|
150
127
|
}
|
|
151
128
|
}
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import type { SharpConstructor } from 'sharp';
|
|
2
2
|
import type {
|
|
3
3
|
EntityImage,
|
|
4
|
-
|
|
5
|
-
IImageDirectUploadInput,
|
|
6
|
-
IImageProviderDirectUploadResource,
|
|
4
|
+
IImageProviderDeliveryOptions,
|
|
7
5
|
IImageProviderResolvedVariant,
|
|
8
6
|
IImageProviderResource,
|
|
9
7
|
IImageTransformOptions,
|
|
10
8
|
IImageUploadInput,
|
|
11
9
|
IImageVariantRequest,
|
|
12
10
|
} from 'vona-module-a-image';
|
|
13
|
-
import type { IUploadFile } from 'vona-module-a-upload';
|
|
14
11
|
|
|
15
12
|
import fse from 'fs-extra';
|
|
16
13
|
import { createHash } from 'node:crypto';
|
|
17
14
|
import path from 'node:path';
|
|
18
|
-
import { BeanBase, uuidv4 } from 'vona';
|
|
15
|
+
import { BeanBase, getRuntimePathPhysicalRoot, uuidv4 } from 'vona';
|
|
19
16
|
import { Service } from 'vona-module-a-bean';
|
|
20
17
|
import { resolveImageVariantRequestToTransform } from 'vona-module-a-image';
|
|
21
18
|
|
|
@@ -23,21 +20,7 @@ import type { IImageProviderNativeClientOptions } from '../bean/imageProvider.na
|
|
|
23
20
|
|
|
24
21
|
type IImageNativeStoredImage = Pick<
|
|
25
22
|
EntityImage,
|
|
26
|
-
'resourceId' | 'filename' | 'storagePath' | 'variants'
|
|
27
|
-
>;
|
|
28
|
-
|
|
29
|
-
type IImageNativeDraftImage = Pick<
|
|
30
|
-
EntityImage,
|
|
31
|
-
| 'resourceId'
|
|
32
|
-
| 'filename'
|
|
33
|
-
| 'contentType'
|
|
34
|
-
| 'meta'
|
|
35
|
-
| 'imageScene'
|
|
36
|
-
| 'requireSignedURLs'
|
|
37
|
-
| 'storagePath'
|
|
38
|
-
| 'deliveryBaseUrl'
|
|
39
|
-
| 'variants'
|
|
40
|
-
| 'clientName'
|
|
23
|
+
'id' | 'resourceId' | 'filename' | 'contentType' | 'public' | 'storagePath' | 'variants'
|
|
41
24
|
>;
|
|
42
25
|
|
|
43
26
|
@Service()
|
|
@@ -56,80 +39,24 @@ export class ServiceImageNative extends BeanBase {
|
|
|
56
39
|
options: IImageProviderNativeClientOptions,
|
|
57
40
|
): Promise<IImageProviderResource> {
|
|
58
41
|
const resourceId = uuidv4();
|
|
59
|
-
const
|
|
60
|
-
await
|
|
61
|
-
return await this._buildStoredResource(targetPath, {
|
|
42
|
+
const isPublic = input.public ?? options.public;
|
|
43
|
+
const targetPath = await this._getFinalPath(
|
|
62
44
|
resourceId,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
variants: options.variants ?? this.scope.config.imageNative.variants,
|
|
68
|
-
deliveryBaseUrl: options.deliveryBaseUrl,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async createDirectUpload(
|
|
73
|
-
input: IImageDirectUploadInput,
|
|
74
|
-
options: IImageProviderNativeClientOptions,
|
|
75
|
-
): Promise<IImageProviderDirectUploadResource> {
|
|
76
|
-
const resourceId = this._sanitizeResourceId(input.customId) ?? uuidv4();
|
|
77
|
-
const storagePath = await this._getFinalPath(resourceId, input.filename, options);
|
|
78
|
-
const routePath = this.scope.util.combineApiPath(
|
|
79
|
-
`image-native/direct-upload/${encodeURIComponent(resourceId)}`,
|
|
80
|
-
false,
|
|
81
|
-
true,
|
|
45
|
+
input.filename,
|
|
46
|
+
isPublic,
|
|
47
|
+
options,
|
|
48
|
+
input.file,
|
|
82
49
|
);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
true,
|
|
87
|
-
);
|
|
88
|
-
const tokenPayload = await this.bean.imageUploadPolicy.createDirectUploadToken({
|
|
89
|
-
resourceId,
|
|
90
|
-
path: tokenPath,
|
|
91
|
-
});
|
|
92
|
-
const uploadUrl = new URL(this.app.util.getAbsoluteUrlByApiPath(routePath));
|
|
93
|
-
uploadUrl.searchParams.set('token', tokenPayload.token);
|
|
94
|
-
return {
|
|
50
|
+
await fse.ensureDir(path.dirname(targetPath));
|
|
51
|
+
await fse.copy(input.file, targetPath);
|
|
52
|
+
return await this._buildStoredResource(targetPath, {
|
|
95
53
|
resourceId,
|
|
96
54
|
filename: input.filename,
|
|
97
55
|
contentType: input.contentType,
|
|
98
56
|
meta: input.meta,
|
|
99
|
-
|
|
57
|
+
public: isPublic,
|
|
100
58
|
variants: options.variants ?? this.scope.config.imageNative.variants,
|
|
101
59
|
deliveryBaseUrl: options.deliveryBaseUrl,
|
|
102
|
-
storagePath,
|
|
103
|
-
uploadUrl: uploadUrl.toString(),
|
|
104
|
-
draft: true,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
async uploadDirectFile(image: IImageNativeDraftImage, file: IUploadFile) {
|
|
109
|
-
const draftPath = this._getDraftPath(image.storagePath, image.resourceId);
|
|
110
|
-
await fse.ensureDir(path.dirname(draftPath));
|
|
111
|
-
await fse.move(file.file, draftPath, { overwrite: true });
|
|
112
|
-
return draftPath;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
async finalizeDirectUpload(
|
|
116
|
-
image: IImageNativeDraftImage,
|
|
117
|
-
options: IImageProviderNativeClientOptions,
|
|
118
|
-
): Promise<IImageProviderResource | undefined> {
|
|
119
|
-
const storagePath =
|
|
120
|
-
image.storagePath ?? (await this._getFinalPath(image.resourceId, image.filename, options));
|
|
121
|
-
const draftPath = this._getDraftPath(storagePath, image.resourceId);
|
|
122
|
-
if (!(await fse.pathExists(draftPath))) return undefined;
|
|
123
|
-
await fse.ensureDir(path.dirname(storagePath));
|
|
124
|
-
await fse.move(draftPath, storagePath, { overwrite: true });
|
|
125
|
-
return await this._buildStoredResource(storagePath, {
|
|
126
|
-
resourceId: image.resourceId,
|
|
127
|
-
filename: image.filename,
|
|
128
|
-
contentType: image.contentType,
|
|
129
|
-
meta: image.meta,
|
|
130
|
-
requireSignedURLs: image.requireSignedURLs ?? options.requireSignedURLs,
|
|
131
|
-
variants: image.variants ?? options.variants ?? this.scope.config.imageNative.variants,
|
|
132
|
-
deliveryBaseUrl: image.deliveryBaseUrl ?? options.deliveryBaseUrl,
|
|
133
60
|
});
|
|
134
61
|
}
|
|
135
62
|
|
|
@@ -137,8 +64,6 @@ export class ServiceImageNative extends BeanBase {
|
|
|
137
64
|
if (!image.storagePath) return;
|
|
138
65
|
const dir = path.dirname(image.storagePath);
|
|
139
66
|
if (!(await fse.pathExists(dir))) return;
|
|
140
|
-
const draftPath = this._getDraftPath(image.storagePath, image.resourceId);
|
|
141
|
-
await fse.remove(draftPath);
|
|
142
67
|
const entries = await fse.readdir(dir);
|
|
143
68
|
await Promise.all(
|
|
144
69
|
entries
|
|
@@ -154,8 +79,13 @@ export class ServiceImageNative extends BeanBase {
|
|
|
154
79
|
image: IImageNativeStoredImage,
|
|
155
80
|
request: IImageVariantRequest,
|
|
156
81
|
options: IImageProviderNativeClientOptions,
|
|
157
|
-
_deliveryOptions?:
|
|
82
|
+
_deliveryOptions?: IImageProviderDeliveryOptions,
|
|
158
83
|
) {
|
|
84
|
+
if (!(image.public ?? options.public)) {
|
|
85
|
+
throw new Error(
|
|
86
|
+
`Private image-native variant URL requires signed delivery: ${image.resourceId}`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
159
89
|
const resolved = resolveImageVariantRequestToTransform(request, 'original', image.variants);
|
|
160
90
|
if (
|
|
161
91
|
resolved.variantName === 'original' &&
|
|
@@ -167,6 +97,34 @@ export class ServiceImageNative extends BeanBase {
|
|
|
167
97
|
return await this._buildUrl(targetPath, options.deliveryBaseUrl);
|
|
168
98
|
}
|
|
169
99
|
|
|
100
|
+
async downloadBuffer(
|
|
101
|
+
image: IImageNativeStoredImage,
|
|
102
|
+
request: IImageVariantRequest,
|
|
103
|
+
): Promise<{
|
|
104
|
+
buffer: Buffer;
|
|
105
|
+
filename?: string;
|
|
106
|
+
contentType?: string;
|
|
107
|
+
} | null> {
|
|
108
|
+
if (!image.storagePath) {
|
|
109
|
+
throw new Error(`Image storage path missing: ${image.resourceId}`);
|
|
110
|
+
}
|
|
111
|
+
const resolved = resolveImageVariantRequestToTransform(request, 'original', image.variants);
|
|
112
|
+
const targetPath =
|
|
113
|
+
resolved.variantName === 'original' && this._isOriginalTransform(resolved.transformOptions)
|
|
114
|
+
? image.storagePath
|
|
115
|
+
: await this._ensureVariantFile(image, resolved);
|
|
116
|
+
if (!(await fse.pathExists(targetPath))) return null;
|
|
117
|
+
return {
|
|
118
|
+
buffer: await fse.readFile(targetPath),
|
|
119
|
+
filename: image.filename,
|
|
120
|
+
contentType: this._resolveContentType(
|
|
121
|
+
targetPath,
|
|
122
|
+
image.contentType,
|
|
123
|
+
resolved.transformOptions,
|
|
124
|
+
),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
170
128
|
private async _buildStoredResource(
|
|
171
129
|
targetPath: string,
|
|
172
130
|
data: {
|
|
@@ -174,7 +132,7 @@ export class ServiceImageNative extends BeanBase {
|
|
|
174
132
|
filename?: string;
|
|
175
133
|
contentType?: string;
|
|
176
134
|
meta?: Record<string, unknown>;
|
|
177
|
-
|
|
135
|
+
public?: boolean;
|
|
178
136
|
variants?: EntityImage['variants'];
|
|
179
137
|
deliveryBaseUrl?: string;
|
|
180
138
|
},
|
|
@@ -189,7 +147,7 @@ export class ServiceImageNative extends BeanBase {
|
|
|
189
147
|
size: Number(stat.size),
|
|
190
148
|
width: metadata.width,
|
|
191
149
|
height: metadata.height,
|
|
192
|
-
|
|
150
|
+
public: data.public,
|
|
193
151
|
variants: data.variants,
|
|
194
152
|
meta: data.meta,
|
|
195
153
|
storagePath: targetPath,
|
|
@@ -200,24 +158,34 @@ export class ServiceImageNative extends BeanBase {
|
|
|
200
158
|
private async _getFinalPath(
|
|
201
159
|
resourceId: string,
|
|
202
160
|
filename: string | undefined,
|
|
161
|
+
isPublic: boolean | undefined,
|
|
203
162
|
options: IImageProviderNativeClientOptions,
|
|
204
163
|
filePath?: string,
|
|
205
164
|
) {
|
|
206
|
-
const
|
|
207
|
-
path.join('image-native', options.subdir ?? 'default'),
|
|
208
|
-
true,
|
|
209
|
-
);
|
|
165
|
+
const basePath = await this._getBasePath(isPublic, options);
|
|
210
166
|
const ext = this._getOriginalExt(filename, filePath ?? resourceId);
|
|
211
|
-
return path.join(
|
|
167
|
+
return path.join(basePath, `${resourceId}${ext}`);
|
|
212
168
|
}
|
|
213
169
|
|
|
214
|
-
private
|
|
215
|
-
|
|
216
|
-
|
|
170
|
+
private async _getBasePath(
|
|
171
|
+
isPublic: boolean | undefined,
|
|
172
|
+
options: IImageProviderNativeClientOptions,
|
|
173
|
+
) {
|
|
174
|
+
if (isPublic) {
|
|
175
|
+
return await this.app.util.getPublicPathPhysical(
|
|
176
|
+
path.join('image-native', options.subdir ?? 'default'),
|
|
177
|
+
true,
|
|
178
|
+
);
|
|
217
179
|
}
|
|
218
|
-
const
|
|
219
|
-
const
|
|
220
|
-
|
|
180
|
+
const runtimeRoot = getRuntimePathPhysicalRoot(this.app);
|
|
181
|
+
const basePath = path.join(
|
|
182
|
+
runtimeRoot,
|
|
183
|
+
this.ctx.instance.id.toString(),
|
|
184
|
+
'image-native',
|
|
185
|
+
options.subdir ?? 'default',
|
|
186
|
+
);
|
|
187
|
+
await fse.ensureDir(basePath);
|
|
188
|
+
return basePath;
|
|
221
189
|
}
|
|
222
190
|
|
|
223
191
|
private async _ensureVariantFile(
|
|
@@ -308,8 +276,15 @@ export class ServiceImageNative extends BeanBase {
|
|
|
308
276
|
|
|
309
277
|
private async _getVariantStaticPath(targetPath: string) {
|
|
310
278
|
const publicRoot = await this.app.util.getPublicPathPhysical(undefined, true);
|
|
311
|
-
const relativePath = path.relative(publicRoot, targetPath)
|
|
312
|
-
|
|
279
|
+
const relativePath = path.relative(publicRoot, targetPath);
|
|
280
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
281
|
+
throw new Error(`Image target path is not publicly accessible: ${targetPath}`);
|
|
282
|
+
}
|
|
283
|
+
return path.posix.join(
|
|
284
|
+
'public',
|
|
285
|
+
this.ctx.instance.id.toString(),
|
|
286
|
+
relativePath.split(path.sep).join(path.posix.sep),
|
|
287
|
+
);
|
|
313
288
|
}
|
|
314
289
|
|
|
315
290
|
private async _getVariantAbsolutePath(
|
|
@@ -323,8 +298,8 @@ export class ServiceImageNative extends BeanBase {
|
|
|
323
298
|
const variantName = this._sanitizeVariantName(resolved.variantName);
|
|
324
299
|
return path.join(dir, `${image.resourceId}__${variantName}${ext}`);
|
|
325
300
|
}
|
|
326
|
-
const
|
|
327
|
-
return path.join(dir, `${image.resourceId}__t_${
|
|
301
|
+
const transformKey = this._buildTransformKey(resolved.transformOptions);
|
|
302
|
+
return path.join(dir, `${image.resourceId}__t_${transformKey}${ext}`);
|
|
328
303
|
}
|
|
329
304
|
|
|
330
305
|
private _getVariantExt(
|
|
@@ -348,7 +323,25 @@ export class ServiceImageNative extends BeanBase {
|
|
|
348
323
|
return format === 'jpeg' ? 'jpeg' : format;
|
|
349
324
|
}
|
|
350
325
|
|
|
351
|
-
private
|
|
326
|
+
private _resolveContentType(
|
|
327
|
+
targetPath: string,
|
|
328
|
+
contentType: string | undefined,
|
|
329
|
+
transformOptions: IImageTransformOptions,
|
|
330
|
+
) {
|
|
331
|
+
const format = this._normalizeFormat(transformOptions.format);
|
|
332
|
+
if (format === 'jpeg') return 'image/jpeg';
|
|
333
|
+
if (format === 'png') return 'image/png';
|
|
334
|
+
if (format === 'webp') return 'image/webp';
|
|
335
|
+
if (format === 'avif') return 'image/avif';
|
|
336
|
+
const ext = path.extname(targetPath).toLowerCase();
|
|
337
|
+
if (ext === '.jpg' || ext === '.jpeg') return 'image/jpeg';
|
|
338
|
+
if (ext === '.png') return 'image/png';
|
|
339
|
+
if (ext === '.webp') return 'image/webp';
|
|
340
|
+
if (ext === '.avif') return 'image/avif';
|
|
341
|
+
return contentType;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
private _buildTransformKey(transformOptions: IImageTransformOptions) {
|
|
352
345
|
const stable = this._stableStringify(transformOptions);
|
|
353
346
|
return createHash('sha1').update(stable).digest('hex').slice(0, 12);
|
|
354
347
|
}
|
|
@@ -368,12 +361,6 @@ export class ServiceImageNative extends BeanBase {
|
|
|
368
361
|
return JSON.stringify(value);
|
|
369
362
|
}
|
|
370
363
|
|
|
371
|
-
private _sanitizeResourceId(resourceId: string | undefined) {
|
|
372
|
-
if (!resourceId) return undefined;
|
|
373
|
-
const sanitized = resourceId.replace(/[^\w.-]/g, '-');
|
|
374
|
-
return sanitized || undefined;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
364
|
private _sanitizeVariantName(variantName: string) {
|
|
378
365
|
return variantName.replace(/[^\w.-]/g, '-');
|
|
379
366
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { IUploadFile } from 'vona-module-a-upload';
|
|
2
|
-
import type { IDecoratorControllerOptions } from 'vona-module-a-web';
|
|
3
|
-
import { BeanBase } from 'vona';
|
|
4
|
-
export interface IControllerOptionsImage extends IDecoratorControllerOptions {
|
|
5
|
-
}
|
|
6
|
-
export declare class ControllerImage extends BeanBase {
|
|
7
|
-
directUpload(resourceId: string, token: string, file: IUploadFile): Promise<{
|
|
8
|
-
ok: boolean;
|
|
9
|
-
}>;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=image.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/controller/image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAKhC,MAAM,WAAW,uBAAwB,SAAQ,2BAA2B;CAAG;AAE/E,qBACa,eAAgB,SAAQ,QAAQ;IAIrC,YAAY,CACS,UAAU,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACd,IAAI,EAAE,WAAW;;;CAqCvC"}
|
package/src/controller/image.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { IUploadFile } from 'vona-module-a-upload';
|
|
2
|
-
import type { IDecoratorControllerOptions } from 'vona-module-a-web';
|
|
3
|
-
|
|
4
|
-
import fse from 'fs-extra';
|
|
5
|
-
import { BeanBase } from 'vona';
|
|
6
|
-
import { Core } from 'vona-module-a-core';
|
|
7
|
-
import { Passport } from 'vona-module-a-user';
|
|
8
|
-
import { Arg, Controller, Web } from 'vona-module-a-web';
|
|
9
|
-
|
|
10
|
-
export interface IControllerOptionsImage extends IDecoratorControllerOptions {}
|
|
11
|
-
|
|
12
|
-
@Controller<IControllerOptionsImage>({ path: 'image-native' })
|
|
13
|
-
export class ControllerImage extends BeanBase {
|
|
14
|
-
@Web.post('direct-upload/:resourceId')
|
|
15
|
-
@Passport.public()
|
|
16
|
-
@Core.fileUpload()
|
|
17
|
-
async directUpload(
|
|
18
|
-
@Arg.param('resourceId') resourceId: string,
|
|
19
|
-
@Arg.query('token') token: string,
|
|
20
|
-
@Arg.file('image') file: IUploadFile,
|
|
21
|
-
) {
|
|
22
|
-
const payload = await this.bean.imageUploadPolicy.verifyDirectUploadToken(
|
|
23
|
-
token,
|
|
24
|
-
this.ctx.route.routePathRaw,
|
|
25
|
-
);
|
|
26
|
-
if (payload.resourceId !== resourceId) {
|
|
27
|
-
return this.app.throw(401);
|
|
28
|
-
}
|
|
29
|
-
const modelImage = this.app.bean._getBean<any>('a-image.model.image' as never);
|
|
30
|
-
const image = await modelImage.get({
|
|
31
|
-
providerName: 'image-native:native',
|
|
32
|
-
resourceId,
|
|
33
|
-
});
|
|
34
|
-
if (!image || image.status !== 'draft') {
|
|
35
|
-
return this.app.throw(403, `image is not draft: ${resourceId}`);
|
|
36
|
-
}
|
|
37
|
-
if (!image.imageScene) {
|
|
38
|
-
throw new Error(`image scene missing: ${resourceId}`);
|
|
39
|
-
}
|
|
40
|
-
const stat = await fse.stat(file.file);
|
|
41
|
-
const policy = await this.bean.imageUploadPolicy.resolveUploadPolicy({
|
|
42
|
-
imageScene: image.imageScene as never,
|
|
43
|
-
size: Number(stat.size),
|
|
44
|
-
mimeType: file.info.mimeType,
|
|
45
|
-
});
|
|
46
|
-
await this.bean.imageUploadPolicy.validateUploadFile(
|
|
47
|
-
{
|
|
48
|
-
file: file.file,
|
|
49
|
-
filename: file.info.filename,
|
|
50
|
-
mimeType: file.info.mimeType,
|
|
51
|
-
},
|
|
52
|
-
policy,
|
|
53
|
-
);
|
|
54
|
-
await this.scope.service.imageNative.uploadDirectFile(image, file);
|
|
55
|
-
return { ok: true };
|
|
56
|
-
}
|
|
57
|
-
}
|