vona-module-image-native 5.0.5 → 5.0.7

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.
@@ -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":"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"}
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;KAC9C;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, IImageDeliveryOptions, IImageDirectUploadInput, IImageDownloadResult, IImageProviderClientOptions, IImageProviderClientRecord, IImageProviderExecute, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
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
- requireSignedURLs: boolean | undefined;
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?: IImageDeliveryOptions): Promise<string>;
32
- download(image: EntityImage, request: IImageVariantRequest, clientOptions: IImageProviderNativeClientOptions, options: IImageProviderOptionsNative, deliveryOptions?: IImageDeliveryOptions): Promise<IImageDownloadResult>;
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,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,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;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA4B,SAAQ,8BAA8B,CACjF,gCAAgC,EAChC,iCAAiC,CAClC;CAAG;AAEJ,qBAMa,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,kBAAkB,CACtB,KAAK,EAAE,uBAAuB,EAC9B,aAAa,EAAE,iCAAiC,EAChD,QAAQ,EAAE,2BAA2B;IAKjC,oBAAoB,CACxB,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,iCAAiC,EAChD,QAAQ,EAAE,2BAA2B;IAKjC,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,qBAAqB;IAcnC,QAAQ,CACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,iCAAiC,EAChD,OAAO,EAAE,2BAA2B,EACpC,eAAe,CAAC,EAAE,qBAAqB,GACtC,OAAO,CAAC,oBAAoB,CAAC;CA0BjC"}
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, __param, __metadata } from 'tslib';
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 targetPath = await this._getFinalPath(resourceId, input.filename, options, input.file);
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
- requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
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
- requireSignedURLs: data.requireSignedURLs,
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 publicPath = await this.app.util.getPublicPathPhysical(path.join('image-native', options.subdir ?? 'default'), true);
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(publicPath, `${resourceId}${ext}`);
88
+ return path.join(basePath, `${resourceId}${ext}`);
126
89
  }
127
- _getDraftPath(storagePath, resourceId) {
128
- if (!storagePath) {
129
- throw new Error(`Image storage path missing: ${resourceId}`);
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 dir = path.dirname(storagePath);
132
- const ext = path.extname(storagePath) || '.bin';
133
- return path.join(dir, `${resourceId}__draft${ext}`);
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).split(path.sep).join(path.posix.sep);
212
- return path.posix.join('public', this.ctx.instance.id.toString(), relativePath);
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 cacheKey = this._buildTransformCacheKey(resolved.transformOptions);
223
- return path.join(dir, `${image.resourceId}__t_${cacheKey}${ext}`);
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
- _buildTransformCacheKey(transformOptions) {
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
- requireSignedURLs: image.requireSignedURLs,
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' && !deliveryOptions?.signed && request.variantName === 'original' && !request.transformOptions) {
325
- const buffer = image.storagePath ? await fse.readFile(image.storagePath) : undefined;
326
- if (buffer) {
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: image.filename,
331
- contentType: image.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?.signed
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 { ControllerImage, ImageProviderNative, Monkey, ScopeModuleImageNative, ServiceImageNative, config };
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, IImageDeliveryOptions, IImageDirectUploadInput, IImageProviderDirectUploadResource, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
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?: IImageDeliveryOptions): Promise<string>;
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 _getDraftPath;
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 _buildTransformCacheKey;
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,qBAAqB,EACrB,uBAAuB,EACvB,kCAAkC,EAElC,sBAAsB,EAEtB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKxD,OAAO,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAIxC,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAEzF,KAAK,uBAAuB,GAAG,IAAI,CACjC,WAAW,EACX,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CACvD,CAAC;AAEF,KAAK,sBAAsB,GAAG,IAAI,CAChC,WAAW,EACT,YAAY,GACZ,UAAU,GACV,aAAa,GACb,MAAM,GACN,YAAY,GACZ,mBAAmB,GACnB,aAAa,GACb,iBAAiB,GACjB,UAAU,GACV,YAAY,CACf,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;IAe5B,kBAAkB,CACtB,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,kCAAkC,CAAC;IAiCxC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW;IAOjE,oBAAoB,CACxB,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAkBxC,MAAM,CAAC,KAAK,EAAE,uBAAuB;IAiBrC,aAAa,CACjB,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,iCAAiC,EAC1C,gBAAgB,CAAC,EAAE,qBAAqB;YAa5B,oBAAoB;YA8BpB,aAAa;IAc3B,OAAO,CAAC,aAAa;YASP,kBAAkB;YAclB,qBAAqB;YAsDrB,eAAe;YAUf,SAAS;YAQT,qBAAqB;YAMrB,uBAAuB;IAerC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;CAOpB"}
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.5",
3
+ "version": "5.0.7",
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-core": "5.0.0",
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": "f7296d0004da7e5c173bc9149d209c2e57cab1b8"
55
+ "gitHead": "eb85d771ef75776a439e56df3af8be6a3a36c1c2"
60
56
  }
@@ -1,19 +1,18 @@
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
 
6
5
  import 'vona-module-a-bean';
7
6
  declare module 'vona-module-a-bean' {
8
-
7
+
9
8
  export interface IServiceRecord {
10
9
  'image-native:imageNative': never;
11
10
  }
12
11
 
13
-
12
+
14
13
  }
15
14
  declare module 'vona-module-image-native' {
16
-
15
+
17
16
  export interface ServiceImageNative {
18
17
  /** @internal */
19
18
  get scope(): ScopeModuleImageNative;
@@ -22,8 +21,7 @@ declare module 'vona-module-image-native' {
22
21
  export interface ServiceImageNative {
23
22
  get $beanFullName(): 'image-native.service.imageNative';
24
23
  get $onionName(): 'image-native:imageNative';
25
-
26
- }
24
+ }
27
25
  }
28
26
  /** service: end */
29
27
  /** service: begin */
@@ -46,15 +44,15 @@ export * from '../bean/imageProvider.native.ts';
46
44
  import type { IImageProviderOptionsNative } from '../bean/imageProvider.native.ts';
47
45
  import 'vona-module-a-image';
48
46
  declare module 'vona-module-a-image' {
49
-
47
+
50
48
  export interface IImageProviderRecord {
51
49
  'image-native:native': IImageProviderOptionsNative;
52
50
  }
53
51
 
54
-
52
+
55
53
  }
56
54
  declare module 'vona-module-image-native' {
57
-
55
+
58
56
  export interface ImageProviderNative {
59
57
  /** @internal */
60
58
  get scope(): ScopeModuleImageNative;
@@ -64,7 +62,7 @@ declare module 'vona-module-image-native' {
64
62
  get $beanFullName(): 'image-native.imageProvider.native';
65
63
  get $onionName(): 'image-native:native';
66
64
  get $onionOptions(): IImageProviderOptionsNative;
67
- }
65
+ }
68
66
  }
69
67
  /** imageProvider: end */
70
68
  /** imageProvider: begin */
@@ -73,42 +71,6 @@ export interface IModuleImageProvider {
73
71
  'native': ImageProviderNative;
74
72
  }
75
73
  /** 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
74
  /** config: begin */
113
75
  export * from '../config/config.ts';
114
76
  import type { config } from '../config/config.ts';
@@ -139,13 +101,13 @@ declare module 'vona' {
139
101
  export interface IBeanScopeContainer {
140
102
  imageNative: ScopeModuleImageNative;
141
103
  }
142
-
104
+
143
105
  export interface IBeanScopeConfig {
144
106
  'image-native': ReturnType<typeof config>;
145
107
  }
146
108
 
147
-
148
109
 
149
-
110
+
111
+
150
112
  }
151
113
  /** scope: end */
@@ -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
- requireSignedURLs: image.requireSignedURLs,
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?: IImageDeliveryOptions,
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?: IImageDeliveryOptions,
106
+ deliveryOptions?: IImageProviderDeliveryOptions,
125
107
  ): Promise<IImageDownloadResult> {
126
- if (
127
- (deliveryOptions?.responseMode ?? 'auto') !== 'url' &&
128
- !deliveryOptions?.signed &&
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: image.filename,
138
- contentType: image.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?.signed,
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
- IImageDeliveryOptions,
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 targetPath = await this._getFinalPath(resourceId, input.filename, options, input.file);
60
- await fse.copy(input.file, targetPath);
61
- return await this._buildStoredResource(targetPath, {
42
+ const isPublic = input.public ?? options.public;
43
+ const targetPath = await this._getFinalPath(
62
44
  resourceId,
63
- filename: input.filename,
64
- contentType: input.contentType,
65
- meta: input.meta,
66
- requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
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
- const tokenPath = this.scope.util.combineApiPath(
84
- 'image-native/direct-upload/:resourceId',
85
- false,
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
- requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
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?: IImageDeliveryOptions,
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
- requireSignedURLs?: boolean;
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
- requireSignedURLs: data.requireSignedURLs,
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 publicPath = await this.app.util.getPublicPathPhysical(
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(publicPath, `${resourceId}${ext}`);
167
+ return path.join(basePath, `${resourceId}${ext}`);
212
168
  }
213
169
 
214
- private _getDraftPath(storagePath: string | undefined, resourceId: string) {
215
- if (!storagePath) {
216
- throw new Error(`Image storage path missing: ${resourceId}`);
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 dir = path.dirname(storagePath);
219
- const ext = path.extname(storagePath) || '.bin';
220
- return path.join(dir, `${resourceId}__draft${ext}`);
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).split(path.sep).join(path.posix.sep);
312
- return path.posix.join('public', this.ctx.instance.id.toString(), relativePath);
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 cacheKey = this._buildTransformCacheKey(resolved.transformOptions);
327
- return path.join(dir, `${image.resourceId}__t_${cacheKey}${ext}`);
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 _buildTransformCacheKey(transformOptions: IImageTransformOptions) {
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"}
@@ -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
- }