proto.io 0.0.163 → 0.0.165

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 (49) hide show
  1. package/dist/adapters/file/database.d.ts +2 -2
  2. package/dist/adapters/file/database.js.map +1 -1
  3. package/dist/adapters/file/database.mjs +2 -2
  4. package/dist/adapters/file/database.mjs.map +1 -1
  5. package/dist/adapters/file/filesystem.d.ts +2 -2
  6. package/dist/adapters/file/filesystem.js.map +1 -1
  7. package/dist/adapters/file/filesystem.mjs.map +1 -1
  8. package/dist/adapters/file/google-cloud-storage.d.ts +2 -2
  9. package/dist/adapters/file/google-cloud-storage.js.map +1 -1
  10. package/dist/adapters/file/google-cloud-storage.mjs.map +1 -1
  11. package/dist/adapters/storage/progres.d.ts +16 -13
  12. package/dist/adapters/storage/progres.js +138 -82
  13. package/dist/adapters/storage/progres.js.map +1 -1
  14. package/dist/adapters/storage/progres.mjs +140 -84
  15. package/dist/adapters/storage/progres.mjs.map +1 -1
  16. package/dist/client.d.ts +3 -3
  17. package/dist/client.mjs +3 -3
  18. package/dist/index.d.ts +7 -12
  19. package/dist/index.js +24 -23
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +28 -27
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/internals/{index-ByfpVHca.mjs → index-BYbMU-Ao.mjs} +2 -2
  24. package/dist/internals/{index-ByfpVHca.mjs.map → index-BYbMU-Ao.mjs.map} +1 -1
  25. package/dist/internals/{index-S5Bq-KsU.mjs → index-BejQNqvC.mjs} +2 -2
  26. package/dist/internals/{index-S5Bq-KsU.mjs.map → index-BejQNqvC.mjs.map} +1 -1
  27. package/dist/internals/{index-BoP4kl2R.mjs → index-BibByOcU.mjs} +2 -2
  28. package/dist/internals/{index-BoP4kl2R.mjs.map → index-BibByOcU.mjs.map} +1 -1
  29. package/dist/internals/index-BqFdBhFc.js.map +1 -1
  30. package/dist/internals/index-CSNRyhjB.js.map +1 -1
  31. package/dist/internals/index-CVutVPmd.js.map +1 -1
  32. package/dist/internals/{index-BeV63sFw.d.ts → index-DaDfXlay.d.ts} +2 -2
  33. package/dist/internals/index-DaDfXlay.d.ts.map +1 -0
  34. package/dist/internals/index-Dz3jvqxZ.js.map +1 -1
  35. package/dist/internals/{index-YdOGTHp1.d.ts → index-RPh4TX0T.d.ts} +3 -2
  36. package/dist/internals/index-RPh4TX0T.d.ts.map +1 -0
  37. package/dist/internals/{index-BsuUdR0W.d.ts → index-bCACA0cS.d.ts} +2 -2
  38. package/dist/internals/index-bCACA0cS.d.ts.map +1 -0
  39. package/dist/internals/index-be1VYBY2.mjs.map +1 -1
  40. package/dist/internals/{random-w8WDYQEe.mjs → random-B1P0EZO5.mjs} +5 -10
  41. package/dist/internals/random-B1P0EZO5.mjs.map +1 -0
  42. package/dist/internals/{random-uT4D0y_q.js → random-q0PeamQE.js} +3 -8
  43. package/dist/internals/random-q0PeamQE.js.map +1 -0
  44. package/package.json +20 -20
  45. package/dist/internals/index-BeV63sFw.d.ts.map +0 -1
  46. package/dist/internals/index-BsuUdR0W.d.ts.map +0 -1
  47. package/dist/internals/index-YdOGTHp1.d.ts.map +0 -1
  48. package/dist/internals/random-uT4D0y_q.js.map +0 -1
  49. package/dist/internals/random-w8WDYQEe.mjs.map +0 -1
@@ -535,7 +535,7 @@ type DecodedSortOption = {
535
535
  order: 1 | -1;
536
536
  };
537
537
  type DecodedBaseQuery = Decoded<TQueryBaseOptions, {
538
- filter: QuerySelector;
538
+ filter?: QuerySelector;
539
539
  matches: Record<string, DecodedBaseQuery>;
540
540
  sort?: Record<string, 1 | -1> | DecodedSortOption[];
541
541
  }>;
@@ -545,6 +545,7 @@ type DecodedQuery<T> = Decoded<T, {
545
545
  includes: string[];
546
546
  objectIdSize: number;
547
547
  sort?: Record<string, 1 | -1> | DecodedSortOption[];
548
+ extraFilter?: (className: string) => QuerySelector;
548
549
  }>;
