@opengis/fastify-table 2.0.105 → 2.0.106

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 (32) hide show
  1. package/dist/server/migrations/users.sql +1 -1
  2. package/dist/server/plugins/file/providers/s3/client.d.ts +12 -4
  3. package/dist/server/plugins/file/providers/s3/client.d.ts.map +1 -1
  4. package/dist/server/plugins/file/providers/s3/client.js +21 -15
  5. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.d.ts +1 -1
  6. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.d.ts.map +1 -1
  7. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.js +9 -4
  8. package/dist/server/plugins/file/providers/s3/funcs/fileExists.d.ts +1 -1
  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 +13 -10
  11. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.d.ts +1 -1
  12. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.d.ts.map +1 -1
  13. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.js +4 -4
  14. package/dist/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.d.ts +1 -1
  15. package/dist/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.d.ts.map +1 -1
  16. package/dist/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +1 -1
  17. package/dist/server/plugins/file/providers/s3/index.d.ts +1 -1
  18. package/dist/server/plugins/logger/index.d.ts.map +1 -1
  19. package/dist/server/plugins/logger/index.js +5 -2
  20. package/dist/server/plugins/table/funcs/getSelectMeta.d.ts +4 -2
  21. package/dist/server/plugins/table/funcs/getSelectMeta.d.ts.map +1 -1
  22. package/dist/server/plugins/table/funcs/getSelectMeta.js +20 -4
  23. package/dist/server/routes/table/controllers/suggest.d.ts.map +1 -1
  24. package/dist/server/routes/table/controllers/suggest.js +24 -10
  25. package/dist/server/routes/util/controllers/config.d.ts +2 -0
  26. package/dist/server/routes/util/controllers/config.d.ts.map +1 -0
  27. package/dist/server/routes/util/controllers/config.js +33 -0
  28. package/dist/server/routes/util/index.js +2 -2
  29. package/dist/utils.d.ts +1 -0
  30. package/dist/utils.d.ts.map +1 -1
  31. package/dist/utils.js +1 -0
  32. package/package.json +1 -1
