@nu-art/file-upload-shared 0.401.9 → 0.500.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/assets/apis.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { ApiDef, ApiDefResolver, BodyApi, HttpMethod, QueryApi } from '@nu-art/thunderstorm-shared';
2
- import { DB_Asset } from './types1.js';
1
+ import { ApiDef, ApiDefResolver, BodyApi, HttpMethod, QueryApi } from '@nu-art/api-types';
2
+ import { DB_Asset } from './types.js';
3
3
  import { DB_BaseObject } from '@nu-art/ts-common';
4
4
  import { UI_Asset } from './types.js';
5
- import { ResponseError } from '@nu-art/ts-common/core/exceptions/types';
5
+ import type { ResponseError } from '@nu-art/api-types';
6
6
  import { FileStatus } from '../types.js';
7
7
  export type SignedUrl = {
8
8
  signedUrl: string;
@@ -10,24 +10,20 @@ export type SignedUrl = {
10
10
  export type TempSignedUrl = SignedUrl & {
11
11
  asset: DB_Asset;
12
12
  };
13
- export type ApiStruct_Assets = {
14
- vv1: {
15
- getReadSignedUrl: BodyApi<SignedUrl, DB_BaseObject>;
16
- };
13
+ export type API_Assets = {
14
+ getReadSignedUrl: BodyApi<SignedUrl, DB_BaseObject>;
17
15
  };
18
- export declare const ApiDef_Assets: ApiDefResolver<ApiStruct_Assets>;
16
+ export declare const ApiDef_Assets: ApiDefResolver<API_Assets>;
19
17
  export type FileUploadResult = {
20
18
  status: FileStatus;
21
19
  asset: DB_Asset;
22
20
  };
23
- export type Api_UploadFile = BodyApi<FileUploadResult, any, any, ResponseError, HttpMethod.PUT>;
21
+ export type Api_UploadFile = BodyApi<FileUploadResult, any, ResponseError, HttpMethod.PUT>;
24
22
  export declare const ApiDef_UploadFile: ApiDef<Api_UploadFile>;
25
- export type ApiStruct_AssetUploader = {
26
- vv1: {
27
- getUploadUrl: BodyApi<TempSignedUrl[], UI_Asset[]>;
28
- processAssetManually: QueryApi<void[], {
29
- feId?: string;
30
- }>;
31
- };
23
+ export type API_AssetUploader = {
24
+ getUploadUrl: BodyApi<TempSignedUrl[], UI_Asset[]>;
25
+ processAssetManually: QueryApi<void[], {
26
+ feId?: string;
27
+ }>;
32
28
  };
33
- export declare const ApiDef_AssetUploader: ApiDefResolver<ApiStruct_AssetUploader>;
29
+ export declare const ApiDef_AssetUploader: ApiDefResolver<API_AssetUploader>;
package/assets/apis.js CHANGED
@@ -1,13 +1,9 @@
1
- import { HttpMethod } from '@nu-art/thunderstorm-shared';
1
+ import { HttpMethod } from '@nu-art/api-types';
2
2
  export const ApiDef_Assets = {
3
- vv1: {
4
- getReadSignedUrl: { method: HttpMethod.POST, path: 'v1/assets/get-read-signed-url' },
5
- }
3
+ getReadSignedUrl: { method: HttpMethod.POST, path: 'v1/assets/get-read-signed-url' },
6
4
  };
7
5
  export const ApiDef_UploadFile = { method: HttpMethod.PUT, path: '' };
8
6
  export const ApiDef_AssetUploader = {
9
- vv1: {
10
- getUploadUrl: { method: HttpMethod.POST, path: 'v1/upload/get-url' },
11
- processAssetManually: { method: HttpMethod.GET, path: 'v1/upload/process-asset-manually' },
12
- }
7
+ getUploadUrl: { method: HttpMethod.POST, path: 'v1/upload/get-url' },
8
+ processAssetManually: { method: HttpMethod.GET, path: 'v1/upload/process-asset-manually' },
13
9
  };
@@ -1,5 +1,5 @@
1
- import { DBDef_V3 } from '@nu-art/ts-common';
2
- import { DBProto_Assets, DBProto_AssetsDeleted, DBProto_AssetsTemp } from './types.js';
3
- export declare const DBDef_Assets: DBDef_V3<DBProto_Assets>;
4
- export declare const DBDef_TempAssets: DBDef_V3<DBProto_AssetsTemp>;
5
- export declare const DBDef_TempDeleted: DBDef_V3<DBProto_AssetsDeleted>;
1
+ import { Database } from '@nu-art/db-api-shared';
2
+ import { DatabaseDef_Assets, DatabaseDef_AssetsDeleted, DatabaseDef_AssetsTemp } from './types.js';
3
+ export declare const DBDef_Assets: Database<DatabaseDef_Assets>;
4
+ export declare const DBDef_TempAssets: Database<DatabaseDef_AssetsTemp>;
5
+ export declare const DBDef_TempDeleted: Database<DatabaseDef_AssetsDeleted>;
package/assets/db-def.js CHANGED
@@ -19,41 +19,33 @@ const Validator_GeneratedProps = {
19
19
  validUntil: tsValidateNumber()
20
20
  })
21
21
  };
22
- export const DBDef_Assets = {
22
+ const AssetVersions = ['1.0.2', '1.0.1', '1.0.0'];
23
+ const GeneratedProps = ['signedUrl', 'timestamp', 'md5Hash', 'path', 'bucketName', 'public', 'metadata'];
24
+ const BaseDef = {
23
25
  modifiablePropsValidator: Validator_ModifiableProps,
24
26
  generatedPropsValidator: Validator_GeneratedProps,
25
- versions: ['1.0.2', '1.0.1', '1.0.0'],
27
+ generatedProps: GeneratedProps,
28
+ versions: AssetVersions,
29
+ frontend: { group: AssetDBGroup, name: 'asset' },
30
+ backend: { name: 'assets' },
31
+ };
32
+ export const DBDef_Assets = {
33
+ ...BaseDef,
26
34
  dbKey: 'assets',
27
35
  entityName: convertUpperCamelCase('Assets', '-').toLowerCase(),
28
- frontend: {
29
- group: AssetDBGroup,
30
- name: 'asset'
31
- },
32
- backend: {
33
- name: 'assets',
34
- }
36
+ backend: { name: 'assets' },
35
37
  };
36
38
  export const DBDef_TempAssets = {
37
- ...DBDef_Assets,
39
+ ...BaseDef,
38
40
  dbKey: 'assets-temp',
39
41
  entityName: 'assets-temp',
40
- frontend: {
41
- group: AssetDBGroup,
42
- name: 'temp'
43
- },
44
- backend: {
45
- name: 'assets-temp',
46
- }
42
+ frontend: { group: AssetDBGroup, name: 'temp' },
43
+ backend: { name: 'assets-temp' },
47
44
  };
48
45
  export const DBDef_TempDeleted = {
49
- ...DBDef_Assets,
46
+ ...BaseDef,
50
47
  dbKey: 'assets-deleted',
51
48
  entityName: 'assets-deleted',
52
- frontend: {
53
- group: AssetDBGroup,
54
- name: 'deleted'
55
- },
56
- backend: {
57
- name: 'assets-deleted',
58
- }
49
+ frontend: { group: AssetDBGroup, name: 'deleted' },
50
+ backend: { name: 'assets-deleted' },
59
51
  };
package/assets/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './db-def.js';
3
3
  export * from './apis.js';
4
+ export type { PushMessage_FileUploaded } from './messages.js';
@@ -1,5 +1,5 @@
1
1
  import { PushMessage } from '@nu-art/push-pub-sub-shared';
2
- import { DB_Asset } from './types1.js';
2
+ import { DB_Asset } from './types.js';
3
3
  export declare const PushKey_FileUploaded = "file-uploaded";
4
4
  export declare enum FileStatus {
5
5
  Idle = "Idle",
package/assets/types.d.ts CHANGED
@@ -1,5 +1,9 @@
1
- import { DB_Object, DBProto, Proto_DB_Object, TS_Object, VersionsDeclaration } from '@nu-art/ts-common';
1
+ import { DB_Object, DB_ProtoSeed, DB_Prototype, VersionsDeclaration } from '@nu-art/db-api-shared';
2
+ import { TS_Object } from '@nu-art/ts-common';
2
3
  export declare const AssetDBGroup = "asset";
4
+ declare const Assets_DbKey = "assets";
5
+ declare const AssetsTemp_DbKey = "assets-temp";
6
+ declare const AssetsDeleted_DbKey = "assets-deleted";
3
7
  type VersionTypes_Asset = {
4
8
  '1.0.0': DB_Asset;
5
9
  '1.0.1': DB_Asset;
@@ -9,14 +13,8 @@ type Versions = VersionsDeclaration<['1.0.2', '1.0.1', '1.0.0'], VersionTypes_As
9
13
  type Dependencies = {};
10
14
  type UniqueKeys = '_id';
11
15
  type GeneratedKeys = 'signedUrl' | 'timestamp' | 'md5Hash' | 'path' | 'bucketName' | 'public' | 'metadata';
12
- type ProtoAssets = Proto_DB_Object<DB_Asset, 'assets', GeneratedKeys, Versions, UniqueKeys, Dependencies>;
13
- export type DBProto_Assets = DBProto<ProtoAssets>;
14
- type ProtoAssetsTemp = Proto_DB_Object<DB_Asset, 'assets-temp', GeneratedKeys, Versions, UniqueKeys, Dependencies>;
15
- export type DBProto_AssetsTemp = DBProto<ProtoAssetsTemp>;
16
- type ProtoAssetsDeleted = Proto_DB_Object<DB_Asset, 'assets-deleted', GeneratedKeys, Versions, UniqueKeys, Dependencies>;
17
- export type DBProto_AssetsDeleted = DBProto<ProtoAssetsDeleted>;
18
- export type UI_Asset = DBProto_Assets['uiType'];
19
- export type DB_Asset = DB_Object & {
16
+ /** Shared entity fields for assets (all three collections). */
17
+ export type AssetData = {
20
18
  key: string;
21
19
  name: string;
22
20
  feId: string;
@@ -33,4 +31,31 @@ export type DB_Asset = DB_Object & {
33
31
  validUntil: number;
34
32
  };
35
33
  };
34
+ export type DB_Asset = DB_Object<typeof Assets_DbKey> & AssetData;
35
+ export type DB_AssetTemp = DB_Object<typeof AssetsTemp_DbKey> & AssetData;
36
+ export type DB_AssetDeleted = DB_Object<typeof AssetsDeleted_DbKey> & AssetData;
37
+ export type DatabaseDef_Assets = DB_Prototype<DB_ProtoSeed<DB_Asset, typeof Assets_DbKey, GeneratedKeys, Versions, UniqueKeys, Dependencies>>;
38
+ export type DatabaseDef_AssetsTemp = DB_Prototype<DB_ProtoSeed<DB_AssetTemp, typeof AssetsTemp_DbKey, GeneratedKeys, Versions, UniqueKeys, Dependencies>>;
39
+ export type DatabaseDef_AssetsDeleted = DB_Prototype<DB_ProtoSeed<DB_AssetDeleted, typeof AssetsDeleted_DbKey, GeneratedKeys, Versions, UniqueKeys, Dependencies>>;
40
+ export type UI_Asset = DatabaseDef_Assets['uiType'];
41
+ /** Request shape for upload (name, mimeType, key?, public?, metadata?). */
42
+ export type Request_Uploader = {
43
+ name: string;
44
+ mimeType: string;
45
+ key?: string;
46
+ public?: boolean;
47
+ metadata?: TS_Object;
48
+ };
49
+ export type BaseUploaderFile = Request_Uploader & {
50
+ feId: string;
51
+ };
52
+ /** Minimal progress event for upload requests. */
53
+ export type UploadProgressEvent = {
54
+ loaded: number;
55
+ total?: number;
56
+ };
57
+ /** Minimal request handle for upload progress. */
58
+ export type ProgressableRequest = {
59
+ setOnProgressListener?(cb: (ev: UploadProgressEvent) => void): void;
60
+ };
36
61
  export {};
package/assets/types.js CHANGED
@@ -1 +1,4 @@
1
1
  export const AssetDBGroup = 'asset';
2
+ const Assets_DbKey = 'assets';
3
+ const AssetsTemp_DbKey = 'assets-temp';
4
+ const AssetsDeleted_DbKey = 'assets-deleted';
package/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './assets/index.js';
2
2
  export * from './types.js';
3
+ export * from './modules/ModuleBase_AssetUploader.js';
package/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './assets/index.js';
2
2
  export * from './types.js';
3
+ export * from './modules/ModuleBase_AssetUploader.js';
@@ -1,11 +1,23 @@
1
1
  import { Dispatcher, Module } from '@nu-art/ts-common';
2
- import { ApiDef, ApiDefCaller, BaseHttpRequest, TypedApi } from '@nu-art/thunderstorm-shared';
2
+ import { ApiDef, TypedApi } from '@nu-art/api-types';
3
+ import type { ApiDefCaller } from '@nu-art/api-types';
3
4
  import { OnPushMessageReceived } from '@nu-art/push-pub-sub-shared';
4
5
  import { PushMessage_Payload } from '@nu-art/push-pub-sub-shared';
5
6
  import { FileStatus, PushMessage_FileUploaded } from '../assets/messages.js';
6
7
  import { DB_Asset, UI_Asset } from '../assets/types.js';
7
- import { ApiStruct_AssetUploader, TempSignedUrl } from '../assets/apis.js';
8
+ import { API_AssetUploader, TempSignedUrl } from '../assets/apis.js';
9
+ import type { ProgressableRequest, UploadProgressEvent } from '../assets/types.js';
8
10
  import { OnFileStatusChanged } from '../types.js';
11
+ /** Request handle for upload: used by createRequest and FileInfo.request. Replaces BaseHttpRequest in shared. */
12
+ export interface IAssetUploadRequest<API> {
13
+ setUrl(url: string): this;
14
+ setHeader(key: string, value: string): this;
15
+ setTimeout(ms: number): this;
16
+ setBody(body: unknown): this;
17
+ setOnProgressListener(cb: (ev: UploadProgressEvent) => void): this;
18
+ executeSync(): Promise<unknown>;
19
+ execute(cb: (response: unknown) => void): void;
20
+ }
9
21
  export type FilesToUpload = UI_Asset & {
10
22
  file: any;
11
23
  };
@@ -14,7 +26,7 @@ export type FileInfo = {
14
26
  messageStatus?: string;
15
27
  progress?: number;
16
28
  name: string;
17
- request?: BaseHttpRequest<any>;
29
+ request?: ProgressableRequest;
18
30
  file?: any;
19
31
  asset?: DB_Asset;
20
32
  };
@@ -23,7 +35,7 @@ export type UploaderConfig = {
23
35
  uploadQueueParallelCount?: number;
24
36
  };
25
37
  export declare abstract class ModuleBase_AssetUploader<Config extends UploaderConfig = UploaderConfig> extends Module<Config> implements OnPushMessageReceived<PushMessage_FileUploaded> {
26
- protected vv1: ApiDefCaller<ApiStruct_AssetUploader>['vv1'];
38
+ protected vv1: ApiDefCaller<API_AssetUploader>;
27
39
  protected files: {
28
40
  [id: string]: FileInfo;
29
41
  };
@@ -41,5 +53,5 @@ export declare abstract class ModuleBase_AssetUploader<Config extends UploaderCo
41
53
  private uploadFiles;
42
54
  private uploadFile;
43
55
  processAssetManually: (feId?: string) => void;
44
- protected abstract createRequest<API extends TypedApi<any, any, any, any>>(uploadFile: ApiDef<API>): BaseHttpRequest<API>;
56
+ protected abstract createRequest<API extends TypedApi<any, any, any, any>>(uploadFile: ApiDef<API>): IAssetUploadRequest<API>;
45
57
  }
@@ -17,7 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import { __stringify, _keys, BadImplementationException, Dispatcher, Minute, Module, Queue } from '@nu-art/ts-common';
20
- import { HeaderKey_ContentType } from '@nu-art/thunderstorm-shared';
20
+ import { HeaderKey_ContentType } from '@nu-art/api-types';
21
21
  import { FileStatus, PushKey_FileUploaded } from '../assets/messages.js';
22
22
  import { ApiDef_UploadFile } from '../assets/apis.js';
23
23
  export class ModuleBase_AssetUploader extends Module {
@@ -73,12 +73,11 @@ export class ModuleBase_AssetUploader extends Module {
73
73
  return fileInfo;
74
74
  });
75
75
  this.vv1.getUploadUrl?.(body)
76
- .execute(async (response) => {
76
+ ?.execute((response) => {
77
77
  body.forEach(f => this.setFileInfo(f.feId, { status: FileStatus.UrlObtained }));
78
78
  if (!response)
79
79
  return;
80
- // Not a relevant await but still...
81
- await this.uploadFiles(response);
80
+ void this.uploadFiles(response);
82
81
  });
83
82
  return body;
84
83
  }
@@ -119,7 +118,7 @@ export class ModuleBase_AssetUploader extends Module {
119
118
  .setTimeout(20 * Minute)
120
119
  .setBody(fileInfo.file)
121
120
  .setOnProgressListener((ev) => {
122
- this.setFileInfo(feId, { progress: ev.loaded / ev.total });
121
+ this.setFileInfo(feId, { progress: ev.total ? ev.loaded / ev.total : 0 });
123
122
  });
124
123
  fileInfo.request = request;
125
124
  await request.executeSync();
@@ -131,10 +130,6 @@ export class ModuleBase_AssetUploader extends Module {
131
130
  };
132
131
  processAssetManually = (feId) => {
133
132
  const request = this.vv1.processAssetManually({ feId });
134
- // const request = this
135
- // .httpModule
136
- // .createRequest<Api_ProcessAssetManually>(HttpMethod.GET, RequestKey_ProcessAssetManually, feId)
137
- // .setRelativeUrl('v1/upload/process-asset-manually');
138
133
  if (feId)
139
134
  request.setUrlParam('feId', feId);
140
135
  request.execute();
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@nu-art/file-upload-shared",
3
- "version": "0.401.9",
3
+ "version": "0.500.0",
4
4
  "description": "File Uploader - Express & Typescript based backend framework Shared",
5
5
  "keywords": [
6
6
  "TacB0sS",
7
7
  "infra",
8
8
  "nu-art",
9
9
  "storm",
10
- "thunderstorm",
11
10
  "typescript"
12
11
  ],
13
12
  "homepage": "https://github.com/nu-art-js/file-upload",
@@ -31,13 +30,14 @@
31
30
  "build": "tsc"
32
31
  },
33
32
  "dependencies": {
34
- "@nu-art/firebase-shared": "0.401.9",
35
- "@nu-art/ts-styles": "0.401.9",
36
- "@nu-art/push-pub-sub-shared": "0.401.9",
37
- "@nu-art/permissions-shared": "0.401.9",
38
- "@nu-art/user-account-shared": "0.401.9",
39
- "@nu-art/thunderstorm-shared": "0.401.9",
40
- "@nu-art/ts-common": "0.401.9",
33
+ "@nu-art/firebase-shared": "0.500.0",
34
+ "@nu-art/ts-styles": "0.500.0",
35
+ "@nu-art/push-pub-sub-shared": "0.500.0",
36
+ "@nu-art/permissions-shared": "0.500.0",
37
+ "@nu-art/user-account-shared": "0.500.0",
38
+ "@nu-art/api-types": "{{THUNDERSTORM_VERSION}}",
39
+ "@nu-art/db-api-shared": "0.500.0",
40
+ "@nu-art/ts-common": "0.500.0",
41
41
  "@google-cloud/common": "^5.0.2",
42
42
  "@google-cloud/storage": "^7.15.0",
43
43
  "@google-cloud/firestore": "^7.11.0",
@@ -1,33 +0,0 @@
1
- import { BaseHttpRequest } from '@nu-art/thunderstorm-shared';
2
- import { Auditable, DB_Object, TS_Object } from '@nu-art/ts-common';
3
- import { FileStatus } from '../types.js';
4
- export type Request_Uploader = {
5
- name: string;
6
- mimeType: string;
7
- key?: string;
8
- public?: boolean;
9
- metadata?: TS_Object;
10
- };
11
- export type BaseUploaderFile = Request_Uploader & {
12
- feId: string;
13
- };
14
- export type DB_Asset = DB_Object & BaseUploaderFile & Auditable & Required<Pick<BaseUploaderFile, 'key'>> & {
15
- timestamp: number;
16
- ext: string;
17
- md5Hash?: string;
18
- path: string;
19
- bucketName: string;
20
- signedUrl?: {
21
- url: string;
22
- validUntil: number;
23
- };
24
- };
25
- export type FileInfo = {
26
- status: FileStatus;
27
- messageStatus?: string;
28
- progress?: number;
29
- name: string;
30
- request?: BaseHttpRequest<any>;
31
- file?: any;
32
- asset?: DB_Asset;
33
- };
package/assets/types1.js DELETED
@@ -1,19 +0,0 @@
1
- /*
2
- * Permissions management system, define access level for each of
3
- * your server apis, and restrict users by giving them access levels
4
- *
5
- * Copyright (C) 2020 Adam van der Kruk aka TacB0sS
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
- export {};