549
550
  type InsertOptions = {
550
551
  className: string;
@@ -716,4 +717,4 @@ declare class ProtoService<Ext = any> extends ProtoType<Ext> {
716
717
  }
717
718
 
718
719
  export { type TPubSub as A, type TFileInfo as B, type DeserializeOptions as D, type ExtraOptions as E, type FindOptions as F, type InsertOptions as I, ProtoService as P, QuerySelector as Q, type RelationOptions as R, type SerializeOptions as S, TSchema as T, type _TValue as _, type ProtoServiceOptions as a, type ProtoServiceKeyOptions as b, type TFileStorage as c, type TSerializable as d, deserialize as e, type TExtensions as f, TQuery as g, TObject as h, TUser as i, TRole as j, TFile as k, ProtoType as l, type PathName as m, type TObjectType as n, type EventData as o, type DecodedQuery as p, type DecodedSortOption as q, type TValue as r, serialize as s, type FindOneOptions as t, type TUpdateOp as u, FieldSelectorExpression as v, QueryExpression as w, type TStorage as x, type TransactionOptions as y, type TQueryRandomOptions as z };
719
- //# sourceMappingURL=index-YdOGTHp1.d.ts.map
720
+ //# sourceMappingURL=index-RPh4TX0T.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-RPh4TX0T.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { f as TExtensions, g as TQuery, h as TObject, i as TUser, j as TRole, k as TFile, E as ExtraOptions, S as SerializeOptions, l as ProtoType, m as PathName, _ as _TValue, d as TSerializable, n as TObjectType, T as TSchema, o as EventData } from './index-YdOGTHp1.js';
1
+ import { f as TExtensions, g as TQuery, h as TObject, i as TUser, j as TRole, k as TFile, E as ExtraOptions, S as SerializeOptions, l as ProtoType, m as PathName, _ as _TValue, d as TSerializable, n as TObjectType, T as TSchema, o as EventData } from './index-RPh4TX0T.js';
2
2
  import * as _o2ter_utils_js from '@o2ter/utils-js';
3
3
  import * as socket_io_client from 'socket.io-client';
4
4
  import * as _socket_io_component_emitter from '@socket.io/component-emitter';
@@ -58,4 +58,4 @@ declare class ProtoClient<Ext = any> extends ProtoType<Ext> {
58
58
  }
59
59
 
60
60
  export { ProtoClient as P, isObject as a, isUser as b, classExtends as c, isRole as d, isFile as e, isQuery as i };
61
- //# sourceMappingURL=index-BsuUdR0W.d.ts.map
61
+ //# sourceMappingURL=index-bCACA0cS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-bCACA0cS.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index-be1VYBY2.mjs","sources":["../../../src/adapters/file/base/index.ts"],"sourcesContent":["//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { promisify } from 'util';\nimport { deflate as _deflate, unzip as _unzip } from 'zlib';\nimport { TFileInfo, TFileStorage } from '../../../server/file';\nimport { ProtoService } from '../../../server/proto';\nimport { TSchema } from '../../../internals/schema';\nimport { BinaryData, binaryStreamChunk, parallelEach, parallelMap } from '@o2ter/utils-js';\nimport { PVK } from '../../../internals/private';\n\nconst deflate = promisify(_deflate);\nconst unzip = promisify(_unzip);\n\nexport type FileStorageOptions = {\n chunkSize?: number;\n parallel?: number;\n};\n\nexport abstract class FileStorageBase implements TFileStorage {\n\n options: Required<FileStorageOptions>;\n\n constructor(options: FileStorageOptions) {\n this.options = {\n chunkSize: 16 * 1024,\n parallel: 8,\n ..._.pickBy(options, v => !_.isNil(v)),\n };\n }\n\n get schema(): Record<string, TSchema> {\n return {}\n }\n\n abstract createChunk<E>(proto: ProtoService<E>, token: string, start: number, end: number, compressed: Buffer): PromiseLike<void>;\n abstract readChunks<E>(proto: ProtoService<E>, token: string, start?: number, end?: number): AsyncGenerator<{\n start: number;\n data: Buffer | Uint8Array | PromiseLike<Buffer | Uint8Array>;\n }, void>;\n abstract destroy<E>(proto: ProtoService<E>, id: string): PromiseLike<void>;\n\n async create<E>(\n proto: ProtoService<E>,\n stream: BinaryData | AsyncIterable<BinaryData>,\n info: TFileInfo,\n maxUploadSize: number,\n ) {\n\n const token = proto[PVK].generateId();\n\n let size = 0;\n const _stream = async function* (stream: AsyncIterable<Buffer>) {\n for await (const data of stream) {\n yield { data, offset: size };\n size += data.byteLength;\n }\n };\n\n await parallelEach(\n _stream(binaryStreamChunk(stream, this.options.chunkSize)),\n this.options.parallel,\n async ({ data, offset }) => {\n const chunkSize = data.byteLength;\n await this.createChunk(proto, token, offset, offset + chunkSize, await deflate(data));\n if (offset + chunkSize > maxUploadSize) throw Error('Payload too large');\n }\n );\n\n return { _id: token, size };\n }\n\n async* fileData<E>(proto: ProtoService<E>, id: string, start?: number, end?: number) {\n\n const _stream = parallelMap(\n this.readChunks(proto, id, start, end),\n this.options.parallel,\n async chunk => ({\n start: chunk.start,\n data: await unzip(await chunk.data),\n })\n );\n\n for await (const { start: startBytes, data } of _stream) {\n\n if (!_.isNumber(start) && !_.isNumber(end)) {\n\n yield data;\n\n } else {\n\n const endBytes = startBytes + data.length;\n const _start = _.isNumber(start) && start > startBytes ? start - startBytes : 0;\n const _end = _.isNumber(end) && end < endBytes ? end - startBytes : undefined;\n\n yield data.subarray(_start, _end);\n }\n }\n }\n};\n\nexport default FileStorageBase;"],"names":["_deflate","_unzip"],"mappings":"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"}
1
+ {"version":3,"file":"index-be1VYBY2.mjs","sources":["../../../src/adapters/file/base/index.ts"],"sourcesContent":["//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { promisify } from 'util';\nimport { deflate as _deflate, unzip as _unzip } from 'zlib';\nimport { TFileInfo, TFileStorage } from '../../../server/file';\nimport { ProtoService } from '../../../server/proto';\nimport { TSchema } from '../../../internals/schema';\nimport { BinaryData, binaryStreamChunk, parallelEach, parallelMap } from '@o2ter/utils-js';\nimport { PVK } from '../../../internals/private';\n\nconst deflate = promisify(_deflate);\nconst unzip = promisify(_unzip);\n\nexport type FileStorageOptions = {\n chunkSize?: number;\n parallel?: number;\n};\n\nexport abstract class FileStorageBase implements TFileStorage {\n\n options: Required<FileStorageOptions>;\n\n constructor(options: FileStorageOptions) {\n this.options = {\n chunkSize: 16 * 1024,\n parallel: 8,\n ..._.pickBy(options, v => !_.isNil(v)),\n };\n }\n\n get schema(): Record<string, TSchema> {\n return {}\n }\n\n abstract createChunk<E>(proto: ProtoService<E>, token: string, start: number, end: number, compressed: Buffer): PromiseLike<void>;\n abstract readChunks<E>(proto: ProtoService<E>, token: string, start?: number, end?: number): AsyncGenerator<{\n start: number;\n data: Buffer | Uint8Array | PromiseLike<Buffer | Uint8Array>;\n }, void>;\n abstract destroy<E>(proto: ProtoService<E>, id: string): PromiseLike<void>;\n\n async create<E>(\n proto: ProtoService<E>,\n stream: BinaryData | AsyncIterable<BinaryData>,\n info: TFileInfo,\n maxUploadSize: number,\n ) {\n\n const token = proto[PVK].generateId();\n\n let size = 0;\n const _stream = async function* (stream: AsyncIterable<Buffer>) {\n for await (const data of stream) {\n yield { data, offset: size };\n size += data.byteLength;\n }\n };\n\n await parallelEach(\n _stream(binaryStreamChunk(stream, this.options.chunkSize)),\n this.options.parallel,\n async ({ data, offset }) => {\n const chunkSize = data.byteLength;\n await this.createChunk(proto, token, offset, offset + chunkSize, await deflate(data));\n if (offset + chunkSize > maxUploadSize) throw Error('Payload too large');\n }\n );\n\n return { _id: token, size };\n }\n\n async* fileData<E>(proto: ProtoService<E>, id: string, start?: number, end?: number) {\n\n const _stream = parallelMap(\n this.readChunks(proto, id, start, end),\n this.options.parallel,\n async chunk => ({\n start: chunk.start,\n data: await unzip(await chunk.data),\n })\n );\n\n for await (const { start: startBytes, data } of _stream) {\n\n if (!_.isNumber(start) && !_.isNumber(end)) {\n\n yield data;\n\n } else {\n\n const endBytes = startBytes + data.length;\n const _start = _.isNumber(start) && start > startBytes ? start - startBytes : 0;\n const _end = _.isNumber(end) && end < endBytes ? end - startBytes : undefined;\n\n yield data.subarray(_start, _end);\n }\n }\n }\n};\n\nexport default FileStorageBase;"],"names":["_deflate","_unzip"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import _ from 'lodash';
2
- import { k as QueryExpression, Q as QuerySelector, a as QueryCoditionalSelector, b as QueryFieldSelector } from './index-S5Bq-KsU.mjs';
3
- import { b as isShape, T as TObject, e as isPrimitive, f as isVector, s as shapePaths, i as isPointer, a as isRelation, j as _typeof, k as isPrimitiveValue } from './index-ByfpVHca.mjs';
2
+ import { k as QueryExpression, Q as QuerySelector, a as QueryCoditionalSelector, b as QueryFieldSelector } from './index-BejQNqvC.mjs';
3
+ import { b as isShape, T as TObject, e as isPrimitive, f as isVector, s as shapePaths, i as isPointer, a as isRelation, j as _typeof, k as isPrimitiveValue } from './index-BYbMU-Ao.mjs';
4
4
  import { P as PVK } from './private-BUpLAMZi.mjs';
5
5
  import { randomBytes } from '@o2ter/crypto-js';
6
6
 
@@ -276,7 +276,6 @@ class QueryValidator {
276
276
  if (isPrimitive(dataType) || isVector(dataType) || isShape(dataType))
277
277
  continue;
278
278
  _matches[colname] = {
279
- filter: QuerySelector.decode([...this._rperm(dataType.target), this._expiredAt]).simplify(),
280
279
  matches: this.decodeMatches(dataType.target, {}, includes.filter(x => x.startsWith(`${colname}.`)).map(x => x.slice(colname.length + 1))),
281
280
  };
282
281
  }
@@ -286,7 +285,6 @@ class QueryValidator {
286
285
  const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, colname);
287
286
  if (isPointer(dataType) && !_.isEmpty(subpath)) {
288
287
  _matches[_colname] = {
289
- filter: QuerySelector.decode([...this._rperm(dataType.target), this._expiredAt]).simplify(),
290
288
  matches: this.decodeMatches(dataType.target, { [subpath.join('.')]: match }, includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1))),
291
289
  };
292
290
  }
@@ -296,11 +294,7 @@ class QueryValidator {
296
294
  this.validateForeignField(dataType, 'read', `Invalid match: ${colname}`);
297
295
  _matches[_colname] = {
298
296
  ...match,
299
- filter: QuerySelector.decode([
300
- ...this._rperm(dataType.target),
301
- this._expiredAt,
302
- ..._.castArray(match.filter),
303
- ]).simplify(),
297
+ filter: QuerySelector.decode(_.castArray(match.filter)).simplify(),
304
298
  matches: this.decodeMatches(dataType.target, match.matches ?? {}, includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1))),
305
299
  sort: match.sort && this.decodeSort(match.sort),
306
300
  };
@@ -355,6 +349,7 @@ class QueryValidator {
355
349
  includes,
356
350
  sort,
357
351
  objectIdSize: this.objectIdSize,
352
+ extraFilter: (className) => QuerySelector.decode([...this._rperm(className), this._expiredAt]).simplify(),
358
353
  };
359
354
  }