@@ -35,7 +35,7 @@ ALTER TABLE admin.users add CONSTRAINT admin_user_user_rnokpp UNIQUE (user_rnokp
35
35
 
36
36
  -- update admin.users set user_type='regular' where user_type not in ('viewer', 'regular','admin','superadmin');
37
37
  -- ALTER TABLE admin.users add constraint admin_user_type_check CHECK (user_type=any(array['viewer', 'regular','admin','superadmin']));
38
- insert into admin.users (uid,login,password,user_type,enabled)values('viewer','viewer','viewer','viewer', false) on conflict (uid) do update set enabled=excluded.enabled;
38
+ insert into admin.users (uid,login,sur_name,password,user_type,enabled)values('viewer','viewer','viewer','viewer','viewer', false) on conflict (uid) do update set enabled=excluded.enabled, sur_name=excluded.sur_name;
39
39
  -- update admin.users set enabled=true where uid='viewer';
40
40
 
41
41
  COMMENT ON TABLE admin.users IS 'Користувачі';
@@ -1,5 +1,13 @@
1
- declare const _default: {
2
- getS3Client: ({ accessKeyId, secretAccessKey, user, password, endpoint, host, region, }: any) => any;
3
- };
4
- export default _default;
1
+ declare const getS3Client: ({ accessKeyId: accessKeyId1, secretAccessKey: secretAccessKey1, user, password, endpoint: endpoint1, host, region, }?: {
2
+ accessKeyId?: string;
3
+ secretAccessKey?: string;
4
+ user?: string;
5
+ password?: string;
6
+ endpoint?: string;
7
+ host?: string;
8
+ region: string;
9
+ }) => any;
10
+ declare const s3Client: any;
11
+ export { getS3Client, s3Client };
12
+ export default s3Client;
5
13
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/file/providers/s3/client.ts"],"names":[],"mappings":";6FAkBG,GAAG;;AAsBN,wBAA+B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/file/providers/s3/client.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,WAAW,GACf,uHAQG;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACE,QA+BpB,CAAC;AAEF,QAAA,MAAM,QAAQ,KAAgB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAEjC,eAAe,QAAQ,CAAC"}
@@ -1,26 +1,32 @@
1
1
  import { S3Client } from "@aws-sdk/client-s3";
2
2
  import { createHash } from "crypto";
3
- function md5(string) {
4
- return createHash("md5").update(string).digest("hex");
5
- }
3
+ import config from "../.../../../../../../config.js";
6
4
  const CLIENT_CACHE = {};
7
- const getS3Client = ({ accessKeyId, secretAccessKey, user, password, endpoint, host, region = "us-west-2", }) => {
8
- // md5 have a hign chance of collisions consider switching on highload
9
- // if (!accessKeyId || !secretAccessKey || !endpoint) throw new Error('No required params');
10
- const uniqueKey = md5(`${accessKeyId}${secretAccessKey}${endpoint}`);
11
- let client = CLIENT_CACHE[uniqueKey];
12
- if (client)
13
- return client;
14
- client = new S3Client({
5
+ const getS3Client = ({ accessKeyId: accessKeyId1, secretAccessKey: secretAccessKey1, user, password, endpoint: endpoint1, host, region = "us-west-2", } = config.s3 || {}) => {
6
+ const accessKeyId = accessKeyId1 || user;
7
+ const endpoint = endpoint1 || host;
8
+ const secretAccessKey = secretAccessKey1 || password;
9
+ if (!accessKeyId || !secretAccessKey || !endpoint) {
10
+ return null;
11
+ }
12
+ const uniqueKey = createHash("md5")
13
+ .update(`${accessKeyId}${secretAccessKey}${endpoint}`)
14
+ .digest("hex");
15
+ if (CLIENT_CACHE[uniqueKey]) {
16
+ return CLIENT_CACHE[uniqueKey];
17
+ }
18
+ const client = new S3Client({
15
19
  credentials: {
16
- accessKeyId: accessKeyId || user,
17
- secretAccessKey: secretAccessKey || password,
20
+ accessKeyId,
21
+ secretAccessKey,
18
22
  },
19
- endpoint: endpoint || host,
23
+ endpoint,
20
24
  forcePathStyle: true,
21
25
  region,
22
26
  });
23
27
  CLIENT_CACHE[uniqueKey] = client;
24
28
  return client;
25
29
  };
26
- export default { getS3Client };
30
+ const s3Client = getS3Client();
31
+ export { getS3Client, s3Client };
32
+ export default s3Client;
@@ -1,3 +1,3 @@
1
- declare const getFileStream: (s3Settings: Record<string, any>) => (fp: string, options?: Record<string, any>) => Promise<any>;
1
+ declare const getFileStream: (s3Settings?: Record<string, any>) => (fp: string, options?: Record<string, any>) => Promise<any>;
2
2
  export default getFileStream;
3
3
  //# sourceMappingURL=downloadFile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"downloadFile.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/downloadFile.ts"],"names":[],"mappings":"AAeA,QAAA,MAAM,aAAa,GAChB,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MACzB,IAAI,MAAM,EAAE,UAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBAoCnD,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,iBA2CnD,CAAC;AAEJ,eAAe,aAAa,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { GetObjectCommand } from "@aws-sdk/client-s3";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { createReadStream } from "node:fs";
4
- import client from "../client.js";
4
+ import s3Client from "../client.js";
5
+ import config from "../../../../../../config.js";
5
6
  import streamToBuffer from "../../utils/streamToBuffer.js";
6
7
  // if not found on s3 => fs
7
8
  import fsFuncs from "../../fs.js";
@@ -9,11 +10,11 @@ import getPath from "../../../utils/getPath.js";
9
10
  import getS3FilePath from "./utils/getS3FilePath.js";
10
11
  const getFileStream = (s3Settings) => async (fp, options = {}) => {
11
12
  const filepath = getS3FilePath(fp, s3Settings);
12
- const s3Client = client.getS3Client(s3Settings);
13
- const bucketName = s3Settings.containerName;
14
13
  const bucketParams = {
15
- Bucket: bucketName,
14
+ Bucket: (s3Settings || config.s3 || { containerName: "work" })
15
+ .containerName,
16
16
  Key: filepath[0] === "/" ? filepath?.slice(1) : filepath,
17
+ Range: options.Range,
17
18
  };
18
19
  try {
19
20
  const data = await s3Client.send(new GetObjectCommand(bucketParams));
@@ -23,6 +24,10 @@ const getFileStream = (s3Settings) => async (fp, options = {}) => {
23
24
  return data.Body;
24
25
  }
25
26
  catch (err) {
27
+ // disable fs fallback for chunked download from s3
28
+ if (options.fallback === false) {
29
+ return null;
30
+ }
26
31
  const filepath1 = getPath(fp, options);
27
32
  if (!filepath1) {
28
33
  return null;
@@ -1,3 +1,3 @@
1
- declare const getFileMetadata: (s3Settings: any) => (fp: any) => Promise<any>;
1
+ declare const getFileMetadata: (s3Settings?: any) => (fp: any, options?: Record<string, any>) => Promise<any>;
2
2
  export default getFileMetadata;
3
3
  //# sourceMappingURL=fileExists.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileExists.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/fileExists.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,eAAe,GAAI,YAAY,GAAG,MAAY,IAAI,GAAG,iBAiB1D,CAAC;AAEF,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,iBAmBhD,CAAC;AAEJ,eAAe,eAAe,CAAC"}
@@ -1,22 +1,25 @@
1
- import { HeadObjectCommand, } from '@aws-sdk/client-s3';
2
- import client from '../client.js';
3
- import getPath from '../../../utils/getPath.js';
4
- import getS3FilePath from './utils/getS3FilePath.js';
1
+ import { HeadObjectCommand } from "@aws-sdk/client-s3";
2
+ import s3Client from "../client.js";
3
+ import config from "../../../../../../config.js";
4
+ import getPath from "../../../utils/getPath.js";
5
+ import getS3FilePath from "./utils/getS3FilePath.js";
5
6
  // if not found on s3 => fs
6
- import isFileExists from '../../../utils/isFileExists.js';
7
- const getFileMetadata = (s3Settings) => async (fp) => {
7
+ import isFileExists from "../../../utils/isFileExists.js";
8
+ const getFileMetadata = (s3Settings) => async (fp, options = {}) => {
8
9
  const filepath = getS3FilePath(fp, s3Settings);
9
- const s3Client = client.getS3Client(s3Settings);
10
- const bucketName = s3Settings.containerName;
11
10
  const bucketParams = {
12
- Bucket: bucketName,
13
- Key: filepath[0] === '/' ? filepath?.slice(1) : filepath,
11
+ Bucket: (s3Settings || config.s3 || { containerName: "work" })
12
+ .containerName,
13
+ Key: filepath[0] === "/" ? filepath?.slice(1) : filepath,
14
14
  };
15
15
  try {
16
16
  const data = await s3Client.send(new HeadObjectCommand(bucketParams));
17
17
  return data;
18
18
  }
19
19
  catch (err) {
20
+ if (options.fallback === false) {
21
+ return false;
22
+ }
20
23
  const filepath1 = getPath(fp);
21
24
  return isFileExists(filepath1);
22
25
  }
@@ -1,3 +1,3 @@
1
- declare const uploadFile: (s3Settings: any) => (fp: any, data: any) => Promise<import("@aws-sdk/client-s3").CompleteMultipartUploadCommandOutput>;
1
+ declare const uploadFile: (s3Settings?: any) => (fp: any, data: any) => Promise<import("@aws-sdk/client-s3").CompleteMultipartUploadCommandOutput>;
2
2
  export default uploadFile;
3
3
  //# sourceMappingURL=uploadFile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/file/providers/s3/funcs/uploadFile.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,UAAU,GAAI,YAAY,GAAG,MAAY,IAAI,GAAG,EAAE,MAAM,GAAG,+EAgChE,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,+EA8BjE,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { Upload } from "@aws-sdk/lib-storage";
2
- import client from "../client.js";
2
+ import s3Client from "../client.js";
3
+ import config from "../../../../../../config.js";
3
4
  import getValidData from "../../utils/getValidData.js";
4
5
  import getDataSize from "../../utils/getDataSize.js";
5
6
  import dataTypes from "../../utils/handlers/dataTypes.js";
@@ -11,10 +12,9 @@ const uploadFile = (s3Settings) => async (fp, data) => {
11
12
  const size = await getDataSize({ data });
12
13
  const type = getMimeType(filepath);
13
14
  try {
14
- const s3Client = client.getS3Client(s3Settings);
15
- const bucketName = s3Settings.containerName;
16
15
  const bucketParams = {
17
- Bucket: bucketName,
16
+ Bucket: (s3Settings || config.s3 || { containerName: "work" })
17
+ .containerName,
18
18
  Key: filepath,
19
19
  ContentLength: size,
20
20
  ContentType: type,
@@ -1,3 +1,3 @@
1
- declare function getS3FilePath(fp: any, s3Settings: any): string;
1
+ declare function getS3FilePath(fp: any, s3Settings?: any): string;
2
2
  export default getS3FilePath;
3
3
  //# sourceMappingURL=getS3FilePath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getS3FilePath.d.ts","sourceRoot":"","sources":["../../../../../../../../server/plugins/file/providers/s3/funcs/utils/getS3FilePath.ts"],"names":[],"mappings":"AAgBA,iBAAS,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,UAQ9C;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"getS3FilePath.d.ts","sourceRoot":"","sources":["../../../../../../../../server/plugins/file/providers/s3/funcs/utils/getS3FilePath.ts"],"names":[],"mappings":"AAgBA,iBAAS,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,MAAY,UAQrD;AAED,eAAe,aAAa,CAAC"}
@@ -7,7 +7,7 @@ function getPath(fp, s3Settings) {
7
7
  }
8
8
  return filepath;
9
9
  }
10
- function getS3FilePath(fp, s3Settings) {
10
+ function getS3FilePath(fp, s3Settings = config.s3) {
11
11
  const filepath = getPath(fp, s3Settings);
12
12
  const unixPath = filepath.replace(/\\/g, "/").split("work/").pop();
13
13
  const prefix = !filepath.includes(config.folder) ? config.folder : "";
@@ -2,6 +2,6 @@ export default function s3Storage(opt: any): {
2
2
  name: string;
3
3
  downloadFile: (fp: string, options?: Record<string, any>) => Promise<any>;
4
4
  uploadFile: (fp: any, data: any) => Promise<import("@aws-sdk/client-s3").CompleteMultipartUploadCommandOutput>;
5
- fileExists: (fp: any) => Promise<any>;
5
+ fileExists: (fp: any, options?: Record<string, any>) => Promise<any>;
6
6
  };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/plugins/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAiC7E,iBAAe,MAAM,CAAC,OAAO,EAAE,eAAe,iBAwC7C;AACD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/plugins/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAsC7E,iBAAe,MAAM,CAAC,OAAO,EAAE,eAAe,iBAwC7C;AACD,eAAe,MAAM,CAAC"}
@@ -13,9 +13,12 @@ process.on("uncaughtException", (err) => {
13
13
  });
14
14
  // avoid process exit with rejection during client connect at process start
15
15
  process.on("unhandledRejection", (err) => {
16
- if (err.message === "Connection terminated due to connection timeout") {
16
+ if ([
17
+ "Client was closed and is not queryable",
18
+ "Connection terminated due to connection timeout",
19
+ ].includes(err.message)) {
17
20
  logger.file("pg", { error: err.message });
18
- console.warn("Ignored pg connection timeout:", err.toString());
21
+ console.warn("Ignored pg connection timeout / close:", err.toString());
19
22
  return;
20
23
  }
21
24
  if (err.message === "Connection is closed.") {
@@ -1,8 +1,10 @@
1
1
  import type { ExtendedPG } from "../../../types/core.js";
2
- export default function getSelectMeta({ name, pg, nocache, parent, }: {
2
+ export default function getSelectMeta({ name, startsWith, key, nocache, parent, pg, }: {
3
3
  name: string;
4
- pg: ExtendedPG;
4
+ startsWith?: boolean;
5
+ key?: string;
5
6
  nocache?: any;
6
7
  parent?: string;
8
+ pg?: ExtendedPG;
7
9
  }): Promise<any>;
8
10
  //# sourceMappingURL=getSelectMeta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getSelectMeta.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/table/funcs/getSelectMeta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,wBAA8B,aAAa,CAAC,EAC1C,IAAI,EACJ,EAAqB,EACrB,OAAO,EACP,MAAM,GACP,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,gBAyFA"}
1
+ {"version":3,"file":"getSelectMeta.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/table/funcs/getSelectMeta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,wBAA8B,aAAa,CAAC,EAC1C,IAAI,EACJ,UAAU,EACV,GAAG,EACH,OAAO,EACP,MAAM,EACN,EAAqB,GACtB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB,gBA6GA"}
@@ -5,14 +5,21 @@ import pgClients from "../../pg/pgClients.js";
5
5
  import getSelect from "./getSelect.js";
6
6
  const limit = 50;
7
7
  const selectMeta = {};
8
- export default async function getSelectMeta({ name, pg = pgClients.client, nocache, parent, }) {
9
- if (selectMeta[name] && !nocache)
8
+ export default async function getSelectMeta({ name, startsWith, key, nocache, parent, pg = pgClients.client, }) {
9
+ if (selectMeta[name] && !startsWith && !nocache)
10
10
  return selectMeta[name];
11
+ if (selectMeta[name] && startsWith && key && !nocache) {
12
+ const searchQuery = `(${selectMeta[name].searchColumn
13
+ .split(",")
14
+ .map((el) => `left(lower("${el}"),${key.length}) = $1`)
15
+ .join(" or ")})`;
16
+ return { ...selectMeta[name], searchQuery };
17
+ }
11
18
  const cls = await getSelect(name, pg, nocache);
12
19
  const db = typeof cls?.db === "string" ? { database: cls.db } : cls?.db;
13
20
  const pg1 = cls?.db ? getPG(db) : pg;
14
21
  if (!pg1?.pk)
15
- await pg1.init();
22
+ await pg1?.init?.();
16
23
  if (!cls)
17
24
  return null;
18
25
  if (cls.arr)
@@ -52,12 +59,13 @@ export default async function getSelectMeta({ name, pg = pgClients.client, nocac
52
59
  (dataOrigin.fields.find((el) => el.name === "search")
53
60
  ? "search"
54
61
  : dataOrigin1.fields[1].name);
62
+ // by default - search by like %value%
55
63
  const searchQuery = `(${searchColumn
56
64
  .split(",")
57
65
  .map((el) => `lower("${el}") ~ $1 `)
58
66
  .join(" or ")})`;
59
- // console.log(dataOrigin1.fields.map((el) => el.name).join(','));
60
67
  const data = {
68
+ searchColumn,
61
69
  minLength: cls.minLength,
62
70
  limit: cls.limit,
63
71
  type: type.join(","),
@@ -73,5 +81,13 @@ export default async function getSelectMeta({ name, pg = pgClients.client, nocac
73
81
  time: new Date().toISOString(),
74
82
  };
75
83
  selectMeta[name] = data;
84
+ // on demand - search by "start with these characters"
85
+ if (startsWith && key?.length) {
86
+ const searchQuery = `(${selectMeta[name].searchColumn
87
+ .split(",")
88
+ .map((el) => `left(lower("${el}"),${key.length}) = $1`)
89
+ .join(" or ")})`;
90
+ return { ...data, searchQuery };
91
+ }
76
92
  return data;
77
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAsDA,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,gBAgV7C"}
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAoEA,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,gBA6V7C"}
@@ -7,20 +7,22 @@ const headers = {
7
7
  "Access-Control-Allow-Methods": "GET",
8
8
  "Cache-Control": "no-cache",
9
9
  };
10
- async function getTableColumnMeta(tableName, column, filtered, pg) {
11
- if (!tableName || !column) {
10
+ async function getTableColumnMeta({ table, column, filtered, startsWith, key, pg, }) {
11
+ if (!table || !column) {
12
12
  return null;
13
13
  }
14
- const loadTable = await getTemplate("table", tableName);
14
+ const loadTable = await getTemplate("table", table);
15
15
  const { data: clsName } = loadTable?.columns?.find?.((el) => el.name === column) || {};
16
16
  const { arr } = (await getSelect(clsName, pg)) || {};
17
17
  const original = filtered
18
- ? `with c(id,text) as (select ${column} as id, ${column} as text from ${loadTable?.table || tableName} group by ${column}) select id, text from c`
19
- : `with c(id,text) as (select ${column} as id, ${column} as text, count(*) from ${loadTable?.table || tableName} group by ${column} limit ${limit}) select * from c`;
18
+ ? `with c(id,text) as (select ${column} as id, ${column} as text from ${loadTable?.table || table} group by ${column}) select id, text from c`
19
+ : `with c(id,text) as (select ${column} as id, ${column} as text, count(*) from ${loadTable?.table || table} group by ${column} limit ${limit}) select * from c`;
20
20
  return {
21
21
  arr,
22
22
  original,
23
- searchQuery: '(lower("text") ~ $1 )',
23
+ searchQuery: startsWith && key
24
+ ? `(left(lower("text"),${key.length}) = $1 )`
25
+ : '(lower("text") ~ $1 )',
24
26
  pk: "id",
25
27
  };
26
28
  }
@@ -64,12 +66,21 @@ export default async function suggest(req) {
64
66
  return { status: 400, message: "param limit is invalid" };
65
67
  }
66
68
  const meta = tableName && column
67
- ? await getTableColumnMeta(table, column, query?.key || query?.val, pg1)
68
- : await getSelectMeta({
69
+ ? await getTableColumnMeta({
70
+ table,
71
+ column,
72
+ filtered: query?.key || query?.val,
73
+ startsWith: !!query.start,
74
+ key: query.key,
69
75
  pg: pg1,
76
+ })
77
+ : await getSelectMeta({
70
78
  name: selectName,
71
79
  nocache: query?.nocache,
80
+ startsWith: !!query.start,
81
+ key: query.key,
72
82
  parent,
83
+ pg: pg1,
73
84
  });
74
85
  if (meta?.minLength && query.key && query.key.length < meta?.minLength) {
75
86
  return { message: `min length: ${meta.minLength}` };
@@ -183,7 +194,7 @@ export default async function suggest(req) {
183
194
  ? ` ${meta.pk}=any('{${query.val.replace(/'/g, "''")}}')`
184
195
  : "";
185
196
  const where = [search, val, meta.pk ? `${meta.pk} is not null` : null]
186
- .filter((el) => el)
197
+ .filter(Boolean)
187
198
  .join(" and ") || "true";
188
199
  const loadTable = await getTemplate("table", query.token);
189
200
  const tableName1 = hookBody?.table || loadTable?.table || query.token;
@@ -204,7 +215,7 @@ export default async function suggest(req) {
204
215
  return sqlSuggest;
205
216
  }
206
217
  // query
207
- const { rows: dataNew } = await pg.query(sqlSuggest, query.key ? [`${query.key.toLowerCase()}`] : []);
218
+ const { rows: dataNew } = await pg.query(sqlSuggest, query.key ? [query.key.toLowerCase()] : []);
208
219
  // const { rows: dataNew1 } = dataNew.length < limit ? await pg.query(sqlSuggest, query.key ? [`${query.key}`] : []) : {};
209
220
  // const ids = dataNew.map((el) => el.id);
210
221
  const data = dataNew.filter((el) => el.id && el.text);
@@ -223,6 +234,9 @@ export default async function suggest(req) {
223
234
  total: meta.count - 0,
224
235
  mode: type === "cls" ? "array" : "sql",
225
236
  db: meta.db,
237
+ sql: config.local || user?.user_type?.includes?.("admin")
238
+ ? sqlSuggest
239
+ : undefined,
226
240
  data: data.map((el) => ({
227
241
  count: el.count,
228
242
  id: el.id,
@@ -0,0 +1,2 @@
1
+ export default function apiConfig({ user }: any): Promise<any>;
2
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/config.ts"],"names":[],"mappings":"AAyBA,wBAA8B,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,gBAOpD"}
@@ -0,0 +1,33 @@
1
+ import config from "../../../../config.js";
2
+ function substringObject(data, substr) {
3
+ if (typeof data === "boolean")
4
+ return data;
5
+ if (!data)
6
+ return "null";
7
+ // array string
8
+ if (typeof data === "string")
9
+ return data.substring(0, substr);
10
+ // array object
11
+ return Object.keys(data).reduce((acc, curr) => {
12
+ if (Array.isArray(data[curr])) {
13
+ return { [curr]: processObject(data[curr], substr) };
14
+ }
15
+ return { ...acc, [curr]: processObject(data[curr], substr) };
16
+ }, {});
17
+ }
18
+ function processObject(obj, substr) {
19
+ // root string
20
+ if (typeof obj === "string")
21
+ return obj.substring(0, substr);
22
+ // root array / object
23
+ return Array.isArray(obj)
24
+ ? obj.map((el) => substringObject(el, substr))
25
+ : substringObject(obj, substr);
26
+ }
27
+ export default async function apiConfig({ user }) {
28
+ if (config.local || (config.debug && user?.user_type?.includes?.("admin"))) {
29
+ return config;
30
+ }
31
+ const reductConfig = processObject(config, 3);
32
+ return reductConfig;
33
+ }
@@ -1,4 +1,4 @@
1
- import config from "../../../config.js";
1
+ import apiConfig from "./controllers/config.js";
2
2
  import nextId from "./controllers/next.id.js";
3
3
  import statusMonitor from "./controllers/status.monitor.js";
4
4
  import userTokens from "./controllers/user.tokens.js";
@@ -12,6 +12,6 @@ function plugin(app, opt = {}) {
12
12
  ...(req.headers || {}),
13
13
  sessionId: req.session?.sessionId,
14
14
  }));
15
- app.get("/config", { config: { role: "admin" } }, () => config);
15
+ app.get("/config", { config: { policy: "L0" /*role: "admin"*/ } }, apiConfig);
16
16
  }
17
17
  export default plugin;
package/dist/utils.d.ts CHANGED
@@ -80,6 +80,7 @@ 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 { default as s3Client } from "./server/plugins/file/providers/s3/client.js";
83
84
  declare const _default: null;
84
85
  export default _default;
85
86
  //# sourceMappingURL=utils.d.ts.map
@@ -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,4 +97,5 @@ 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 { default as s3Client } from "./server/plugins/file/providers/s3/client.js";
100
101
  export default null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.0.105",
3
+ "version": "2.0.106",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [