proto.io 0.0.209 → 0.0.211

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 (56) hide show
  1. package/dist/adapters/file/aliyun-oss.d.ts +3 -3
  2. package/dist/adapters/file/database.d.ts +2 -2
  3. package/dist/adapters/file/database.js +1 -1
  4. package/dist/adapters/file/database.mjs +1 -1
  5. package/dist/adapters/file/filesystem.d.ts +3 -3
  6. package/dist/adapters/file/google-cloud-storage.d.ts +3 -3
  7. package/dist/adapters/storage/progres.d.ts +1 -1
  8. package/dist/adapters/storage/progres.js +22 -28
  9. package/dist/adapters/storage/progres.js.map +1 -1
  10. package/dist/adapters/storage/progres.mjs +22 -28
  11. package/dist/adapters/storage/progres.mjs.map +1 -1
  12. package/dist/client.d.ts +3 -3
  13. package/dist/client.js +2 -1
  14. package/dist/client.js.map +1 -1
  15. package/dist/client.mjs +3 -2
  16. package/dist/client.mjs.map +1 -1
  17. package/dist/index.d.ts +3 -3
  18. package/dist/index.js +134 -23
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs +127 -16
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/internals/{base-DbSaGX_u.d.ts → base-BCWOHUaQ.d.ts} +2 -2
  23. package/dist/internals/base-BCWOHUaQ.d.ts.map +1 -0
  24. package/dist/internals/{chunk-bYrnqXiI.d.ts → chunk-2pKgkO5-.d.ts} +3 -3
  25. package/dist/internals/chunk-2pKgkO5-.d.ts.map +1 -0
  26. package/dist/internals/const-C3I6cfav.js +42 -0
  27. package/dist/internals/const-C3I6cfav.js.map +1 -0
  28. package/dist/internals/const-Dkp7Nsv5.mjs +34 -0
  29. package/dist/internals/const-Dkp7Nsv5.mjs.map +1 -0
  30. package/dist/internals/{index-Dx36qTUa.d.ts → index-8AdKlZUU.d.ts} +2 -2
  31. package/dist/internals/index-8AdKlZUU.d.ts.map +1 -0
  32. package/dist/internals/index-B8TESzd9.js.map +1 -1
  33. package/dist/internals/{index-CK1snZyh.js → index-Btxxs0KS.js} +106 -29
  34. package/dist/internals/index-Btxxs0KS.js.map +1 -0
  35. package/dist/internals/{index-Eo70ZAdZ.mjs → index-CoeDMG5V.mjs} +101 -20
  36. package/dist/internals/index-CoeDMG5V.mjs.map +1 -0
  37. package/dist/internals/{index-CkAvNaAe.js → index-D8O7SinR.js} +50 -3
  38. package/dist/internals/index-D8O7SinR.js.map +1 -0
  39. package/dist/internals/{index-DlY33lfO.mjs → index-DPPLcZx8.mjs} +51 -4
  40. package/dist/internals/index-DPPLcZx8.mjs.map +1 -0
  41. package/dist/internals/index-al1N-qi7.mjs.map +1 -1
  42. package/dist/internals/{index-Dn1IkLDx.d.ts → index-lTzbCO8S.d.ts} +24 -1
  43. package/dist/internals/index-lTzbCO8S.d.ts.map +1 -0
  44. package/dist/internals/{random-B0V0EnjP.js → random-CyU_Y2Ay.js} +2 -2
  45. package/dist/internals/{random-B0V0EnjP.js.map → random-CyU_Y2Ay.js.map} +1 -1
  46. package/dist/internals/{random-ZgzzM5v_.mjs → random-ycCeBd0S.mjs} +2 -2
  47. package/dist/internals/{random-ZgzzM5v_.mjs.map → random-ycCeBd0S.mjs.map} +1 -1
  48. package/package.json +1 -1
  49. package/dist/internals/base-DbSaGX_u.d.ts.map +0 -1
  50. package/dist/internals/chunk-bYrnqXiI.d.ts.map +0 -1
  51. package/dist/internals/index-CK1snZyh.js.map +0 -1
  52. package/dist/internals/index-CkAvNaAe.js.map +0 -1
  53. package/dist/internals/index-DlY33lfO.mjs.map +0 -1
  54. package/dist/internals/index-Dn1IkLDx.d.ts.map +0 -1
  55. package/dist/internals/index-Dx36qTUa.d.ts.map +0 -1
  56. package/dist/internals/index-Eo70ZAdZ.mjs.map +0 -1
@@ -5,6 +5,7 @@ import { Request, CookieOptions } from '@o2ter/server-js';
5
5
  import Decimal$1, { Decimal } from 'decimal.js';
6
6
  import _ from 'lodash';
7
7
  import { Readable } from 'node:stream';
8
+ import * as socket_io_client from 'socket.io-client';
8
9
  import { Socket } from 'socket.io-client';
9
10
 
10
11
  type _Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
@@ -510,6 +511,18 @@ declare class TQueryBase extends TQueryFilterBase {
510
511
  countMatches<T extends _.RecursiveArray<string>>(...relations: PathNames<T>): this;
511
512
  }
512
513
 
514
+ declare class LiveQuerySubscription<T extends string, E> {
515
+ private _className;
516
+ private _proto;
517
+ private _filter;
518
+ constructor(className: T, proto: ProtoType<E>, filter: TQuerySelector | TQuerySelector[]);
519
+ get className(): T;
520
+ on(event: 'create' | 'update' | 'delete', callback: (object: TObjectType<T, E>) => void): {
521
+ remove: VoidFunction;
522
+ socket?: socket_io_client.Socket;
523
+ };
524
+ }
525
+
513
526
  /**
514
527
  * Options for a query.
515
528
  */
@@ -625,6 +638,7 @@ declare abstract class TQuery<T extends string, Ext, M extends boolean> extends
625
638
  * @returns A promise that resolves to the deleted records.
626
639
  */
627
640
  abstract deleteMany(options?: ExtraOptions<M>): PromiseLike<TObjectType<T, Ext>[]>;
641
+ abstract subscribe(): LiveQuerySubscription<T, Ext>;
628
642
  /**
629
643
  * Adds fields to include in the query.
630
644
  * @param includes - The fields to include.
@@ -834,6 +848,11 @@ declare abstract class ProtoType<Ext> {
834
848
  isRole: (x: any) => x is TRole;
835
849
  isFile: (x: any) => x is TFile;
836
850
  isJob: (x: any) => x is TJob;
851
+ /**
852
+ * Gets the endpoint URL.
853
+ * @returns The endpoint URL as a string.
854
+ */
855
+ get endpoint(): string;
837
856
  /**
838
857
  * Retrieves the configuration.
839
858
  * @param options - Optional settings for retrieving the configuration.
@@ -1539,6 +1558,10 @@ interface TSchema {
1539
1558
  * Indexes for the schema.
1540
1559
  */
1541
1560
  indexes?: TSchema.Indexes[];
1561
+ /**
1562
+ * Indicates if live query is enabled for the schema.
1563
+ */
1564
+ liveQuery?: boolean;
1542
1565
  }
1543
1566
 
