@opengis/fastify-table 2.0.107 → 2.0.108

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 (60) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +5 -0
  3. package/dist/server/plugins/crud/funcs/dataInsert.js +1 -1
  4. package/dist/server/plugins/crud/funcs/dataUpdate.js +2 -2
  5. package/dist/server/plugins/crud/funcs/validateData.js +1 -1
  6. package/dist/server/plugins/file/providers/fs.js +2 -2
  7. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.d.ts.map +1 -1
  8. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.js +1 -2
  9. package/dist/server/plugins/file/providers/s3/funcs/fileExists.d.ts.map +1 -1
  10. package/dist/server/plugins/file/providers/s3/funcs/fileExists.js +1 -2
  11. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.d.ts.map +1 -1
  12. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.js +1 -2
  13. package/dist/server/plugins/file/providers/s3/index.js +4 -4
  14. package/dist/server/plugins/logger/getLogger.d.ts.map +1 -1
  15. package/dist/server/plugins/logger/getLogger.js +1 -1
  16. package/dist/server/plugins/logger/index.js +3 -3
  17. package/dist/server/plugins/migration/exec.migrations.js +6 -6
  18. package/dist/server/plugins/pg/funcs/getMeta.d.ts.map +1 -1
  19. package/dist/server/plugins/pg/funcs/getMeta.js +3 -5
  20. package/dist/server/plugins/pg/funcs/getPG.js +1 -1
  21. package/dist/server/plugins/pg/funcs/getPGAsync.js +1 -1
  22. package/dist/server/plugins/pg/funcs/init.d.ts.map +1 -1
  23. package/dist/server/plugins/pg/funcs/init.js +23 -31
  24. package/dist/server/plugins/pg/funcs/pool.js +2 -2
  25. package/dist/server/plugins/redis/funcs/getRedis.js +1 -1
  26. package/dist/server/plugins/upload/finishUpload.d.ts +9 -0
  27. package/dist/server/plugins/upload/finishUpload.d.ts.map +1 -0
  28. package/dist/server/plugins/upload/finishUpload.js +33 -0
  29. package/dist/server/plugins/upload/getUploadStatus.d.ts +5 -0
  30. package/dist/server/plugins/upload/getUploadStatus.d.ts.map +1 -0
  31. package/dist/server/plugins/upload/getUploadStatus.js +36 -0
  32. package/dist/server/plugins/upload/index.d.ts +6 -0
  33. package/dist/server/plugins/upload/index.d.ts.map +1 -0
  34. package/dist/server/plugins/upload/index.js +12 -0
  35. package/dist/server/plugins/upload/startUpload.d.ts +8 -0
  36. package/dist/server/plugins/upload/startUpload.d.ts.map +1 -0
  37. package/dist/server/plugins/upload/startUpload.js +53 -0
  38. package/dist/server/plugins/upload/uploadChunk.d.ts +9 -0
  39. package/dist/server/plugins/upload/uploadChunk.d.ts.map +1 -0
  40. package/dist/server/plugins/upload/uploadChunk.js +47 -0
  41. package/dist/server/plugins/util/funcs/unflattenObject.d.ts.map +1 -1
  42. package/dist/server/plugins/util/funcs/unflattenObject.js +2 -2
  43. package/dist/server/routes/auth/controllers/2factor/providers/totp.d.ts.map +1 -1
  44. package/dist/server/routes/auth/controllers/2factor/providers/totp.js +1 -1
  45. package/dist/server/routes/auth/controllers/core/registration.d.ts +4 -1
  46. package/dist/server/routes/auth/controllers/core/registration.d.ts.map +1 -1
  47. package/dist/server/routes/auth/controllers/core/registration.js +14 -5
  48. package/dist/server/routes/table/controllers/filter.d.ts.map +1 -1
  49. package/dist/server/routes/table/controllers/filter.js +7 -0
  50. package/dist/server/routes/table/functions/getData.d.ts.map +1 -1
  51. package/dist/server/routes/table/functions/getData.js +0 -11
  52. package/dist/server/routes/upload/index.d.ts +2 -0
  53. package/dist/server/routes/upload/index.d.ts.map +1 -0
  54. package/dist/server/routes/upload/index.js +72 -0
  55. package/dist/server/types/core.d.ts +0 -1
  56. package/dist/server/types/core.d.ts.map +1 -1
  57. package/dist/utils.d.ts +5 -0
  58. package/dist/utils.d.ts.map +1 -1
  59. package/dist/utils.js +5 -0
  60. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAsFA,iBAAS,MAAM,CAAC,OAAO,EAAE,GAAG,QA0J3B;;AACD,wBAA0B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAuFA,iBAAS,MAAM,CAAC,OAAO,EAAE,GAAG,QA6J3B;;AACD,wBAA0B"}
package/dist/index.js CHANGED
@@ -46,6 +46,7 @@ import templatesRoutes from "./server/routes/templates/index.js";
46
46
  import widgetRoutes from "./server/routes/widget/index.js";
47
47
  import authRoutes from "./server/routes/auth/index.js";
48
48
  import fileRoutes from "./server/routes/file/index.js";
49
+ import uploadChunkRoutes from "./server/routes/upload/index.js";
49
50
  import grpcRoutes from "./server/routes/grpc/index.js";
50
51
  import notificationsRoutes from "./server/routes/notifications/index.js";
51
52
  const filename = fileURLToPath(import.meta.url);
@@ -115,6 +116,9 @@ function plugin(fastify) {
115
116
  keyGenerator: (req) => `${req.ip}-${req.raw.url.split("?")[0]}`,
116
117
  });
117
118
  }
119
+ else {
120
+ console.log("⚠️ rate limit is disabled");
121
+ }
118
122
  // add multipart parser before any route registration
119
123
  fastify.register(import("@fastify/multipart"), {
120
124
  limits: {
@@ -138,6 +142,7 @@ function plugin(fastify) {
138
142
  fastify.register(authRoutes); // from fastify-auth
139
143
  // from fastify-file
140
144
  fastify.register(fileRoutes);
145
+ fastify.register(uploadChunkRoutes);
141
146
  fastify.register(grpcRoutes, opt);
142
147
  // from admin
143
148
  fastify.register(notificationsRoutes, opt);
@@ -109,7 +109,7 @@ export default async function dataInsert({ id, table: table1, referer, data, pg:
109
109
  if (!isClient) {
110
110
  await client.query("commit;");
111
111
  }
112
- return res;
112
+ return { ...res, id: id1, data: res.rows[0] };
113
113
  }
114
114
  catch (err) {
115
115
  logger.file("crud/insert", {
@@ -76,7 +76,7 @@ export default async function dataUpdate({ table, tokenData, referer, id, data,
76
76
  json_object_agg(f_geometry_column, case when srid = 0 then 4326 else srid end) as rel
77
77
  from public.geometry_columns group by f_table_schema||'.'||f_table_name
78
78
  )q`)
79
- .then((res1) => res1.rows?.[0] || {});
79
+ .then((el) => el.rows?.[0] || {});
80
80
  Object.assign(srids, srids1);
81
81
  }
82
82
  const updateQuery = `UPDATE ${table} SET ${systemColumns ? `${systemColumns}${filterData?.length ? "," : ""}` : ""}
@@ -176,7 +176,7 @@ export default async function dataUpdate({ table, tokenData, referer, id, data,
176
176
  if (!isClient) {
177
177
  await client.query("commit;");
178
178
  }
179
- return res || {};
179
+ return { ...(res || {}), id };
180
180
  }
181
181
  catch (err) {
182
182
  logger.file("crud/update", {
@@ -81,7 +81,7 @@ function checkBody({ body = {}, arr = [], idx }) {
81
81
  }, []);
82
82
  const invalidField = res.find((el) => el?.error);
83
83
  if (invalidField) {
84
- console.warn("invalid field: ", invalidField?.key, invalidField?.error);
84
+ console.warn("⚠️ invalid field: ", invalidField?.key, invalidField?.error);
85
85
  return invalidField;
86
86
  }
87
87
  return { message: "ok" };
@@ -51,12 +51,12 @@ const uploadFile = () => async (fp, data, opt = {}) => {
51
51
  }
52
52
  await fsp.mkdir(path.dirname(filepath), { recursive: true });
53
53
  try {
54
- const exists = await isFileExists(validData);
54
+ const exists = await isFileExists(filepath);
55
55
  if (!exists) {
56
56
  await fsp.writeFile(filepath, validData, opt);
57
57
  }
58
58
  else if (isBuffer(validData) || isReadableStream(validData)) {
59
- await fsp.writeFile(filepath, validData, opt);
59
+ await fsp.appendFile(filepath, validData, opt);
60
60
  }
61
61
  else {
62
62
  await fsp.copyFile(validData, filepath);
@@ -1 +1 @@
1
- {"version":3,"file":"downloadFile.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/downloadFile.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,aAAa,GAChB,aAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAC1B,IAAI,MAAM,EAAE,UAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBA2CnD,CAAC;AAEJ,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"downloadFile.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/downloadFile.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,aAAa,GAChB,aAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAC1B,IAAI,MAAM,EAAE,UAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBA0CnD,CAAC;AAEJ,eAAe,aAAa,CAAC"}
@@ -11,8 +11,7 @@ import getS3FilePath from "./utils/getS3FilePath.js";
11
11
  const getFileStream = (s3Settings) => async (fp, options = {}) => {
12
12
  const filepath = getS3FilePath(fp, s3Settings);
13
13
  const bucketParams = {
14
- Bucket: (s3Settings || config.s3 || { containerName: "work" })
15
- .containerName,
14
+ Bucket: s3Settings?.containerName || config.s3?.containerName || "work",
16
15
  Key: filepath[0] === "/" ? filepath?.slice(1) : filepath,
17
16
  Range: options.Range,
18
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fileExists.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/fileExists.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,eAAe,GAClB,aAAa,GAAG,MACV,IAAI,GAAG,EAAE,UAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBAmBhD,CAAC;AAEJ,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"fileExists.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/fileExists.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,eAAe,GAClB,aAAa,GAAG,MACV,IAAI,GAAG,EAAE,UAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBAkBhD,CAAC;AAEJ,eAAe,eAAe,CAAC"}
@@ -8,8 +8,7 @@ import isFileExists from "../../../utils/isFileExists.js";
8
8
  const getFileMetadata = (s3Settings) => async (fp, options = {}) => {
9
9
  const filepath = getS3FilePath(fp, s3Settings);
10
10
  const bucketParams = {
11
- Bucket: (s3Settings || config.s3 || { containerName: "work" })
12
- .containerName,
11
+ Bucket: s3Settings?.containerName || config.s3?.containerName || "work",
13
12
  Key: filepath[0] === "/" ? filepath?.slice(1) : filepath,
14
13
  };
15
14
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/uploadFile.ts"],"names":[],"mappings":"AAaA,QAAA,MAAM,UAAU,GAAI,aAAa,GAAG,MAAY,IAAI,GAAG,EAAE,MAAM,GAAG,+EA8BjE,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/uploadFile.ts"],"names":[],"mappings":"AAaA,QAAA,MAAM,UAAU,GAAI,aAAa,GAAG,MAAY,IAAI,GAAG,EAAE,MAAM,GAAG,+EA6BjE,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -13,8 +13,7 @@ const uploadFile = (s3Settings) => async (fp, data) => {
13
13
  const type = getMimeType(filepath);
14
14
  try {
15
15
  const bucketParams = {
16
- Bucket: (s3Settings || config.s3 || { containerName: "work" })
17
- .containerName,
16
+ Bucket: s3Settings?.containerName || config.s3?.containerName || "work",
18
17
  Key: filepath,
19
18
  ContentLength: size,
20
19
  ContentType: type,
@@ -1,9 +1,9 @@
1
- import downloadFile from './funcs/downloadFile.js';
2
- import fileExists from './funcs/fileExists.js';
3
- import uploadFile from './funcs/uploadFile.js';
1
+ import downloadFile from "./funcs/downloadFile.js";
2
+ import fileExists from "./funcs/fileExists.js";
3
+ import uploadFile from "./funcs/uploadFile.js";
4
4
  export default function s3Storage(opt) {
5
5
  return {
6
- name: 's3',
6
+ name: "s3",
7
7
  downloadFile: downloadFile(opt),
8
8
  uploadFile: uploadFile(opt),
9
9
  fileExists: fileExists(opt),
@@ -1 +1 @@
1
- {"version":3,"file":"getLogger.d.ts","sourceRoot":"","sources":["../../../../server/plugins/logger/getLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,UAAU,cAAe,SAAQ,IAAI,CAAC,MAAM;IAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAClE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5D;AAmDD,QAAA,MAAM,MAAM,EAAE,cAAgD,CAAC;AA+B/D,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"getLogger.d.ts","sourceRoot":"","sources":["../../../../server/plugins/logger/getLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,UAAU,cAAe,SAAQ,IAAI,CAAC,MAAM;IAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAClE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5D;AAmDD,QAAA,MAAM,MAAM,EAAE,cAAgD,CAAC;AAiC/D,eAAe,MAAM,CAAC"}
@@ -59,6 +59,6 @@ logger.metrics = function metrics(key, val, dbName) {
59
59
  return;
60
60
  rclient2
61
61
  .hincrby(`${dbname}:system_metrics`, key, val || 1)
62
- .catch((err) => console.warn("logger metrics error", err.toString()));
62
+ .catch((err) => console.warn("⚠️ logger metrics error", err.toString()));
63
63
  };
64
64
  export default logger;
@@ -6,7 +6,7 @@ process.on("uncaughtException", (err) => {
6
6
  if (err.message === "Connection terminated unexpectedly" ||
7
7
  err.code === "ECONNRESET") {
8
8
  logger.file("pg", { error: err.toString() });
9
- console.warn("Ignored pg connection drop:", err.toString());
9
+ console.warn("⚠️ Ignored pg connection drop:", err.toString());
10
10
  return;
11
11
  }
12
12
  throw err; // keep normal behavior
@@ -18,13 +18,13 @@ process.on("unhandledRejection", (err) => {
18
18
  "Connection terminated due to connection timeout",
19
19
  ].includes(err.message)) {
20
20
  logger.file("pg", { error: err.message });
21
- console.warn("Ignored pg connection timeout / close:", err.toString());
21
+ console.warn("⚠️ Ignored pg connection timeout / close:", err.toString());
22
22
  return;
23
23
  }
24
24
  if (err.message === "Connection is closed." ||
25
25
  err.message.includes("maxRetriesPerRequest")) {
26
26
  logger.file("redis", { error: err.message });
27
- console.warn("Ignored redis connection close:", err.toString());
27
+ console.warn("⚠️ Ignored redis connection close:", err.toString());
28
28
  return;
29
29
  }
30
30
  throw err;
@@ -10,19 +10,19 @@ export default async function execMigrations(dirPath, pg = pgClients.client, isc
10
10
  if (!dirPath) {
11
11
  const txt = "migrations skip: path not specified";
12
12
  if (debug)
13
- console.warn(txt);
13
+ console.warn(`⚠️ ${txt}`);
14
14
  return txt;
15
15
  }
16
16
  if (config.migrationsCore === false && iscore) {
17
17
  const txt = `migrations skip: core - ${dirPath}`;
18
18
  if (debug)
19
- console.log(txt);
19
+ console.warn(`⚠️ ${txt}`);
20
20
  return txt;
21
21
  }
22
22
  if (config.migrations === false && !iscore) {
23
23
  const txt = `migrations skip: path - ${dirPath}`;
24
24
  if (debug)
25
- console.log(txt);
25
+ console.warn(`⚠️ ${txt}`);
26
26
  return txt;
27
27
  }
28
28
  if (process.env.NODE_ENV !== "production" &&
@@ -30,7 +30,7 @@ export default async function execMigrations(dirPath, pg = pgClients.client, isc
30
30
  !(iscore ? config.migrationsCore : config.migrations)) {
31
31
  const txt = `migrations skip: not a production environment - ${iscore ? "core" : "path"} : ${dirPath}`;
32
32
  if (debug)
33
- console.log(txt);
33
+ console.warn(`⚠️ ${txt}`);
34
34
  return txt;
35
35
  }
36
36
  if (debug)
@@ -39,7 +39,7 @@ export default async function execMigrations(dirPath, pg = pgClients.client, isc
39
39
  if (!exists) {
40
40
  const txt = `migrations skip: directory not found - ${dirPath}`;
41
41
  if (debug)
42
- console.warn(txt);
42
+ console.warn(`⚠️ ${txt}`);
43
43
  return txt;
44
44
  }
45
45
  // get directory sql file list
@@ -50,7 +50,7 @@ export default async function execMigrations(dirPath, pg = pgClients.client, isc
50
50
  if (!content?.length) {
51
51
  const txt = `migrations skip: no sql in specified directory - ${dirPath}`;
52
52
  if (debug)
53
- console.warn(txt);
53
+ console.warn(`⚠️ ${txt}`);
54
54
  return txt;
55
55
  }
56
56
  await content.reduce((promise, filename) => promise.then(() => execSql(path.join(dirPath, filename), pg)), Promise.resolve());
@@ -1 +1 @@
1
- {"version":3,"file":"getMeta.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/getMeta.ts"],"names":[],"mappings":"AAKA,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,gBAyE5D"}
1
+ {"version":3,"file":"getMeta.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/getMeta.ts"],"names":[],"mappings":"AAKA,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,gBAuE5D"}
@@ -6,9 +6,7 @@ export default async function getMeta(opt, nocache) {
6
6
  if (!pg)
7
7
  return { error: "pg connection not established", status: 400 };
8
8
  // reconnect if at start of process connection was unavailable
9
- if (!pg.pk) {
10
- pg.connectionAttempt = 0;
11
- pg.init = init(pg);
9
+ if (!pg.pk || nocache) {
12
10
  await init(pg);
13
11
  }
14
12
  const table1 = opt?.table || opt;
@@ -27,8 +25,8 @@ export default async function getMeta(opt, nocache) {
27
25
  WHERE c.contype='p'::"char" and c.conrelid::regclass = $1::regclass`, [table])
28
26
  .then((el) => el.rows[0].pks1 || {});
29
27
  const pk = table.startsWith("public.")
30
- ? pks1[table.replace("public.", "")] || pks1[table.replace("public.", "")]
31
- : pks1[table] || pks1[table];
28
+ ? pks1[table.replace("public.", "")]
29
+ : pks1[table];
32
30
  const geomColumns = fields.filter((el) => pg.pgType?.[el.dataTypeID] === "geometry");
33
31
  const geomAttr = geomColumns.find((el) => el.name === "geom_4326") || geomColumns[0];
34
32
  const dbColumns = await pg
@@ -36,7 +36,7 @@ function getPG(param = {}) {
36
36
  pgClients[name] = pool(dbConfig);
37
37
  pgClients[name].init = () => init(pgClients[name]); // for compatibility
38
38
  // force init
39
- init(pgClients[name]).catch((err) => console.warn("pg client init error", host, port, dbConfig.database));
39
+ init(pgClients[name]).catch((err) => console.warn("⚠️ pg client init error", host, port, dbConfig.database));
40
40
  return pgClients[name];
41
41
  }
42
42
  if (config.pg) {
@@ -5,7 +5,7 @@ async function getPGAsync(param) {
5
5
  const { host, port, database } = client?.options || {};
6
6
  if (client && !client.tlist) {
7
7
  // force init
8
- await init(client).catch((err) => console.warn("PG client init error", host, port, database));
8
+ await init(client).catch((err) => console.warn("⚠️ PG client init error", host, port, database));
9
9
  }
10
10
  return client;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,iBAAe,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,iBAuNtC;AAGD,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,iBAAe,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,iBAsNtC;AAGD,eAAe,IAAI,CAAC"}
@@ -18,35 +18,27 @@ async function init(client) {
18
18
  if (!client || !client.query || !client.connect) {
19
19
  return;
20
20
  }
21
- const { pgType, pk } = await client
22
- .query(`SELECT
23
- (
24
- SELECT
25
- json_object_agg(
26
- conrelid:: regclass,
27
- (
28
- SELECT
29
- attname
30
- FROM
31
- pg_attribute
32
- WHERE
33
- attrelid = c.conrelid
34
- AND attnum = c.conkey [1]
35
- )
36
- )
37
- FROM
38
- pg_constraint c
39
- WHERE
40
- contype = 'p'
41
- AND connamespace:: regnamespace:: text NOT IN ('sde')
42
- ) AS pk,
43
- (
44
- SELECT
45
- json_object_agg(t.oid:: text, pg_catalog.format_type(t.oid, NULL))
46
- FROM
47
- pg_catalog.pg_type t
48
- ) AS "pgType"`)
49
- .then((d) => d.rows[0]);
21
+ const pgType = await client
22
+ .query(`SELECT json_object_agg(t.oid:: text, pg_catalog.format_type(t.oid, NULL)) FROM pg_catalog.pg_type t`)
23
+ .then((el) => el.rows[0]?.json_object_agg || {});
24
+ const pks = await client
25
+ .query(`
26
+ SELECT
27
+ connamespace::regnamespace::text,
28
+ conrelid::regclass,
29
+ (
30
+ SELECT attname FROM pg_attribute WHERE attrelid = c.conrelid AND attnum = c.conkey[1]
31
+ ) as pk
32
+ FROM pg_constraint c
33
+ WHERE contype = 'p'
34
+ AND connamespace::regnamespace::text NOT IN ('sde')`)
35
+ .then((el) => el.rows || []);
36
+ const pk = pks.reduce((acc, curr) => ({
37
+ ...acc,
38
+ [curr.connamespace === "public"
39
+ ? `${curr.connamespace}.${curr.conrelid}`
40
+ : curr.conrelid]: curr.pk,
41
+ }), {});
50
42
  const tlist = await client
51
43
  .query(`SELECT
52
44
  array_agg(
@@ -109,10 +101,10 @@ async function init(client) {
109
101
  }
110
102
  catch (err) {
111
103
  if (err.code === "57014") {
112
- console.warn("pg.querySafe timeout", q);
104
+ console.warn("⚠️ pg.querySafe timeout", q);
113
105
  return { rows: [], timeout: true };
114
106
  }
115
- console.warn("pg.querySafe error", q);
107
+ console.warn("⚠️ pg.querySafe error", q);
116
108
  throw err;
117
109
  }
118
110
  finally {
@@ -25,14 +25,14 @@ export default (param = {}) => {
25
25
  }
26
26
  });
27
27
  pool.on("error", (err) => {
28
- console.warn("Unexpected error on idle client", param.database);
28
+ console.warn("⚠️ Unexpected error on idle client", param.database);
29
29
  config.ready[`pg:${param.database}`] = false;
30
30
  logger.file("pg", {
31
31
  error: err.toString(),
32
32
  database: param.database,
33
33
  });
34
34
  if (config.trace) {
35
- console.warn("Unexpected error on idle client details:", err.toString(), err.stack);
35
+ console.warn("⚠️ Unexpected error on idle client details:", err.toString(), err.stack);
36
36
  }
37
37
  });
38
38
  pool.on("connect", () => {
@@ -33,7 +33,7 @@ function getRedis({ db, host, port, closeClient = false, retryStrategy = (times)
33
33
  config.ready[`redis:${key}`] = true;
34
34
  });
35
35
  redisClients[key].on("error", (err) => {
36
- console.warn("Ignored redis error:", err.message);
36
+ console.warn("⚠️ Ignored redis error:", err.message);
37
37
  logger.file("redis", { error: err.toString() });
38
38
  });
39
39
  console.log("redis connected", db, host, port);
@@ -0,0 +1,9 @@
1
+ export default function finishUpload({ host, id, }: {
2
+ host?: string;
3
+ id: string;
4
+ }): Promise<{
5
+ error?: string;
6
+ success?: boolean;
7
+ code: number;
8
+ }>;
9
+ //# sourceMappingURL=finishUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finishUpload.d.ts","sourceRoot":"","sources":["../../../../server/plugins/upload/finishUpload.ts"],"names":[],"mappings":"AAMA,wBAA8B,YAAY,CAAC,EACzC,IAAI,EACJ,EAAE,GACH,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqC/D"}
@@ -0,0 +1,33 @@
1
+ import path from "node:path";
2
+ import { existsSync } from "node:fs";
3
+ import { readFile, writeFile } from "node:fs/promises";
4
+ import { prefix, metaDir, fetchTimeoutMs } from "./index.js";
5
+ export default async function finishUpload({ host, id, }) {
6
+ if (!host) {
7
+ const metaExists = existsSync(path.join(metaDir, `${id}.json`));
8
+ if (!metaExists) {
9
+ return { error: "upload not found: " + id, code: 404 };
10
+ }
11
+ const meta = JSON.parse(await readFile(path.join(metaDir, `${id}.json`), "utf8"));
12
+ if (meta.uploaded !== meta.size) {
13
+ return { error: "Upload not complete", code: 400 };
14
+ }
15
+ const metaData = {
16
+ ...meta,
17
+ uploadDate: new Date().toISOString(),
18
+ exists: true,
19
+ finished: true,
20
+ };
21
+ const fileBytes = Buffer.from(JSON.stringify(metaData, null, 2));
22
+ // save metadata
23
+ await writeFile(path.join(metaDir, `${id}.json`), fileBytes);
24
+ return { success: true, code: 200 };
25
+ }
26
+ const res = await fetch(`${host}/${prefix}/${id}/finish`, {
27
+ method: "POST",
28
+ signal: AbortSignal.timeout(fetchTimeoutMs),
29
+ }).catch((err) => ({
30
+ json: () => Promise.resolve({ error: err.toString(), code: 501 }),
31
+ }));
32
+ return res.json();
33
+ }
@@ -0,0 +1,5 @@
1
+ export default function getUploadStatus({ host, id, }: {
2
+ host?: string;
3
+ id: string;
4
+ }): Promise<any>;
5
+ //# sourceMappingURL=getUploadStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUploadStatus.d.ts","sourceRoot":"","sources":["../../../../server/plugins/upload/getUploadStatus.ts"],"names":[],"mappings":"AAaA,wBAA8B,eAAe,CAAC,EAC5C,IAAI,EACJ,EAAE,GACH,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ,gBAoCA"}
@@ -0,0 +1,36 @@
1
+ import path from "node:path";
2
+ import { existsSync } from "node:fs";
3
+ import { readFile } from "node:fs/promises";
4
+ import { prefix, metaDir, uploadChunkDirectory, fetchTimeoutMs, } from "./index.js";
5
+ import isFileExists from "../file/isFileExists.js";
6
+ export default async function getUploadStatus({ host, id, }) {
7
+ // return local file metadata
8
+ if (!host) {
9
+ const metaExists = existsSync(path.join(metaDir, `${id}.json`));
10
+ // check file upload status: finished/inprogress
11
+ const meta = metaExists
12
+ ? JSON.parse(await readFile(path.join(metaDir, `${id}.json`), "utf8"))
13
+ : {};
14
+ // check if file exists
15
+ // const fileExists = existsSync(
16
+ // path.join(fileDir, `${id}.${meta.extension}`)
17
+ // );
18
+ const fileExists = await isFileExists(path
19
+ .join(uploadChunkDirectory, `${id}.${meta.extension}`)
20
+ .replace(/\\/g, "/"));
21
+ return {
22
+ ...meta,
23
+ // metaPath: path.join(metaDir, `${id}.json`),
24
+ uploadChunkDirectory,
25
+ exists: !!fileExists,
26
+ finished: meta.uploaded && meta.size && meta.uploaded === meta.size,
27
+ };
28
+ }
29
+ // request remote file upload status
30
+ const resp = await fetch(`${host}/${prefix}/${id}`, {
31
+ signal: AbortSignal.timeout(fetchTimeoutMs),
32
+ }).catch((err) => ({
33
+ json: () => Promise.resolve({ error: err.toString(), code: 501 }),
34
+ }));
35
+ return resp.json();
36
+ }
@@ -0,0 +1,6 @@
1
+ export declare const fetchTimeoutMs: number;
2
+ export declare const prefix = "file/upload2";
3
+ export declare const uploadChunkDirectory = "/files/uploads";
4
+ export declare const fileDir: string;
5
+ export declare const metaDir: string;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/plugins/upload/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc,QAAmC,CAAC;AAE/D,eAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,eAAO,MAAM,OAAO,QAEE,CAAC;AAEvB,eAAO,MAAM,OAAO,QAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import path from "node:path";
2
+ import config from "../../../config.js";
3
+ import getFolder from "../crud/funcs/utils/getFolder.js";
4
+ config.chunkSize = +(config.chunkSize || 1048576); // 1 MB per chunk by default
5
+ const rootDir = getFolder(config, "local");
6
+ export const fetchTimeoutMs = +(config.fetchTimeoutMs || 5000);
7
+ export const prefix = "file/upload2";
8
+ export const uploadChunkDirectory = "/files/uploads";
9
+ export const fileDir = path
10
+ .join(rootDir, uploadChunkDirectory)
11
+ .replace(/\\/g, "/");
12
+ export const metaDir = path.join(fileDir, "tmp");
@@ -0,0 +1,8 @@
1
+ export default function startUpload({ host, id, fileName, size, subdir, }: {
2
+ host?: string;
3
+ id?: string;
4
+ fileName: string;
5
+ size?: number;
6
+ subdir?: string;
7
+ }): Promise<unknown>;
8
+ //# sourceMappingURL=startUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startUpload.d.ts","sourceRoot":"","sources":["../../../../server/plugins/upload/startUpload.ts"],"names":[],"mappings":"AAaA,wBAA8B,WAAW,CAAC,EACxC,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,MAAM,GACP,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,oBA2DA"}
@@ -0,0 +1,53 @@
1
+ import path from "node:path";
2
+ import { randomUUID } from "node:crypto";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import getUploadStatus from "./getUploadStatus.js";
5
+ import { prefix, fileDir, metaDir, uploadChunkDirectory, fetchTimeoutMs, } from "./index.js";
6
+ export default async function startUpload({ host, id, fileName, size, subdir, }) {
7
+ if (!host) {
8
+ const extension = path.extname(fileName).substring(1);
9
+ const id1 = id || randomUUID();
10
+ const key = id1.split("-").pop();
11
+ const meta = {
12
+ id: id1,
13
+ key,
14
+ fileName,
15
+ size,
16
+ extension,
17
+ uploaded: 0,
18
+ exists: false,
19
+ };
20
+ // check current upload state
21
+ if (id) {
22
+ const status = await getUploadStatus({ id });
23
+ Object.assign(meta, status);
24
+ }
25
+ // resume file upload
26
+ if (meta.uploaded > 0) {
27
+ return meta;
28
+ }
29
+ // if not started - start new upload
30
+ const relativeDirpath = path
31
+ .join(uploadChunkDirectory, subdir || "")
32
+ .replace(/\\/g, "/");
33
+ await mkdir(path.join(fileDir, "tmp"), { recursive: true });
34
+ // create metadata for resumable upload
35
+ const metaData = {
36
+ ...meta,
37
+ subdir,
38
+ metaPath: undefined,
39
+ relativeDirpath,
40
+ };
41
+ await writeFile(path.join(metaDir, `${id1}.json`), JSON.stringify(metaData, null, 2));
42
+ return { ...meta, metaPath: undefined };
43
+ }
44
+ const res = await fetch(`${host}/${prefix}/start`, {
45
+ method: "POST",
46
+ headers: { "Content-Type": "application/json" },
47
+ body: JSON.stringify({ fileName, size, subdir, id }),
48
+ signal: AbortSignal.timeout(fetchTimeoutMs),
49
+ }).catch((err) => ({
50
+ json: () => Promise.resolve({ error: err.toString(), code: 501 }),
51
+ }));
52
+ return res.json();
53
+ }
@@ -0,0 +1,9 @@
1
+ export default function uploadChunk({ host, id, body, offset, end, size, }: {
2
+ host?: string;
3
+ id: string;
4
+ body: any;
5
+ offset: number;
6
+ end: number;
7
+ size: number;
8
+ }): Promise<any>;
9
+ //# sourceMappingURL=uploadChunk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadChunk.d.ts","sourceRoot":"","sources":["../../../../server/plugins/upload/uploadChunk.ts"],"names":[],"mappings":"AAaA,wBAA8B,WAAW,CAAC,EACxC,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,MAAM,EACN,GAAG,EACH,IAAI,GACL,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,gBA6DA"}
@@ -0,0 +1,47 @@
1
+ import path from "node:path";
2
+ import { existsSync } from "node:fs";
3
+ import { readFile, writeFile } from "node:fs/promises";
4
+ import { prefix, fileDir, metaDir, fetchTimeoutMs, uploadChunkDirectory, } from "./index.js";
5
+ import uploadFile from "../file/uploadFile.js";
6
+ export default async function uploadChunk({ host, id, body, offset, end, size, }) {
7
+ if (!host) {
8
+ const metaExists = existsSync(path.join(metaDir, `${id}.json`));
9
+ if (!metaExists) {
10
+ return { error: "File not found", code: 404 };
11
+ }
12
+ const meta = JSON.parse(await readFile(path.join(metaDir, `${id}.json`), "utf8"));
13
+ if (size !== meta.size) {
14
+ return { error: "Total size mismatch", code: 400 };
15
+ }
16
+ if (offset !== meta.uploaded) {
17
+ return { error: "Wrong offset", expected: meta.uploaded, code: 409 };
18
+ }
19
+ if (body?.length !== end - offset + 1) {
20
+ return { error: "Chunk size mismatch", code: 400 };
21
+ }
22
+ // append chunk to existing file
23
+ const filePath = path.join(fileDir, `${id}.${meta.extension}`);
24
+ // await appendFile(filePath, body);
25
+ await uploadFile(path
26
+ .join(uploadChunkDirectory, `${id}.${meta.extension}`)
27
+ .replace(/\\/g, "/"), body);
28
+ meta.uploaded = end + 1;
29
+ // update metadata for resumable upload
30
+ await writeFile(path.join(metaDir, `${id}.json`), JSON.stringify(meta, null, 2));
31
+ return { uploaded: meta.uploaded, finished: meta.uploaded === meta.size };
32
+ }
33
+ if (!end || !size) {
34
+ return { error: "not enough params: offset/end/size", code: 400 };
35
+ }
36
+ const res = await fetch(`${host}/${prefix}/${id}`, {
37
+ method: "PATCH",
38
+ headers: {
39
+ "Content-Range": `bytes ${offset || 0}-${end}/${size}`,
40
+ },
41
+ body,
42
+ signal: AbortSignal.timeout(fetchTimeoutMs),
43
+ }).catch((err) => ({
44
+ json: () => Promise.resolve({ error: err.toString(), code: 501 }),
45
+ }));
46
+ return res.json();
47
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"unflattenObject.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/util/funcs/unflattenObject.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,OAAO,EAAE,GAAG,MA4CnD"}
1
+ {"version":3,"file":"unflattenObject.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/util/funcs/unflattenObject.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,OAAO,EAAE,GAAG,MAkDnD"}
@@ -18,7 +18,7 @@ export default function unflattenObject(flatObj) {
18
18
  nestedObj[part] = JSON.parse(flatObj[key] || "{}");
19
19
  }
20
20
  catch (err) {
21
- console.warn(`Error parsing JSON for key ${key}:`, err.toString());
21
+ console.warn(`⚠️ Error parsing JSON for key ${key}:`, err.toString());
22
22
  nestedObj[part] = flatObj[key]; // fallback to original value if parsing fails
23
23
  }
24
24
  }
@@ -29,7 +29,7 @@ export default function unflattenObject(flatObj) {
29
29
  nestedObj[part] = JSON.parse(flatObj[key] || "{}");
30
30
  }
31
31
  catch (err) {
32
- console.warn(`Error parsing JSON for key ${key}:`, err.toString());
32
+ console.warn(`⚠️ Error parsing JSON for key ${key}:`, err.toString());
33
33
  nestedObj[part] = flatObj[key]; // fallback to original value if parsing fails
34
34
  }
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"totp.d.ts","sourceRoot":"","sources":["../../../../../../../server/routes/auth/controllers/2factor/providers/totp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAU1D,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,UAAU,CAAC;CAChB;AAED,UAAU,KAAK;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmBD,QAAA,MAAM,YAAY,GAAU,aAAa,OAAO,kBAK/C,CAAC;AAEF,QAAA,MAAM,YAAY,GAAU,aAAa,OAAO,kBAK/C,CAAC;AAEF,QAAA,MAAM,SAAS,GAAU,aAAa,OAAO;;;;EAc5C,CAAC;AAuBF,QAAA,MAAM,QAAQ,GAAU,aAAa,OAAO;;;;;;;;;;;;EAyD3C,CAAC;AAEF,QAAA,MAAM,MAAM,GAAU,0BAA0B,KAAK;;;EAiBpD,CAAC;AAKF,QAAA,MAAM,MAAM,GAAU,2BAA2B,KAAK,iBAqBrD,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;;AAE3E,wBAAoB"}
1
+ {"version":3,"file":"totp.d.ts","sourceRoot":"","sources":["../../../../../../../server/routes/auth/controllers/2factor/providers/totp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAU1D,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,UAAU,CAAC;CAChB;AAED,UAAU,KAAK;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmBD,QAAA,MAAM,YAAY,GAAU,aAAa,OAAO,kBAK/C,CAAC;AAEF,QAAA,MAAM,YAAY,GAAU,aAAa,OAAO,kBAK/C,CAAC;AAEF,QAAA,MAAM,SAAS,GAAU,aAAa,OAAO;;;;EAc5C,CAAC;AAuBF,QAAA,MAAM,QAAQ,GAAU,aAAa,OAAO;;;;;;;;;;;;EA0D3C,CAAC;AAEF,QAAA,MAAM,MAAM,GAAU,0BAA0B,KAAK;;;EAiBpD,CAAC;AAKF,QAAA,MAAM,MAAM,GAAU,2BAA2B,KAAK,iBAqBrD,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;;AAE3E,wBAAoB"}
@@ -48,7 +48,7 @@ const generate = async ({ uid, pg }) => {
48
48
  .then((el) => el.rows?.[0] || {});
49
49
  const { sufix } = config.auth?.["2fa"] || {};
50
50
  if (sufix && !userData[sufix]) {
51
- console.warn("2fa prefix not found at userData");
51
+ console.warn("⚠️ 2fa prefix not found at userData");
52
52
  }
53
53
  const otp = getOTP((sufix ? userData[sufix] : null) || userData.login || userData.code || uid, secret);
54
54
  const qrCodeAsImageSource = await qrcode.toDataURL(otp);
@@ -17,5 +17,8 @@ import { FastifyReply } from "fastify";
17
17
  * @returns {String|Object} error Опис помилки
18
18
  * @returns {String|Object} message Повідомлення про успішну реєстрацію
19
19
  */
20
- export default function registration({ method, pg, body }: any, reply: FastifyReply): Promise<never>;
20
+ export default function registration(req: any, reply: FastifyReply): Promise<{
21
+ message: string;
22
+ status: number;
23
+ }>;
21
24
  //# sourceMappingURL=registration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../../../../../server/routes/auth/controllers/core/registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAWvC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAA8B,YAAY,CACxC,EAAE,MAAM,EAAE,EAAqB,EAAE,IAAS,EAAE,EAAE,GAAG,EACjD,KAAK,EAAE,YAAY,kBAoHpB"}
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../../../../../server/routes/auth/controllers/core/registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAavC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAA8B,YAAY,CACxC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,YAAY;;;GA2HpB"}
@@ -1,9 +1,11 @@
1
1
  const q1 = 'select count(*) > 0 as "userExists" from admin.users where $1 in (email,login)';
2
2
  const q2 = 'select count(*) > 0 as "contactExists" from crm_acc.crm_contact where email=$1';
3
3
  const q3 = "select contact_id as uid from crm_acc.crm_contact where email=$1";
4
+ const qUser = "select * from admin.users where email = $1 and enabled";
4
5
  import config from "../../../../../config.js";
5
6
  import dataInsert from "../../../../plugins/crud/funcs/dataInsert.js";
6
7
  import pgClients from "../../../../plugins/pg/pgClients.js";
8
+ import authorizeUser from "../../../../plugins/auth/funcs/authorizeUser.js";
7
9
  /**
8
10
  * АПІ призначене для реєстрації нового користувача на сайті
9
11
  *
@@ -22,7 +24,8 @@ import pgClients from "../../../../plugins/pg/pgClients.js";
22
24
  * @returns {String|Object} error Опис помилки
23
25
  * @returns {String|Object} message Повідомлення про успішну реєстрацію
24
26
  */
25
- export default async function registration({ method, pg = pgClients.client, body = {} }, reply) {
27
+ export default async function registration(req, reply) {
28
+ const { pg = pgClients.client, body = {} } = req;
26
29
  const { password, email } = body;
27
30
  if (!password || (!email && !body.login)) {
28
31
  return reply.status(400).send({
@@ -107,9 +110,15 @@ export default async function registration({ method, pg = pgClients.client, body
107
110
  data,
108
111
  });
109
112
  }
110
- const redirectUrl = config.auth?.link?.core?.login || config?.auth?.redirect || "/login";
111
- if (method === "POST") {
112
- return reply.status(200).send({ msg: "registration success", redirectUrl });
113
+ const newUser = await pg
114
+ .query(qUser, [login])
115
+ .then((res) => res.rows?.[0]);
116
+ if (!newUser) {
117
+ return { message: "Помилка завершення реєстрації, спробуйте увійти", status: 500 };
113
118
  }
114
- return reply.redirect(redirectUrl);
119
+ const authType = "creds-" + (newUser.user_type === "admin" ? "admin" : "user");
120
+ const result = await authorizeUser(newUser, req, authType);
121
+ return req.method === "GET"
122
+ ? reply.status(302).redirect(result)
123
+ : reply.status(200).send(result);
115
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/filter.ts"],"names":[],"mappings":"AAWA,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;CAC3B;AAED,wBAA8B,SAAS,CACrC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAC5C,OAAO,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,GAAG,CAAC,CA6RvE"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/filter.ts"],"names":[],"mappings":"AAaA,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;CAC3B;AAED,wBAA8B,SAAS,CACrC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAC5C,OAAO,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,GAAG,CAAC,CAoSvE"}
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable no-console */
2
+ import config from "../../../../config.js";
2
3
  import logger from "../../../plugins/logger/getLogger.js";
3
4
  import autoIndex from "../../../plugins/pg/funcs/autoIndex.js";
4
5
  import getSelect from "../../../plugins/table/funcs/getSelect.js";
@@ -7,6 +8,7 @@ import pgClients from "../../../plugins/pg/pgClients.js";
7
8
  import { applyHook } from "../../../../utils.js";
8
9
  import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
9
10
  import getMeta from "../../../plugins/pg/funcs/getMeta.js";
11
+ const { prefix = "/api" } = config;
10
12
  export default async function filterAPI(req, reply, iscalled) {
11
13
  const time = Date.now();
12
14
  const { params, pg = pgClients.client, user = {}, query = {} } = req;
@@ -73,6 +75,11 @@ export default async function filterAPI(req, reply, iscalled) {
73
75
  title: el.title || el.ua,
74
76
  extra: extraColumns.includes(el.id || el.name),
75
77
  }));
78
+ (filters || [])
79
+ .filter((el) => el.data)
80
+ .forEach((el) => Object.assign(el, {
81
+ api: `${prefix}/suggest/${table}:${el.id}?sel=${el.data}`,
82
+ }));
76
83
  await Promise.all(filters
77
84
  .filter((el) => el.id &&
78
85
  el.type !== "Autocomplete" &&
@@ -1 +1 @@
1
- {"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA4EzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,KAAK,EACL,EAAE,EACF,OAAY,EACZ,KAAU,EACV,IAAS,EACT,YAAY,EACZ,KAAY,EACZ,UAAU,EACV,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACtB,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,EACD,MAAM,CAAC,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,GAAG,gBA+0Bb"}
1
+ {"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA4EzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,KAAK,EACL,EAAE,EACF,OAAY,EACZ,KAAU,EACV,IAAS,EACT,YAAY,EACZ,KAAY,EACZ,UAAU,EACV,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACtB,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,EACD,MAAM,CAAC,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,GAAG,gBAk0Bb"}
@@ -140,17 +140,6 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
140
140
  if (!actions.includes("view") && !config?.local && !called) {
141
141
  return reply.status(403).send({ error: "access restricted", code: 403 });
142
142
  }
143
- /* const filters = ((body?.filter_list || [])
144
- .concat(body?.filterInline || [])
145
- .concat(body?.filterCustom || [])
146
- .concat(body?.filterState || [])
147
- .concat(body?.filterList || [])
148
- .concat(body?.filters || [])
149
- ).filter(el => el.id || el.name); */
150
- if (body?.filter_list || body?.filterList) {
151
- // console.warn('invalid filters in template: filter_list / filterList');
152
- // logger.file('crud/warning', { msg: 'invalid filters', template: templateName });
153
- }
154
143
  const { list: filters = [] } = objectId
155
144
  ? {}
156
145
  : (await getFilter({
@@ -0,0 +1,2 @@
1
+ export default function plugin(app: any): void;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/upload/index.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,EAAE,GAAG,QAmGtC"}
@@ -0,0 +1,72 @@
1
+ import config from "../../../config.js";
2
+ const { chunkSize = 1048576 } = config;
3
+ import { prefix } from "../../plugins/upload/index.js";
4
+ import startUpload from "../../plugins/upload/startUpload.js";
5
+ import uploadChunk from "../../plugins/upload/uploadChunk.js";
6
+ import getUploadStatus from "../../plugins/upload/getUploadStatus.js";
7
+ import finishUpload from "../../plugins/upload/finishUpload.js";
8
+ const policy = "L0"; // public
9
+ export default function plugin(app) {
10
+ app.post(`/${prefix}/start`, { config: { policy, description: "Init chunked upload" } }, async (req, reply) => {
11
+ const { fileName, size, subdir, id } = req.body || {};
12
+ if (!fileName || !size) {
13
+ return reply
14
+ .code(400)
15
+ .send({ error: "fileName and size required", code: 400 });
16
+ }
17
+ const result = await startUpload({ fileName, size, subdir, id });
18
+ return result;
19
+ });
20
+ // ! debug
21
+ // disable default parser for PATCH /upload/:id
22
+ // allows accept all content types (req.body = raw buffer)
23
+ // limit body size to 50MB by default, depends on upload chunk size
24
+ app.addContentTypeParser("*", { parseAs: "buffer", bodyLimit: chunkSize * 50 }, (req, body, done) => {
25
+ done(null, body);
26
+ });
27
+ // main - upload chunks one by one
28
+ app.patch(`/${prefix}/:id`, { config: { policy, description: "Upload chunk of data" } }, async (req, reply) => {
29
+ if (!req.headers["content-range"]) {
30
+ return reply
31
+ .status(411)
32
+ .send({ error: "Content-Range required", code: 411 });
33
+ }
34
+ const match = req.headers["content-range"].match(/bytes (\d+)-(\d+)\/(\d+)/);
35
+ if (!match) {
36
+ return { error: "Invalid Content-Range", code: 400 };
37
+ }
38
+ const offset = parseInt(match[1], 10);
39
+ const end = parseInt(match[2], 10);
40
+ const size = parseInt(match[3], 10);
41
+ const result = await uploadChunk({
42
+ id: req.params.id,
43
+ body: req.body,
44
+ offset,
45
+ end,
46
+ size,
47
+ });
48
+ if (result.code) {
49
+ return reply
50
+ .status(result.code)
51
+ .send({ error: result.error, code: result.code });
52
+ }
53
+ return result;
54
+ });
55
+ // check upload status
56
+ app.get(`/${prefix}/:id`, { config: { policy, description: "Check chunked upload status" } }, async (req) => {
57
+ const { id } = req.params;
58
+ const status = await getUploadStatus({ id });
59
+ return status;
60
+ });
61
+ // optional
62
+ app.post(`/${prefix}/:id/finish`, { config: { policy, description: "Finish chunked upload" } }, async (req, reply) => {
63
+ const { id } = req.params;
64
+ const result = await finishUpload({ id });
65
+ if (result.code) {
66
+ return reply
67
+ .status(result.code)
68
+ .send({ error: result.error, code: result.code });
69
+ }
70
+ return result;
71
+ });
72
+ }
@@ -12,7 +12,6 @@ export interface ExtendedPG extends Pool {
12
12
  password: string;
13
13
  port: number;
14
14
  init?: () => void;
15
- connectionAttempt: number;
16
15
  pk?: Record<string, string>;
17
16
  pgType?: Record<any, string>;
18
17
  tlist?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../server/types/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../server/types/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAM1B,QAAA,IAAI,QAAQ,EAAE,GAAG,CAAC;AAUlB,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;CACjE;AAYD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;QAC7C,MAAM,EAAE,0BAA0B,CAAC;KACpC,CAAC;CACH;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY,CAAC,OAAO,QAAQ,CAAC;IACnE,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
package/dist/utils.d.ts CHANGED
@@ -80,6 +80,11 @@ export { default as getAdminAccess } from "./server/plugins/access/funcs/getAdmi
80
80
  export { default as sendNotification } from "./server/plugins/auth/funcs/sendNotification.js";
81
81
  export { default as addUserNotification } from "./server/plugins/notifications/addNotification.js";
82
82
  export { addUserCls, editUserCls, deleteUserCls, getUserCls, } from "./server/plugins/usercls/index.js";
83
+ export { prefix as uploadChunkApiPrefix, fileDir as uploadChunkFileDir, uploadChunkDirectory, } from "./server/plugins/upload/index.js";
84
+ export { default as getUploadStatus } from "./server/plugins/upload/getUploadStatus.js";
85
+ export { default as startUpload } from "./server/plugins/upload/startUpload.js";
86
+ export { default as finishUpload } from "./server/plugins/upload/finishUpload.js";
87
+ export { default as uploadChunk } from "./server/plugins/upload/uploadChunk.js";
83
88
  export { default as s3Client } from "./server/plugins/file/providers/s3/client.js";
84
89
  declare const _default: null;
85
90
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -97,5 +97,10 @@ export { default as getAdminAccess } from "./server/plugins/access/funcs/getAdmi
97
97
  export { default as sendNotification } from "./server/plugins/auth/funcs/sendNotification.js"; // email
98
98
  export { default as addUserNotification } from "./server/plugins/notifications/addNotification.js"; // popup, widget, interface etc.
99
99
  export { addUserCls, editUserCls, deleteUserCls, getUserCls, } from "./server/plugins/usercls/index.js";
100
+ export { prefix as uploadChunkApiPrefix, fileDir as uploadChunkFileDir, uploadChunkDirectory, } from "./server/plugins/upload/index.js";
101
+ export { default as getUploadStatus } from "./server/plugins/upload/getUploadStatus.js";
102
+ export { default as startUpload } from "./server/plugins/upload/startUpload.js";
103
+ export { default as finishUpload } from "./server/plugins/upload/finishUpload.js";
104
+ export { default as uploadChunk } from "./server/plugins/upload/uploadChunk.js";
100
105
  export { default as s3Client } from "./server/plugins/file/providers/s3/client.js";
101
106
  export default null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.0.107",
3
+ "version": "2.0.108",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [