vona-module-image-native 5.0.1 → 5.0.5

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,3 +1,4 @@
1
+ import type { TypeControllerOptionsActions } from 'vona-module-a-openapi';
1
2
  /** service: begin */
2
3
  export * from '../service/imageNative.ts';
3
4
  import 'vona-module-a-bean';
@@ -54,6 +55,38 @@ export interface IModuleImageProvider {
54
55
  'native': ImageProviderNative;
55
56
  }
56
57
  /** 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 */
57
90
  /** config: begin */
58
91
  export * from '../config/config.ts';
59
92
  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,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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IDecoratorImageProviderOptions, IImageDeliveryOptions, IImageDownloadResult, IImageProviderClientOptions, IImageProviderClientRecord, IImageProviderExecute, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
1
+ import type { IDecoratorImageProviderOptions, IImageDeliveryOptions, IImageDirectUploadInput, IImageDownloadResult, 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 {
@@ -10,8 +10,10 @@ export interface IImageProviderNativeClientOptions extends IImageProviderClientO
10
10
  }
11
11
  export interface IImageProviderOptionsNative extends IDecoratorImageProviderOptions<IImageProviderNativeClientRecord, IImageProviderNativeClientOptions> {
12
12
  }
13
- export declare class ImageProviderNative extends BeanBase implements IImageProviderExecute {
13
+ export declare class ImageProviderNative extends BeanBase implements IImageProviderExecute<IImageProviderNativeClientOptions, IImageProviderOptionsNative> {
14
14
  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>;
15
17
  get(image: EntityImage, clientOptions: IImageProviderNativeClientOptions, _options: IImageProviderOptionsNative): Promise<{
16
18
  resourceId: string;
17
19
  filename: string | undefined;
@@ -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,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,mBAAoB,SAAQ,QAAS,YAAW,qBAAqB;IAC1E,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,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,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"}
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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/dist/index.js CHANGED
@@ -1,10 +1,13 @@
1
1
  import { BeanInfo, BeanBase, uuidv4, BeanSimple, cast, getPlatformArch, resolveAddon, BeanScopeBase } from 'vona';
2
- import { __decorate } from 'tslib';
2
+ import { __decorate, __param, __metadata } 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';
8
11
 
9
12
  let ServiceImageNative = class ServiceImageNative extends BeanBase {
10
13
  constructor(...args) {
@@ -18,37 +21,75 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
18
21
  return this._sharpInstance;
19
22
  }
20
23
  async upload(input, options) {
21
- const publicPath = await this.app.util.getPublicPathPhysical(path.join('image-native', options.subdir ?? 'default'), true);
22
24
  const resourceId = uuidv4();
23
- const ext = this._getOriginalExt(input.filename, input.file);
24
- const targetName = `${resourceId}${ext}`;
25
- const targetPath = path.join(publicPath, targetName);
25
+ const targetPath = await this._getFinalPath(resourceId, input.filename, options, input.file);
26
26
  await fse.copy(input.file, targetPath);
27
- const sharp = await this.getSharp();
28
- const metadata = await sharp(targetPath).metadata();
29
- const stat = await fse.stat(targetPath);
30
- const variants = options.variants ?? this.scope.config.imageNative.variants;
31
- await this._generateNamedVariants({
27
+ return await this._buildStoredResource(targetPath, {
32
28
  resourceId,
33
29
  filename: input.filename,
34
- storagePath: targetPath,
35
- variants
36
- }, options);
30
+ contentType: input.contentType,
31
+ meta: input.meta,
32
+ requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
33
+ variants: options.variants ?? this.scope.config.imageNative.variants,
34
+ deliveryBaseUrl: options.deliveryBaseUrl
35
+ });
36
+ }
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);
37
48
  return {
38
49
  resourceId,
39
- size: Number(stat.size),
40
- width: metadata.width,
41
- height: metadata.height,
42
- storagePath: targetPath,
43
- deliveryBaseUrl: options.deliveryBaseUrl,
50
+ filename: input.filename,
51
+ contentType: input.contentType,
52
+ meta: input.meta,
44
53
  requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
45
- variants
54
+ variants: options.variants ?? this.scope.config.imageNative.variants,
55
+ deliveryBaseUrl: options.deliveryBaseUrl,
56
+ storagePath,
57
+ uploadUrl: uploadUrl.toString(),
58
+ draft: true
46
59
  };
47
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
+ }
48
87
  async remove(image) {
49
88
  if (!image.storagePath) return;
50
89
  const dir = path.dirname(image.storagePath);
51
90
  if (!(await fse.pathExists(dir))) return;
91
+ const draftPath = this._getDraftPath(image.storagePath, image.resourceId);
92
+ await fse.remove(draftPath);
52
93
  const entries = await fse.readdir(dir);
53
94
  await Promise.all(entries.filter(name => name === path.basename(image.storagePath) || name.startsWith(`${image.resourceId}__`)).map(name => fse.remove(path.join(dir, name))));
54
95
  }
@@ -60,18 +101,36 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
60
101
  const targetPath = await this._ensureVariantFile(image, resolved);
61
102
  return await this._buildUrl(targetPath, options.deliveryBaseUrl);
62
103
  }
63
- async _generateNamedVariants(image, options) {
64
- const variantNames = Object.keys(image.variants ?? {});
65
- for (const variantName of variantNames) {
66
- if (variantName === 'original') continue;
67
- await this._ensureVariantFile(image, resolveImageVariantRequestToTransform({
68
- variantName
69
- }, 'original', image.variants));
104
+ async _buildStoredResource(targetPath, data) {
105
+ const sharp = await this.getSharp();
106
+ const metadata = await sharp(targetPath).metadata();
107
+ const stat = await fse.stat(targetPath);
108
+ return {
109
+ resourceId: data.resourceId,
110
+ filename: data.filename,
111
+ contentType: data.contentType,
112
+ size: Number(stat.size),
113
+ width: metadata.width,
114
+ height: metadata.height,
115
+ requireSignedURLs: data.requireSignedURLs,
116
+ variants: data.variants,
117
+ meta: data.meta,
118
+ storagePath: targetPath,
119
+ deliveryBaseUrl: data.deliveryBaseUrl
120
+ };
121
+ }
122
+ async _getFinalPath(resourceId, filename, options, filePath) {
123
+ const publicPath = await this.app.util.getPublicPathPhysical(path.join('image-native', options.subdir ?? 'default'), true);
124
+ const ext = this._getOriginalExt(filename, filePath ?? resourceId);
125
+ return path.join(publicPath, `${resourceId}${ext}`);
126
+ }
127
+ _getDraftPath(storagePath, resourceId) {
128
+ if (!storagePath) {
129
+ throw new Error(`Image storage path missing: ${resourceId}`);
70
130
  }
71
- if (!image.variants?.original) return;
72
- await this.getVariantUrl(image, {
73
- variantName: 'original'
74
- }, options);
131
+ const dir = path.dirname(storagePath);
132
+ const ext = path.extname(storagePath) || '.bin';
133
+ return path.join(dir, `${resourceId}__draft${ext}`);
75
134
  }
76
135
  async _ensureVariantFile(image, resolved) {
77
136
  if (!image.storagePath) {
@@ -191,6 +250,11 @@ let ServiceImageNative = class ServiceImageNative extends BeanBase {
191
250
  }
192
251
  return JSON.stringify(value);
193
252
  }
253
+ _sanitizeResourceId(resourceId) {
254
+ if (!resourceId) return undefined;
255
+ const sanitized = resourceId.replace(/[^\w.-]/g, '-');
256
+ return sanitized || undefined;
257
+ }
194
258
  _sanitizeVariantName(variantName) {
195
259
  return variantName.replace(/[^\w.-]/g, '-');
196
260
  }
@@ -225,6 +289,12 @@ let ImageProviderNative = class ImageProviderNative extends BeanBase {
225
289
  meta: input.meta
226
290
  };
227
291
  }
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
+ }
228
298
  async get(image, clientOptions, _options) {
229
299
  return {
230
300
  resourceId: image.resourceId,
@@ -281,6 +351,47 @@ ImageProviderNative = __decorate([ImageProvider({
281
351
  module: "image-native"
282
352
  })], ImageProviderNative);
283
353
 
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
+
284
395
  function config(_app) {
285
396
  return {
286
397
  imageNative: {
@@ -320,5 +431,5 @@ ScopeModuleImageNative = __decorate([Scope(), BeanInfo({
320
431
  })], ScopeModuleImageNative);
321
432
  /** scope: end */
322
433
 
323
- export { ImageProviderNative, Monkey, ScopeModuleImageNative, ServiceImageNative, config };
434
+ export { ControllerImage, ImageProviderNative, Monkey, ScopeModuleImageNative, ServiceImageNative, config };
324
435
  //# 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/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","publicPath","app","util","getPublicPathPhysical","path","join","subdir","resourceId","uuidv4","ext","_getOriginalExt","filename","file","targetName","targetPath","fse","copy","sharp","metadata","stat","variants","scope","config","imageNative","_generateNamedVariants","storagePath","size","Number","width","height","deliveryBaseUrl","requireSignedURLs","remove","image","dir","dirname","pathExists","entries","readdir","Promise","all","filter","name","basename","startsWith","map","getVariantUrl","request","_deliveryOptions","resolved","resolveImageVariantRequestToTransform","variantName","_isOriginalTransform","transformOptions","_getOriginalUrl","_ensureVariantFile","_buildUrl","variantNames","Object","keys","original","Error","_getVariantAbsolutePath","_writeTransformedFile","sourcePath","ensureDir","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","split","sep","posix","ctx","instance","id","toString","_getVariantExt","_sanitizeVariantName","cacheKey","_buildTransformCacheKey","extname","filePath","stable","_stableStringify","createHash","update","digest","slice","value","Array","isArray","item","sort","a","b","localeCompare","key","JSON","stringify","length","__decorate","Service","__z_BeanInfo","module","ImageProviderNative","clientOptions","_options","resource","service","contentType","meta","get","delete","_clientOptions","deliveryOptions","download","responseMode","signed","buffer","readFile","kind","url","ImageProvider","base","signedDeliveryKind","_app","__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/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,14 +1,21 @@
1
- import type { EntityImage, IImageDeliveryOptions, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
1
+ import type { EntityImage, IImageDeliveryOptions, IImageDirectUploadInput, IImageProviderDirectUploadResource, IImageProviderResource, IImageUploadInput, IImageVariantRequest } from 'vona-module-a-image';
2
+ import type { IUploadFile } from 'vona-module-a-upload';
2
3
  import { BeanBase } from 'vona';
3
4
  import type { IImageProviderNativeClientOptions } from '../bean/imageProvider.native.ts';
4
5
  type IImageNativeStoredImage = Pick<EntityImage, 'resourceId' | 'filename' | 'storagePath' | 'variants'>;
6
+ type IImageNativeDraftImage = Pick<EntityImage, 'resourceId' | 'filename' | 'contentType' | 'meta' | 'imageScene' | 'requireSignedURLs' | 'storagePath' | 'deliveryBaseUrl' | 'variants' | 'clientName'>;
5
7
  export declare class ServiceImageNative extends BeanBase {
6
8
  private _sharpInstance;
7
9
  private getSharp;
8
10
  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>;
9
14
  remove(image: IImageNativeStoredImage): Promise<void>;
10
15
  getVariantUrl(image: IImageNativeStoredImage, request: IImageVariantRequest, options: IImageProviderNativeClientOptions, _deliveryOptions?: IImageDeliveryOptions): Promise<string>;
11
- private _generateNamedVariants;
16
+ private _buildStoredResource;
17
+ private _getFinalPath;
18
+ private _getDraftPath;
12
19
  private _ensureVariantFile;
13
20
  private _writeTransformedFile;
14
21
  private _getOriginalUrl;
@@ -20,6 +27,7 @@ export declare class ServiceImageNative extends BeanBase {
20
27
  private _normalizeFormat;
21
28
  private _buildTransformCacheKey;
22
29
  private _stableStringify;
30
+ private _sanitizeResourceId;
23
31
  private _sanitizeVariantName;
24
32
  private _isOriginalTransform;
25
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,EAGrB,sBAAsB,EAEtB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAK7B,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,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;IA8B5B,MAAM,CAAC,KAAK,EAAE,uBAAuB;IAerC,aAAa,CACjB,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,iCAAiC,EAC1C,gBAAgB,CAAC,EAAE,qBAAqB;YAa5B,sBAAsB;YAkBtB,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,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,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-image-native",
3
- "version": "5.0.1",
3
+ "version": "5.0.5",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "Vona Module"
@@ -38,7 +38,11 @@
38
38
  "title": "image-native",
39
39
  "vonaModule": {
40
40
  "dependencies": {
41
- "a-image": "5.0.0"
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"
42
46
  },
43
47
  "globalDependencies": {
44
48
  "sharp": true
@@ -52,5 +56,5 @@
52
56
  "monkey": true
53
57
  }
54
58
  },
55
- "gitHead": "7a711c5f09e0c1d3b0fda2084710297ea45b5d8e"
59
+ "gitHead": "f7296d0004da7e5c173bc9149d209c2e57cab1b8"
56
60
  }
@@ -1,4 +1,5 @@
1
1
  // eslint-disable
2
+ import type { TypeControllerOptionsActions } from 'vona-module-a-openapi';
2
3
  /** service: begin */
3
4
  export * from '../service/imageNative.ts';
4
5
 
@@ -72,6 +73,42 @@ export interface IModuleImageProvider {
72
73
  'native': ImageProviderNative;
73
74
  }
74
75
  /** 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 */
75
112
  /** config: begin */
76
113
  export * from '../config/config.ts';
77
114
  import type { config } from '../config/config.ts';
@@ -1,6 +1,7 @@
1
1
  import type {
2
2
  IDecoratorImageProviderOptions,
3
3
  IImageDeliveryOptions,
4
+ IImageDirectUploadInput,
4
5
  IImageDownloadResult,
5
6
  IImageProviderClientOptions,
6
7
  IImageProviderClientRecord,
@@ -34,7 +35,10 @@ export interface IImageProviderOptionsNative extends IDecoratorImageProviderOpti
34
35
  signedDeliveryKind: 'proxy',
35
36
  },
36
37
  })
37
- export class ImageProviderNative extends BeanBase implements IImageProviderExecute {
38
+ export class ImageProviderNative
39
+ extends BeanBase
40
+ implements IImageProviderExecute<IImageProviderNativeClientOptions, IImageProviderOptionsNative>
41
+ {
38
42
  async upload(
39
43
  input: IImageUploadInput,
40
44
  clientOptions: IImageProviderNativeClientOptions,
@@ -49,6 +53,22 @@ export class ImageProviderNative extends BeanBase implements IImageProviderExecu
49
53
  };
50
54
  }
51
55
 
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
+
52
72
  async get(
53
73
  image: EntityImage,
54
74
  clientOptions: IImageProviderNativeClientOptions,
@@ -0,0 +1,57 @@
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
+ }
@@ -2,13 +2,15 @@ import type { SharpConstructor } from 'sharp';
2
2
  import type {
3
3
  EntityImage,
4
4
  IImageDeliveryOptions,
5
- IImageNamedVariants,
5
+ IImageDirectUploadInput,
6
+ IImageProviderDirectUploadResource,
6
7
  IImageProviderResolvedVariant,
7
8
  IImageProviderResource,
8
9
  IImageTransformOptions,
9
10
  IImageUploadInput,
10
11
  IImageVariantRequest,
11
12
  } from 'vona-module-a-image';
13
+ import type { IUploadFile } from 'vona-module-a-upload';
12
14
 
13
15
  import fse from 'fs-extra';
14
16
  import { createHash } from 'node:crypto';
@@ -24,6 +26,20 @@ type IImageNativeStoredImage = Pick<
24
26
  'resourceId' | 'filename' | 'storagePath' | 'variants'
25
27
  >;
26
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'
41
+ >;
42
+
27
43
  @Service()
28
44
  export class ServiceImageNative extends BeanBase {
29
45
  private _sharpInstance: SharpConstructor;
@@ -39,39 +55,90 @@ export class ServiceImageNative extends BeanBase {
39
55
  input: IImageUploadInput,
40
56
  options: IImageProviderNativeClientOptions,
41
57
  ): Promise<IImageProviderResource> {
42
- const publicPath = await this.app.util.getPublicPathPhysical(
43
- path.join('image-native', options.subdir ?? 'default'),
44
- true,
45
- );
46
58
  const resourceId = uuidv4();
47
- const ext = this._getOriginalExt(input.filename, input.file);
48
- const targetName = `${resourceId}${ext}`;
49
- const targetPath = path.join(publicPath, targetName);
59
+ const targetPath = await this._getFinalPath(resourceId, input.filename, options, input.file);
50
60
  await fse.copy(input.file, targetPath);
51
- const sharp = await this.getSharp();
52
- const metadata = await sharp(targetPath).metadata();
53
- const stat = await fse.stat(targetPath);
54
- const variants = options.variants ?? this.scope.config.imageNative.variants;
55
- await this._generateNamedVariants(
56
- { resourceId, filename: input.filename, storagePath: targetPath, variants },
57
- options,
61
+ return await this._buildStoredResource(targetPath, {
62
+ 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,
58
82
  );
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);
59
94
  return {
60
95
  resourceId,
61
- size: Number(stat.size),
62
- width: metadata.width,
63
- height: metadata.height,
64
- storagePath: targetPath,
65
- deliveryBaseUrl: options.deliveryBaseUrl,
96
+ filename: input.filename,
97
+ contentType: input.contentType,
98
+ meta: input.meta,
66
99
  requireSignedURLs: input.requireSignedURLs ?? options.requireSignedURLs,
67
- variants,
100
+ variants: options.variants ?? this.scope.config.imageNative.variants,
101
+ deliveryBaseUrl: options.deliveryBaseUrl,
102
+ storagePath,
103
+ uploadUrl: uploadUrl.toString(),
104
+ draft: true,
68
105
  };
69
106
  }
70
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
+ });
134
+ }
135
+
71
136
  async remove(image: IImageNativeStoredImage) {
72
137
  if (!image.storagePath) return;
73
138
  const dir = path.dirname(image.storagePath);
74
139
  if (!(await fse.pathExists(dir))) return;
140
+ const draftPath = this._getDraftPath(image.storagePath, image.resourceId);
141
+ await fse.remove(draftPath);
75
142
  const entries = await fse.readdir(dir);
76
143
  await Promise.all(
77
144
  entries
@@ -100,22 +167,57 @@ export class ServiceImageNative extends BeanBase {
100
167
  return await this._buildUrl(targetPath, options.deliveryBaseUrl);
101
168
  }
102
169
 
103
- private async _generateNamedVariants(
104
- image: IImageNativeStoredImage,
170
+ private async _buildStoredResource(
171
+ targetPath: string,
172
+ data: {
173
+ resourceId: string;
174
+ filename?: string;
175
+ contentType?: string;
176
+ meta?: Record<string, unknown>;
177
+ requireSignedURLs?: boolean;
178
+ variants?: EntityImage['variants'];
179
+ deliveryBaseUrl?: string;
180
+ },
181
+ ): Promise<IImageProviderResource> {
182
+ const sharp = await this.getSharp();
183
+ const metadata = await sharp(targetPath).metadata();
184
+ const stat = await fse.stat(targetPath);
185
+ return {
186
+ resourceId: data.resourceId,
187
+ filename: data.filename,
188
+ contentType: data.contentType,
189
+ size: Number(stat.size),
190
+ width: metadata.width,
191
+ height: metadata.height,
192
+ requireSignedURLs: data.requireSignedURLs,
193
+ variants: data.variants,
194
+ meta: data.meta,
195
+ storagePath: targetPath,
196
+ deliveryBaseUrl: data.deliveryBaseUrl,
197
+ };
198
+ }
199
+
200
+ private async _getFinalPath(
201
+ resourceId: string,
202
+ filename: string | undefined,
105
203
  options: IImageProviderNativeClientOptions,
204
+ filePath?: string,
106
205
  ) {
107
- const variantNames = Object.keys(image.variants ?? {}) as Array<
108
- keyof NonNullable<IImageNamedVariants>
109
- >;
110
- for (const variantName of variantNames) {
111
- if (variantName === 'original') continue;
112
- await this._ensureVariantFile(
113
- image,
114
- resolveImageVariantRequestToTransform({ variantName }, 'original', image.variants),
115
- );
206
+ const publicPath = await this.app.util.getPublicPathPhysical(
207
+ path.join('image-native', options.subdir ?? 'default'),
208
+ true,
209
+ );
210
+ const ext = this._getOriginalExt(filename, filePath ?? resourceId);
211
+ return path.join(publicPath, `${resourceId}${ext}`);
212
+ }
213
+
214
+ private _getDraftPath(storagePath: string | undefined, resourceId: string) {
215
+ if (!storagePath) {
216
+ throw new Error(`Image storage path missing: ${resourceId}`);
116
217
  }
117
- if (!image.variants?.original) return;
118
- await this.getVariantUrl(image, { variantName: 'original' }, options);
218
+ const dir = path.dirname(storagePath);
219
+ const ext = path.extname(storagePath) || '.bin';
220
+ return path.join(dir, `${resourceId}__draft${ext}`);
119
221
  }
120
222
 
121
223
  private async _ensureVariantFile(
@@ -266,6 +368,12 @@ export class ServiceImageNative extends BeanBase {
266
368
  return JSON.stringify(value);
267
369
  }
268
370
 
371
+ private _sanitizeResourceId(resourceId: string | undefined) {
372
+ if (!resourceId) return undefined;
373
+ const sanitized = resourceId.replace(/[^\w.-]/g, '-');
374
+ return sanitized || undefined;
375
+ }
376
+
269
377
  private _sanitizeVariantName(variantName: string) {
270
378
  return variantName.replace(/[^\w.-]/g, '-');
271
379
  }