360
355
  isGetMethod(query) {
@@ -415,4 +410,4 @@ const generateId = (size) => {
415
410
  };
416
411
 
417
412
  export { QueryValidator as Q, resolveDataType as a, generateId as g, resolveColumn as r };
418
- //# sourceMappingURL=random-w8WDYQEe.mjs.map
413
+ //# sourceMappingURL=random-B1P0EZO5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random-B1P0EZO5.mjs","sources":["../../../src/server/query/dispatcher/validator.ts","../../../src/server/crypto/random.ts"],"sourcesContent":["//\n// validator.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { DecodedBaseQuery, DecodedQuery, FindOptions, FindOneOptions, DecodedSortOption, RelationOptions } from '../../storage';\nimport { QueryCoditionalSelector, QueryFieldSelector, QuerySelector } from './parser';\nimport { TSchema, _typeof, isPointer, isPrimitive, isRelation, isShape, isVector, shapePaths } from '../../../internals/schema';\nimport { ProtoService } from '../../proto';\nimport { TQueryBaseOptions, TSortOption } from '../../../internals/query/base';\nimport { isPrimitiveValue } from '../../../internals/object';\nimport { TObject } from '../../../internals/object';\nimport { PVK } from '../../../internals/private';\nimport { TQuerySelector } from '../../../internals/query/types/selectors';\nimport { QueryExpression } from './parser/expressions';\n\nexport const recursiveCheck = (x: any, stack: any[]) => {\n if (_.indexOf(stack, x) !== -1) throw Error('Recursive data detected');\n if (_.isRegExp(x) || isPrimitiveValue(x) || x instanceof TObject) return;\n const children = _.isArray(x) ? x : _.values(x);\n children.forEach(v => recursiveCheck(v, [...stack, x]));\n}\n\nexport const resolveDataType = (\n schema: Record<string, TSchema>,\n classname: string,\n path: string,\n) => {\n let fields = schema[classname].fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) return dataType;\n if (isShape(dataType)) {\n fields = dataType.shape;\n continue;\n }\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid path: ${path}`);\n fields = schema[dataType.target].fields;\n last = dataType;\n }\n return last;\n}\n\nexport const resolveColumn = (\n schema: Record<string, TSchema>,\n className: string,\n path: string,\n) => {\n const _schema = schema[className] ?? {};\n let [colname, ...subpath] = path.split('.');\n let dataType = _schema.fields[colname];\n while (dataType && !_.isEmpty(subpath) && isShape(dataType)) {\n const [key, ...remain] = subpath;\n if (!dataType.shape[key]) break;\n dataType = dataType.shape[key];\n colname = `${colname}.${key}`;\n subpath = remain;\n }\n return {\n paths: [colname, ...subpath],\n dataType,\n };\n}\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n master: boolean;\n disableSecurity: boolean;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n name: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.master) return [];\n const check = _.intersection(this.schema[className]?.additionalObjectPermissions?.read, this.acls);\n if (!_.isEmpty(check)) return [];\n return [{ _rperm: { $intersect: this.acls } }];\n }\n _wperm(className: string) {\n if (this.master) return [];\n const check = _.intersection(this.schema[className]?.additionalObjectPermissions?.update, this.acls);\n if (!_.isEmpty(check)) return [];\n return [{ _wperm: { $intersect: this.acls } }];\n }\n _expiredAt = { $or: [{ _expired_at: { $eq: null } }, { _expired_at: { $gt: new Date() } }] };\n\n constructor(\n proto: ProtoService<E>,\n acls: string[],\n master: boolean,\n disableSecurity: boolean,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.master = master;\n this.disableSecurity = disableSecurity;\n }\n\n get schema() {\n return this.proto.schema;\n }\n\n get objectIdSize() {\n return this.proto[PVK].options.objectIdSize;\n }\n\n static recursiveCheck(...x: any[]) {\n recursiveCheck(x, []);\n }\n\n validateKeyPerm(\n key: string,\n type: keyof TSchema.FLPs,\n schema: TSchema,\n ) {\n key = _.first(key?.split('.')) ?? key;\n if (_.isEmpty(key) || (!_.has(schema.fields, key) && !TObject.defaultKeys.includes(key))) throw Error(`Invalid key: ${key}`);\n if (type === 'read' && TObject.defaultKeys.includes(key)) return true;\n if (type !== 'read' && TObject.defaultReadonlyKeys.includes(key)) return false;\n if (!this.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.master || !_.every(schema.fieldLevelPermissions?.[key]?.[type] ?? ['*'], x => !_.includes(this.acls, x));\n }\n\n validateCLPs(\n className: string,\n ...keys: (keyof TSchema.CLPs)[]\n ) {\n if (!_.has(this.schema, className)) throw Error('No permission');\n return this.master || this.proto[PVK].validateCLPs(className, this.acls, keys);\n }\n\n validateForeignField(dataType: TSchema.RelationType, type: keyof TSchema.FLPs, errorMeg: string) {\n if (_.isNil(dataType.foreignField)) return;\n const foreignField = resolveDataType(this.schema, dataType.target, dataType.foreignField);\n if (_.isNil(foreignField) || _.isString(foreignField)) throw Error(errorMeg);\n if (isPrimitive(foreignField)) throw Error(errorMeg);\n if (foreignField.type === 'relation' && !_.isNil(foreignField.foreignField)) throw Error(errorMeg);\n if (!this.validateKeyPerm(dataType.foreignField, type, this.schema[dataType.target])) throw Error('No permission');\n }\n\n validateKey(\n className: string,\n key: string | string[],\n type: keyof TSchema.FLPs,\n validator: RegExp,\n ): boolean {\n\n const schema = this.schema[className] ?? {};\n const _key = _.isArray(key) ? key.join('.') : key;\n if (!_key.match(validator)) throw Error(`Invalid key: ${_key}`);\n\n const [colname, ..._subpath] = _.toPath(_key);\n if (!this.validateKeyPerm(colname, type, schema)) return false;\n if (_.isEmpty(_subpath) && TObject.defaultKeys.includes(colname)) return true;\n if (_.isEmpty(_subpath)) return true;\n\n const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, _key);\n const isElem = _.first(subpath)?.match(QueryValidator.patterns.digits);\n if (isElem) {\n if (dataType === 'array') return true;\n if (!_.isString(dataType) && dataType.type !== 'relation') return false;\n }\n\n if (isPrimitive(dataType)) return true;\n if (isVector(dataType)) return true;\n\n const relations: (TSchema.PointerType | TSchema.RelationType)[] = [];\n\n if (isShape(dataType)) {\n for (const { type } of shapePaths(dataType)) {\n if (!isPrimitive(type) && !isVector(type)) relations.push(type);\n }\n } else {\n relations.push(dataType);\n }\n\n for (const relation of relations) {\n if (_.isNil(this.schema[relation.target])) return false;\n if (type === 'read' && !this.validateCLPs(relation.target, 'get')) return false;\n if (relation.type === 'relation') this.validateForeignField(relation, type, `Invalid key: ${_key}`);\n }\n\n if (isShape(dataType)) {\n if (!_.isEmpty(subpath)) throw Error(`Invalid key: ${_key}`);\n return true;\n }\n\n const _sub = isElem ? subpath.slice(1) : subpath;\n return _.isEmpty(_sub) || this.validateKey(dataType.target, _sub, type, validator);\n }\n\n validateFields<T extends Record<string, any>>(\n className: string,\n values: T,\n type: keyof TSchema.FLPs,\n validator: RegExp,\n ) {\n const _values = { ...values };\n for (const key of _.keys(_values)) {\n if (!this.validateKey(className, key, type, validator)) throw Error('No permission');\n }\n return _values;\n }\n\n decodeIncludes(className: string, includes: string[]): string[] {\n\n const schema = this.schema[className] ?? {};\n\n const _includes: string[] = [];\n const populates: Record<string, { className: string; subpaths: string[]; }> = {};\n\n for (const include of includes) {\n if (include === '*') {\n const primitive = _.pickBy(schema.fields, (v, k) => isPrimitive(v) && this.validateKeyPerm(k, 'read', schema));\n const shapedObject = _.pickBy(schema.fields, (v, k) => isShape(v) && this.validateKeyPerm(k, 'read', schema));\n _includes.push(\n ..._.keys(primitive),\n ..._.flatMap(shapedObject, (v, k) => _.flatMap(shapePaths(v as any), x => isPrimitive(x.type) ? [`${k}.${x.path}`] : [])),\n );\n } else {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(this.schema, className, include);\n if (!this.validateKeyPerm(colname, 'read', schema)) throw Error('No permission');\n\n if (isPointer(dataType) || isRelation(dataType)) {\n if (!this.validateCLPs(dataType.target, 'get')) throw Error('No permission');\n if (dataType.type === 'relation') this.validateForeignField(dataType, 'read', `Invalid include: ${include}`);\n\n const isDigit = _.first(subpath)?.match(QueryValidator.patterns.digits);\n const _subpath = isRelation(dataType) && isDigit ? _.slice(subpath, 1) : subpath;\n\n populates[colname] = populates[colname] ?? { className: dataType.target, subpaths: [] };\n populates[colname].subpaths.push(_.isEmpty(_subpath) ? '*' : _subpath.join('.'));\n\n } else if (_.isEmpty(subpath) && isShape(dataType)) {\n\n for (const { path, type } of shapePaths(dataType)) {\n if (isPrimitive(type) || isVector(type)) {\n _includes.push(`${colname}.${path}`);\n } else {\n\n if (!this.validateCLPs(type.target, 'get')) throw Error('No permission');\n if (type.type === 'relation') this.validateForeignField(type, 'read', `Invalid include: ${include}`);\n\n populates[`${colname}.${path}`] = populates[`${colname}.${path}`] ?? { className: type.target, subpaths: [] };\n populates[`${colname}.${path}`].subpaths.push('*');\n }\n }\n\n } else if (_.isEmpty(subpath) || _.includes(['object', 'array'], _typeof(dataType))) {\n _includes.push(colname);\n } else {\n throw Error(`Invalid include: ${include}`);\n }\n }\n }\n\n for (const [key, populate] of _.toPairs(populates)) {\n const subpaths = this.decodeIncludes(populate.className, populate.subpaths);\n _includes.push(..._.map(subpaths, x => `${key}.${x}`));\n }\n\n _includes.push(...TObject.defaultKeys);\n return _.uniq(_includes);\n }\n\n decodeSort(sort: Record<string, 1 | -1> | TSortOption[]): Record<string, 1 | -1> | DecodedSortOption[] {\n if (_.isArray(sort)) {\n return _.map(sort, s => ({\n order: s.order,\n expr: QueryExpression.decode(s.expr, false).simplify(),\n }))\n }\n return sort;\n }\n\n decodeMatches(className: string, matches: Record<string, TQueryBaseOptions>, includes: string[]): Record<string, DecodedBaseQuery> {\n\n const schema = this.schema[className] ?? {};\n const _matches: Record<string, DecodedBaseQuery> = {};\n\n const _includes = _.groupBy(_.map(includes, x => resolveColumn(this.schema, className, x)), ({ paths: [colname] }) => colname);\n\n for (const [colname, [{ dataType }]] of _.entries(_includes)) {\n if (!this.validateKeyPerm(colname, 'read', schema)) continue;\n if (isPrimitive(dataType) || isVector(dataType) || isShape(dataType)) continue;\n _matches[colname] = {\n matches: this.decodeMatches(\n dataType.target, {},\n includes.filter(x => x.startsWith(`${colname}.`)).map(x => x.slice(colname.length + 1)),\n ),\n };\n }\n\n for (const [colname, match] of _.toPairs(matches)) {\n if (!this.validateKeyPerm(colname, 'read', schema)) throw Error('No permission');\n\n const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, colname);\n\n if (isPointer(dataType) && !_.isEmpty(subpath)) {\n _matches[_colname] = {\n matches: this.decodeMatches(\n dataType.target, { [subpath.join('.')]: match },\n includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1)),\n ),\n };\n } else if (isRelation(dataType)) {\n if (!this.validateCLPs(dataType.target, 'get')) throw Error('No permission');\n this.validateForeignField(dataType, 'read', `Invalid match: ${colname}`);\n _matches[_colname] = {\n ...match,\n filter: QuerySelector.decode(_.castArray<TQuerySelector>(match.filter)).simplify(),\n matches: this.decodeMatches(\n dataType.target, match.matches ?? {},\n includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1)),\n ),\n sort: match.sort && this.decodeSort(match.sort),\n };\n } else {\n throw Error(`Invalid match: ${colname}`);\n }\n }\n\n return _matches;\n }\n\n validateRelatedBy(className: string | null, relation: { className: string; key: string; }) {\n\n if (!this.validateCLPs(relation.className, 'get')) throw Error('No permission');\n if (!this.validateKey(relation.className, relation.key, 'read', QueryValidator.patterns.path)) throw Error('No permission');\n\n const { dataType } = resolveColumn(this.schema, relation.className, relation.key);\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid relation key: ${relation.key}`);\n if (className && dataType.target !== className) throw Error(`Invalid relation key: ${relation.key}`);\n\n if (isRelation(dataType) && dataType.foreignField) {\n this.validateForeignField(dataType, 'read', `Invalid relation key: ${relation.key}`);\n this.validateRelatedBy(null, { className: dataType.target, key: dataType.foreignField });\n }\n }\n\n decodeQuery<Q extends (FindOptions & RelationOptions) | FindOneOptions>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n const filter = QuerySelector.decode([\n ...action === 'read' ? this._rperm(query.className) : this._wperm(query.className),\n ..._.castArray<TQuerySelector>(query.filter),\n this._expiredAt,\n ]).simplify();\n\n const matcheKeyPaths = (\n matches: Record<string, TQueryBaseOptions>\n ): string[] => _.flatMap(matches, (match, key) => [\n ..._.keys(match.sort),\n ...QuerySelector.decode(match.filter ?? []).keyPaths(),\n ...matcheKeyPaths(match.matches ?? {}),\n ].map(x => `${key}.${x}`));\n\n const sort = query.sort && this.decodeSort(query.sort);\n\n const keyPaths = _.uniq([\n ...query.includes ?? ['*'],\n ..._.isArray(sort) ? _.flatMap(sort, s => s.expr.keyPaths()) : _.keys(sort),\n ...filter.keyPaths(),\n ...matcheKeyPaths(query.matches ?? {}),\n ]);\n\n const includes = this.decodeIncludes(query.className, keyPaths);\n const matches = this.decodeMatches(query.className, query.matches ?? {}, includes);\n\n return {\n ...query,\n filter,\n matches,\n includes,\n sort,\n objectIdSize: this.objectIdSize,\n extraFilter: (className) => QuerySelector.decode([...this._rperm(className), this._expiredAt]).simplify(),\n };\n }\n\n isGetMethod(query: QuerySelector) {\n\n const objectIds = [];\n\n if (query instanceof QueryCoditionalSelector && query.type === '$and') {\n for (const expr of query.exprs) {\n if (\n expr instanceof QueryFieldSelector &&\n expr.field === '_id' &&\n expr.expr.type === '$eq'\n ) {\n if (!_.isString(expr.expr.value)) return false;\n objectIds.push(expr.expr.value);\n }\n }\n } else if (\n query instanceof QueryFieldSelector &&\n query.field === '_id' &&\n query.expr.type === '$eq'\n ) {\n if (!_.isString(query.expr.value)) return false;\n objectIds.push(query.expr.value);\n }\n\n return _.uniq(objectIds).length === 1;\n }\n\n}\n","//\n// random.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { randomBytes } from '@o2ter/crypto-js';\n\nconst chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\nexport const generateId = (size: number): string => {\n let id = '';\n for (const x of randomBytes(size)) {\n id += chars[x % chars.length];\n }\n return id;\n}\n"],"names":[],"mappings":"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"}
@@ -278,7 +278,6 @@ class QueryValidator {
278
278
  if (index.isPrimitive(dataType) || index.isVector(dataType) || index.isShape(dataType))
279
279
  continue;
280
280
  _matches[colname] = {
281
- filter: index$1.QuerySelector.decode([...this._rperm(dataType.target), this._expiredAt]).simplify(),
282
281
  matches: this.decodeMatches(dataType.target, {}, includes.filter(x => x.startsWith(`${colname}.`)).map(x => x.slice(colname.length + 1))),
283
282
  };
284
283
  }
@@ -288,7 +287,6 @@ class QueryValidator {
288
287
  const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, colname);
289
288
  if (index.isPointer(dataType) && !_.isEmpty(subpath)) {
290
289
  _matches[_colname] = {
291
- filter: index$1.QuerySelector.decode([...this._rperm(dataType.target), this._expiredAt]).simplify(),
292
290
  matches: this.decodeMatches(dataType.target, { [subpath.join('.')]: match }, includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1))),
293
291
  };
294
292
  }
@@ -298,11 +296,7 @@ class QueryValidator {
298
296
  this.validateForeignField(dataType, 'read', `Invalid match: ${colname}`);
299
297
  _matches[_colname] = {
300
298
  ...match,
301
- filter: index$1.QuerySelector.decode([
302
- ...this._rperm(dataType.target),
303
- this._expiredAt,
304
- ..._.castArray(match.filter),
305
- ]).simplify(),
299
+ filter: index$1.QuerySelector.decode(_.castArray(match.filter)).simplify(),
306
300
  matches: this.decodeMatches(dataType.target, match.matches ?? {}, includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1))),
307
301
  sort: match.sort && this.decodeSort(match.sort),
308
302
  };
@@ -357,6 +351,7 @@ class QueryValidator {
357
351
  includes,
358
352
  sort,
359
353
  objectIdSize: this.objectIdSize,
354
+ extraFilter: (className) => index$1.QuerySelector.decode([...this._rperm(className), this._expiredAt]).simplify(),
360
355
  };
361
356
  }
362
357
  isGetMethod(query) {
@@ -420,4 +415,4 @@ exports.QueryValidator = QueryValidator;
420
415
  exports.generateId = generateId;
421
416
  exports.resolveColumn = resolveColumn;
422
417
  exports.resolveDataType = resolveDataType;
423
- //# sourceMappingURL=random-uT4D0y_q.js.map
418
+ //# sourceMappingURL=random-q0PeamQE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random-q0PeamQE.js","sources":["../../../src/server/query/dispatcher/validator.ts","../../../src/server/crypto/random.ts"],"sourcesContent":["//\n// validator.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { DecodedBaseQuery, DecodedQuery, FindOptions, FindOneOptions, DecodedSortOption, RelationOptions } from '../../storage';\nimport { QueryCoditionalSelector, QueryFieldSelector, QuerySelector } from './parser';\nimport { TSchema, _typeof, isPointer, isPrimitive, isRelation, isShape, isVector, shapePaths } from '../../../internals/schema';\nimport { ProtoService } from '../../proto';\nimport { TQueryBaseOptions, TSortOption } from '../../../internals/query/base';\nimport { isPrimitiveValue } from '../../../internals/object';\nimport { TObject } from '../../../internals/object';\nimport { PVK } from '../../../internals/private';\nimport { TQuerySelector } from '../../../internals/query/types/selectors';\nimport { QueryExpression } from './parser/expressions';\n\nexport const recursiveCheck = (x: any, stack: any[]) => {\n if (_.indexOf(stack, x) !== -1) throw Error('Recursive data detected');\n if (_.isRegExp(x) || isPrimitiveValue(x) || x instanceof TObject) return;\n const children = _.isArray(x) ? x : _.values(x);\n children.forEach(v => recursiveCheck(v, [...stack, x]));\n}\n\nexport const resolveDataType = (\n schema: Record<string, TSchema>,\n classname: string,\n path: string,\n) => {\n let fields = schema[classname].fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) return dataType;\n if (isShape(dataType)) {\n fields = dataType.shape;\n continue;\n }\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid path: ${path}`);\n fields = schema[dataType.target].fields;\n last = dataType;\n }\n return last;\n}\n\nexport const resolveColumn = (\n schema: Record<string, TSchema>,\n className: string,\n path: string,\n) => {\n const _schema = schema[className] ?? {};\n let [colname, ...subpath] = path.split('.');\n let dataType = _schema.fields[colname];\n while (dataType && !_.isEmpty(subpath) && isShape(dataType)) {\n const [key, ...remain] = subpath;\n if (!dataType.shape[key]) break;\n dataType = dataType.shape[key];\n colname = `${colname}.${key}`;\n subpath = remain;\n }\n return {\n paths: [colname, ...subpath],\n dataType,\n };\n}\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n master: boolean;\n disableSecurity: boolean;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n name: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.master) return [];\n const check = _.intersection(this.schema[className]?.additionalObjectPermissions?.read, this.acls);\n if (!_.isEmpty(check)) return [];\n return [{ _rperm: { $intersect: this.acls } }];\n }\n _wperm(className: string) {\n if (this.master) return [];\n const check = _.intersection(this.schema[className]?.additionalObjectPermissions?.update, this.acls);\n if (!_.isEmpty(check)) return [];\n return [{ _wperm: { $intersect: this.acls } }];\n }\n _expiredAt = { $or: [{ _expired_at: { $eq: null } }, { _expired_at: { $gt: new Date() } }] };\n\n constructor(\n proto: ProtoService<E>,\n acls: string[],\n master: boolean,\n disableSecurity: boolean,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.master = master;\n this.disableSecurity = disableSecurity;\n }\n\n get schema() {\n return this.proto.schema;\n }\n\n get objectIdSize() {\n return this.proto[PVK].options.objectIdSize;\n }\n\n static recursiveCheck(...x: any[]) {\n recursiveCheck(x, []);\n }\n\n validateKeyPerm(\n key: string,\n type: keyof TSchema.FLPs,\n schema: TSchema,\n ) {\n key = _.first(key?.split('.')) ?? key;\n if (_.isEmpty(key) || (!_.has(schema.fields, key) && !TObject.defaultKeys.includes(key))) throw Error(`Invalid key: ${key}`);\n if (type === 'read' && TObject.defaultKeys.includes(key)) return true;\n if (type !== 'read' && TObject.defaultReadonlyKeys.includes(key)) return false;\n if (!this.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.master || !_.every(schema.fieldLevelPermissions?.[key]?.[type] ?? ['*'], x => !_.includes(this.acls, x));\n }\n\n validateCLPs(\n className: string,\n ...keys: (keyof TSchema.CLPs)[]\n ) {\n if (!_.has(this.schema, className)) throw Error('No permission');\n return this.master || this.proto[PVK].validateCLPs(className, this.acls, keys);\n }\n\n validateForeignField(dataType: TSchema.RelationType, type: keyof TSchema.FLPs, errorMeg: string) {\n if (_.isNil(dataType.foreignField)) return;\n const foreignField = resolveDataType(this.schema, dataType.target, dataType.foreignField);\n if (_.isNil(foreignField) || _.isString(foreignField)) throw Error(errorMeg);\n if (isPrimitive(foreignField)) throw Error(errorMeg);\n if (foreignField.type === 'relation' && !_.isNil(foreignField.foreignField)) throw Error(errorMeg);\n if (!this.validateKeyPerm(dataType.foreignField, type, this.schema[dataType.target])) throw Error('No permission');\n }\n\n validateKey(\n className: string,\n key: string | string[],\n type: keyof TSchema.FLPs,\n validator: RegExp,\n ): boolean {\n\n const schema = this.schema[className] ?? {};\n const _key = _.isArray(key) ? key.join('.') : key;\n if (!_key.match(validator)) throw Error(`Invalid key: ${_key}`);\n\n const [colname, ..._subpath] = _.toPath(_key);\n if (!this.validateKeyPerm(colname, type, schema)) return false;\n if (_.isEmpty(_subpath) && TObject.defaultKeys.includes(colname)) return true;\n if (_.isEmpty(_subpath)) return true;\n\n const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, _key);\n const isElem = _.first(subpath)?.match(QueryValidator.patterns.digits);\n if (isElem) {\n if (dataType === 'array') return true;\n if (!_.isString(dataType) && dataType.type !== 'relation') return false;\n }\n\n if (isPrimitive(dataType)) return true;\n if (isVector(dataType)) return true;\n\n const relations: (TSchema.PointerType | TSchema.RelationType)[] = [];\n\n if (isShape(dataType)) {\n for (const { type } of shapePaths(dataType)) {\n if (!isPrimitive(type) && !isVector(type)) relations.push(type);\n }\n } else {\n relations.push(dataType);\n }\n\n for (const relation of relations) {\n if (_.isNil(this.schema[relation.target])) return false;\n if (type === 'read' && !this.validateCLPs(relation.target, 'get')) return false;\n if (relation.type === 'relation') this.validateForeignField(relation, type, `Invalid key: ${_key}`);\n }\n\n if (isShape(dataType)) {\n if (!_.isEmpty(subpath)) throw Error(`Invalid key: ${_key}`);\n return true;\n }\n\n const _sub = isElem ? subpath.slice(1) : subpath;\n return _.isEmpty(_sub) || this.validateKey(dataType.target, _sub, type, validator);\n }\n\n validateFields<T extends Record<string, any>>(\n className: string,\n values: T,\n type: keyof TSchema.FLPs,\n validator: RegExp,\n ) {\n const _values = { ...values };\n for (const key of _.keys(_values)) {\n if (!this.validateKey(className, key, type, validator)) throw Error('No permission');\n }\n return _values;\n }\n\n decodeIncludes(className: string, includes: string[]): string[] {\n\n const schema = this.schema[className] ?? {};\n\n const _includes: string[] = [];\n const populates: Record<string, { className: string; subpaths: string[]; }> = {};\n\n for (const include of includes) {\n if (include === '*') {\n const primitive = _.pickBy(schema.fields, (v, k) => isPrimitive(v) && this.validateKeyPerm(k, 'read', schema));\n const shapedObject = _.pickBy(schema.fields, (v, k) => isShape(v) && this.validateKeyPerm(k, 'read', schema));\n _includes.push(\n ..._.keys(primitive),\n ..._.flatMap(shapedObject, (v, k) => _.flatMap(shapePaths(v as any), x => isPrimitive(x.type) ? [`${k}.${x.path}`] : [])),\n );\n } else {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(this.schema, className, include);\n if (!this.validateKeyPerm(colname, 'read', schema)) throw Error('No permission');\n\n if (isPointer(dataType) || isRelation(dataType)) {\n if (!this.validateCLPs(dataType.target, 'get')) throw Error('No permission');\n if (dataType.type === 'relation') this.validateForeignField(dataType, 'read', `Invalid include: ${include}`);\n\n const isDigit = _.first(subpath)?.match(QueryValidator.patterns.digits);\n const _subpath = isRelation(dataType) && isDigit ? _.slice(subpath, 1) : subpath;\n\n populates[colname] = populates[colname] ?? { className: dataType.target, subpaths: [] };\n populates[colname].subpaths.push(_.isEmpty(_subpath) ? '*' : _subpath.join('.'));\n\n } else if (_.isEmpty(subpath) && isShape(dataType)) {\n\n for (const { path, type } of shapePaths(dataType)) {\n if (isPrimitive(type) || isVector(type)) {\n _includes.push(`${colname}.${path}`);\n } else {\n\n if (!this.validateCLPs(type.target, 'get')) throw Error('No permission');\n if (type.type === 'relation') this.validateForeignField(type, 'read', `Invalid include: ${include}`);\n\n populates[`${colname}.${path}`] = populates[`${colname}.${path}`] ?? { className: type.target, subpaths: [] };\n populates[`${colname}.${path}`].subpaths.push('*');\n }\n }\n\n } else if (_.isEmpty(subpath) || _.includes(['object', 'array'], _typeof(dataType))) {\n _includes.push(colname);\n } else {\n throw Error(`Invalid include: ${include}`);\n }\n }\n }\n\n for (const [key, populate] of _.toPairs(populates)) {\n const subpaths = this.decodeIncludes(populate.className, populate.subpaths);\n _includes.push(..._.map(subpaths, x => `${key}.${x}`));\n }\n\n _includes.push(...TObject.defaultKeys);\n return _.uniq(_includes);\n }\n\n decodeSort(sort: Record<string, 1 | -1> | TSortOption[]): Record<string, 1 | -1> | DecodedSortOption[] {\n if (_.isArray(sort)) {\n return _.map(sort, s => ({\n order: s.order,\n expr: QueryExpression.decode(s.expr, false).simplify(),\n }))\n }\n return sort;\n }\n\n decodeMatches(className: string, matches: Record<string, TQueryBaseOptions>, includes: string[]): Record<string, DecodedBaseQuery> {\n\n const schema = this.schema[className] ?? {};\n const _matches: Record<string, DecodedBaseQuery> = {};\n\n const _includes = _.groupBy(_.map(includes, x => resolveColumn(this.schema, className, x)), ({ paths: [colname] }) => colname);\n\n for (const [colname, [{ dataType }]] of _.entries(_includes)) {\n if (!this.validateKeyPerm(colname, 'read', schema)) continue;\n if (isPrimitive(dataType) || isVector(dataType) || isShape(dataType)) continue;\n _matches[colname] = {\n matches: this.decodeMatches(\n dataType.target, {},\n includes.filter(x => x.startsWith(`${colname}.`)).map(x => x.slice(colname.length + 1)),\n ),\n };\n }\n\n for (const [colname, match] of _.toPairs(matches)) {\n if (!this.validateKeyPerm(colname, 'read', schema)) throw Error('No permission');\n\n const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, colname);\n\n if (isPointer(dataType) && !_.isEmpty(subpath)) {\n _matches[_colname] = {\n matches: this.decodeMatches(\n dataType.target, { [subpath.join('.')]: match },\n includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1)),\n ),\n };\n } else if (isRelation(dataType)) {\n if (!this.validateCLPs(dataType.target, 'get')) throw Error('No permission');\n this.validateForeignField(dataType, 'read', `Invalid match: ${colname}`);\n _matches[_colname] = {\n ...match,\n filter: QuerySelector.decode(_.castArray<TQuerySelector>(match.filter)).simplify(),\n matches: this.decodeMatches(\n dataType.target, match.matches ?? {},\n includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1)),\n ),\n sort: match.sort && this.decodeSort(match.sort),\n };\n } else {\n throw Error(`Invalid match: ${colname}`);\n }\n }\n\n return _matches;\n }\n\n validateRelatedBy(className: string | null, relation: { className: string; key: string; }) {\n\n if (!this.validateCLPs(relation.className, 'get')) throw Error('No permission');\n if (!this.validateKey(relation.className, relation.key, 'read', QueryValidator.patterns.path)) throw Error('No permission');\n\n const { dataType } = resolveColumn(this.schema, relation.className, relation.key);\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid relation key: ${relation.key}`);\n if (className && dataType.target !== className) throw Error(`Invalid relation key: ${relation.key}`);\n\n if (isRelation(dataType) && dataType.foreignField) {\n this.validateForeignField(dataType, 'read', `Invalid relation key: ${relation.key}`);\n this.validateRelatedBy(null, { className: dataType.target, key: dataType.foreignField });\n }\n }\n\n decodeQuery<Q extends (FindOptions & RelationOptions) | FindOneOptions>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n const filter = QuerySelector.decode([\n ...action === 'read' ? this._rperm(query.className) : this._wperm(query.className),\n ..._.castArray<TQuerySelector>(query.filter),\n this._expiredAt,\n ]).simplify();\n\n const matcheKeyPaths = (\n matches: Record<string, TQueryBaseOptions>\n ): string[] => _.flatMap(matches, (match, key) => [\n ..._.keys(match.sort),\n ...QuerySelector.decode(match.filter ?? []).keyPaths(),\n ...matcheKeyPaths(match.matches ?? {}),\n ].map(x => `${key}.${x}`));\n\n const sort = query.sort && this.decodeSort(query.sort);\n\n const keyPaths = _.uniq([\n ...query.includes ?? ['*'],\n ..._.isArray(sort) ? _.flatMap(sort, s => s.expr.keyPaths()) : _.keys(sort),\n ...filter.keyPaths(),\n ...matcheKeyPaths(query.matches ?? {}),\n ]);\n\n const includes = this.decodeIncludes(query.className, keyPaths);\n const matches = this.decodeMatches(query.className, query.matches ?? {}, includes);\n\n return {\n ...query,\n filter,\n matches,\n includes,\n sort,\n objectIdSize: this.objectIdSize,\n extraFilter: (className) => QuerySelector.decode([...this._rperm(className), this._expiredAt]).simplify(),\n };\n }\n\n isGetMethod(query: QuerySelector) {\n\n const objectIds = [];\n\n if (query instanceof QueryCoditionalSelector && query.type === '$and') {\n for (const expr of query.exprs) {\n if (\n expr instanceof QueryFieldSelector &&\n expr.field === '_id' &&\n expr.expr.type === '$eq'\n ) {\n if (!_.isString(expr.expr.value)) return false;\n objectIds.push(expr.expr.value);\n }\n }\n } else if (\n query instanceof QueryFieldSelector &&\n query.field === '_id' &&\n query.expr.type === '$eq'\n ) {\n if (!_.isString(query.expr.value)) return false;\n objectIds.push(query.expr.value);\n }\n\n return _.uniq(objectIds).length === 1;\n }\n\n}\n","//\n// random.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { randomBytes } from '@o2ter/crypto-js';\n\nconst chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\nexport const generateId = (size: number): string => {\n let id = '';\n for (const x of randomBytes(size)) {\n id += chars[x % chars.length];\n }\n return id;\n}\n"],"names":["isPrimitiveValue","TObject","isPrimitive","isVector","isShape","PVK","shapePaths","isPointer","isRelation","_typeof","QueryExpression","QuerySelector","QueryCoditionalSelector","QueryFieldSelector","randomBytes"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "proto.io",
3
- "version": "0.0.163",
3
+ "version": "0.0.165",
4
4
  "main": "dist/index",
5
5
  "module": "dist/index",
6
6
  "types": "dist/index",
@@ -16,41 +16,41 @@
16
16
  "test": "jest --detectOpenHandles"
17
17
  },
18
18
  "dependencies": {
19
- "@google-cloud/storage": "^7.11.0",
19
+ "@google-cloud/storage": "^7.14.0",
20
20
  "@o2ter/crypto-js": "^0.0.7",
21
21
  "@o2ter/utils-js": "^0.0.11",
22
- "axios": "^1.7.4",
22
+ "axios": "^1.7.7",
23
23
  "busboy": "^1.6.0",
24
24
  "decimal.js": "^10.4.3",
25
25
  "jsonwebtoken": "^9.0.2",
26
26
  "lodash": ">=4.17.21",
27
- "pg": "^8.11.5",
28
- "pg-query-stream": "^4.5.5",
27
+ "pg": "^8.13.1",
28
+ "pg-query-stream": "^4.7.1",
29
29
  "query-types": "^0.1.4",
30
- "socket.io-client": "^4.7.5"
30
+ "socket.io-client": "^4.8.1"
31
31
  },
32
32
  "devDependencies": {
33
- "@babel/core": "^7.24.5",
34
- "@babel/preset-env": "^7.24.5",
35
- "@babel/preset-typescript": "^7.24.1",
36
- "@o2ter/server-js": "^0.0.17",
33
+ "@babel/core": "^7.26.0",
34
+ "@babel/preset-env": "^7.26.0",
35
+ "@babel/preset-typescript": "^7.26.0",
36
+ "@o2ter/server-js": "^0.0.18",
37
37
  "@rollup/plugin-babel": "^6.0.4",
38
- "@rollup/plugin-commonjs": "^25.0.7",
38
+ "@rollup/plugin-commonjs": "^28.0.1",
39
39
  "@rollup/plugin-json": "^6.1.0",
40
- "@rollup/plugin-node-resolve": "^15.2.3",
41
- "@rollup/plugin-typescript": "^11.1.6",
40
+ "@rollup/plugin-node-resolve": "^15.3.0",
41
+ "@rollup/plugin-typescript": "^12.1.1",
42
42
  "@types/busboy": "^1.5.4",
43
- "@types/jsonwebtoken": "^9.0.6",
44
- "@types/lodash": "^4.17.4",
45
- "@types/pg": "^8.11.6",
43
+ "@types/jsonwebtoken": "^9.0.7",
44
+ "@types/lodash": "^4.17.13",
45
+ "@types/pg": "^8.11.10",
46
46
  "@types/pg-query-stream": "^3.4.0",
47
47
  "babel-jest": "^29.7.0",
48
48
  "jest": "^29.7.0",
49
- "rollup": "^4.22.4",
49
+ "rollup": "^4.27.3",
50
50
  "rollup-plugin-dts": "^6.1.1",
51
- "ts-jest": "^29.1.2",
51
+ "ts-jest": "^29.2.5",
52
52
  "ts-node": "^10.9.2",
53
- "tslib": "^2.6.2",
54
- "typescript": "^5.4.5"
53
+ "tslib": "^2.8.1",
54
+ "typescript": "^5.6.3"
55
55
  }
