prostgles-server 4.2.570 → 4.2.571

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.
Files changed (67) hide show
  1. package/dist/DboBuilder/uploadFile.d.ts +1 -1
  2. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  3. package/dist/DboBuilder/uploadFile.js +10 -4
  4. package/dist/DboBuilder/uploadFile.js.map +1 -1
  5. package/dist/Logging.d.ts.map +1 -1
  6. package/dist/Prostgles.d.ts.map +1 -1
  7. package/dist/Prostgles.js +3 -8
  8. package/dist/Prostgles.js.map +1 -1
  9. package/dist/ProstglesTypes.d.ts +1 -1
  10. package/dist/ProstglesTypes.d.ts.map +1 -1
  11. package/dist/PubSubManager/notifListener.js +5 -1
  12. package/dist/PubSubManager/notifListener.js.map +1 -1
  13. package/dist/StorageClient/StorageClientTypes.d.ts +38 -0
  14. package/dist/StorageClient/StorageClientTypes.d.ts.map +1 -0
  15. package/dist/StorageClient/StorageClientTypes.js +5 -0
  16. package/dist/StorageClient/StorageClientTypes.js.map +1 -0
  17. package/dist/{FileManager → StorageClient}/getFileTableConfig.d.ts +1 -1
  18. package/dist/StorageClient/getFileTableConfig.d.ts.map +1 -0
  19. package/dist/{FileManager → StorageClient}/getFileTableConfig.js +2 -2
  20. package/dist/StorageClient/getFileTableConfig.js.map +1 -0
  21. package/dist/StorageClient/getFileType.d.ts +10 -0
  22. package/dist/StorageClient/getFileType.d.ts.map +1 -0
  23. package/dist/{FileManager/FileManager.js → StorageClient/getFileType.js} +17 -26
  24. package/dist/StorageClient/getFileType.js.map +1 -0
  25. package/dist/StorageClient/getLocalStorageClient.d.ts +15 -0
  26. package/dist/StorageClient/getLocalStorageClient.d.ts.map +1 -0
  27. package/dist/{FileManager → StorageClient}/getLocalStorageClient.js +4 -5
  28. package/dist/StorageClient/getLocalStorageClient.js.map +1 -0
  29. package/dist/StorageClient/getValidatedFileType.d.ts.map +1 -0
  30. package/dist/{FileManager → StorageClient}/getValidatedFileType.js +5 -5
  31. package/dist/StorageClient/getValidatedFileType.js.map +1 -0
  32. package/dist/{FileManager → StorageClient}/setupFileServeHandler.d.ts +2 -1
  33. package/dist/StorageClient/setupFileServeHandler.d.ts.map +1 -0
  34. package/dist/{FileManager → StorageClient}/setupFileServeHandler.js +10 -4
  35. package/dist/StorageClient/setupFileServeHandler.js.map +1 -0
  36. package/dist/index.d.ts +2 -2
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +1 -1
  41. package/lib/DboBuilder/TableHandler/updateFile.ts +1 -1
  42. package/lib/DboBuilder/uploadFile.ts +12 -5
  43. package/lib/Logging.ts +1 -1
  44. package/lib/Prostgles.ts +3 -7
  45. package/lib/ProstglesTypes.ts +1 -1
  46. package/lib/PubSubManager/notifListener.ts +5 -5
  47. package/lib/StorageClient/StorageClientTypes.ts +39 -0
  48. package/lib/{FileManager → StorageClient}/getFileTableConfig.ts +2 -2
  49. package/lib/{FileManager/FileManager.ts → StorageClient/getFileType.ts} +21 -99
  50. package/lib/{FileManager → StorageClient}/getLocalStorageClient.ts +22 -10
  51. package/lib/{FileManager → StorageClient}/getValidatedFileType.ts +1 -1
  52. package/lib/{FileManager → StorageClient}/setupFileServeHandler.ts +12 -6
  53. package/lib/index.ts +2 -2
  54. package/package.json +1 -1
  55. package/dist/FileManager/FileManager.d.ts +0 -76
  56. package/dist/FileManager/FileManager.d.ts.map +0 -1
  57. package/dist/FileManager/FileManager.js.map +0 -1
  58. package/dist/FileManager/getFileTableConfig.d.ts.map +0 -1
  59. package/dist/FileManager/getFileTableConfig.js.map +0 -1
  60. package/dist/FileManager/getLocalStorageClient.d.ts +0 -3
  61. package/dist/FileManager/getLocalStorageClient.d.ts.map +0 -1
  62. package/dist/FileManager/getLocalStorageClient.js.map +0 -1
  63. package/dist/FileManager/getValidatedFileType.d.ts.map +0 -1
  64. package/dist/FileManager/getValidatedFileType.js.map +0 -1
  65. package/dist/FileManager/setupFileServeHandler.d.ts.map +0 -1
  66. package/dist/FileManager/setupFileServeHandler.js.map +0 -1
  67. /package/dist/{FileManager → StorageClient}/getValidatedFileType.d.ts +0 -0
