prostgles-server 4.2.567 → 4.2.570

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 (224) hide show
  1. package/dist/Auth/AuthTypes.d.ts +5 -5
  2. package/dist/Auth/AuthTypes.d.ts.map +1 -1
  3. package/dist/Auth/AuthTypes.js.map +1 -1
  4. package/dist/Auth/endpoints/setCatchAllRequestHandler.d.ts.map +1 -1
  5. package/dist/Auth/endpoints/setCatchAllRequestHandler.js +2 -2
  6. package/dist/Auth/endpoints/setCatchAllRequestHandler.js.map +1 -1
  7. package/dist/Auth/utils/removeExpressRoute.d.ts.map +1 -1
  8. package/dist/DBSchemaBuilder/getColumnTypescriptDefinition.d.ts +1 -1
  9. package/dist/DBSchemaBuilder/getColumnTypescriptDefinition.d.ts.map +1 -1
  10. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts +1 -1
  11. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts.map +1 -1
  12. package/dist/DboBuilder/DboBuilder.js +4 -4
  13. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  14. package/dist/DboBuilder/DboBuilderTypes.d.ts +2 -18
  15. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  16. package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
  17. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +15 -5
  18. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  19. package/dist/DboBuilder/TableHandler/TableHandler.js +4 -3
  20. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  21. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  22. package/dist/DboBuilder/TableHandler/delete.js +17 -14
  23. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  24. package/dist/DboBuilder/TableHandler/insert/insert.d.ts.map +1 -1
  25. package/dist/DboBuilder/TableHandler/insert/insert.js +3 -12
  26. package/dist/DboBuilder/TableHandler/insert/insert.js.map +1 -1
  27. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.d.ts.map +1 -1
  28. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.js +10 -15
  29. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.js.map +1 -1
  30. package/dist/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.js +1 -1
  31. package/dist/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.js.map +1 -1
  32. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +8 -6
  33. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  34. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +30 -48
  35. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  36. package/dist/DboBuilder/TableHandler/update.d.ts +1 -1
  37. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  38. package/dist/DboBuilder/TableHandler/update.js +8 -18
  39. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  40. package/dist/DboBuilder/TableHandler/updateFile.d.ts +2 -3
  41. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  42. package/dist/DboBuilder/TableHandler/updateFile.js +8 -28
  43. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  44. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +2 -2
  45. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  46. package/dist/DboBuilder/ViewHandler/getInfo.d.ts +1 -1
  47. package/dist/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
  48. package/dist/DboBuilder/ViewHandler/getInfo.js +12 -1
  49. package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
  50. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  51. package/dist/DboBuilder/getColumns.js +29 -4
  52. package/dist/DboBuilder/getColumns.js.map +1 -1
  53. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +2 -2
  54. package/dist/DboBuilder/uploadFile.d.ts +5 -6
  55. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  56. package/dist/DboBuilder/uploadFile.js +28 -42
  57. package/dist/DboBuilder/uploadFile.js.map +1 -1
  58. package/dist/FileManager/FileManager.d.ts +22 -78
  59. package/dist/FileManager/FileManager.d.ts.map +1 -1
  60. package/dist/FileManager/FileManager.js +1 -219
  61. package/dist/FileManager/FileManager.js.map +1 -1
  62. package/dist/FileManager/getFileTableConfig.d.ts +26 -0
  63. package/dist/FileManager/getFileTableConfig.d.ts.map +1 -0
  64. package/dist/FileManager/getFileTableConfig.js +113 -0
  65. package/dist/FileManager/getFileTableConfig.js.map +1 -0
  66. package/dist/FileManager/getLocalStorageClient.d.ts +3 -0
  67. package/dist/FileManager/getLocalStorageClient.d.ts.map +1 -0
  68. package/dist/FileManager/getLocalStorageClient.js +105 -0
  69. package/dist/FileManager/getLocalStorageClient.js.map +1 -0
  70. package/dist/FileManager/getValidatedFileType.d.ts +2 -2
  71. package/dist/FileManager/getValidatedFileType.d.ts.map +1 -1
  72. package/dist/FileManager/getValidatedFileType.js +7 -9
  73. package/dist/FileManager/getValidatedFileType.js.map +1 -1
  74. package/dist/FileManager/setupFileServeHandler.d.ts +9 -0
  75. package/dist/FileManager/setupFileServeHandler.d.ts.map +1 -0
  76. package/dist/FileManager/setupFileServeHandler.js +114 -0
  77. package/dist/FileManager/setupFileServeHandler.js.map +1 -0
  78. package/dist/Filtering/Filtering.d.ts +1 -1
  79. package/dist/Logging.d.ts +1 -1
  80. package/dist/Logging.d.ts.map +1 -1
  81. package/dist/Prostgles.d.ts +52 -6
  82. package/dist/Prostgles.d.ts.map +1 -1
  83. package/dist/Prostgles.js +7 -47
  84. package/dist/Prostgles.js.map +1 -1
  85. package/dist/ProstglesTypes.d.ts +19 -22
  86. package/dist/ProstglesTypes.d.ts.map +1 -1
  87. package/dist/ProstglesTypes.js.map +1 -1
  88. package/dist/PubSubManager/notifListener.d.ts.map +1 -1
  89. package/dist/PubSubManager/notifListener.js +0 -1
  90. package/dist/PubSubManager/notifListener.js.map +1 -1
  91. package/dist/PublishParser/getDBSchemaTable.d.ts +2 -2
  92. package/dist/PublishParser/getDBSchemaTable.d.ts.map +1 -1
  93. package/dist/PublishParser/getDBSchemaTable.js +5 -3
  94. package/dist/PublishParser/getDBSchemaTable.js.map +1 -1
  95. package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
  96. package/dist/PublishParser/getSchemaFromPublish.js +2 -2
  97. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  98. package/dist/PublishParser/publishTypesAndUtils.d.ts +1 -0
  99. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  100. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  101. package/dist/RestApi.d.ts +4 -6
  102. package/dist/RestApi.d.ts.map +1 -1
  103. package/dist/RestApi.js +6 -5
  104. package/dist/RestApi.js.map +1 -1
  105. package/dist/TableConfig/{TableConfig.d.ts → TableConfigTypes.d.ts} +19 -64
  106. package/dist/TableConfig/TableConfigTypes.d.ts.map +1 -0
  107. package/dist/TableConfig/TableConfigTypes.js +3 -0
  108. package/dist/TableConfig/TableConfigTypes.js.map +1 -0
  109. package/dist/TableConfig/TableConfigurator.d.ts +104 -0
  110. package/dist/TableConfig/TableConfigurator.d.ts.map +1 -0
  111. package/dist/TableConfig/{TableConfig.js → TableConfigurator.js} +31 -44
  112. package/dist/TableConfig/TableConfigurator.js.map +1 -0
  113. package/dist/TableConfig/applyTableConfig.d.ts.map +1 -1
  114. package/dist/TableConfig/applyTableConfig.js +0 -1
  115. package/dist/TableConfig/applyTableConfig.js.map +1 -1
  116. package/dist/TableConfig/getColumnConfig.d.ts +1 -1
  117. package/dist/TableConfig/getColumnConfig.d.ts.map +1 -1
  118. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts +1 -1
  119. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts.map +1 -1
  120. package/dist/TableConfig/getColumnSQLDefinitionQuery.js +1 -1
  121. package/dist/TableConfig/getColumnSQLDefinitionQuery.js.map +1 -1
  122. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +1 -1
  123. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
  124. package/dist/TableConfig/getCreateSchemaQueries.d.ts +26 -8
  125. package/dist/TableConfig/getCreateSchemaQueries.d.ts.map +1 -1
  126. package/dist/TableConfig/getSchemaDiffQueries.d.ts.map +1 -1
  127. package/dist/TableConfig/getSchemaDiffQueries.js +12 -8
  128. package/dist/TableConfig/getSchemaDiffQueries.js.map +1 -1
  129. package/dist/TableConfig/getTableColumnQueries.d.ts +1 -1
  130. package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
  131. package/dist/TableConfig/getTableColumnQueries.js +19 -19
  132. package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
  133. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts +26 -10
  134. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts.map +1 -1
  135. package/dist/TableConfig/getTableConfigSchemaQueries.js +8 -10
  136. package/dist/TableConfig/getTableConfigSchemaQueries.js.map +1 -1
  137. package/dist/TableConfig/indexes/getIndexesQueries.d.ts +1 -1
  138. package/dist/TableConfig/indexes/getIndexesQueries.d.ts.map +1 -1
  139. package/dist/TableConfig/initTableConfig.d.ts +1 -1
  140. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  141. package/dist/TableConfig/initTableConfig.js +6 -3
  142. package/dist/TableConfig/initTableConfig.js.map +1 -1
  143. package/dist/WebsocketAPI/getClientSchema.d.ts.map +1 -1
  144. package/dist/WebsocketAPI/getClientSchema.js +6 -1
  145. package/dist/WebsocketAPI/getClientSchema.js.map +1 -1
  146. package/dist/index.d.ts +3 -2
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +1 -0
  149. package/dist/index.js.map +1 -1
  150. package/dist/initProstgles.d.ts.map +1 -1
  151. package/dist/initProstgles.js +1 -2
  152. package/dist/initProstgles.js.map +1 -1
  153. package/dist/runClientRequest.js +1 -1
  154. package/dist/runClientRequest.js.map +1 -1
  155. package/dist/updateConfiguration.d.ts.map +1 -1
  156. package/dist/updateConfiguration.js +0 -3
  157. package/dist/updateConfiguration.js.map +1 -1
  158. package/eslint.config.mjs +0 -3
  159. package/lib/Auth/AuthTypes.ts +6 -7
  160. package/lib/Auth/endpoints/setCatchAllRequestHandler.ts +6 -2
  161. package/lib/DBSchemaBuilder/getColumnTypescriptDefinition.ts +1 -1
  162. package/lib/DBSchemaBuilder/getDBGeneratedSchema.ts +1 -1
  163. package/lib/DboBuilder/DboBuilder.ts +4 -4
  164. package/lib/DboBuilder/DboBuilderTypes.ts +7 -20
  165. package/lib/DboBuilder/TableHandler/TableHandler.ts +7 -4
  166. package/lib/DboBuilder/TableHandler/delete.ts +23 -17
  167. package/lib/DboBuilder/TableHandler/insert/insert.ts +3 -12
  168. package/lib/DboBuilder/TableHandler/insert/insertNestedRecords.ts +13 -17
  169. package/lib/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.ts +1 -1
  170. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +41 -54
  171. package/lib/DboBuilder/TableHandler/update.ts +8 -19
  172. package/lib/DboBuilder/TableHandler/updateFile.ts +20 -42
  173. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +1 -1
  174. package/lib/DboBuilder/ViewHandler/getInfo.ts +19 -2
  175. package/lib/DboBuilder/getColumns.ts +40 -4
  176. package/lib/DboBuilder/uploadFile.ts +34 -50
  177. package/lib/FileManager/FileManager.ts +23 -249
  178. package/lib/FileManager/getFileTableConfig.ts +140 -0
  179. package/lib/FileManager/getLocalStorageClient.ts +118 -0
  180. package/lib/FileManager/getValidatedFileType.ts +14 -22
  181. package/lib/FileManager/setupFileServeHandler.ts +102 -0
  182. package/lib/Logging.ts +0 -3
  183. package/lib/Prostgles.ts +8 -44
  184. package/lib/ProstglesTypes.ts +30 -24
  185. package/lib/PubSubManager/notifListener.ts +0 -2
  186. package/lib/PublishParser/getDBSchemaTable.ts +6 -3
  187. package/lib/PublishParser/getSchemaFromPublish.ts +2 -1
  188. package/lib/PublishParser/publishTypesAndUtils.ts +1 -0
  189. package/lib/RestApi.ts +12 -12
  190. package/lib/TableConfig/{TableConfig.ts → TableConfigTypes.ts} +18 -217
  191. package/lib/TableConfig/TableConfigurator.ts +191 -0
  192. package/lib/TableConfig/applyTableConfig.ts +2 -3
  193. package/lib/TableConfig/getColumnConfig.ts +2 -2
  194. package/lib/TableConfig/getColumnSQLDefinitionQuery.ts +2 -2
  195. package/lib/TableConfig/getConstraintDefinitionQueries.ts +1 -1
  196. package/lib/TableConfig/getCreateSchemaQueries.ts +1 -1
  197. package/lib/TableConfig/getSchemaDiffQueries.ts +14 -11
  198. package/lib/TableConfig/getTableColumnQueries.ts +22 -20
  199. package/lib/TableConfig/getTableConfigSchemaQueries.ts +20 -22
  200. package/lib/TableConfig/indexes/getIndexesQueries.ts +1 -1
  201. package/lib/TableConfig/initTableConfig.ts +7 -6
  202. package/lib/WebsocketAPI/getClientSchema.ts +7 -1
  203. package/lib/index.ts +3 -2
  204. package/lib/initProstgles.ts +1 -2
  205. package/lib/runClientRequest.ts +1 -1
  206. package/lib/updateConfiguration.ts +0 -3
  207. package/package.json +2 -3
  208. package/dist/FileManager/initFileManager.d.ts +0 -18
  209. package/dist/FileManager/initFileManager.d.ts.map +0 -1
  210. package/dist/FileManager/initFileManager.js +0 -257
  211. package/dist/FileManager/initFileManager.js.map +0 -1
  212. package/dist/FileManager/upload.d.ts +0 -4
  213. package/dist/FileManager/upload.d.ts.map +0 -1
  214. package/dist/FileManager/upload.js +0 -90
  215. package/dist/FileManager/upload.js.map +0 -1
  216. package/dist/FileManager/uploadStream.d.ts +0 -4
  217. package/dist/FileManager/uploadStream.d.ts.map +0 -1
  218. package/dist/FileManager/uploadStream.js +0 -100
  219. package/dist/FileManager/uploadStream.js.map +0 -1
  220. package/dist/TableConfig/TableConfig.d.ts.map +0 -1
  221. package/dist/TableConfig/TableConfig.js.map +0 -1
  222. package/lib/FileManager/initFileManager.ts +0 -254
  223. package/lib/FileManager/upload.ts +0 -59
  224. package/lib/FileManager/uploadStream.ts +0 -76