56
56
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BeV63sFw.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BsuUdR0W.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-YdOGTHp1.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"random-uT4D0y_q.js","sources":["../../../src/server/query/dispatcher/validator.ts","../../../src/server/crypto/random.ts"],"sourcesContent":["//\n// validator.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { DecodedBaseQuery, DecodedQuery, FindOptions, FindOneOptions, DecodedSortOption, RelationOptions } from '../../storage';\nimport { QueryCoditionalSelector, QueryFieldSelector, QuerySelector } from './parser';\nimport { TSchema, _typeof, isPointer, isPrimitive, isRelation, isShape, isVector, shapePaths } from '../../../internals/schema';\nimport { ProtoService } from '../../proto';\nimport { TQueryBaseOptions, TSortOption } from '../../../internals/query/base';\nimport { isPrimitiveValue } from '../../../internals/object';\nimport { TObject } from '../../../internals/object';\nimport { PVK } from '../../../internals/private';\nimport { TQuerySelector } from '../../../internals/query/types/selectors';\nimport { QueryExpression } from './parser/expressions';\n\nexport const recursiveCheck = (x: any, stack: any[]) => {\n if (_.indexOf(stack, x) !== -1) throw Error('Recursive data detected');\n if (_.isRegExp(x) || isPrimitiveValue(x) || x instanceof TObject) return;\n const children = _.isArray(x) ? x : _.values(x);\n children.forEach(v => recursiveCheck(v, [...stack, x]));\n}\n\nexport const resolveDataType = (\n schema: Record<string, TSchema>,\n classname: string,\n path: string,\n) => {\n let fields = schema[classname].fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) return dataType;\n if (isShape(dataType)) {\n fields = dataType.shape;\n continue;\n }\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid path: ${path}`);\n fields = schema[dataType.target].fields;\n last = dataType;\n }\n return last;\n}\n\nexport const resolveColumn = (\n schema: Record<string, TSchema>,\n className: string,\n path: string,\n) => {\n const _schema = schema[className] ?? {};\n let [colname, ...subpath] = path.split('.');\n let dataType = _schema.fields[colname];\n while (dataType && !_.isEmpty(subpath) && isShape(dataType)) {\n const [key, ...remain] = subpath;\n if (!dataType.shape[key]) break;\n dataType = dataType.shape[key];\n colname = `${colname}.${key}`;\n subpath = remain;\n }\n return {\n paths: [colname, ...subpath],\n dataType,\n };\n}\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n master: boolean;\n disableSecurity: boolean;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n name: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.master) return [];\n const check = _.intersection(this.schema[className]?.additionalObjectPermissions?.read, this.acls);\n if (!_.isEmpty(check)) return [];\n return [{ _rperm: { $intersect: this.acls } }];\n }\n _wperm(className: string) {\n if (this.master) return [];\n const check = _.intersection(this.schema[className]?.additionalObjectPermissions?.update, this.acls);\n if (!_.isEmpty(check)) return [];\n return [{ _wperm: { $intersect: this.acls } }];\n }\n _expiredAt = { $or: [{ _expired_at: { $eq: null } }, { _expired_at: { $gt: new Date() } }] };\n\n constructor(\n proto: ProtoService<E>,\n acls: string[],\n master: boolean,\n disableSecurity: boolean,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.master = master;\n this.disableSecurity = disableSecurity;\n }\n\n get schema() {\n return this.proto.schema;\n }\n\n get objectIdSize() {\n return this.proto[PVK].options.objectIdSize;\n }\n\n static recursiveCheck(...x: any[]) {\n recursiveCheck(x, []);\n }\n\n validateKeyPerm(\n key: string,\n type: keyof TSchema.FLPs,\n schema: TSchema,\n ) {\n key = _.first(key?.split('.')) ?? key;\n if (_.isEmpty(key) || (!_.has(schema.fields, key) && !TObject.defaultKeys.includes(key))) throw Error(`Invalid key: ${key}`);\n if (type === 'read' && TObject.defaultKeys.includes(key)) return true;\n if (type !== 'read' && TObject.defaultReadonlyKeys.includes(key)) return false;\n if (!this.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.master || !_.every(schema.fieldLevelPermissions?.[key]?.[type] ?? ['*'], x => !_.includes(this.acls, x));\n }\n\n validateCLPs(\n className: string,\n ...keys: (keyof TSchema.CLPs)[]\n ) {\n if (!_.has(this.schema, className)) throw Error('No permission');\n return this.master || this.proto[PVK].validateCLPs(className, this.acls, keys);\n }\n\n validateForeignField(dataType: TSchema.RelationType, type: keyof TSchema.FLPs, errorMeg: string) {\n if (_.isNil(dataType.foreignField)) return;\n const foreignField = resolveDataType(this.schema, dataType.target, dataType.foreignField);\n if (_.isNil(foreignField) || _.isString(foreignField)) throw Error(errorMeg);\n if (isPrimitive(foreignField)) throw Error(errorMeg);\n if (foreignField.type === 'relation' && !_.isNil(foreignField.foreignField)) throw Error(errorMeg);\n if (!this.validateKeyPerm(dataType.foreignField, type, this.schema[dataType.target])) throw Error('No permission');\n }\n\n validateKey(\n className: string,\n key: string | string[],\n type: keyof TSchema.FLPs,\n validator: RegExp,\n ): boolean {\n\n const schema = this.schema[className] ?? {};\n const _key = _.isArray(key) ? key.join('.') : key;\n if (!_key.match(validator)) throw Error(`Invalid key: ${_key}`);\n\n const [colname, ..._subpath] = _.toPath(_key);\n if (!this.validateKeyPerm(colname, type, schema)) return false;\n if (_.isEmpty(_subpath) && TObject.defaultKeys.includes(colname)) return true;\n if (_.isEmpty(_subpath)) return true;\n\n const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, _key);\n const isElem = _.first(subpath)?.match(QueryValidator.patterns.digits);\n if (isElem) {\n if (dataType === 'array') return true;\n if (!_.isString(dataType) && dataType.type !== 'relation') return false;\n }\n\n if (isPrimitive(dataType)) return true;\n if (isVector(dataType)) return true;\n\n const relations: (TSchema.PointerType | TSchema.RelationType)[] = [];\n\n if (isShape(dataType)) {\n for (const { type } of shapePaths(dataType)) {\n if (!isPrimitive(type) && !isVector(type)) relations.push(type);\n }\n } else {\n relations.push(dataType);\n }\n\n for (const relation of relations) {\n if (_.isNil(this.schema[relation.target])) return false;\n if (type === 'read' && !this.validateCLPs(relation.target, 'get')) return false;\n if (relation.type === 'relation') this.validateForeignField(relation, type, `Invalid key: ${_key}`);\n }\n\n if (isShape(dataType)) {\n if (!_.isEmpty(subpath)) throw Error(`Invalid key: ${_key}`);\n return true;\n }\n\n const _sub = isElem ? subpath.slice(1) : subpath;\n return _.isEmpty(_sub) || this.validateKey(dataType.target, _sub, type, validator);\n }\n\n validateFields<T extends Record<string, any>>(\n className: string,\n values: T,\n type: keyof TSchema.FLPs,\n validator: RegExp,\n ) {\n const _values = { ...values };\n for (const key of _.keys(_values)) {\n if (!this.validateKey(className, key, type, validator)) throw Error('No permission');\n }\n return _values;\n }\n\n decodeIncludes(className: string, includes: string[]): string[] {\n\n const schema = this.schema[className] ?? {};\n\n const _includes: string[] = [];\n const populates: Record<string, { className: string; subpaths: string[]; }> = {};\n\n for (const include of includes) {\n if (include === '*') {\n const primitive = _.pickBy(schema.fields, (v, k) => isPrimitive(v) && this.validateKeyPerm(k, 'read', schema));\n const shapedObject = _.pickBy(schema.fields, (v, k) => isShape(v) && this.validateKeyPerm(k, 'read', schema));\n _includes.push(\n ..._.keys(primitive),\n ..._.flatMap(shapedObject, (v, k) => _.flatMap(shapePaths(v as any), x => isPrimitive(x.type) ? [`${k}.${x.path}`] : [])),\n );\n } else {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(this.schema, className, include);\n if (!this.validateKeyPerm(colname, 'read', schema)) throw Error('No permission');\n\n if (isPointer(dataType) || isRelation(dataType)) {\n if (!this.validateCLPs(dataType.target, 'get')) throw Error('No permission');\n if (dataType.type === 'relation') this.validateForeignField(dataType, 'read', `Invalid include: ${include}`);\n\n const isDigit = _.first(subpath)?.match(QueryValidator.patterns.digits);\n const _subpath = isRelation(dataType) && isDigit ? _.slice(subpath, 1) : subpath;\n\n populates[colname] = populates[colname] ?? { className: dataType.target, subpaths: [] };\n populates[colname].subpaths.push(_.isEmpty(_subpath) ? '*' : _subpath.join('.'));\n\n } else if (_.isEmpty(subpath) && isShape(dataType)) {\n\n for (const { path, type } of shapePaths(dataType)) {\n if (isPrimitive(type) || isVector(type)) {\n _includes.push(`${colname}.${path}`);\n } else {\n\n if (!this.validateCLPs(type.target, 'get')) throw Error('No permission');\n if (type.type === 'relation') this.validateForeignField(type, 'read', `Invalid include: ${include}`);\n\n populates[`${colname}.${path}`] = populates[`${colname}.${path}`] ?? { className: type.target, subpaths: [] };\n populates[`${colname}.${path}`].subpaths.push('*');\n }\n }\n\n } else if (_.isEmpty(subpath) || _.includes(['object', 'array'], _typeof(dataType))) {\n _includes.push(colname);\n } else {\n throw Error(`Invalid include: ${include}`);\n }\n }\n }\n\n for (const [key, populate] of _.toPairs(populates)) {\n const subpaths = this.decodeIncludes(populate.className, populate.subpaths);\n _includes.push(..._.map(subpaths, x => `${key}.${x}`));\n }\n\n _includes.push(...TObject.defaultKeys);\n return _.uniq(_includes);\n }\n\n decodeSort(sort: Record<string, 1 | -1> | TSortOption[]): Record<string, 1 | -1> | DecodedSortOption[] {\n if (_.isArray(sort)) {\n return _.map(sort, s => ({\n order: s.order,\n expr: QueryExpression.decode(s.expr, false).simplify(),\n }))\n }\n return sort;\n }\n\n decodeMatches(className: string, matches: Record<string, TQueryBaseOptions>, includes: string[]): Record<string, DecodedBaseQuery> {\n\n const schema = this.schema[className] ?? {};\n const _matches: Record<string, DecodedBaseQuery> = {};\n\n const _includes = _.groupBy(_.map(includes, x => resolveColumn(this.schema, className, x)), ({ paths: [colname] }) => colname);\n\n for (const [colname, [{ dataType }]] of _.entries(_includes)) {\n if (!this.validateKeyPerm(colname, 'read', schema)) continue;\n if (isPrimitive(dataType) || isVector(dataType) || isShape(dataType)) continue;\n _matches[colname] = {\n filter: QuerySelector.decode([...this._rperm(dataType.target), this._expiredAt]).simplify(),\n matches: this.decodeMatches(\n dataType.target, {},\n includes.filter(x => x.startsWith(`${colname}.`)).map(x => x.slice(colname.length + 1)),\n ),\n };\n }\n\n for (const [colname, match] of _.toPairs(matches)) {\n if (!this.validateKeyPerm(colname, 'read', schema)) throw Error('No permission');\n\n const { paths: [_colname, ...subpath], dataType } = resolveColumn(this.schema, className, colname);\n\n if (isPointer(dataType) && !_.isEmpty(subpath)) {\n _matches[_colname] = {\n filter: QuerySelector.decode([...this._rperm(dataType.target), this._expiredAt]).simplify(),\n matches: this.decodeMatches(\n dataType.target, { [subpath.join('.')]: match },\n includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1)),\n ),\n };\n } else if (isRelation(dataType)) {\n if (!this.validateCLPs(dataType.target, 'get')) throw Error('No permission');\n this.validateForeignField(dataType, 'read', `Invalid match: ${colname}`);\n _matches[_colname] = {\n ...match,\n filter: QuerySelector.decode([\n ...this._rperm(dataType.target),\n this._expiredAt,\n ..._.castArray<TQuerySelector>(match.filter),\n ]).simplify(),\n matches: this.decodeMatches(\n dataType.target, match.matches ?? {},\n includes.filter(x => x.startsWith(`${_colname}.`)).map(x => x.slice(_colname.length + 1)),\n ),\n sort: match.sort && this.decodeSort(match.sort),\n };\n } else {\n throw Error(`Invalid match: ${colname}`);\n }\n }\n\n return _matches;\n }\n\n validateRelatedBy(className: string | null, relation: { className: string; key: string; }) {\n\n if (!this.validateCLPs(relation.className, 'get')) throw Error('No permission');\n if (!this.validateKey(relation.className, relation.key, 'read', QueryValidator.patterns.path)) throw Error('No permission');\n\n const { dataType } = resolveColumn(this.schema, relation.className, relation.key);\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid relation key: ${relation.key}`);\n if (className && dataType.target !== className) throw Error(`Invalid relation key: ${relation.key}`);\n\n if (isRelation(dataType) && dataType.foreignField) {\n this.validateForeignField(dataType, 'read', `Invalid relation key: ${relation.key}`);\n this.validateRelatedBy(null, { className: dataType.target, key: dataType.foreignField });\n }\n }\n\n decodeQuery<Q extends (FindOptions & RelationOptions) | FindOneOptions>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n const filter = QuerySelector.decode([\n ...action === 'read' ? this._rperm(query.className) : this._wperm(query.className),\n ..._.castArray<TQuerySelector>(query.filter),\n this._expiredAt,\n ]).simplify();\n\n const matcheKeyPaths = (\n matches: Record<string, TQueryBaseOptions>\n ): string[] => _.flatMap(matches, (match, key) => [\n ..._.keys(match.sort),\n ...QuerySelector.decode(match.filter ?? []).keyPaths(),\n ...matcheKeyPaths(match.matches ?? {}),\n ].map(x => `${key}.${x}`));\n\n const sort = query.sort && this.decodeSort(query.sort);\n\n const keyPaths = _.uniq([\n ...query.includes ?? ['*'],\n ..._.isArray(sort) ? _.flatMap(sort, s => s.expr.keyPaths()) : _.keys(sort),\n ...filter.keyPaths(),\n ...matcheKeyPaths(query.matches ?? {}),\n ]);\n\n const includes = this.decodeIncludes(query.className, keyPaths);\n const matches = this.decodeMatches(query.className, query.matches ?? {}, includes);\n\n return {\n ...query,\n filter,\n matches,\n includes,\n sort,\n objectIdSize: this.objectIdSize,\n };\n }\n\n isGetMethod(query: QuerySelector) {\n\n const objectIds = [];\n\n if (query instanceof QueryCoditionalSelector && query.type === '$and') {\n for (const expr of query.exprs) {\n if (\n expr instanceof QueryFieldSelector &&\n expr.field === '_id' &&\n expr.expr.type === '$eq'\n ) {\n if (!_.isString(expr.expr.value)) return false;\n objectIds.push(expr.expr.value);\n }\n }\n } else if (\n query instanceof QueryFieldSelector &&\n query.field === '_id' &&\n query.expr.type === '$eq'\n ) {\n if (!_.isString(query.expr.value)) return false;\n objectIds.push(query.expr.value);\n }\n\n return _.uniq(objectIds).length === 1;\n }\n\n}\n","//\n// random.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { randomBytes } from '@o2ter/crypto-js';\n\nconst chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\nexport const generateId = (size: number): string => {\n let id = '';\n for (const x of randomBytes(size)) {\n id += chars[x % chars.length];\n }\n return id;\n}\n"],"names":["isPrimitiveValue","TObject","isPrimitive","isVector","isShape","PVK","shapePaths","isPointer","isRelation","_typeof","QueryExpression","QuerySelector","QueryCoditionalSelector","QueryFieldSelector","randomBytes"],"mappings":"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"}