package/dist/index.d.ts CHANGED
@@ -7,8 +7,8 @@ export * from "./Auth/AuthTypes";
7
7
  export type { PublishParams } from "./PublishParser/publishTypesAndUtils";
8
8
  export type { DBOFullyTyped } from "./DBSchemaBuilder/DBSchemaBuilder";
9
9
  export type { DBHandlerServer } from "./Prostgles";
10
- export type { StorageClient as CloudClient, LocalConfig } from "./FileManager/FileManager";
11
- export * from "./FileManager/getLocalStorageClient";
10
+ export type { StorageClient as CloudClient } from "./StorageClient/StorageClientTypes";
11
+ export * from "./StorageClient/getLocalStorageClient";
12
12
  export type { DB } from "./initProstgles";
13
13
  export type * from "./TableConfig/TableConfigTypes";
14
14
  export * from "./Auth/utils/upsertNamedExpressMiddleware";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AAExE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,iBAAS,SAAS,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,SAAS,WAAW,GAAG,WAAW,EAClE,MAAM,EAAE,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,GAKrB,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAC/C;AACD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,IAAI,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC3F,cAAc,qCAAqC,CAAC;AACpD,YAAY,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,mBAAmB,gCAAgC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AAExE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,iBAAS,SAAS,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,SAAS,WAAW,GAAG,WAAW,EAClE,MAAM,EAAE,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,GAKrB,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAC/C;AACD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACvF,cAAc,uCAAuC,CAAC;AACtD,YAAY,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,mBAAmB,gCAAgC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,eAAe,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -23,7 +23,7 @@ function prostgles(params) {
23
23
  }
24
24
  __exportStar(require("./PublishParser/defineServerFunction"), exports);
25
25
  __exportStar(require("./Auth/AuthTypes"), exports);
26
- __exportStar(require("./FileManager/getLocalStorageClient"), exports);
26
+ __exportStar(require("./StorageClient/getLocalStorageClient"), exports);
27
27
  __exportStar(require("./Auth/utils/upsertNamedExpressMiddleware"), exports);
28
28
  exports.default = prostgles;
29
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,2CAAwC;AAGxC,SAAS,SAAS,CAChB,MAAsC;IAEtC,MAAM,IAAI,GAAG,IAAI,qBAAS,CAAC,MAA8B,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAA0C,EAAE;QAClE,IAAI,EAAE,MAAM;KACb,CAA6C,CAAC;AACjD,CAAC;AACD,uEAAqD;AACrD,mDAAiC;AAKjC,sEAAoD;AAGpD,4EAA0D;AAE1D,kBAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,2CAAwC;AAGxC,SAAS,SAAS,CAChB,MAAsC;IAEtC,MAAM,IAAI,GAAG,IAAI,qBAAS,CAAC,MAA8B,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAA0C,EAAE;QAClE,IAAI,EAAE,MAAM;KACb,CAA6C,CAAC;AACjD,CAAC;AACD,uEAAqD;AACrD,mDAAiC;AAKjC,wEAAsD;AAGtD,4EAA0D;AAE1D,kBAAe,SAAS,CAAC"}
@@ -3,7 +3,7 @@ import type { AnyObject } from "prostgles-types";
3
3
  import { asName, pickKeys } from "prostgles-types";
4
4
  import type { FileTableConfig } from "../../ProstglesTypes";
5
5
  import type { TableHandlers } from "../DboBuilder";
6
- import type { FileTableRow } from "../../FileManager/getFileTableConfig";
6
+ import type { FileTableRow } from "../../StorageClient/getFileTableConfig";
7
7
 