@@ -3,7 +3,7 @@ import { CREATE_VALIDATE_SCHEMA_FUNCTION_SQL } from "../JSONBSchemaValidation/va
3
3
  import type { DB, DBHandlerServer } from "../Prostgles";
4
4
  import { getColumnSQLDefinitionQuery, getTableColumns } from "./getColumnSQLDefinitionQuery";
5
5
  import { getFutureTableSchema } from "./getFutureTableSchema";
6
- import type { TableConfig } from "./TableConfig";
6
+ import type { TableConfig } from "./TableConfigTypes";
7
7
 
8
8
  type Args = {
9
9
  db: DB;
@@ -30,7 +30,7 @@ export const getTableColumnQueries = async ({
30
30
  isCreate: boolean;
31
31
  }
32
32
  > => {
33
- let newColumnDefs: string[] = [];
33
+ const newColumnDefinitions: string[] = [];
34
34
  const droppedColNames: string[] = [];
35
35
  const alteredColQueries: string[] = [];
36
36
  let fullQuery = "";
@@ -62,7 +62,7 @@ export const getTableColumnQueries = async ({
62
62
  return typeof colDef === "string" || !("joinDef" in colDef);
63
63
  });
64
64
 
65
- const colDefs: { name: string; def: string }[] = [];
65
+ const columnDefinitions: { name: string; def: string }[] = [];
66
66
 
67
67
  for (const [colName, colConf] of columns) {
68
68
  /* Get column definition */
@@ -73,25 +73,25 @@ export const getTableColumnQueries = async ({
73
73
  table: tableName,
74
74
  });
75
75
  if (colDef) {
76
- colDefs.push({ name: colName.toString(), def: colDef });
76
+ columnDefinitions.push({ name: colName.toString(), def: colDef });
77
77
  }
78
78
  }
79
- const columnDefs = colDefs.map((c) => c.def);
79
+ const columnDefs = columnDefinitions.map((c) => c.def);
80
80
 
81
- if (!colDefs.length) {
81
+ if (!columnDefinitions.length) {
82
82
  return undefined;
83
83
  }
84
84
 
85
- const ALTERQ = `ALTER TABLE ${asName(tableName)}`;
85
+ const alterTableQuery = `ALTER TABLE ${asName(tableName)}`;
86
86
  if (!tableHandler) {
87
- newColumnDefs.push(...colDefs.map((c) => c.def));
87
+ columnDefinitions.map((c) => newColumnDefinitions.push(c.def));
88
88
  } else {
89
89
  const currCols = await getTableColumns({ db, table: tableName });
90
90
 
91
91
  /** Add new columns */
92
- newColumnDefs = colDefs
92
+ columnDefinitions
93
93
  .filter((nc) => !tableHandler.columns.some((c) => nc.name === c.name))
94
- .map((c) => c.def);
94
+ .forEach((c) => newColumnDefinitions.push(c.def));
95
95
 
96
96
  /** Altered/Dropped columns */
97
97
  const { cols: futureCols } = await getFutureTableSchema({
@@ -106,14 +106,14 @@ export const getTableColumnQueries = async ({
106
106
  droppedColNames.push(c.column_name);
107
107
  } else if (newCol.nullable !== c.nullable) {
108
108
  alteredColQueries.push(
109
- `${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.nullable ? "DROP" : "SET"} NOT NULL;`,
109
+ `${alterTableQuery} ALTER COLUMN ${asName(c.column_name)} ${newCol.nullable ? "DROP" : "SET"} NOT NULL;`,
110
110
  );
111
111
  } else if (newCol.udt_name !== c.udt_name) {
112
112
  alteredColQueries.push(
113
- `${ALTERQ} ALTER COLUMN ${asName(c.column_name)} TYPE ${newCol.udt_name} USING ${asName(c.column_name)}::${newCol.udt_name};`,
113
+ `${alterTableQuery} ALTER COLUMN ${asName(c.column_name)} TYPE ${newCol.udt_name} USING ${asName(c.column_name)}::${newCol.udt_name};`,
114
114
  );
115
115
  } else if (newCol.column_default !== c.column_default) {
116
- const colConfig = colDefs.find((cd) => cd.name === c.column_name);
116
+ const colConfig = columnDefinitions.find((cd) => cd.name === c.column_name);
117
117
  if (
118
118
  ["serial", "bigserial"].some((t) => colConfig?.def.toLowerCase().includes(` ${t}`)) &&
119
119
  c.column_default?.toLowerCase().includes("nextval")
@@ -121,7 +121,7 @@ export const getTableColumnQueries = async ({
121
121
  /** Ignore SERIAL/BIGSERIAL <> nextval mismatch */
122
122
  } else {
123
123
  alteredColQueries.push(
124
- `${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.column_default === null ? "DROP DEFAULT" : `SET DEFAULT ${newCol.column_default}`};`,
124
+ `${alterTableQuery} ALTER COLUMN ${asName(c.column_name)} ${newCol.column_default === null ? "DROP DEFAULT" : `SET DEFAULT ${newCol.column_default}`};`,
125
125
  );
126
126
  }
127
127
  }
@@ -130,10 +130,10 @@ export const getTableColumnQueries = async ({
130
130
 
131
131
  if (!tableHandler || tableConf.dropIfExists || tableConf.dropIfExistsCascade) {
132
132
  isCreate = true;
133
- const DROPQ = `DROP TABLE IF EXISTS ${asName(tableName)}`;
133
+ const dropTableQuery = `DROP TABLE IF EXISTS ${asName(tableName)}`;
134
134
  fullQuery = [
135
- ...(tableConf.dropIfExists ? [`${DROPQ};`]
136
- : tableConf.dropIfExistsCascade ? [`${DROPQ} CASCADE;`]
135
+ ...(tableConf.dropIfExists ? [`${dropTableQuery};`]
136
+ : tableConf.dropIfExistsCascade ? [`${dropTableQuery} CASCADE;`]
137
137
  : []),
138
138
  `CREATE TABLE ${asName(tableName)} (`,
139
139
  columnDefs.join(", \n"),
@@ -141,8 +141,10 @@ export const getTableColumnQueries = async ({
141
141
  ].join("\n");
142
142
  } else {
143
143
  fullQuery = [
144
- ...droppedColNames.map((c) => `${ALTERQ} DROP COLUMN ${asName(c)};`),
145
- ...newColumnDefs.map((c) => `${ALTERQ} ADD COLUMN ${c};`),
144
+ // ...droppedColNames.map((c) => `${alterTableQuery} DROP COLUMN ${asName(c)};`),
145
+ ...newColumnDefinitions.map(
146
+ (columnDefinition) => `${alterTableQuery} ADD COLUMN ${columnDefinition};`,
147
+ ),
146
148
  ...alteredColQueries,
147
149
  ].join("\n");
148
150
  }
@@ -151,6 +153,6 @@ export const getTableColumnQueries = async ({
151
153
  fullQuery,
152
154
  columnDefs,
153
155
  isCreate,
154
- newColumnDefs,
156
+ newColumnDefs: newColumnDefinitions,
155
157
  };
156
158
  };
@@ -1,32 +1,31 @@
1
1
  import { as } from "pg-promise";
2
2
  import { isDefined } from "prostgles-types";
3
- import { getFileManagerSchema } from "../FileManager/initFileManager";
4
3
  import type { DB } from "../initProstgles";
5
4
  import { getColumnSQLDefinitionQuery } from "./getColumnSQLDefinitionQuery";
6
5
  import { getConstraintDefinitionQueries } from "./getConstraintDefinitionQueries";
7
6
  import { tableConfigWithMigrations, type SchemaRelatedOptions } from "./getCreateSchemaQueries";
8
- import type { TableConfig } from "./TableConfig";
7
+ import type { TableConfig } from "./TableConfigTypes";
9
8
  import type { getSchemaUtils } from "./tableConfigSchemaUtils";
10
9
 
11
10
  export const getTableConfigSchemaQueries = async (
12
11
  opts: SchemaRelatedOptions,
13
- { asName, db }: Pick<Awaited<ReturnType<typeof getSchemaUtils>>, "asName" | "db">
12
+ { asName, db }: Pick<Awaited<ReturnType<typeof getSchemaUtils>>, "asName" | "db">,
14
13
  ) => {
15
- const fileTableSchema = getFileManagerSchema(opts);
16
- const fileTableSchemaQuery = fileTableSchema?.queries.join("\n") ?? "";
17
- const migrations = await tableConfigWithMigrations(db, opts, fileTableSchemaQuery);
14
+ // const fileTableSchema = getFileTableConfig(opts);
15
+ // const fileTableSchemaQuery = fileTableSchema?.queries.join("\n") ?? "";
16
+ const migrations = await tableConfigWithMigrations(db, opts, "");
18
17
 
19
18
  const config: TableConfig = migrations.config ?? {};
20
19
 
21
20
  const uniqueColumnAndTableNames = Array.from(
22
21
  new Set(
23
- Object.entries(config).flatMap(([tname, tableConf]) => {
22
+ Object.entries(config).flatMap(([tableName, tableConf]) => {
24
23
  if ("columns" in tableConf && tableConf.columns) {
25
- return [tname, ...Object.keys(tableConf.columns)];
24
+ return [tableName, ...Object.keys(tableConf.columns)];
26
25
  }
27
- return [tname];
28
- })
29
- )
26
+ return [tableName];
27
+ }),
28
+ ),
30
29
  );
31
30
 
32
31
  /** Avoid using double quotes when not required to ensure the jsonb validation checks do not include unnecessary quotes */
@@ -34,10 +33,10 @@ export const getTableConfigSchemaQueries = async (
34
33
  escapedTableNameMapObj: Record<string, string>;
35
34
  }>(
36
35
  `
37
- SELECT jsonb_object_agg(tblname, quote_ident(tblname)) as "escapedTableNameMapObj"
38
- FROM unnest(ARRAY[\${keys:csv}]) as tblname
36
+ SELECT jsonb_object_agg(table_name, quote_ident(table_name)) as "escapedTableNameMapObj"
37
+ FROM unnest(ARRAY[\${keys:csv}]) as table_name
39
38
  `,
40
- { keys: uniqueColumnAndTableNames.concat("prevent_empty_array_error") }
39
+ { keys: uniqueColumnAndTableNames.concat("prevent_empty_array_error") },
41
40
  );
42
41
 
43
42
  let triggerQueries: string[] = [];
@@ -55,7 +54,7 @@ export const getTableConfigSchemaQueries = async (
55
54
  tableConf,
56
55
  asName,
57
56
  escapedTableNameMapObj,
58
- db
57
+ db,
59
58
  );
60
59
  if (_tableQueries) {
61
60
  tableQueries = [...tableQueries, ..._tableQueries.queries];
@@ -77,7 +76,6 @@ export const getTableConfigSchemaQueries = async (
77
76
 
78
77
  return {
79
78
  dropTableQueries,
80
- fileTableSchemaQuery,
81
79
  tableQueries,
82
80
  constraintQueries,
83
81
  indexQueries,
@@ -91,7 +89,7 @@ const getTableQueries = async (
91
89
  tableConf: TableConfig[string],
92
90
  asName: (v: string) => string,
93
91
  escapedTableNameMapObj: Record<string, string>,
94
- db: DB
92
+ db: DB,
95
93
  ) => {
96
94
  if ("isLookupTable" in tableConf && Object.keys(tableConf.isLookupTable.values).length) {
97
95
  const { isLookupTable } = tableConf;
@@ -100,7 +98,7 @@ const getTableQueries = async (
100
98
  ([id, otherColumns]) => ({
101
99
  id,
102
100
  ...otherColumns,
103
- })
101
+ }),
104
102
  );
105
103
 
106
104
  const allColumns = Object.keys(rows[0]!);
@@ -122,7 +120,7 @@ const getTableQueries = async (
122
120
  return as.format(
123
121
  `INSERT INTO ${tableName} (${allColumns.map((t) => asName(t)).join(", ")}) ` +
124
122
  " VALUES (${values:csv}) ON CONFLICT DO NOTHING;",
125
- { values }
123
+ { values },
126
124
  );
127
125
  });
128
126
  const queries = [createQuery, ...dataQuerys];
@@ -169,7 +167,7 @@ const getConstraintQueries = (tableName: string, tableConf: TableConfig[string])
169
167
  const getIndexQueries = (
170
168
  tableName: string,
171
169
  tableConf: TableConfig[string],
172
- asName: (v: string) => string
170
+ asName: (v: string) => string,
173
171
  ) => {
174
172
  if ("indexes" in tableConf && tableConf.indexes) {
175
173
  /*
@@ -199,7 +197,7 @@ const getIndexQueries = (
199
197
  return [`DROP INDEX IF EXISTS ${asName(indexName)};`, query];
200
198
  }
201
199
  return [query];
202
- }
200
+ },
203
201
  );
204
202
  }
205
203
  return [];
@@ -207,7 +205,7 @@ const getIndexQueries = (
207
205
  const getTriggerQueries = (
208
206
  tableName: string,
209
207
  tableConfig: TableConfig[string],
210
- asName: (v: string) => string
208
+ asName: (v: string) => string,
211
209
  ) => {
212
210
  const { triggers } = tableConfig;
213
211
  if (!triggers) return [];
@@ -4,7 +4,7 @@ import type { DB } from "../../initProstgles";
4
4
  import { asValue } from "../../PubSubManager/PubSubManagerUtils";
5
5
  import { executeSqlWithRollback } from "../getFutureTableSchema";
6
6
  import { getPGIndexes } from "../getPGIndexes";
7
- import type { TableConfig } from "../TableConfig";
7
+ import type { TableConfig } from "../TableConfigTypes";
8
8
 
9
9
  /**
10
10
  * Keep Postgres indexes in sync with table configuration
@@ -5,15 +5,13 @@ import {
5
5
  log,
6
6
  } from "../PubSubManager/PubSubManagerUtils";
7
7
  import type { OnReadyCallbackBasic } from "../initProstgles";
8
- import type TableConfigurator from "./TableConfig";
9
- import { getConstraintDefinitionQueries } from "./getConstraintDefinitionQueries";
10
8
  import { fetchTableConstraints } from "./fetchTableConstraints";
9
+ import { getConstraintDefinitionQueries } from "./getConstraintDefinitionQueries";
11
10
  import { getFutureTableSchema } from "./getFutureTableSchema";
12
- import { getPGIndexes } from "./getPGIndexes";
13
11
  import { getTableColumnQueries } from "./getTableColumnQueries";
14
- import { runMigrations } from "./runMigrations";
15
- import { md5 } from "prostgles-types/dist/md5";
16
12
  import { getIndexesQueries } from "./indexes/getIndexesQueries";
13
+ import { runMigrations } from "./runMigrations";
14
+ import type { TableConfigurator } from "./TableConfigurator";
17
15
 
18
16
  export const initTableConfig = async function (this: TableConfigurator) {
19
17
  this.initialising = true;
@@ -86,8 +84,9 @@ export const initTableConfig = async function (this: TableConfigurator) {
86
84
  const MAX_IDENTIFIER_LENGTH = +(
87
85
  await this.db.one<{ max_identifier_length: number }>("SHOW max_identifier_length;")
88
86
  ).max_identifier_length;
89
- if (!Number.isFinite(MAX_IDENTIFIER_LENGTH))
87
+ if (!Number.isFinite(MAX_IDENTIFIER_LENGTH)) {
90
88
  throw `Could not obtain a valid max_identifier_length`;
89
+ }
91
90
  const asName = (v: string) => {
92
91
  if (v.length > MAX_IDENTIFIER_LENGTH) {
93
92
  throw `The identifier name provided (${v}) is longer than the allowed limit (max_identifier_length = ${MAX_IDENTIFIER_LENGTH} characters )\n Longest allowed: ${_asName(v.slice(0, MAX_IDENTIFIER_LENGTH))} `;
@@ -351,4 +350,6 @@ export const initTableConfig = async function (this: TableConfigurator) {
351
350
 
352
351
  await this.prostgles.refreshDBO();
353
352
  await this.setTableOnMounts();
353
+ /** Needed in case some onMounts change schema */
354
+ await this.prostgles.refreshDBO();
354
355
  };
@@ -42,7 +42,13 @@ export async function getClientSchema(
42
42
  const tablesWithSelectRules = new Set(
43
43
  fullSchema?.tables.filter((t) => t.publishInfo.select).map((t) => t.name) ?? [],
44
44
  );
45
- const { tables = [], tableSchemaErrors = {} } = fullSchema ?? {};
45
+ const { tables: rawTables = [] } = fullSchema ?? {};
46
+ const { tableSchemaErrors = {} } = fullSchema ?? {};
47
+ const { modifyClientSchema } = this.opts;
48
+ const tables =
49
+ modifyClientSchema ?
50
+ await Promise.all(rawTables.map(async (t) => modifyClientSchema(t, userData)))
51
+ : rawTables;
46
52
  const joinTables2: string[][] = [];
47
53
  if (this.opts.joins) {
48
54
  const _joinTables2 = this.dboBuilder
package/lib/index.ts CHANGED
@@ -16,9 +16,10 @@ 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 { CloudClient, LocalConfig } from "./FileManager/FileManager";
19
+ export type { StorageClient as CloudClient, LocalConfig } from "./FileManager/FileManager";
20
+ export * from "./FileManager/getLocalStorageClient";
20
21
  export type { DB } from "./initProstgles";
21
- export type * from "./TableConfig/TableConfig";
22
+ export type * from "./TableConfig/TableConfigTypes";
22
23
  export * from "./Auth/utils/upsertNamedExpressMiddleware";
23
24
  export type { RequestWithUser } from "./Auth/middleware/userContextMiddleware";
24
25
  export default prostgles;
@@ -193,7 +193,7 @@ export const initProstgles = async function (
193
193
  await runSQLFile(this);
194
194
  await this.refreshDBO();
195
195
  await this.initTableConfig(reason);
196
- await this.initFileTable();
196
+ await this.refreshDBO();
197
197
  this.initRestApi();
198
198
 
199
199
  this.schemaWatch = await SchemaWatch.create(this.dboBuilder);
@@ -274,7 +274,6 @@ export const initProstgles = async function (
274
274
  this.opts.io.engine.close();
275
275
  }
276
276
  }
277
- this.fileManager?.destroy();
278
277
  await this.dboBuilder.destroy();
279
278
  this.authHandler.destroy();
280
279
  await this.tableConfigurator?.destroy();
@@ -132,7 +132,7 @@ export const runClientRequest = async function (
132
132
  );
133
133
  const localParams: LocalParams = {
134
134
  clientReq,
135
- isRemoteRequest: { user: sessionUser },
135
+ isRemoteRequest: { user: sessionUser, clientInfo },
136
136
  scope,
137
137
  };
138
138
 
@@ -24,9 +24,6 @@ export const updateConfiguration = async <DBSchema, UserSchema extends SessionUs
24
24
  return;
25
25
  }
26
26
 
27
- if (includes(optionsThatChanged, "fileTable")) {
28
- await prgl.initFileTable();
29
- }
30
27
  if (includes(optionsThatChanged, "restApi")) {
31
28
  prgl.initRestApi();
32
29
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.567",
3
+ "version": "4.2.570",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -57,7 +57,7 @@
57
57
  "pg": "^8.21.0",
58
58
  "pg-cursor": "^2.21.0",
59
59
  "pg-promise": "^12.7.0",
60
- "prostgles-types": "^4.0.271"
60
+ "prostgles-types": "^4.0.273"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@eslint/js": "^9.22.0",
@@ -69,7 +69,6 @@
69
69
  "@types/pg-cursor": "^2.7.2",
70
70
  "@types/sharp": "^0.30.5",
71
71
  "eslint": "^9.39.5",
72
- "eslint-plugin-security": "^3.0.1",
73
72
  "prettier": "^3.9.5",
74
73
  "socket.io": "^4.8.3",
75
74
  "typescript": "^5.9.3",
@@ -1,18 +0,0 @@
1
- import type { Prostgles } from "../Prostgles";
2
- import type { SchemaRelatedOptions } from "../TableConfig/getCreateSchemaQueries";
3
- import type { FileManager } from "./FileManager";
4
- export declare const getFileManagerSchema: ({ fileTable, tableConfig, }: Pick<SchemaRelatedOptions, "fileTable" | "tableConfig">) => {
5
- fileTable: import("../ProstglesTypes").FileTableConfig;
6
- fileTableName: string;
7
- fileTableQuery: string;
8
- referencedTables: {
9
- [tableName: string]: {
10
- type: "column";
11
- referenceColumns: Record<string, import("prostgles-types").FileColumnConfig>;
12
- };
13
- };
14
- referencedTablesQueries: string[];
15
- queries: string[];
16
- } | undefined;
17
- export declare function initFileManager(this: FileManager, prg: Prostgles): Promise<void>;
18
- //# sourceMappingURL=initFileManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"initFileManager.d.ts","sourceRoot":"","sources":["../../lib/FileManager/initFileManager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAElF,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAC;AAI9D,eAAO,MAAM,oBAAoB,GAAI,6BAGlC,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,aAAa,CAAC;;;;;;;;;;;;aAsDzD,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,iBAqLtE"}
@@ -1,257 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getFileManagerSchema = void 0;
37
- exports.initFileManager = initFileManager;
38
- const fs = __importStar(require("fs"));
39
- const prostgles_types_1 = require("prostgles-types");
40
- const AuthHandler_1 = require("../Auth/AuthHandler");
41
- const runSQL_1 = require("../DboBuilder/runSql/runSQL");
42
- const runClientRequest_1 = require("../runClientRequest");
43
- const FileManager_1 = require("./FileManager");
44
- const path_1 = require("path");
45
- const getFileManagerSchema = ({ fileTable, tableConfig, }) => {
46
- if (!fileTable) {
47
- return;
48
- }
49
- const { tableName: fileTableName = "files", referencedTables = {} } = fileTable;
50
- if (tableConfig?.[fileTableName]) {
51
- throw new Error(`FileManager table name (${fileTableName}) is reserved. Please use a different name in tableConfig`);
52
- }
53
- const fileTableQuery = `
54
- CREATE EXTENSION IF NOT EXISTS pgcrypto;
55
- CREATE TABLE IF NOT EXISTS ${(0, prostgles_types_1.asName)(fileTableName)} (
56
- name TEXT NOT NULL,
57
- extension TEXT NOT NULL,
58
- content_type TEXT NOT NULL,
59
- content_length BIGINT NOT NULL DEFAULT 0,
60
- added TIMESTAMP NOT NULL DEFAULT NOW(),
61
- url TEXT NOT NULL,
62
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
63
- original_name TEXT NOT NULL,
64
- description TEXT,
65
- cloud_url TEXT,
66
- signed_url TEXT,
67
- signed_url_expires BIGINT,
68
- etag TEXT,
69
- deleted BIGINT,
70
- deleted_from_storage BIGINT,
71
- UNIQUE(id),
72
- UNIQUE(name)
73
- );`;
74
- const referencedTablesQueries = Object.entries(referencedTables)
75
- .flatMap(([refTable, refTableConfig]) => {
76
- return Object.entries(refTableConfig.referenceColumns).map(([colName]) => {
77
- const tConf = tableConfig?.[refTable];
78
- const columnConfig = tConf && "columns" in tConf && tConf.columns?.[colName];
79
- /** This is a bit hacky. TODO: setup file columns only in tableConfig */
80
- if (columnConfig) {
81
- return `ALTER TABLE ${(0, prostgles_types_1.asName)(refTable)} ADD FOREIGN KEY (${(0, prostgles_types_1.asName)(colName)}) REFERENCES ${(0, prostgles_types_1.asName)(fileTableName)} (id) ;`;
82
- }
83
- return `ALTER TABLE ${(0, prostgles_types_1.asName)(refTable)} ADD COLUMN ${(0, prostgles_types_1.asName)(colName)} UUID REFERENCES ${(0, prostgles_types_1.asName)(fileTableName)} (id);`;
84
- });
85
- })
86
- .sort();
87
- return {
88
- fileTable,
89
- fileTableName,
90
- fileTableQuery,
91
- referencedTables,
92
- referencedTablesQueries,
93
- queries: [fileTableQuery, ...referencedTablesQueries],
94
- };
95
- };
96
- exports.getFileManagerSchema = getFileManagerSchema;
97
- async function initFileManager(prg) {
98
- this.prostgles = prg;
99
- const schema = (0, exports.getFileManagerSchema)({
100
- fileTable: prg.opts.fileTable,
101
- tableConfig: prg.opts.tableConfig,
102
- });
103
- if (!schema)
104
- throw "No fileTable config found in prostgles options";
105
- const { fileTable, fileTableQuery, referencedTables, fileTableName } = schema;
106
- this.tableName = fileTableName;
107
- const maxBfSizeMB = (prg.opts.io?.engine.opts.maxHttpBufferSize || 1e6) / 1e6;
108
- console.log(`Prostgles: Initiated file manager. Max allowed file size: ${maxBfSizeMB}MB (maxHttpBufferSize = 1e6). To increase this set maxHttpBufferSize in socket.io server init options`);
109
- const canCreate = await (0, runSQL_1.canCreateTables)(this.db);
110
- const runQuery = async (q, debugInfo) => {
111
- const res = await (0, prostgles_types_1.tryCatchV2)(async () => {
112
- if (!canCreate)
113
- throw "File table creation failed. Your postgres user does not have CREATE table privileges";
114
- await this.db.any(q);
115
- });
116
- await this.prostgles?.opts.onLog?.({
117
- type: "debug",
118
- command: "initFileManager.runQuery",
119
- ...res,
120
- data: { debugInfo },
121
- });
122
- if (res.hasError) {
123
- throw res.error;
124
- }
125
- };
126
- /**
127
- * 1. Create media table
128
- */
129
- if (!this.dbo[fileTableName]) {
130
- await runQuery(fileTableQuery, `Create fileTable ${(0, prostgles_types_1.asName)(fileTableName)}`);
131
- await prg.refreshDBO();
132
- }
133
- /**
134
- * 2. Create media lookup tables
135
- */
136
- for (const [refTable, tableConfig] of Object.entries(referencedTables)) {
137
- if (!this.dbo[refTable]) {
138
- throw `Referenced table (${refTable}) from fileTable.referencedTables prostgles init config does not exist`;
139
- }
140
- const cols = await (this.dbo[refTable]).getColumns();
141
- for (const [colName] of Object.entries(tableConfig.referenceColumns)) {
142
- const existingCol = cols.find((c) => c.name === colName);
143
- if (existingCol) {
144
- if (existingCol.references?.some(({ ftable }) => ftable === fileTableName)) {
145
- // All ok
146
- }
147
- else {
148
- if (existingCol.udt_name === "uuid") {
149
- try {
150
- const query = `ALTER TABLE ${(0, prostgles_types_1.asName)(refTable)} ADD FOREIGN KEY (${(0, prostgles_types_1.asName)(colName)}) REFERENCES ${(0, prostgles_types_1.asName)(fileTableName)} (id) ;`;
151
- const msg = `Referenced file column ${refTable} (${colName}) exists but is not referencing file table. Add REFERENCE constraint...\n${query}`;
152
- await runQuery(query, msg);
153
- }
154
- catch (e) {
155
- console.error(`Could not add constraing. Err: ${e instanceof Error ? e.message : JSON.stringify(e)}`);
156
- }
157
- }
158
- else {
159
- console.error(`Referenced file column ${refTable} (${colName}) exists but is not of required type (UUID). Choose a different column name or ALTER the existing column to match the type and the data found in file table ${fileTableName}(id)`);
160
- }
161
- }
162
- }
163
- else {
164
- const query = `ALTER TABLE ${(0, prostgles_types_1.asName)(refTable)} ADD COLUMN ${(0, prostgles_types_1.asName)(colName)} UUID REFERENCES ${(0, prostgles_types_1.asName)(fileTableName)} (id);`;
165
- // const createColumn = async () => {
166
- // try {
167
- // const msg = `Create referenced file column ${refTable} (${colName})...\n${query}`;
168
- // await runQuery(query, msg);
169
- // } catch(e){
170
- // console.error(`FAILED. Err: ${e instanceof Error? e.message : JSON.stringify(e)}`)
171
- // }
172
- // }
173
- // await createColumn();
174
- console.error(`Referenced file column ${refTable} (${colName}) does not exist. Create it using this query:\n${query}`);
175
- }
176
- }
177
- await prg.refreshDBO();
178
- }
179
- /**
180
- * 4. Serve media through express
181
- */
182
- const { fileServePath: fileServeRoute = `/${fileTableName}`, expressApp: app } = fileTable;
183
- if (fileServeRoute.endsWith("/")) {
184
- throw `fileServeRoute must not end with a '/'`;
185
- }
186
- this.path = fileServeRoute;
187
- app.get(this.fileRouteExpress, async (req, res) => {
188
- const mediaTableHandler = this.dbo[fileTableName];
189
- if (!mediaTableHandler) {
190
- res
191
- .status(AuthHandler_1.HTTP_FAIL_CODES.INTERNAL_SERVER_ERROR)
192
- .json(`Internal error: media table (${fileTableName}) not valid or not allowed`);
193
- return false;
194
- }
195
- try {
196
- const { name } = req.params;
197
- if (typeof name !== "string" || !name) {
198
- throw "Invalid media name";
199
- }
200
- if (!this.prostgles) {
201
- throw "Prostgles instance missing";
202
- }
203
- const id = name.slice(0, 36);
204
- const selectParams = {
205
- select: {
206
- id: 1,
207
- name: 1,
208
- signed_url: 1,
209
- signed_url_expires: 1,
210
- content_type: 1,
211
- },
212
- };
213
- const media = (await runClientRequest_1.runClientRequest.bind(this.prostgles)({
214
- command: "findOne",
215
- tableName: fileTableName,
216
- param1: { id },
217
- param2: selectParams,
218
- param3: undefined,
219
- }, {
220
- res,
221
- httpReq: req,
222
- }, undefined));
223
- if (!media) {
224
- res.status(AuthHandler_1.HTTP_FAIL_CODES.NOT_FOUND).send("File not found or not allowed");
225
- return;
226
- }
227
- if (this.cloudClient) {
228
- let url = media.signed_url;
229
- const expires = +(media.signed_url_expires || 0);
230
- const EXPIRES = Date.now() + FileManager_1.HOUR;
231
- if (!url || expires < EXPIRES) {
232
- url = await this.getFileCloudDownloadURL(media.name, 60 * 60);
233
- await this.db.any("UPDATE ${fileTableName:name} SET signed_url = ${signed_url}, signed_url_expires = ${signed_url_expires} WHERE id = ${id}", {
234
- fileTableName,
235
- id: media.id,
236
- signed_url: url,
237
- signed_url_expires: EXPIRES,
238
- });
239
- }
240
- res.redirect(url);
241
- }
242
- else {
243
- const localFilePath = (0, path_1.join)(this.config.localFolderPath, media.name);
244
- if (!fs.existsSync(localFilePath)) {
245
- throw new Error("File not found");
246
- }
247
- res.contentType(media.content_type);
248
- res.sendFile(localFilePath);
249
- }
250
- }
251
- catch (e) {
252
- console.log(e);
253
- res.status(AuthHandler_1.HTTP_FAIL_CODES.BAD_REQUEST).send("Invalid/disallowed file");
254
- }
255
- });
256
- }
257
- //# sourceMappingURL=initFileManager.js.map