1544
1567
  /**
@@ -1917,4 +1940,4 @@ declare class ProtoService<Ext = any> extends ProtoType<Ext> {
1917
1940
  }
1918
1941
 
1919
1942
  export { type FindOptions as A, type TStorage as B, type TransactionOptions as C, type DeserializeOptions as D, type ExtraOptions as E, FieldSelectorExpression as F, type TQueryRandomOptions as G, type TPubSub as H, type InsertOptions as I, type TFileInfo as J, ProtoService as P, QueryExpression as Q, type RelationOptions as R, type SerializeOptions as S, TSchema as T, type TValueWithoutObject as a, type ProtoServiceOptions as b, type ProtoServiceKeyOptions as c, type TFileStorage as d, type TNumber as e, type TSerializable as f, deserialize as g, type TExtensions as h, TQuery as i, TObject as j, TUser as k, TRole as l, TFile as m, TJob as n, ProtoType as o, type PathName as p, type TObjectType as q, type EventData as r, serialize as s, type TQuerySelector as t, type TValueWithUndefined as u, type TValue as v, type TUpdateOp as w, QuerySelector as x, type DecodedSortOption as y, type DecodedQuery as z };
1920
- //# sourceMappingURL=index-Dn1IkLDx.d.ts.map
1943
+ //# sourceMappingURL=index-lTzbCO8S.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-lTzbCO8S.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var _ = require('lodash');
4
- var index$1 = require('./index-CkAvNaAe.js');
4
+ var index$1 = require('./index-D8O7SinR.js');
5
5
  var index = require('./index-B8TESzd9.js');
6
6
  var _private = require('./private-Ciddhure.js');
7
7
  var cryptoJs = require('@o2ter/crypto-js');
@@ -426,4 +426,4 @@ exports.QueryValidator = QueryValidator;
426
426
  exports.generateId = generateId;
427
427
  exports.resolveColumn = resolveColumn;
428
428
  exports.resolveDataType = resolveDataType;
429
- //# sourceMappingURL=random-B0V0EnjP.js.map
429
+ //# sourceMappingURL=random-CyU_Y2Ay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"random-B0V0EnjP.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 - 2025 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, 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\ntype QueryValidatorOption = {\n master: boolean;\n disableSecurity: boolean;\n};\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n options: QueryValidatorOption;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n className: /^[a-z_][\\w]*$/gi,\n fieldName: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.options.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.options.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 options: QueryValidatorOption,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.options = options;\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.options.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.options.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.options.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' || dataType === 'string[]') 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 validateCountMatches(className: string, countMatches: string[]) {\n for (const colname of countMatches) {\n const dataType = resolveDataType(this.schema, className, colname);\n if (!dataType || !isRelation(dataType)) throw Error(`Invalid relation key: ${colname}`);\n }\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 countMatches: match.countMatches ?? [],\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>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n this.validateCountMatches(query.className, query.countMatches ?? []);\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 ...match.countMatches ?? [],\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 ...query.countMatches ?? [],\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 countMatches: query.countMatches ?? [],\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 - 2025 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","isRelation","isPointer","_typeof","QueryExpression","QuerySelector","QueryCoditionalSelector","QueryFieldSelector","randomBytes"],"mappings":"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"}
1
+ {"version":3,"file":"random-CyU_Y2Ay.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 - 2025 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, 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\ntype QueryValidatorOption = {\n master: boolean;\n disableSecurity: boolean;\n};\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n options: QueryValidatorOption;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n className: /^[a-z_][\\w]*$/gi,\n fieldName: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.options.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.options.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 options: QueryValidatorOption,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.options = options;\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.options.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.options.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.options.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' || dataType === 'string[]') 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 validateCountMatches(className: string, countMatches: string[]) {\n for (const colname of countMatches) {\n const dataType = resolveDataType(this.schema, className, colname);\n if (!dataType || !isRelation(dataType)) throw Error(`Invalid relation key: ${colname}`);\n }\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 countMatches: match.countMatches ?? [],\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>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n this.validateCountMatches(query.className, query.countMatches ?? []);\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 ...match.countMatches ?? [],\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 ...query.countMatches ?? [],\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 countMatches: query.countMatches ?? [],\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 - 2025 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","isRelation","isPointer","_typeof","QueryExpression","QuerySelector","QueryCoditionalSelector","QueryFieldSelector","randomBytes"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { k as QueryExpression, Q as QuerySelector, a as QueryCoditionalSelector, b as QueryFieldSelector } from './index-DlY33lfO.mjs';
2
+ import { k as QueryExpression, Q as QuerySelector, a as QueryCoditionalSelector, b as QueryFieldSelector } from './index-DPPLcZx8.mjs';
3
3
  import { c as isPrimitive, f as isVector, b as isShape, T as TObject, s as shapePaths, a as isRelation, i as isPointer, k as _typeof, l as isPrimitiveValue } from './index-al1N-qi7.mjs';
4
4
  import { P as PVK } from './private-CNw40LZ7.mjs';
5
5
  import { randomBytes } from '@o2ter/crypto-js';
@@ -421,4 +421,4 @@ const generateId = (size) => {
421
421
  };
422
422
 
423
423
  export { QueryValidator as Q, resolveDataType as a, generateId as g, resolveColumn as r };
424
- //# sourceMappingURL=random-ZgzzM5v_.mjs.map
424
+ //# sourceMappingURL=random-ycCeBd0S.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"random-ZgzzM5v_.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 - 2025 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, 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\ntype QueryValidatorOption = {\n master: boolean;\n disableSecurity: boolean;\n};\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n options: QueryValidatorOption;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n className: /^[a-z_][\\w]*$/gi,\n fieldName: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.options.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.options.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 options: QueryValidatorOption,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.options = options;\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.options.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.options.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.options.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' || dataType === 'string[]') 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 validateCountMatches(className: string, countMatches: string[]) {\n for (const colname of countMatches) {\n const dataType = resolveDataType(this.schema, className, colname);\n if (!dataType || !isRelation(dataType)) throw Error(`Invalid relation key: ${colname}`);\n }\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 countMatches: match.countMatches ?? [],\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>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n this.validateCountMatches(query.className, query.countMatches ?? []);\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 ...match.countMatches ?? [],\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 ...query.countMatches ?? [],\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 countMatches: query.countMatches ?? [],\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 - 2025 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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"}
1
+ {"version":3,"file":"random-ycCeBd0S.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 - 2025 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, 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\ntype QueryValidatorOption = {\n master: boolean;\n disableSecurity: boolean;\n};\n\nexport class QueryValidator<E> {\n\n proto: ProtoService<E>\n acls: string[];\n options: QueryValidatorOption;\n\n static patterns = {\n path: /^[a-z_][\\w-]*(\\[\\d+\\]|\\.\\d*|\\.[a-z_][\\w-]*)*$/gi,\n className: /^[a-z_][\\w]*$/gi,\n fieldName: /^[a-z_][\\w-]*$/gi,\n digits: /^\\d+$/g,\n }\n\n _rperm(className: string) {\n if (this.options.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.options.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 options: QueryValidatorOption,\n ) {\n this.proto = proto;\n this.acls = _.uniq(['*', ...acls]);\n this.options = options;\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.options.disableSecurity && _.includes(schema.secureFields, key)) return false;\n return this.options.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.options.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' || dataType === 'string[]') 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 validateCountMatches(className: string, countMatches: string[]) {\n for (const colname of countMatches) {\n const dataType = resolveDataType(this.schema, className, colname);\n if (!dataType || !isRelation(dataType)) throw Error(`Invalid relation key: ${colname}`);\n }\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 countMatches: match.countMatches ?? [],\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>(query: Q, action: keyof TSchema.ACLs): DecodedQuery<Q> {\n\n if ('relatedBy' in query && query.relatedBy) this.validateRelatedBy(query.className, query.relatedBy);\n\n this.validateCountMatches(query.className, query.countMatches ?? []);\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 ...match.countMatches ?? [],\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 ...query.countMatches ?? [],\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 countMatches: query.countMatches ?? [],\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 - 2025 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "proto.io",
3
- "version": "0.0.209",
3
+ "version": "0.0.211",
4
4
  "main": "dist/index",
5
5
  "module": "dist/index",
6
6
  "types": "dist/index",
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-DbSaGX_u.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-bYrnqXiI.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}