8
8
  type OnDeleteFromFileTableArgs = {
9
9
  returningQuery: undefined | string;
@@ -1,6 +1,6 @@
1
1
  import type { AnyObject } from "prostgles-types";
2
2
  import { getJSONBObjectSchemaValidationError, omitKeys } from "prostgles-types";
3
- import type { FileTableRow } from "../../FileManager/getFileTableConfig";
3
+ import type { FileTableRow } from "../../StorageClient/getFileTableConfig";
4
4
  import type { FileTableConfig } from "../../ProstglesTypes";
5
5
  import type { LocalParams } from "../DboBuilder";
6
6
  import { isFile, uploadFile } from "../uploadFile";
@@ -1,10 +1,11 @@
1
1
  import { randomUUID } from "crypto";
2
2
  import type { AnyObject } from "prostgles-types";
3
3
  import { getKeys, isObject } from "prostgles-types";
4
- import type { FileTableRow } from "../FileManager/getFileTableConfig";
5
- import { getValidatedFileType } from "../FileManager/getValidatedFileType";
4
+ import type { FileTableRow } from "../StorageClient/getFileTableConfig";
5
+ import { getValidatedFileType } from "../StorageClient/getValidatedFileType";
6
6
  import type { FileTableConfig } from "../ProstglesTypes";
7
7
  import type { LocalParams } from "./DboBuilder";
8
+ import { getFileServeRoute } from "../StorageClient/setupFileServeHandler";
8
9
 
9
10
  export const isFile = (row: any): row is { data: Buffer; name: string } => {
10
11
  return Boolean(
@@ -65,6 +66,11 @@ export const uploadFile = async (
65
66
  contentType: coreInfo.content_type,
66
67
  });
67
68
 
69
+ const { contentLength, contentHash } = uploadedInfo;
70
+ const { filePath } = uploadedInfo.type === "local" ? uploadedInfo : {};
71
+ const { url } = uploadedInfo.type === "cloud" ? uploadedInfo : {};
72
+
73
+ const fileServeRoute = getFileServeRoute(config);
68
74
  const mediaRow: FileTableRow = {
69
75
  signed_url: null,
70
76
  signed_url_expires: null,
@@ -73,10 +79,11 @@ export const uploadFile = async (
73
79
  deleted_from_storage: null,
74
80
  description: "",
75
81
  ...coreInfo,
76
- ...uploadedInfo,
82
+ cloud_url: url ?? "",
83
+ etag: contentHash,
77
84
  extension: type.ext,
78
- url: uploadedInfo.cloud_url,
79
- content_length: String(uploadedInfo.content_length),
85
+ url: [fileServeRoute, coreInfo.name].join("/"),
86
+ content_length: String(contentLength),
80
87
  };
81
88
 
82
89
  return mediaRow;
package/lib/Logging.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ABORTABLE_METHODS, AnyObject, ClientSchema, TableHandler } from "prostgles-types";
1
+ import type { AnyObject, ClientSchema, TableHandler } from "prostgles-types";
2
2
  import type { LocalParams } from "./DboBuilder/DboBuilder";
3
3
  import type { PubSubManagerTriggers, SyncParams } from "./PubSubManager/PubSubManager";
4
4
  import type { NotifTypeName } from "./PubSubManager/PubSubManagerUtils";
package/lib/Prostgles.ts CHANGED
@@ -60,7 +60,7 @@ import { randomUUID } from "crypto";
60
60
  import * as fs from "fs";
61
61
  import type { getAdminClient } from "./DboBuilder/runSql/getAdminClient";
62
62
  import type { TableHandler } from "./DboBuilder/TableHandler/TableHandler";
63
- import { getFileTableConfig } from "./FileManager/getFileTableConfig";
63
+ import { getFileTableConfig } from "./StorageClient/getFileTableConfig";
64
64
 
65
65
  export class Prostgles {
66
66
  /**
@@ -232,12 +232,8 @@ export class Prostgles {
232
232
  };
233
233
 
234
234
  initRestApi = () => {
235
- if (this.opts.restApi) {
236
- this.restApi = new RestApi({ prostgles: this, ...this.opts.restApi });
237
- } else {
238
- this.restApi?.destroy();
239
- this.restApi = undefined;
240
- }
235
+ this.restApi?.destroy();
236
+ this.restApi = this.opts.restApi && new RestApi({ prostgles: this, ...this.opts.restApi });
241
237
  };
242
238
 
243
239
  initAuthHandler = () => {
@@ -6,7 +6,7 @@ import type {
6
6
  SessionUser,
7
7
  } from "./Auth/AuthTypes";
8
8
  import type { EventTriggerTagFilter } from "./Event_Trigger_Tags";
9
- import type { StorageClient } from "./FileManager/FileManager";
9
+ import type { StorageClient } from "./StorageClient/StorageClientTypes";
10
10
  import type { DbConnection, OnReadyCallback } from "./initProstgles";
11
11
  import type { EventInfo } from "./Logging";
12
12
  import type { RestApiConfig } from "./RestApi";
@@ -117,11 +117,11 @@ export async function notifListener(this: PubSubManager, data: { payload: string
117
117
  */
118
118
  const changedColumns =
119
119
  !changedColumnsByTriggerId ? "*" : (changedColumnsByTriggerId[table_condition_id] ?? "*");
120
- log(
121
- "notifListener",
122
- subs.map((s) => s.channel_name),
123
- syncs.map((s) => s.channel_name),
124
- );
120
+ // log(
121
+ // "notifListener",
122
+ // subs.map((s) => s.channel_name),
123
+ // syncs.map((s) => s.channel_name),
124
+ // );
125
125
 
126
126
  syncs.map((s) => {
127
127
  void this.syncData(s, undefined, "trigger");
@@ -0,0 +1,39 @@
1
+ import type * as stream from "stream";
2
+
3
+ export const HOUR = 3600 * 1000;
4
+
5
+ export type LocalUploadedFileDetails = {
6
+ type: "local";
7
+ filePath: string;
8
+ contentHash: string;
9
+ contentLength: number;
10
+ };
11
+ export type CloudUploadedFileDetails = {
12
+ type: "cloud";
13
+ url: string;
14
+ /**
15
+ * The ETag
16
+ */
17
+ contentHash: string;
18
+ contentLength: number;
19
+ };
20
+ export type UploadFileOptions = {
21
+ fileName: string;
22
+ contentType: string;
23
+ file: string | Buffer | stream.PassThrough;
24
+ onProgress?: (bytesUploaded: number) => void;
25
+ };
26
+ export type StorageClientBase<T> = {
27
+ upload: (file: UploadFileOptions) => Promise<T>;
28
+ downloadAsStream: (name: string) => Promise<stream.Readable>;
29
+ delete: (fileName: string) => Promise<void>;
30
+ };
31
+ export type LocalStorageClient = StorageClientBase<LocalUploadedFileDetails> & {
32
+ type: "local";
33
+ localFolderPath: string;
34
+ };
35
+ export type CloudStorageClient = StorageClientBase<CloudUploadedFileDetails> & {
36
+ type: "cloud";
37
+ getSignedUrlForDownload: (fileName: string, expiresInSeconds: number) => Promise<string>;
38
+ };
39
+ export type StorageClient = LocalStorageClient | CloudStorageClient;
@@ -20,7 +20,7 @@ const FILE_TABLE_COLUMN_DEFINITIONS = {
20
20
  cloud_url: `TEXT`,
21
21
  signed_url: `TEXT`,
22
22
  signed_url_expires: `BIGINT`,
23
- etag: `TEXT`,
23
+ etag: `TEXT NOT NULL`,
24
24
  deleted: `BIGINT`,
25
25
  deleted_from_storage: `BIGINT`,
26
26
  } as const;
@@ -98,7 +98,7 @@ export const getFileTableConfig = (prg: Prostgles): TableConfig | undefined => {
98
98
  },
99
99
  validate: async ({ data, localParams, command, filter }) => {
100
100
  const tableHandler = prg.dboBuilder.dboMap.get(fileTableName);
101
- if (!tableHandler) throw "FileManager tableHandler not found";
101
+ if (!tableHandler) throw "Storage tableHandler not found";
102
102
 
103
103
  if (command === "update") {
104
104
  const { newData } = await updateFile(tableHandler, fileTable, {
@@ -1,102 +1,11 @@
1
- import type * as stream from "stream";
1
+ // const fileType = require("file-type");
2
+ // const res = await fileType.fromBuffer(typeof file === "string"? Buffer.from(file, 'utf8') : file);
2
3
 
3
4
  // import * as sharp from "sharp";
4
5
 
5
6
  import type { ALLOWED_CONTENT_TYPE, ALLOWED_EXTENSION } from "prostgles-types";
6
7
  import { CONTENT_TYPE_TO_EXT, getKeys } from "prostgles-types";
7
8
 
8
- export type LocalConfig = {
9
- /**
10
- * example: path.join(__dirname+'/media')
11
- * note that this location will be relative to the compiled file location
12
- */
13
- localFolderPath: string;
14
-
15
- /**
16
- * Minimum amount of free bytes available to allow saving files
17
- * Defaults to 100MB
18
- */
19
- minFreeBytes?: number;
20
- };
21
-
22
- export const HOUR = 3600 * 1000;
23
-
24
- export type OnProgress = (progress: { total: number; loaded: number }) => void;
25
-
26
- export type UploadedCloudFile = {
27
- cloud_url: string;
28
- etag: string;
29
- content_length: number;
30
- };
31
- export type FileUploadArgs = {
32
- fileName: string;
33
- contentType: string;
34
- file: string | Buffer | stream.PassThrough;
35
- onProgress?: (bytesUploaded: number) => void;
36
- };
37
- export type StorageClientBase = {
38
- upload: (file: FileUploadArgs) => Promise<UploadedCloudFile>;
39
- downloadAsStream: (name: string) => Promise<stream.Readable>;
40
- delete: (fileName: string) => Promise<void>;
41
- };
42
- export type LocalStorageClient = StorageClientBase & {
43
- type: "local";
44
- localFolderPath: string;
45
- };
46
- export type CloudStorageClient = StorageClientBase & {
47
- type: "cloud";
48
- getSignedUrlForDownload: (fileName: string, expiresInSeconds: number) => Promise<string>;
49
- };
50
- export type StorageClient = LocalStorageClient | CloudStorageClient;
51
-
52
- export type UploadItem = {
53
- name: string;
54
- content_type: string;
55
- data: Buffer;
56
- extension: string;
57
- };
58
- export type UploadedItem = {
59
- /**
60
- * Url that is passed to client
61
- */
62
- url: string;
63
- filePath?: string;
64
- etag: string;
65
-
66
- /**
67
- * Cloud url of the resource
68
- */
69
- cloud_url?: string;
70
-
71
- /**
72
- * Total uploaded file size in bytes
73
- */
74
- content_length: number;
75
- };
76
-
77
- export const getFileTypeFromFilename = (
78
- fileName: string,
79
- ): { mime: ALLOWED_CONTENT_TYPE; ext: ALLOWED_EXTENSION } | undefined => {
80
- const nameParts = fileName.split(".");
81
-
82
- if (nameParts.length < 2) return undefined;
83
-
84
- const nameExt = nameParts.at(-1)!.toLowerCase(),
85
- mime = getKeys(CONTENT_TYPE_TO_EXT).find((k) =>
86
- (CONTENT_TYPE_TO_EXT[k] as readonly string[]).includes(nameExt),
87
- );
88
-
89
- if (!mime) return undefined;
90
-
91
- return {
92
- mime,
93
- ext: nameExt as ALLOWED_EXTENSION,
94
- };
95
- };
96
-
97
- // const fileType = require("file-type");
98
- // const res = await fileType.fromBuffer(typeof file === "string"? Buffer.from(file, 'utf8') : file);
99
-
100
9
  export const getFileType = async (
101
10
  file: Buffer | string,
102
11
  fileName: string,
@@ -128,9 +37,22 @@ export const getFileType = async (
128
37
  return res as any;
129
38
  };
130
39
 
131
- export function bytesToSize(bytes: number) {
132
- const sizes = ["Bytes", "KB", "MB", "GB", "TB"];
133
- if (bytes == 0) return "0 Byte";
134
- const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)) + "");
135
- return (bytes / Math.pow(1024, i)).toFixed(1) + " " + sizes[i];
136
- }
40
+ export const getFileTypeFromFilename = (
41
+ fileName: string,
42
+ ): { mime: ALLOWED_CONTENT_TYPE; ext: ALLOWED_EXTENSION } | undefined => {
43
+ const nameParts = fileName.split(".");
44
+
45
+ if (nameParts.length < 2) return undefined;
46
+
47
+ const nameExt = nameParts.at(-1)!.toLowerCase(),
48
+ mime = getKeys(CONTENT_TYPE_TO_EXT).find((k) =>
49
+ (CONTENT_TYPE_TO_EXT[k] as readonly string[]).includes(nameExt),
50
+ );
51
+
52
+ if (!mime) return undefined;
53
+
54
+ return {
55
+ mime,
56
+ ext: nameExt as ALLOWED_EXTENSION,
57
+ };
58
+ };
@@ -3,11 +3,24 @@ import fs from "fs";
3
3
  import path from "path";
4
4
  import stream from "stream";
5
5
  import type {
6
- FileUploadArgs,
7
- LocalConfig,
6
+ UploadFileOptions,
8
7
  LocalStorageClient,
9
- UploadedCloudFile,
10
- } from "./FileManager";
8
+ LocalUploadedFileDetails,
9
+ } from "./StorageClientTypes";
10
+
11
+ export type LocalConfig = {
12
+ /**
13
+ * example: path.join(__dirname+'/media')
14
+ * note that this location will be relative to the compiled file location
15
+ */
16
+ localFolderPath: string;
17
+
18
+ /**
19
+ * Minimum amount of free bytes available to allow saving files
20
+ * Defaults to 100MB
21
+ */
22
+ minFreeBytes?: number;
23
+ };
11
24
 
12
25
  export const getLocalStorageClient = (localConfig: LocalConfig): LocalStorageClient => {
13
26
  const { localFolderPath, minFreeBytes = 100 * 1024 * 1024 } = localConfig; // Default 100MB
@@ -34,8 +47,7 @@ export const getLocalStorageClient = (localConfig: LocalConfig): LocalStorageCli
34
47
  return {
35
48
  type: "local",
36
49
  localFolderPath: localConfig.localFolderPath,
37
- upload: async (args: FileUploadArgs): Promise<UploadedCloudFile> => {
38
- // Ensure the target directory exists
50
+ upload: async (args: UploadFileOptions): Promise<LocalUploadedFileDetails> => {
39
51
  await fs.promises.mkdir(localFolderPath, { recursive: true });
40
52
  await checkFreeSpace();
41
53
 
@@ -49,13 +61,13 @@ export const getLocalStorageClient = (localConfig: LocalConfig): LocalStorageCli
49
61
  writeStream.on("error", reject);
50
62
  writeStream.on("finish", () => {
51
63
  resolve({
52
- cloud_url: filePath,
53
- etag: hash.digest("hex"),
54
- content_length: contentLength,
64
+ type: "local",
65
+ filePath,
66
+ contentHash: hash.digest("hex"),
67
+ contentLength: contentLength,
55
68
  });
56
69
  });
57
70
 
58
- // Handle raw string or Buffer
59
71
  if (typeof args.file === "string" || Buffer.isBuffer(args.file)) {
60
72
  const buffer = Buffer.isBuffer(args.file) ? args.file : Buffer.from(args.file);
61
73
 
@@ -2,7 +2,7 @@ import type { ALLOWED_CONTENT_TYPE } from "prostgles-types";
2
2
  import { CONTENT_TYPE_TO_EXT, getKeys, isObject } from "prostgles-types";
3
3
  import { parseFieldFilter } from "../DboBuilder/ViewHandler/parseFieldFilter";
4
4
  import type { FileTableConfig } from "../ProstglesTypes";
5
- import { getFileType, getFileTypeFromFilename } from "./FileManager";
5
+ import { getFileType, getFileTypeFromFilename } from "./getFileType";
6
6
 
7
7
  type Args = {
8
8
  file: Buffer | string;
@@ -6,10 +6,19 @@ import type { DB } from "../initProstgles";
6
6
  import type { Prostgles } from "../Prostgles";
7
7
  import type { FileTableConfig } from "../ProstglesTypes";
8
8
  import { runClientRequest } from "../runClientRequest";
9
- import type { StorageClient } from "./FileManager";
10
- import { HOUR } from "./FileManager";
9
+ import type { StorageClient } from "./StorageClientTypes";
10
+ import { HOUR } from "./StorageClientTypes";
11
11
  import type { FileTableRow } from "./getFileTableConfig";
12
12
 
13
+ export const getFileServeRoute = (config: FileTableConfig) => {
14
+ const fileTableName = config.tableName;
15
+ const fileServeRoute = config.fileServePath ?? `/${fileTableName}`;
16
+ if (fileServeRoute.endsWith("/")) {
17
+ throw `fileServeRoute must not end with a '/'`;
18
+ }
19
+ return fileServeRoute;
20
+ };
21
+
13
22
  export const setupFileServeHandler = (
14
23
  db: DB,
15
24
  config: FileTableConfig,
@@ -18,10 +27,7 @@ export const setupFileServeHandler = (
18
27
  prg: Prostgles,
19
28
  ) => {
20
29
  const fileTableName = config.tableName;
21
- const fileServeRoute = config.fileServePath ?? `/${fileTableName}`;
22
- if (fileServeRoute.endsWith("/")) {
23
- throw `fileServeRoute must not end with a '/'`;
24
- }
30
+ const fileServeRoute = getFileServeRoute(config);
25
31
  const fileRouteExpress = fileServeRoute + "/:name";
26
32
 
27
33
  app.get(fileRouteExpress, async (req, res) => {
package/lib/index.ts CHANGED
@@ -16,8 +16,8 @@ export * from "./Auth/AuthTypes";
16
16
  export type { PublishParams } from "./PublishParser/publishTypesAndUtils";
17
17
  export type { DBOFullyTyped } from "./DBSchemaBuilder/DBSchemaBuilder";
18
18
  export type { DBHandlerServer } from "./Prostgles";
19
- export type { StorageClient as CloudClient, LocalConfig } from "./FileManager/FileManager";
20
- export * from "./FileManager/getLocalStorageClient";
19
+ export type { StorageClient as CloudClient } from "./StorageClient/StorageClientTypes";
20
+ export * from "./StorageClient/getLocalStorageClient";
21
21
  export type { DB } from "./initProstgles";
22
22
  export type * from "./TableConfig/TableConfigTypes";
23
23
  export * from "./Auth/utils/upsertNamedExpressMiddleware";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.570",
3
+ "version": "4.2.571",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,76 +0,0 @@
1
- import type * as stream from "stream";
2
- import type { ALLOWED_CONTENT_TYPE, ALLOWED_EXTENSION } from "prostgles-types";
3
- export type LocalConfig = {
4
- /**
5
- * example: path.join(__dirname+'/media')
6
- * note that this location will be relative to the compiled file location
7
- */
8
- localFolderPath: string;
9
- /**
10
- * Minimum amount of free bytes available to allow saving files
11
- * Defaults to 100MB
12
- */
13
- minFreeBytes?: number;
14
- };
15
- export declare const HOUR: number;
16
- export type OnProgress = (progress: {
17
- total: number;
18
- loaded: number;
19
- }) => void;
20
- export type UploadedCloudFile = {
21
- cloud_url: string;
22
- etag: string;
23
- content_length: number;
24
- };
25
- export type FileUploadArgs = {
26
- fileName: string;
27
- contentType: string;
28
- file: string | Buffer | stream.PassThrough;
29
- onProgress?: (bytesUploaded: number) => void;
30
- };
31
- export type StorageClientBase = {
32
- upload: (file: FileUploadArgs) => Promise<UploadedCloudFile>;
33
- downloadAsStream: (name: string) => Promise<stream.Readable>;
34
- delete: (fileName: string) => Promise<void>;
35
- };
36
- export type LocalStorageClient = StorageClientBase & {
37
- type: "local";
38
- localFolderPath: string;
39
- };
40
- export type CloudStorageClient = StorageClientBase & {
41
- type: "cloud";
42
- getSignedUrlForDownload: (fileName: string, expiresInSeconds: number) => Promise<string>;
43
- };
44
- export type StorageClient = LocalStorageClient | CloudStorageClient;
45
- export type UploadItem = {
46
- name: string;
47
- content_type: string;
48
- data: Buffer;
49
- extension: string;
50
- };
51
- export type UploadedItem = {
52
- /**
53
- * Url that is passed to client
54
- */
55
- url: string;
56
- filePath?: string;
57
- etag: string;
58
- /**
59
- * Cloud url of the resource
60
- */
61
- cloud_url?: string;
62
- /**
63
- * Total uploaded file size in bytes
64
- */
65
- content_length: number;
66
- };
67
- export declare const getFileTypeFromFilename: (fileName: string) => {
68
- mime: ALLOWED_CONTENT_TYPE;
69
- ext: ALLOWED_EXTENSION;
70
- } | undefined;
71
- export declare const getFileType: (file: Buffer | string, fileName: string) => Promise<{
72
- mime: ALLOWED_CONTENT_TYPE;
73
- ext: ALLOWED_EXTENSION;
74
- }>;
75
- export declare function bytesToSize(bytes: number): string;
76
- //# sourceMappingURL=FileManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["../../lib/FileManager/FileManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,IAAI,QAAc,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC;AAE/E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7D,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,uBAAuB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1F,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,GAAG,SAgB3D,CAAC;AAKF,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,GAAG,MAAM,EACrB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CA0BhE,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAKxC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileManager.js","sourceRoot":"","sources":["../../lib/FileManager/FileManager.ts"],"names":[],"mappings":";;;AAkIA,kCAKC;AAlID,qDAA+D;AAgBlD,QAAA,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAuDzB,MAAM,uBAAuB,GAAG,CACrC,QAAgB,EACoD,EAAE;IACtE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,EAC7C,IAAI,GAAG,IAAA,yBAAO,EAAC,qCAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,qCAAmB,CAAC,CAAC,CAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChE,CAAC;IAEJ,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,OAA4B;KAClC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,uBAAuB,2BAkBlC;AAEF,yCAAyC;AACzC,qGAAqG;AAE9F,MAAM,WAAW,GAAG,KAAK,EAC9B,IAAqB,EACrB,QAAgB,EACiD,EAAE;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAO,IAAI,CAAC,qBAAqB,CAG9D,CAAC;IAEH,MAAM,YAAY,GAAG,IAAA,+BAAuB,EAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,EAAE,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElG,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,mCAAmC;QACnC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,gFAAgF,YAAY,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,CACjH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,GAAU,CAAC;AACpB,CAAC,CAAC;AA7BW,QAAA,WAAW,eA6BtB;AAEF,SAAgB,WAAW,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getFileTableConfig.d.ts","sourceRoot":"","sources":["../../lib/FileManager/getFileTableConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAKnE,QAAA,MAAM,6BAA6B;;;;;;;;;;;;;;;;CAgBzB,CAAC;AAEX,KAAK,0BAA0B,GAAG,OAAO,6BAA6B,CAAC;AAEvE,MAAM,MAAM,YAAY,GAAG;KACxB,CAAC,IAAI,MAAM,0BAA0B,IAAI,CAAC,GAAG,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAClF,GAAG,MAAM,YAAY,MAAM,EAAE,GAAG,GAAG,MAAM,cAAc,MAAM,EAAE,CAChE,GACC,MAAM,GACN,MAAM,GAAG,IAAI;CAChB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,KAAK,SAAS,KAAG,WAAW,GAAG,SAsGjE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getFileTableConfig.js","sourceRoot":"","sources":["../../lib/FileManager/getFileTableConfig.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { LocalConfig, LocalStorageClient } from "./FileManager";
2
- export declare const getLocalStorageClient: (localConfig: LocalConfig) => LocalStorageClient;
3
- //# sourceMappingURL=getLocalStorageClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getLocalStorageClient.d.ts","sourceRoot":"","sources":["../../lib/FileManager/getLocalStorageClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,WAAW,EACX,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,qBAAqB,GAAI,aAAa,WAAW,KAAG,kBA0GhE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getLocalStorageClient.js","sourceRoot":"","sources":["../../lib/FileManager/getLocalStorageClient.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getValidatedFileType.d.ts","sourceRoot":"","sources":["../../lib/FileManager/getValidatedFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,EACvB,MAAM,IAAI,KACT,OAAO,CAAC;IACT,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CAIb,CAsEA,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getValidatedFileType.js","sourceRoot":"","sources":["../../lib/FileManager/getValidatedFileType.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"setupFileServeHandler.d.ts","sourceRoot":"","sources":["../../lib/FileManager/setupFileServeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAI7B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,eAAO,MAAM,qBAAqB,GAChC,IAAI,EAAE,EACN,QAAQ,eAAe,EACvB,eAAe,aAAa,EAC5B,KAAK,CAAC,CAAC,OAAO,EACd,KAAK,SAAS;;CAoFf,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"setupFileServeHandler.js","sourceRoot":"","sources":["../../lib/FileManager/setupFileServeHandler.ts"],"names":[],"mappings":"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"}