proto.io 0.0.217 → 0.0.219
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.
- package/dist/adapters/file/aliyun-oss.d.ts +3 -3
- package/dist/adapters/file/database.d.ts +2 -2
- package/dist/adapters/file/database.js +2 -2
- package/dist/adapters/file/database.mjs +2 -2
- package/dist/adapters/file/filesystem.d.ts +3 -3
- package/dist/adapters/file/google-cloud-storage.d.ts +3 -3
- package/dist/adapters/storage/progres.d.ts +1 -1
- package/dist/adapters/storage/progres.js +38 -38
- package/dist/adapters/storage/progres.js.map +1 -1
- package/dist/adapters/storage/progres.mjs +38 -38
- package/dist/adapters/storage/progres.mjs.map +1 -1
- package/dist/client.d.ts +3 -3
- package/dist/client.js +2 -2
- package/dist/client.mjs +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +27 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -28
- package/dist/index.mjs.map +1 -1
- package/dist/internals/{base-CWnOBKD5.d.ts → base-C1uAg1dD.d.ts} +2 -2
- package/dist/internals/base-C1uAg1dD.d.ts.map +1 -0
- package/dist/internals/{chunk-CNNSQpRF.d.ts → chunk-CpgqvFNO.d.ts} +3 -3
- package/dist/internals/chunk-CpgqvFNO.d.ts.map +1 -0
- package/dist/internals/{index-Bs8n7Q8f.d.ts → index-82GLvDiN.d.ts} +18 -18
- package/dist/internals/index-82GLvDiN.d.ts.map +1 -0
- package/dist/internals/{index-B8TESzd9.js → index-CLKTEIj0.js} +2 -2
- package/dist/internals/index-CLKTEIj0.js.map +1 -0
- package/dist/internals/{index-BRIlS3mY.d.ts → index-CWhqANZM.d.ts} +3 -3
- package/dist/internals/index-CWhqANZM.d.ts.map +1 -0
- package/dist/internals/{index-DfqABzjr.mjs → index-CZ5fKgiJ.mjs} +26 -26
- package/dist/internals/index-CZ5fKgiJ.mjs.map +1 -0
- package/dist/internals/{index-BzDsTt4R.mjs → index-gWcE22mf.mjs} +2 -2
- package/dist/internals/index-gWcE22mf.mjs.map +1 -0
- package/dist/internals/{index-DylUjD_1.js → index-xHeu-AjT.js} +26 -26
- package/dist/internals/index-xHeu-AjT.js.map +1 -0
- package/dist/internals/{validator-mcBCJP4P.js → validator-B5yHpyvb.js} +10 -10
- package/dist/internals/validator-B5yHpyvb.js.map +1 -0
- package/dist/internals/{validator-CEcBF4Cn.mjs → validator-DX2nXeQo.mjs} +10 -10
- package/dist/internals/validator-DX2nXeQo.mjs.map +1 -0
- package/package.json +2 -2
- package/dist/internals/base-CWnOBKD5.d.ts.map +0 -1
- package/dist/internals/chunk-CNNSQpRF.d.ts.map +0 -1
- package/dist/internals/index-B8TESzd9.js.map +0 -1
- package/dist/internals/index-BRIlS3mY.d.ts.map +0 -1
- package/dist/internals/index-Bs8n7Q8f.d.ts.map +0 -1
- package/dist/internals/index-BzDsTt4R.mjs.map +0 -1
- package/dist/internals/index-DfqABzjr.mjs.map +0 -1
- package/dist/internals/index-DylUjD_1.js.map +0 -1
- package/dist/internals/validator-CEcBF4Cn.mjs.map +0 -1
- package/dist/internals/validator-mcBCJP4P.js.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/server/utils.ts","../../src/server/query/dispatcher/index.ts","../../src/server/proto/proxy.ts","../../src/server/query/index.ts","../../src/server/proto/defaults.ts","../../src/server/crypto/password.ts","../../src/server/proto/internal.ts","../../src/server/proto/session.ts","../../src/server/schedule.ts","../../src/server/proto/index.ts","../../src/server/auth/index.ts","../../src/server/routes/common.ts","../../src/server/routes/classes.ts","../../src/server/routes/function.ts","../../src/server/routes/job.ts","../../src/server/routes/files.ts","../../src/server/routes/user.ts","../../src/server/routes/notify.ts","../../src/server/routes/schema.ts","../../src/server/routes/config.ts","../../src/index.ts"],"sourcesContent":["//\n// utils.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';\n\nexport const normalize = <T>(x: T): T => {\n if (_.isString(x)) return x.normalize('NFD') as T;\n if (_.isArray(x)) return _.map(x, x => normalize(x)) as T;\n if (_.isPlainObject(x)) return _.fromPairs(_.map(_.toPairs(x as object), ([k, v]) => [normalize(k), normalize(v)])) as T;\n return x;\n};\n","//\n// methods.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 { ProtoService } from '../../proto/index';\nimport { QueryValidator } from './validator';\nimport { FindOptions, RelationOptions } from '../../storage';\nimport { TQueryBaseOptions } from '../../../internals/query/base';\nimport { ExtraOptions } from '../../../internals/options';\nimport { TQueryRandomOptions } from '../../../internals/query';\nimport { TValueWithUndefined } from '../../../internals/types';\nimport { PVK } from '../../../internals/private';\nimport { TUpdateOp } from '../../../internals/object/types';\nimport { normalize } from '../../utils';\nimport { TQueryAccumulator } from '../../../internals/query/types/accumulators';\nimport { QueryExpression } from './parser/expressions';\n\nexport const fetchUserPerms = async <E>(proto: ProtoService<E>) => _.uniq(_.compact([..._.map(await proto.currentRoles(), x => `role:${x}`), (await proto.currentUser())?.objectId]));\n\nexport const dispatcher = <E>(\n proto: ProtoService<E>,\n options: ExtraOptions<boolean> & {\n disableSecurity: boolean;\n createFile: boolean;\n },\n) => {\n\n const acls = async () => options.master ? [] : await fetchUserPerms(proto);\n const validator = async () => new QueryValidator(proto, await acls(), {\n master: options.master ?? false,\n disableSecurity: options.disableSecurity,\n });\n\n const createFile = options.createFile;\n\n return {\n async explain(\n query: FindOptions & RelationOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n return proto.storage.explain(decoded);\n },\n async count(\n query: FindOptions & RelationOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'count')) throw Error('No permission');\n return proto.storage.count(_validator.decodeQuery(normalize(query), 'read'));\n },\n async find(\n query: FindOptions & RelationOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n return proto.storage.find(decoded);\n },\n async nonrefs(\n query: FindOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n return proto.storage.nonrefs(decoded);\n },\n async random(\n query: FindOptions & RelationOptions,\n opts?: TQueryRandomOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n const weight = opts?.weight ? QueryExpression.decode(opts.weight, false) : undefined;\n for (const key of weight?.keyPaths() ?? []) {\n if (!_validator.validateKey(query.className, key, 'read', QueryValidator.patterns.path)) throw Error('No permission');\n }\n return proto.storage.random(decoded, { weight });\n },\n async insert(\n options: {\n className: string;\n includes?: string[];\n matches?: Record<string, TQueryBaseOptions>;\n groupMatches?: Record<string, Record<string, TQueryAccumulator>>;\n },\n values: Record<string, TValueWithUndefined>[],\n ) {\n if (!createFile && options.className === 'File') throw Error('File is not support insert');\n QueryValidator.recursiveCheck(values);\n const _validator = await validator();\n const _groupMatches = _validator.decodeGroupMatches(options.className, options.groupMatches ?? {});\n const _includes = _validator.decodeIncludes(options.className, options.includes ?? ['*'], _groupMatches);\n const _matches = _validator.decodeMatches(options.className, options.matches ?? {}, _includes);\n if (!_validator.validateCLPs(options.className, 'create')) throw Error('No permission');\n const _attrs = normalize(_.map(values, attr => _validator.validateFields(options.className, attr, 'create', QueryValidator.patterns.path)));\n while (true) {\n try {\n return await proto.storage.atomic(\n (storage) => storage.insert({\n className: options.className,\n includes: _includes,\n matches: _matches,\n groupMatches: _groupMatches,\n objectIdSize: proto[PVK].options.objectIdSize\n }, _attrs),\n { lockTable: options.className, retry: true },\n );\n } catch (e) {\n if (proto.storage.isDuplicateIdError(e)) continue;\n throw e;\n }\n }\n },\n async update(\n query: FindOptions,\n update: Record<string, TUpdateOp>\n ) {\n QueryValidator.recursiveCheck(query, update);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'update')) throw Error('No permission');\n return proto.storage.atomic((storage) => storage.update(\n _validator.decodeQuery(normalize(query), 'update'),\n normalize(_validator.validateFields(query.className, update, 'update', QueryValidator.patterns.path)),\n ));\n },\n async upsert(\n query: FindOptions,\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>\n ) {\n if (query.className === 'File') throw Error('File is not support upsert');\n QueryValidator.recursiveCheck(query, update, setOnInsert);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'create', 'update')) throw Error('No permission');\n const _query = _validator.decodeQuery(normalize(query), 'update');\n const _update = normalize(_validator.validateFields(query.className, update, 'update', QueryValidator.patterns.path));\n const _setOnInsert = normalize(_validator.validateFields(query.className, setOnInsert, 'create', QueryValidator.patterns.path));\n while (true) {\n try {\n return await proto.storage.atomic(\n (storage) => storage.upsert(_query, _update, _setOnInsert),\n { lockTable: query.className, retry: true },\n );\n } catch (e) {\n if (proto.storage.isDuplicateIdError(e)) continue;\n throw e;\n }\n }\n },\n async delete(\n query: FindOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'delete')) throw Error('No permission');\n return proto.storage.atomic((storage) => storage.delete(_validator.decodeQuery(normalize(query), 'update')));\n },\n };\n};\n\n","//\n// proxy.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 { prototypes } from '@o2ter/utils-js';\n\nexport const proxy = <T>(x: T): T => {\n const self = x as any;\n const proxy = _.create(self) as any;\n for (const name of _.uniq(_.flatMap(prototypes(proxy), x => Object.getOwnPropertyNames(x)))) {\n if (name === 'constructor') continue;\n const value = _.isFunction(self[name]) ? self[name].bind(self) : self[name];\n Object.defineProperty(proxy, name, { get: () => value });\n }\n return proxy;\n};\n","//\n// methods.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 { _serviceOf, ProtoService } from '../proto';\nimport { dispatcher } from './dispatcher';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { PVK } from '../../internals/private';\nimport { ExtraOptions } from '../../internals/options';\nimport { TQuery, TQueryOptions, TQueryRandomOptions } from '../../internals/query';\nimport { TObject } from '../../internals/object';\nimport { TExtended } from '../../internals/object/methods';\nimport { TValueWithUndefined } from '../../internals/types';\nimport { TUpdateOp } from '../../internals/object/types';\nimport { resolveColumn } from './dispatcher/validator';\nimport { isPointer, isRelation } from '../../internals/schema';\nimport { proxy } from '../proto/proxy';\nimport { LiveQuerySubscription } from '../../internals/liveQuery';\n\ntype _QueryOptions = {\n insecure?: boolean;\n createFile?: boolean;\n relatedBy?: {\n className: string;\n objectId: string;\n key: string;\n };\n};\n\nabstract class _ProtoQuery<T extends string, E, M extends boolean> extends TQuery<T, E, M> {\n\n protected _proto: ProtoService<E>;\n protected _opts: _QueryOptions;\n\n constructor(proto: ProtoService<E>, opts: _QueryOptions) {\n super();\n this._proto = proto;\n this._opts = opts;\n }\n\n abstract get className(): T;\n\n private get _queryOptions() {\n return {\n ...this[PVK].options,\n className: this.className,\n relatedBy: this._opts.relatedBy,\n };\n }\n\n private _dispatcher(\n options?: ExtraOptions<M>\n ): ReturnType<typeof dispatcher<E>> {\n const schema = this._proto.schema[this.className];\n if (_.isNil(schema)) throw Error('Invalid className');\n if (this._opts.insecure) {\n if (options?.master !== true) throw Error('No permission');\n }\n return dispatcher(_serviceOf(options) ?? this._proto, {\n ...options ?? {},\n disableSecurity: !!this._opts.insecure,\n createFile: !!this._opts.createFile,\n });\n }\n\n explain(options?: ExtraOptions<M>) {\n return this._dispatcher(options).explain(this._queryOptions);\n }\n\n count(options?: ExtraOptions<M>) {\n return this._dispatcher(options).count(this._queryOptions);\n }\n\n private _objectMethods<U extends TObject | TObject[] | undefined>(object: U) {\n return this._proto.rebind(object) as TExtended<U, T, E>;\n }\n\n find(options?: ExtraOptions<M>) {\n const self = this;\n return asyncStream(async function* () {\n const objects = await self._dispatcher(options).find(self._queryOptions);\n for await (const object of objects) yield self._objectMethods(object);\n });\n }\n\n nonrefs(options?: ExtraOptions<M>) {\n const self = this;\n return asyncStream(async function* () {\n const objects = await self._dispatcher(options).nonrefs(self._queryOptions);\n for await (const object of objects) yield self._objectMethods(object);\n });\n }\n\n random(\n opts?: TQueryRandomOptions,\n options?: ExtraOptions<M>\n ) {\n const self = this;\n return asyncStream(async function* () {\n const objects = await self._dispatcher(options).random(self._queryOptions, opts);\n for await (const object of objects) yield self._objectMethods(object);\n });\n }\n\n private _on_upsert(objects: TObject[]) {\n const createTraggers = this._proto[PVK].triggers[this.className]?.create ?? [];\n const updateTraggers = this._proto[PVK].triggers[this.className]?.update ?? [];\n for (const obj of objects) {\n for (const tragger of obj.__v === 0 ? createTraggers : updateTraggers) {\n (async () => {\n try {\n await tragger(proxy(Object.setPrototypeOf({ object: obj }, this._proto)));\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n if (this._proto.schema[this.className]?.liveQuery) {\n (async () => {\n try {\n await this._proto[PVK].publishLiveQuery(this._proto, 'create', _.filter(objects, x => x.__v === 0));\n await this._proto[PVK].publishLiveQuery(this._proto, 'update', _.filter(objects, x => x.__v !== 0));\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n\n private _on_delete(objects: TObject[]) {\n const traggers = this._proto[PVK].triggers[this.className]?.delete ?? [];\n for (const obj of objects) {\n for (const tragger of traggers) {\n (async () => {\n try {\n await tragger(proxy(Object.setPrototypeOf({ object: obj }, this._proto)));\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n if (this._proto.schema[this.className]?.liveQuery) {\n (async () => {\n try {\n await this._proto[PVK].publishLiveQuery(this._proto, 'delete', objects);\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n\n async insertMany(\n values: Record<string, TValueWithUndefined>[],\n options?: ExtraOptions<M>\n ) {\n const objs = this._objectMethods(\n await this._dispatcher(options).insert({\n className: this.className,\n includes: this[PVK].options.includes,\n matches: this[PVK].options.matches,\n groupMatches: this[PVK].options.groupMatches,\n }, values)\n );\n if (!options?.silent) this._on_upsert(objs);\n return objs;\n }\n\n async updateMany(\n update: Record<string, TUpdateOp>,\n options?: ExtraOptions<M>\n ) {\n const objs = this._objectMethods(\n await this._dispatcher(options).update(this._queryOptions, update)\n );\n if (!options?.silent) this._on_upsert(objs);\n return objs;\n }\n\n async upsertMany(\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>,\n options?: ExtraOptions<M>\n ) {\n const objs = this._objectMethods(\n await this._dispatcher(options).upsert(this._queryOptions, update, setOnInsert)\n );\n if (!options?.silent) this._on_upsert(objs);\n return objs;\n }\n\n async deleteMany(options?: ExtraOptions<M>) {\n const objs = this._objectMethods(\n await this._dispatcher(options).delete(this._queryOptions)\n );\n if (!options?.silent) this._on_delete(objs);\n return objs;\n }\n}\n\nexport class ProtoQuery<T extends string, E, M extends boolean> extends _ProtoQuery<T, E, M> {\n\n private _className: T;\n\n constructor(className: T, proto: ProtoService<E>, opts: _QueryOptions) {\n super(proto, opts);\n this._className = className;\n }\n\n get className(): T {\n return this._className;\n }\n\n clone(options?: TQueryOptions) {\n const clone = new ProtoQuery(this.className, this._proto, this._opts);\n clone[PVK].options = options ?? { ...this[PVK].options };\n return clone;\n }\n\n subscribe() {\n return new LiveQuerySubscription<T, E>(\n this.className,\n this._proto,\n this[PVK].options.filter ?? [],\n );\n }\n}\n\nexport class ProtoRelationQuery<E, M extends boolean> extends _ProtoQuery<string, E, M> {\n\n constructor(proto: ProtoService<E>, opts: _QueryOptions) {\n super(proto, opts);\n }\n\n get className(): string {\n const { className, key } = this._opts.relatedBy!;\n const { dataType } = resolveColumn(this._proto.schema, className, key);\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid relation key: ${key}`);\n return dataType.target;\n }\n\n clone(options?: TQueryOptions) {\n const clone = new ProtoRelationQuery(this._proto, this._opts);\n clone[PVK].options = options ?? { ...this[PVK].options };\n return clone;\n }\n\n subscribe(): LiveQuerySubscription<string, E> {\n throw Error('Unable to subscribe to relationship query');\n }\n}\n","//\n// defaults.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 { TSchema } from '../../internals/schema';\n\nexport const defaultSchema: Record<string, TSchema> = {\n 'User': {\n fields: {\n password: 'object',\n },\n classLevelPermissions: {\n find: [],\n count: [],\n delete: [],\n },\n fieldLevelPermissions: {\n _expired_at: { create: [], update: [] },\n },\n secureFields: ['password'],\n },\n 'Role': {\n fields: {\n name: 'string',\n users: { type: 'relation', target: 'User' },\n roles: { type: 'relation', target: 'Role' },\n },\n classLevelPermissions: {\n create: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n _expired_at: { create: [], update: [] },\n },\n indexes: [\n {\n keys: { name: 1 },\n unique: true,\n },\n ],\n },\n 'File': {\n fields: {\n filename: 'string',\n size: 'number',\n type: 'string',\n token: 'string',\n nonce: 'string',\n },\n classLevelPermissions: {\n find: [],\n count: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n size: { update: [] },\n type: { update: [] },\n token: { update: [] },\n nonce: { update: [] },\n _expired_at: { update: [] },\n },\n indexes: [\n {\n keys: { token: 1 },\n unique: true,\n },\n {\n keys: { nonce: 1 },\n unique: true,\n },\n ],\n },\n '_Job': {\n fields: {\n name: 'string',\n data: 'object',\n error: 'object',\n user: { type: 'pointer', target: 'User' },\n startedAt: 'date',\n completedAt: 'date',\n locks: { type: 'relation', target: '_JobScope', foreignField: 'job' },\n },\n classLevelPermissions: {\n find: [],\n count: [],\n create: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n name: { update: [] },\n data: { update: [] },\n error: { update: [] },\n user: { update: [] },\n startedAt: { create: [], update: [] },\n completedAt: { create: [], update: [] },\n _expired_at: { create: [], update: [] },\n },\n indexes: [\n { keys: { completedAt: 1, _created_at: 1 } },\n ],\n },\n '_JobScope': {\n fields: {\n scope: 'string',\n job: { type: 'pointer', target: '_Job' },\n },\n classLevelPermissions: {\n get: [],\n find: [],\n count: [],\n create: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n scope: { update: [] },\n job: { update: [] },\n _expired_at: { create: [], update: [] },\n },\n indexes: [\n {\n keys: { scope: 1 },\n unique: true,\n },\n ],\n },\n}\n","//\n// password.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 { scrypt, BinaryLike, ScryptOptions } from 'node:crypto';\nimport { promisify } from 'util';\nimport { randomBytes } from '@o2ter/crypto-js';\n\nconst _scrypt = promisify<BinaryLike, BinaryLike, number, ScryptOptions, Buffer>(scrypt);\n\ntype _PasswordHashOptions = {\n 'scrypt': {\n log2n: number;\n blockSize: number;\n parallel: number;\n keySize: number;\n saltSize: number;\n };\n};\n\nexport type PasswordHashOptions = {\n [K in keyof _PasswordHashOptions]: { alg: K } & _PasswordHashOptions[K];\n}[keyof _PasswordHashOptions];\n\nconst _passwordHash = async <T extends keyof _PasswordHashOptions>(\n alg: T,\n password: string,\n salt: Buffer | Uint8Array,\n options: _PasswordHashOptions[T],\n) => {\n switch (alg) {\n case 'scrypt':\n\n if (!_.isSafeInteger(options.log2n)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.blockSize)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.parallel)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.keySize)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.saltSize)) throw Error('Invalid options');\n\n const _opts: ScryptOptions = {\n N: 1 << options.log2n,\n blockSize: options.blockSize,\n parallelization: options.parallel,\n };\n\n const derivedKey = await _scrypt(password, salt, options.keySize, _opts);\n\n return derivedKey.toString('base64');\n\n default: throw Error('Invalid algorithm');\n }\n}\n\nexport const passwordHash = async <T extends keyof _PasswordHashOptions>(\n alg: T,\n password: string,\n options: _PasswordHashOptions[T],\n) => {\n const salt = randomBytes(options.saltSize);\n return {\n alg,\n salt: salt.toString('base64'),\n derivedKey: await _passwordHash(alg, password, salt, options),\n ...options\n };\n}\n\nexport const varifyPassword = async <T extends keyof _PasswordHashOptions>(\n alg: T,\n password: string,\n options: _PasswordHashOptions[T] & { salt: string; derivedKey: string; },\n) => {\n if (!_.isString(options.salt)) return false;\n if (!_.isString(options.derivedKey)) return false;\n try {\n return options.derivedKey === await _passwordHash(alg, password, Buffer.from(options.salt, 'base64'), options);\n } catch {\n return false;\n }\n}","//\n// internal.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 jwt from 'jsonwebtoken';\nimport { Blob } from 'node:buffer';\nimport { Readable } from 'node:stream';\nimport { defaultSchema } from './defaults';\nimport { ProtoServiceOptions, ProtoServiceKeyOptions } from './types';\nimport { ProtoFunction, ProtoFunctionOptions, ProtoJobFunction, ProtoJobFunctionOptions, ProtoTriggerFunction } from '../../internals/proto/types';\nimport { generateId } from '../crypto/random';\nimport { TSchema, _typeof, defaultObjectKeyTypes, isPointer, isPrimitive, isRelation, isShape } from '../../internals/schema';\nimport { resolveDataType, QueryValidator } from '../query/dispatcher/validator';\nimport { passwordHash, varifyPassword } from '../crypto/password';\nimport { proxy } from './proxy';\nimport { _serviceOf, ProtoService } from '.';\nimport { base64ToBuffer, isBinaryData, prototypes } from '@o2ter/utils-js';\nimport { ProtoInternalType } from '../../internals/proto';\nimport { TObject } from '../../internals/object';\nimport { TValueWithoutObject, TValue } from '../../internals/types';\nimport { ExtraOptions } from '../../internals/options';\nimport { TUser } from '../../internals/object/user';\nimport { TFile } from '../../internals/object/file';\nimport { FileData } from '../../internals/buffer';\nimport { PVK } from '../../internals/private';\nimport { fetchUserPerms } from '../query/dispatcher';\nimport { EventData } from '../../internals/proto';\nimport { normalize } from '../utils';\nimport { PROTO_LIVEQUERY_MSG, PROTO_NOTY_MSG } from '../../internals/const';\nimport { TJob } from '../../internals/object/job';\nimport { deserialize, serialize } from '../../internals/codec';\nimport { ProtoQuery } from '../query';\nimport { TQuerySelector } from '../../internals/query/types/selectors';\nimport { QuerySelector } from '../query/dispatcher/parser';\n\nconst validateForeignField = (schema: Record<string, TSchema>, key: string, dataType: TSchema.RelationType) => {\n if (!dataType.foreignField) return;\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid foreign field: ${key}`);\n const foreignField = resolveDataType(schema, dataType.target, dataType.foreignField);\n if (_.isNil(foreignField)) throw Error(`Invalid foreign field: ${key}`);\n if (isPrimitive(foreignField)) throw Error(`Invalid foreign field: ${key}`);\n if (foreignField.type === 'relation' && !_.isNil(foreignField.foreignField)) throw Error(`Invalid foreign field: ${key}`);\n}\n\nconst validateShapedObject = (schema: Record<string, TSchema>, dataType: TSchema.ShapeType) => {\n if (_.isEmpty(dataType.shape)) throw Error('Invalid empty shape');\n for (const [key, type] of _.entries(dataType.shape)) {\n if (!key.match(QueryValidator.patterns.fieldName)) throw Error(`Invalid field name: ${key}`);\n if (isShape(type)) {\n validateShapedObject(schema, type);\n } else if (isRelation(type)) {\n validateForeignField(schema, key, type);\n }\n }\n}\n\nconst validateSchemaName = (schema: Record<string, TSchema>) => {\n for (const name of ['_Schema', '_Config']) {\n if (!_.isNil(schema[name])) throw Error('Reserved name of class');\n }\n for (const [, _schema] of _.toPairs(schema)) {\n for (const [key] of _.toPairs(_schema.fields)) {\n if (_.includes(TObject.defaultKeys, key)) throw Error(`Reserved field name: ${key}`);\n }\n }\n}\n\nconst validateSchema = (schema: Record<string, TSchema>) => {\n for (const [className, _schema] of _.toPairs(schema)) {\n\n if (!className.match(QueryValidator.patterns.className)) throw Error(`Invalid class name: ${className}`);\n\n for (const [key, dataType] of _.toPairs(_schema.fields)) {\n if (!key.match(QueryValidator.patterns.fieldName)) throw Error(`Invalid field name: ${key}`);\n if (isShape(dataType)) {\n validateShapedObject(schema, dataType);\n } else if (isPointer(dataType)) {\n if (_.isNil(defaultSchema[dataType.target] ?? schema[dataType.target])) throw Error(`Invalid target: ${key}`);\n } else if (isRelation(dataType)) {\n if (_.isNil(defaultSchema[dataType.target] ?? schema[dataType.target])) throw Error(`Invalid target: ${key}`);\n validateForeignField(schema, key, dataType);\n }\n const fields = _.keys(_schema.fields);\n for (const key of _.keys(_schema.fieldLevelPermissions)) {\n if (!fields.includes(key)) throw Error(`Invalid field permission: ${key}`);\n }\n for (const key of _schema.secureFields ?? []) {\n if (!fields.includes(key)) throw Error(`Invalid field permission: ${key}`);\n }\n }\n }\n}\n\nconst mergeSchema = (...schemas: Record<string, TSchema>[]) => _.reduce(schemas, (acc, schema) => ({\n ...acc,\n ..._.mapValues(schema, (s, className) => ({\n fields: {\n ...defaultObjectKeyTypes,\n ...(acc[className]?.fields ?? {}),\n ...s.fields,\n },\n classLevelPermissions: _.mergeWith(\n acc[className]?.classLevelPermissions ?? {},\n s.classLevelPermissions,\n (l, r) => _.isArray(l) ? [...l, ...r] : undefined,\n ),\n additionalObjectPermissions: _.mergeWith(\n acc[className]?.additionalObjectPermissions ?? {},\n s.additionalObjectPermissions,\n (l, r) => _.isArray(l) ? [...l, ...r] : undefined,\n ),\n fieldLevelPermissions: _.mergeWith(\n acc[className]?.fieldLevelPermissions ?? {},\n s.fieldLevelPermissions,\n (l, r) => _.isArray(l) ? [...l, ...r] : undefined,\n ),\n secureFields: [\n ...(acc[className]?.secureFields ?? []),\n ...(s.secureFields ?? []),\n ],\n indexes: [\n ...(acc[className]?.indexes ?? [\n { keys: { _rperm: 1 } },\n { keys: { _wperm: 1 } },\n { keys: { _created_at: 1 } },\n { keys: { _updated_at: 1 } },\n { keys: { _expired_at: 1 } },\n ]),\n ...(s.indexes ?? []),\n ],\n liveQuery: acc[className]?.liveQuery || s.liveQuery,\n })),\n}), {} as Record<string, TSchema>);\n\nexport class ProtoInternal<Ext, P extends ProtoService<Ext>> implements ProtoInternalType<Ext, P> {\n\n options: Required<ProtoServiceOptions<Ext>> & ProtoServiceKeyOptions;\n\n functions: Record<string, ProtoFunction<Ext> | ProtoFunctionOptions<Ext>> = {};\n triggers: Record<string, {\n create: ProtoTriggerFunction<any, Ext>[];\n update: ProtoTriggerFunction<any, Ext>[];\n delete: ProtoTriggerFunction<any, Ext>[];\n }> = {};\n jobs: Record<string, ProtoJobFunction<Ext> | ProtoJobFunctionOptions<Ext>> = {};\n\n jobRunner = new JobRunner<Ext, P>();\n\n constructor(options: Required<ProtoServiceOptions<Ext>> & ProtoServiceKeyOptions) {\n validateSchemaName(options.schema);\n const schema = mergeSchema(defaultSchema, options.fileStorage.schema, options.schema);\n validateSchema(schema);\n if (!_.every(options.roleResolver?.inheritKeys, k => {\n const type = resolveDataType(schema, 'Role', k);\n return type && isRelation(type) && _.includes(['User', 'Role'], type.target);\n })) {\n throw Error(`Invalid role keys`);\n }\n this.options = {\n ...options,\n schema,\n };\n }\n\n async prepare() {\n await this.options.storage.prepare(this.options.schema);\n }\n\n shutdown() {\n this.jobRunner.shutdown();\n }\n\n generateId() {\n return generateId(this.options.objectIdSize);\n }\n\n private async _perms(proto: P) {\n return _.uniq(['*', ...await fetchUserPerms(proto)]);\n }\n\n async config(proto: P, options?: { master?: boolean; }) {\n return this.options.storage.config(options?.master ? undefined : await this._perms(proto));\n }\n configAcl() {\n return this.options.storage.configAcl();\n }\n async setConfig(values: Record<string, TValueWithoutObject>, acl?: string[]) {\n return this.options.storage.setConfig(normalize(values), normalize(acl));\n }\n\n async run(proto: P, name: string, payload: any, options?: ExtraOptions<boolean>) {\n\n const func = this.functions[name];\n\n if (_.isNil(func)) throw Error('Function not found');\n if (_.isFunction(func)) return func(proxy(payload ?? proto));\n\n const { callback, validator } = func;\n\n const roles = await proto.currentRoles();\n\n if (!options?.master) {\n if (!!validator?.requireUser && !(await proto.currentUser())) throw Error('No permission');\n if (!!validator?.requireMaster) throw Error('No permission');\n if (_.isArray(validator?.requireAnyUserRoles) && !_.some(validator?.requireAnyUserRoles, x => _.includes(roles, x))) throw Error('No permission');\n if (_.isArray(validator?.requireAllUserRoles) && _.some(validator?.requireAllUserRoles, x => !_.includes(roles, x))) throw Error('No permission');\n }\n\n return callback(proxy(payload ?? proto));\n }\n\n async varifyPassword(proto: P, user: TUser, password: string, options: ExtraOptions<true>) {\n if (!user.objectId) throw Error('Invalid user object');\n const _user = await proto.InsecureQuery('User')\n .equalTo('_id', user.objectId)\n .includes('_id', 'password')\n .first(options);\n const { alg, ...opts } = _user?.get('password') ?? {};\n return varifyPassword(alg, password, opts);\n }\n\n async setPassword(proto: P, user: TUser, password: string, options: ExtraOptions<true>) {\n if (!user.objectId) throw Error('Invalid user object');\n if (_.isEmpty(password)) throw Error('Invalid password');\n const { alg, ...opts } = this.options.passwordHashOptions;\n const hashed = await passwordHash(alg, password, opts);\n await proto.InsecureQuery('User')\n .equalTo('_id', user.objectId)\n .includes('_id')\n .updateOne({\n password: { $set: hashed },\n }, options);\n }\n\n async unsetPassword(proto: P, user: TUser, options: ExtraOptions<true>) {\n if (!user.objectId) throw Error('Invalid user object');\n await proto.InsecureQuery('User')\n .equalTo('_id', user.objectId)\n .includes('_id')\n .updateOne({\n password: { $set: {} },\n }, options);\n }\n\n async updateFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n\n if ('filename' in object[PVK].mutated && _.isEmpty(object.get('filename'))) {\n throw Error('Invalid filename');\n }\n\n const updated = await proto.Query(object.className)\n .equalTo('_id', object.objectId)\n .includes(...object.keys())\n .updateOne(object[PVK].mutated, options);\n\n if (updated) {\n object[PVK].attributes = updated.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n }\n\n varifyUploadToken(proto: P, token?: string, isMaster?: boolean) {\n\n const {\n nonce,\n attributes,\n maxUploadSize,\n } = (_.isString(token) ? this.jwtVarify(token, 'upload') ?? {} : {}) as {\n nonce?: string;\n maxUploadSize?: number;\n attributes?: Record<string, any>;\n };\n if (!isMaster && !nonce) throw Error('Upload token is required');\n\n return {\n nonce,\n attributes: _.isObject(attributes) ? deserialize(\n JSON.stringify(attributes),\n { objAttrs: ['_id'] },\n ) as Record<string, TValue> : {},\n maxUploadSize: maxUploadSize ?? this.options.maxUploadSize,\n };\n }\n\n async createFile(proto: P, object: TFile, options?: ExtraOptions<boolean> & { uploadToken?: string; }) {\n\n const data = object[PVK].extra.data as FileData | { _id: string; size: number; };\n if (_.isNil(data)) throw Error('Invalid file object');\n\n const {\n nonce,\n attributes = {},\n maxUploadSize = this.options.maxUploadSize,\n } = options?.uploadToken ? this.varifyUploadToken(proto, options.uploadToken, options.master) : {};\n\n if (nonce) {\n const found = await proto.Query('File').equalTo('nonce', nonce).first({ master: true });\n if (found) throw Error('Invalid upload token');\n }\n\n let file: { _id: string; size: number; };\n\n const info = {\n mimeType: object.get('type'),\n filename: object.get('filename'),\n };\n\n if (_.isEmpty(info.filename)) {\n throw Error('Invalid filename');\n }\n\n if (_.isString(data)) {\n file = await proto.fileStorage.create(proto, Buffer.from(data), info, maxUploadSize);\n } else if (isBinaryData(data) || data instanceof Readable) {\n file = await proto.fileStorage.create(proto, data, info, maxUploadSize);\n } else if (data instanceof Blob) {\n file = await proto.fileStorage.create(proto, await data.arrayBuffer(), info, maxUploadSize);\n } else if ('base64' in data) {\n const buffer = base64ToBuffer(data.base64);\n file = await proto.fileStorage.create(proto, buffer, info, maxUploadSize);\n } else if ('_id' in data && 'size' in data) {\n file = data;\n } else {\n throw Error('Invalid file object');\n }\n\n try {\n\n for (const [key, value] of _.entries(attributes)) {\n object.set(key, value);\n }\n object.set('token', file._id);\n object.set('size', file.size);\n if (nonce) object.set('nonce', nonce);\n\n const query = new ProtoQuery('File', proto, { createFile: true });\n const created = await query.includes(...object.keys()).insert(_.fromPairs([...object._set_entries()]), options);\n\n if (created) {\n object[PVK].attributes = created.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n\n } catch (e) {\n this.destroyFileData(proto, file._id);\n throw e;\n }\n }\n\n async saveFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n if (object.objectId) {\n object = await this.updateFile(proto, object, options);\n } else {\n object = await this.createFile(proto, object, options);\n }\n return object;\n }\n\n async deleteFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n\n object = await object.fetchIfNeeded(['token'], options);\n\n const deleted = await proto.Query('File')\n .equalTo('_id', object.objectId)\n .deleteOne(options);\n\n if (deleted) {\n object[PVK].attributes = deleted.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n this.destroyFileData(proto, object.token!);\n\n return object;\n }\n\n fileData(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n const self = this;\n return Readable.from({\n [Symbol.asyncIterator]: async function* () {\n object = await object.fetchIfNeeded(['token'], options);\n const chunks = self.options.fileStorage.fileData(proto, object.attributes.token as string);\n yield* chunks;\n }\n });\n }\n\n destroyFileData(proto: P, id: string) {\n (async () => {\n try {\n await proto.fileStorage.destroy(proto, id);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n\n jwtSign(payload: any, options: 'login' | 'upload' | jwt.SignOptions) {\n const opts = (() => {\n switch (options) {\n case 'login': return this.options.jwtSignOptions;\n case 'upload': return this.options.jwtUploadSignOptions;\n default: return options;\n }\n })();\n return jwt.sign(payload, this.options.jwtToken, opts);\n }\n\n jwtVarify(token: string, options: 'login' | 'upload' | jwt.VerifyOptions = {}) {\n try {\n const opts = (() => {\n switch (options) {\n case 'login': return this.options.jwtVerifyOptions;\n case 'upload': return this.options.jwtUploadVerifyOptions;\n default: return options;\n }\n })();\n const payload = jwt.verify(token, this.options.jwtToken, { ...opts, complete: false });\n if (!_.isObject(payload)) return;\n return payload;\n } catch {\n return;\n }\n }\n\n async notify(proto: P, data: Record<string, TValueWithoutObject> & { _rperm?: string[]; }) {\n if (data._rperm && (!_.isArray(data._rperm) || !_.every(data._rperm, _.isString))) {\n throw Error('Invalid data type');\n }\n return this.options.pubsub.publish(\n PROTO_NOTY_MSG,\n {\n ...data,\n _id: this.generateId(),\n _created_at: new Date(),\n _rperm: data._rperm || ['*'],\n }\n );\n }\n\n listen(proto: P, callback: (data: EventData) => void) {\n const isMaster = proto.isMaster;\n const roles = isMaster ? [] : this._perms(proto);\n return {\n remove: this.options.pubsub.subscribe(\n PROTO_NOTY_MSG,\n payload => {\n const { _rperm } = payload as EventData;\n (async () => {\n try {\n if (!isMaster && !_.some(await roles, x => _.includes(_rperm, x))) return;\n await callback(payload as EventData);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n ),\n };\n }\n\n async publishLiveQuery(proto: P, event: string, objects: TObject[]) {\n if (_.isEmpty(objects)) return;\n return this.options.pubsub.publish(\n PROTO_LIVEQUERY_MSG,\n JSON.parse(serialize({ event, objects }, { objAttrs: TObject.defaultKeys })),\n );\n }\n\n _liveQuery(\n proto: P,\n callback: (event: string, objects: TObject[]) => void,\n ) {\n const isMaster = proto.isMaster;\n const roles = isMaster ? [] : this._perms(proto);\n return {\n remove: this.options.pubsub.subscribe(\n PROTO_LIVEQUERY_MSG,\n payload => {\n const { event, objects } = deserialize(JSON.stringify(payload)) as { event: string; objects: TObject[]; };\n (async () => {\n try {\n const _roles = await roles;\n const payload = proto.rebind(isMaster ? objects : _.filter(objects, object => {\n const acl = object.acl();\n const clp = proto.schema[object.className].classLevelPermissions?.get ?? ['*'];\n return _.some(_roles, x => _.includes(clp, x) && _.includes(acl.read, x));\n }));\n if (!_.isEmpty(payload)) await callback(event, payload);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n ),\n };\n }\n\n liveQuery(\n proto: P,\n event: string,\n className: string,\n filter: TQuerySelector[],\n callback: (object: TObject) => void,\n ) {\n const _filter = _.isEmpty(filter) ? true : QuerySelector.decode(filter);\n return this._liveQuery(proto, (ev, objs) => {\n if (event !== ev) return;\n for (const object of objs) {\n if (className !== object.className) continue;\n (async () => {\n try {\n if (_filter === true || _filter.eval(object)) await callback(object);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n });\n }\n\n validateCLPs(\n className: string,\n acls: string[],\n keys: (keyof TSchema.CLPs)[],\n ) {\n if (!_.has(this.options.schema, className)) throw Error('No permission');\n const perms = this.options.schema[className].classLevelPermissions ?? {};\n for (const key of keys) {\n if (_.every(perms[key] ?? ['*'], x => !_.includes(acls, x))) return false;\n }\n return true;\n }\n\n async refs(proto: P, object: TObject, options?: ExtraOptions<boolean>) {\n const roles = options?.master ? [] : await this._perms(proto);\n const classNames = options?.master ? _.keys(this.options.schema) : _.filter(_.keys(this.options.schema), x => this.validateCLPs(x, roles, ['find']));\n const storage = _serviceOf(options)?.storage ?? this.options.storage;\n return storage.refs(object, classNames, options?.master ? undefined : roles);\n }\n\n async scheduleJob(proto: P, name: string, params: any, options?: ExtraOptions<boolean>) {\n\n const opt = this.jobs[name];\n if (_.isNil(opt)) throw Error('Job not found');\n\n const user = await proto.currentUser();\n\n if (!_.isFunction(opt)) {\n const roles = await proto.currentRoles();\n const { validator } = opt;\n if (!options?.master) {\n if (!!validator?.requireUser && !user) throw Error('No permission');\n if (!!validator?.requireMaster) throw Error('No permission');\n if (_.isArray(validator?.requireAnyUserRoles) && !_.some(validator?.requireAnyUserRoles, x => _.includes(roles, x))) throw Error('No permission');\n if (_.isArray(validator?.requireAllUserRoles) && _.some(validator?.requireAllUserRoles, x => !_.includes(roles, x))) throw Error('No permission');\n }\n }\n\n const obj = proto.Object('_Job');\n obj.set('name', name);\n obj.set('data', params);\n obj.set('user', user);\n await obj.save({ master: true });\n\n this.jobRunner.excuteJob(proto);\n\n return obj;\n }\n}\n\nclass JobRunner<Ext, P extends ProtoService<Ext>> {\n\n private _running = false;\n private _stopped = false;\n\n static TIMEOUT = 1000 * 60 * 5;\n static HEALTH = 1000 * 60;\n\n shutdown() {\n this._stopped = true;\n }\n\n private async cleanUpOldJobs(proto: P) {\n await proto.Query('_JobScope').or(\n q => q.lessThan('_updated_at', new Date(Date.now() - JobRunner.TIMEOUT)),\n q => q.notEqualTo('job.completedAt', null),\n ).deleteMany({ master: true });\n }\n\n private async getAvailableJobs(proto: P) {\n const running = _.map(await proto.Query('_JobScope').find({ master: true }), x => x.get('scope'));\n const availableJobs = _.pickBy(proto[PVK].jobs, opt => {\n return _.isFunction(opt) || _.isEmpty(_.intersection(opt.scopes ?? [], running));\n });\n return _.keys(availableJobs);\n }\n\n private async getNextJob(proto: P) {\n const availableJobs = await this.getAvailableJobs(proto);\n return await proto.Query('_Job')\n .containedIn('name', availableJobs)\n .or(\n q => q.lessThan('startedAt', new Date(Date.now() - JobRunner.TIMEOUT)),\n q => q.equalTo('startedAt', null),\n )\n .equalTo('completedAt', null)\n .empty('locks')\n .includes('*', 'user')\n .sort({ _created_at: 1 })\n .first({ master: true });\n }\n\n private async startJob(proto: P, job: TJob, opt: ProtoJobFunction<Ext> | ProtoJobFunctionOptions<Ext>) {\n await proto.withTransaction(async (session) => {\n for (const scope of _.isFunction(opt) ? [] : opt.scopes ?? []) {\n const obj = session.Object('_JobScope');\n obj.set('scope', scope);\n obj.set('job', job);\n await obj.save({ master: true });\n }\n job.set('startedAt', new Date());\n await job.save({ master: true, session });\n });\n }\n\n private async updateJobScope(proto: P, job: TJob) {\n try {\n await proto.Query('_JobScope').equalTo('job', job).updateOne({}, { master: true });\n } catch (e) { }\n }\n\n private async executeJobFunction(proto: P, job: TJob, opt: ProtoJobFunction<Ext> | ProtoJobFunctionOptions<Ext>) {\n const payload = Object.setPrototypeOf({ params: job.data, user: job.user, job }, this);\n const func = _.isFunction(opt) ? opt : opt.callback;\n await func(proxy(payload));\n }\n\n private async finalizeJob(job: TJob, error: any = null) {\n if (error) job.set('error', _.pick(error, _.uniq(_.flatMap(prototypes(error), x => Object.getOwnPropertyNames(x)))));\n job.set('completedAt', new Date());\n await job.save({ master: true });\n }\n\n async excuteJob(proto: P) {\n if (this._running || this._stopped) return;\n this._running = true;\n\n while (!this._stopped) {\n await this.cleanUpOldJobs(proto);\n\n const job = await this.getNextJob(proto);\n if (!job) break;\n\n const opt = proto[PVK].jobs[job.name];\n if (_.isNil(opt)) continue;\n\n try {\n await this.startJob(proto, job, opt);\n } catch (e) {\n continue;\n }\n\n (async () => {\n const timer = setInterval(() => this.updateJobScope(proto, job), JobRunner.HEALTH);\n try {\n await this.executeJobFunction(proto, job, opt);\n await this.finalizeJob(job);\n } catch (e) {\n await this.finalizeJob(job, e);\n } finally {\n clearInterval(timer);\n }\n this.excuteJob(proto);\n })();\n }\n\n this._running = false;\n }\n}\n","//\n// session.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 jwt from 'jsonwebtoken';\nimport { CookieOptions, Request, Response } from '@o2ter/server-js';\nimport { ProtoService } from './index';\nimport { AUTH_COOKIE_KEY, MASTER_PASS_HEADER_NAME, MASTER_USER_HEADER_NAME } from '../../internals/const';\nimport { randomUUID } from '@o2ter/crypto-js';\nimport { PVK } from '../../internals/private';\nimport { TUser } from '../../internals/object/user';\nimport { TRole } from '../../internals/object/role';\n\nexport type Session = jwt.JwtPayload & {\n sessionId: string;\n createdAt: Date;\n loginedAt: Date;\n};\n\nconst sessionMap = new WeakMap<Request, Session>();\n\nconst _sessionWithToken = <E>(proto: ProtoService<E>, token: string) => {\n if (_.isEmpty(token)) return;\n const payload = proto[PVK].jwtVarify(token, 'login');\n if (!_.isObject(payload)) return;\n return {\n ...payload,\n sessionId: payload.sessionId ?? randomUUID(),\n createdAt: payload.createdAt && _.isSafeInteger(payload.createdAt) ? new Date(payload.createdAt) : new Date,\n loginedAt: payload.loginedAt && _.isSafeInteger(payload.loginedAt) ? new Date(payload.loginedAt) : new Date,\n } as Session;\n}\n\nconst _session = <E>(proto: ProtoService<E>, request: Request) => {\n\n const cached = sessionMap.get(request);\n if (cached) return cached;\n\n sessionMap.set(request, {\n sessionId: randomUUID(),\n createdAt: new Date,\n loginedAt: new Date,\n });\n\n const jwtToken = proto[PVK].options.jwtToken;\n if (_.isEmpty(jwtToken)) throw Error('Invalid jwt token');\n\n let authorization = '';\n if (request.headers.authorization) {\n const parts = request.headers.authorization.split(' ');\n if (parts.length === 2 && parts[0] === 'Bearer') authorization = parts[1];\n } else if (request.cookies[AUTH_COOKIE_KEY]) {\n authorization = request.cookies[AUTH_COOKIE_KEY];\n }\n\n if (_.isEmpty(authorization)) return;\n\n const session = _sessionWithToken(proto, authorization);\n if (!_.isObject(session)) return;\n\n sessionMap.set(request, session);\n return session;\n}\n\nexport const sessionId = <E>(proto: ProtoService<E>, request: Request): string | undefined => {\n const session = _session(proto, request);\n return sessionMap.get(request)?.sessionId ?? session?.sessionId;\n}\n\nconst userCacheMap = new WeakMap<any, {\n [K in string]?: Promise<{ user?: TUser; _roles?: TRole[] }>;\n}>;\n\nconst fetchSessionInfo = async <E>(proto: ProtoService<E>, userId: string = '') => {\n if (!userCacheMap.has(proto[PVK])) userCacheMap.set(proto[PVK], {});\n const cache = userCacheMap.get(proto[PVK])!;\n if (_.isNil(cache[userId])) cache[userId] = (async () => {\n const _user = userId ? await proto.Query('User').get(userId, { master: true }) : undefined;\n const user = proto.req ? await proto[PVK].options.userResolver(proto, _user) : _user;\n const _roles = user instanceof TUser ? _.filter(await proto.userRoles(user), x => !_.isEmpty(x.name)) : [];\n cache[userId] = undefined;\n return { user, _roles };\n })();\n const { user, _roles } = await cache[userId];\n return {\n user: user?.clone(),\n _roles: _.map(_roles, x => x.clone()),\n };\n}\n\nexport const sessionWithToken = async <E>(proto: ProtoService<E>, token: string) => {\n const session = _sessionWithToken(proto, token);\n const info = await fetchSessionInfo(proto, session?.user);\n return {\n ...session ?? {},\n ...info,\n loginedAt: info?.user ? session?.loginedAt : undefined,\n };\n}\n\ntype SessionInfo<E> = Partial<Awaited<ReturnType<typeof fetchSessionInfo<E>>>>;\nconst sessionInfoMap = new WeakMap<Request, SessionInfo<any>>();\n\nexport const session = async <E>(proto: ProtoService<E>, request: Request) => {\n\n const session = _session(proto, request);\n const cached = sessionInfoMap.get(request) as SessionInfo<E>;\n if (cached) return {\n ...session ?? {},\n ...cached,\n loginedAt: cached?.user ? session?.loginedAt : undefined,\n };\n\n const info = await fetchSessionInfo(proto, session?.user);\n sessionInfoMap.set(request, info);\n\n return {\n ...session ?? {},\n ...info,\n loginedAt: info?.user ? session?.loginedAt : undefined,\n };\n}\n\nexport const sessionIsMaster = <E>(proto: ProtoService<E>, request: Request) => {\n const user = request.header(MASTER_USER_HEADER_NAME);\n const pass = request.header(MASTER_PASS_HEADER_NAME);\n if (_.isEmpty(user) || _.isEmpty(pass)) return false;\n return _.some(proto[PVK].options.masterUsers, x => x.user === user && x.pass === pass) ? 'valid' : 'invalid';\n}\n\nexport const signUser = async <E>(\n proto: ProtoService<E>,\n res: Response,\n user?: TUser,\n options?: {\n cookieOptions?: CookieOptions;\n jwtSignOptions?: jwt.SignOptions;\n }\n) => {\n if (_.isNil(proto[PVK].options.jwtToken)) return;\n const session = _session(proto, res.req);\n const cookieOptions = options?.cookieOptions ?? session?.cookieOptions ?? proto[PVK].options.cookieOptions;\n const token = proto[PVK].jwtSign({\n sessionId: session?.sessionId ?? randomUUID(),\n createdAt: session?.createdAt?.getTime() ?? Date.now(),\n loginedAt: user ? session?.loginedAt?.getTime() ?? Date.now() : undefined,\n user: user?.objectId,\n cookieOptions,\n }, options?.jwtSignOptions ?? 'login');\n res.cookie(AUTH_COOKIE_KEY, token, cookieOptions);\n sessionInfoMap.set(res.req, user ? await fetchSessionInfo(proto, user.objectId) : {});\n}\n","//\n// schedule.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 { ProtoService } from './proto';\nimport { PVK } from '../internals/private';\n\nconst scheduleOp = {\n expireDocument: async (proto: ProtoService<any>) => {\n await proto.gc();\n },\n excuteJob: async (proto: ProtoService<any>) => {\n proto[PVK].jobRunner.excuteJob(proto);\n },\n};\n\nexport type ScheduleOp = keyof typeof scheduleOp;\n\nexport const schedule = (proto: ProtoService<any>) => {\n let running = false;\n const execute = async () => {\n if (running) return;\n running = true;\n for (const [op, task] of _.entries(scheduleOp)) {\n if (!_.isFunction(task)) continue;\n try {\n await task(proto);\n } catch (e) {\n proto.logger.error(`Errors on schedule ${op}: ${e}`);\n }\n }\n running = false;\n }\n const schedule = setInterval(execute, 60 * 1000);\n return {\n execute,\n destroy() { clearInterval(schedule); }\n }\n}\n","//\n// index.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 jwt from 'jsonwebtoken';\nimport { ProtoQuery, ProtoRelationQuery } from '../query';\nimport { ProtoInternal } from './internal';\nimport { CookieOptions, Request } from '@o2ter/server-js';\nimport { ProtoServiceOptions, ProtoServiceKeyOptions } from './types';\nimport { ProtoFunction, ProtoFunctionOptions, ProtoJobFunction, ProtoJobFunctionOptions, ProtoTriggerFunction } from '../../internals/proto/types';\nimport { sessionId, sessionIsMaster, session, signUser, Session, sessionWithToken } from './session';\nimport { _logLevels, EventData, Logger, ProtoType, TransactionOptions } from '../../internals/proto';\nimport { schedule } from '../schedule';\nimport { serialize, TSerializable } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { TExtensions, TObjectType } from '../../internals/object/types';\nimport { TQuery } from '../../internals/query';\nimport { TUser } from '../../internals/object/user';\nimport { ExtraOptions } from '../../internals/options';\nimport { TValueWithoutObject, TValue } from '../../internals/types';\nimport { randomUUID } from '@o2ter/crypto-js';\nimport { TObject } from '../../internals/object';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { TRole } from '../../internals/object/role';\nimport { PathName } from '../../internals/query/types';\nimport { QuerySelector } from '../query/dispatcher/parser';\nimport { _typeof, isRelation } from '../../internals/schema';\nimport { resolveDataType } from '../query/dispatcher/validator';\nimport { TQuerySelector } from '../../internals/query/types/selectors';\n\nexport const _serviceOf = (options?: ExtraOptions<any>) => options?.session instanceof ProtoService ? options?.session : undefined;\n\nexport class ProtoService<Ext = any> extends ProtoType<Ext> {\n\n /** @internal */\n [PVK]: ProtoInternal<Ext, this>;\n private _storage?: ProtoServiceOptions<Ext>['storage'];\n private _schedule = schedule(this);\n\n req?: Request;\n session?: Session;\n\n constructor(options: ProtoServiceOptions<Ext> & ProtoServiceKeyOptions) {\n super();\n this[PVK] = new ProtoInternal({\n userResolver: (_req, user) => user,\n roleResolver: {},\n objectIdSize: 10,\n maxFetchLimit: 1000,\n maxUploadSize: 20 * 1024 * 1024,\n pubsub: {\n publish: () => void 0,\n subscribe: () => () => void 0,\n },\n classExtends: {} as TExtensions<Ext>,\n cookieOptions: { maxAge: 365 * 24 * 60 * 60 * 1000, httpOnly: true },\n jwtSignOptions: { expiresIn: '30d' },\n jwtVerifyOptions: {},\n jwtUploadSignOptions: { expiresIn: '1d' },\n jwtUploadVerifyOptions: {},\n passwordHashOptions: {\n alg: 'scrypt',\n log2n: 14,\n blockSize: 8,\n parallel: 1,\n keySize: 64,\n saltSize: 64,\n },\n logger: {},\n ...options,\n });\n }\n\n async shutdown() {\n this._schedule.destroy();\n this[PVK].shutdown();\n }\n\n get logger() {\n const logger = this[PVK].options.logger;\n const loggerLevel = logger.loggerLevel ?? 'warn';\n const callbacks = _.map(_logLevels, (x, i) => [x, (...args: any[]) => {\n if (loggerLevel !== 'all' && _.indexOf(_logLevels, loggerLevel) < i) return;\n const func = logger[x] ?? console[x];\n if (_.isFunction(func)) func(...args);\n }] as const);\n return {\n loggerLevel,\n ..._.fromPairs(callbacks as any),\n } as Logger;\n }\n\n classes(): string[] {\n return _.keys(this[PVK].options.schema);\n }\n\n Query<T extends string>(className: T): TQuery<T, Ext, boolean> {\n return new ProtoQuery<T, Ext, boolean>(className, this, {});\n }\n\n Relation<T extends string>(object: TObject, key: PathName<T>): TQuery<string, Ext, boolean> {\n const objectId = object.objectId;\n if (!objectId) throw Error('Invalid object');\n return new ProtoRelationQuery<Ext, boolean>(this, {\n relatedBy: {\n className: object.className,\n objectId,\n key,\n },\n });\n }\n\n InsecureQuery<T extends string>(className: T): TQuery<T, Ext, true> {\n return new ProtoQuery<T, Ext, true>(className, this, { insecure: true });\n }\n\n get sessionId(): string | undefined {\n if (this.session) return this.session.sessionId;\n return this.req ? sessionId(this, this.req) : undefined;\n }\n\n async sessionInfo() {\n if (this.session) return this.session;\n return this.req ? session(this, this.req) : undefined;\n }\n\n async currentUser(): Promise<TUser | undefined> {\n const session = await this.sessionInfo();\n return session?.user;\n }\n\n async _currentRoles(): Promise<TRole[]> {\n const session = await this.sessionInfo();\n return session?._roles ?? [];\n }\n\n async currentRoles(): Promise<string[]> {\n const roles = await this._currentRoles();\n return _.compact(_.map(roles, x => x.name));\n }\n\n get isMaster(): boolean {\n return this.req ? sessionIsMaster(this, this.req) === 'valid' : false;\n }\n\n get isInvalidMasterToken(): boolean {\n return this.req ? sessionIsMaster(this, this.req) === 'invalid' : false;\n }\n\n connect<R extends Request, T extends object>(\n req: R,\n attrs?: T | ((x: this & { req: R; }) => T)\n ): this & { req: R; } & T {\n const payload = _.create(this, { req });\n return _.assign(payload, _.isFunction(attrs) ? attrs(payload) : attrs)\n }\n\n async connectWithSessionToken<T extends object>(\n token: string,\n attrs?: T | ((x: this & { session?: Session; }) => T)\n ): Promise<this & { session?: Session; } & T> {\n const session = _.isString(token) ? await sessionWithToken(this, token) : undefined;\n const payload = _.create(this, { session });\n return _.assign(payload, _.isFunction(attrs) ? attrs(payload) : attrs)\n }\n\n async userRoles(user: TUser) {\n const self = this;\n const { inheritKeys, resolver } = self[PVK].options.roleResolver;\n const defaultResolver = async () => {\n const schema = self.schema;\n const userKeys = _.filter(inheritKeys, k => {\n const type = resolveDataType(schema, 'Role', k);\n return !!type && isRelation(type) && type.target === 'User';\n });\n const roleKeys = _.filter(inheritKeys, k => {\n const type = resolveDataType(schema, 'Role', k);\n return !!type && isRelation(type) && type.target === 'Role';\n });\n let queue = await self.Query('Role')\n .or(_.map(_.uniq(['users', ...userKeys]), k => q => q.isIntersect(k, [user])))\n .includes('name')\n .find({ master: true });\n let roles = queue;\n while (!_.isEmpty(queue)) {\n queue = await self.Query('Role')\n .or(_.map(_.uniq(['roles', ...roleKeys]), k => q => q.isIntersect(k, queue)))\n .notContainedIn('_id', _.compact(_.map(roles, x => x.objectId)))\n .includes('name')\n .find({ master: true });\n roles = _.uniqBy([...roles, ...queue], x => x.objectId);\n }\n return roles;\n };\n if (resolver) return resolver(user, defaultResolver);\n return defaultResolver();\n }\n\n async becomeUser(\n req: Request,\n user: TUser,\n options?: {\n cookieOptions?: CookieOptions | undefined;\n jwtSignOptions?: jwt.SignOptions | undefined;\n }\n ) {\n if (!user.objectId) throw Error('Invalid user object');\n if (req.res) await signUser(this, req.res, user, options);\n }\n\n async logoutUser(\n req: Request,\n options?: {\n cookieOptions?: CookieOptions | undefined;\n jwtSignOptions?: jwt.SignOptions | undefined;\n }\n ) {\n if (req.res) await signUser(this, req.res, undefined, options);\n }\n\n varifyPassword(user: TUser, password: string, options: ExtraOptions<true>) {\n return this[PVK].varifyPassword(this, user, password, options);\n }\n\n setPassword(user: TUser, password: string, options: ExtraOptions<true>) {\n return this[PVK].setPassword(this, user, password, options);\n }\n\n unsetPassword(user: TUser, options: ExtraOptions<true>) {\n return this[PVK].unsetPassword(this, user, options);\n }\n\n get schema(): ProtoServiceOptions<Ext>['schema'] {\n return this[PVK].options.schema;\n }\n\n get storage(): ProtoServiceOptions<Ext>['storage'] {\n return this._storage ?? this[PVK].options.storage;\n }\n\n get fileStorage(): ProtoServiceOptions<Ext>['fileStorage'] {\n return this[PVK].options.fileStorage;\n }\n\n async config(options?: { master?: boolean; }) {\n return this[PVK].config(this, options);\n }\n configAcl(options: { master: true; }) {\n if (options.master !== true) throw Error('No permission');\n return this[PVK].configAcl();\n }\n async setConfig(values: Record<string, TValueWithoutObject>, options: { master: true; acl?: string[]; }) {\n if (options.master !== true) throw Error('No permission');\n await this[PVK].setConfig(values, options.acl);\n }\n\n run(name: string, params?: TSerializable, options?: ExtraOptions<boolean>) {\n const payload = Object.setPrototypeOf({ params }, this);\n return this[PVK].run(this, name, payload, options);\n }\n\n define(\n name: string,\n callback: ProtoFunction<Ext>,\n options?: Omit<ProtoFunctionOptions<Ext>, 'callback'>,\n ) {\n this[PVK].functions[name] = options ? { callback, ...options } : callback;\n }\n\n afterCreate<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ) {\n if (_.isNil(this[PVK].triggers[className])) {\n this[PVK].triggers[className] = { create: [], update: [], delete: [] };\n }\n this[PVK].triggers[className].create.push(callback);\n }\n\n afterUpdate<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ) {\n if (_.isNil(this[PVK].triggers[className])) {\n this[PVK].triggers[className] = { create: [], update: [], delete: [] };\n }\n this[PVK].triggers[className].update.push(callback);\n }\n\n afterDelete<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ) {\n if (_.isNil(this[PVK].triggers[className])) {\n this[PVK].triggers[className] = { create: [], update: [], delete: [] };\n }\n this[PVK].triggers[className].delete.push(callback);\n }\n\n scheduleJob(name: string, params?: TValueWithoutObject, options?: ExtraOptions<boolean>) {\n return this[PVK].scheduleJob(this, name, params, options);\n }\n\n defineJob(\n name: string,\n callback: ProtoJobFunction<Ext>,\n options?: Omit<ProtoJobFunctionOptions<Ext>, 'callback'>,\n ) {\n this[PVK].jobs[name] = options ? { callback, ...options } : callback;\n }\n\n lockTable(className: string | string[], update: boolean) {\n return this.storage.lockTable(className, update);\n }\n\n withTransaction<T>(\n callback: (connection: ProtoService<Ext>) => PromiseLike<T>,\n options?: TransactionOptions,\n ) {\n return this.storage.withTransaction((storage) => callback(_.create(this, { _storage: storage })), options);\n }\n\n generateUploadToken(options: {\n maxUploadSize?: number;\n attributes?: Record<string, TValue>;\n jwtSignOptions?: jwt.SignOptions;\n } = {}) {\n return this[PVK].jwtSign({\n nonce: randomUUID(),\n maxUploadSize: options.maxUploadSize,\n attributes: JSON.parse(serialize(\n options.attributes ?? {},\n { objAttrs: ['_id'] },\n )),\n }, options?.jwtSignOptions ?? 'upload');\n }\n\n jwtSign(payload: any, options: jwt.SignOptions) {\n return this[PVK].jwtSign(payload, options);\n }\n\n jwtVarify(token: string, options: jwt.VerifyOptions = {}) {\n return this[PVK].jwtVarify(token, options);\n }\n\n notify(data: Record<string, TValueWithoutObject> & { _rperm?: string[]; }) {\n return this[PVK].notify(this, data);\n }\n\n listen(\n callback: (data: EventData) => void,\n selector?: TQuerySelector\n ) {\n const _selector = !_.isNil(selector) ? QuerySelector.decode(selector) : undefined;\n return this[PVK].listen(this, async data => {\n if (_selector && !_selector.eval(data)) return;\n await callback(data);\n });\n }\n\n refs(object: TObject, options?: ExtraOptions<boolean>) {\n if (!object.objectId) throw Error('Invalid object');\n const self = this;\n return asyncStream(async function* () {\n const objects = await self[PVK].refs(self, object, options);\n for await (const object of objects) yield self.rebind(object) as TObjectType<string, Ext>;\n });\n }\n\n async gc(classNames?: string | string[]) {\n const time = new Date();\n for (const className of _.castArray(classNames ?? this.classes())) {\n if (className === 'File') {\n const found = this.storage.find({\n className: 'File',\n filter: QuerySelector.decode({ _expired_at: { $lt: time } }),\n matches: {},\n groupMatches: {},\n includes: ['_id', '_expired_at', 'token'],\n objectIdSize: 0\n });\n for await (const item of found) {\n const token = item.get('token');\n if (!_.isEmpty(token)) await this.fileStorage.destroy(this, token);\n }\n }\n await this.storage.delete({\n className,\n filter: QuerySelector.decode({ _expired_at: { $lt: time } }),\n includes: ['_id', '_expired_at'],\n matches: {},\n groupMatches: {},\n objectIdSize: 0\n });\n }\n }\n}\n","//\n// index.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 { ProtoService } from '../proto/index';\nimport { RequestHandler } from '@o2ter/server-js';\nimport { signUser } from '../proto/session';\n\nexport default <E>(proto: ProtoService<E>): RequestHandler => async (req, res, next) => {\n try {\n const connected = proto.connect(req);\n await signUser(connected, res, await connected.currentUser());\n return next();\n } catch (e) {\n proto.logger.error(e);\n return next(new Error('Internal server error'));\n }\n};\n","//\n// common.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 { Readable } from 'node:stream';\nimport { Request, Response } from '@o2ter/server-js';\nimport busboy, { FileInfo } from 'busboy';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { TSerializable, serialize } from '../../internals/codec';\n\nexport const encodeError = (error: any) => {\n if (error instanceof String) return { message: error };\n if (error instanceof Error) return { message: error.message };\n return error;\n}\n\nexport const response = async <T extends TSerializable>(\n res: Response,\n callback: () => Awaitable<void | T>,\n) => {\n try {\n const data = await callback();\n res.type('application/json').send(serialize(data ?? null));\n } catch (error) {\n res.status(400).json(encodeError(error));\n }\n};\n\nexport const decodeFormStream = (\n req: Request,\n onFile: (file: Readable, info: FileInfo) => PromiseLike<any>\n) => {\n\n const formData = busboy(req);\n const data: Record<string, any> = {};\n const files: Promise<void>[] = [];\n\n formData.on('field', (name, val) => { data[name] = val; });\n formData.on('file', (name, file, info) => {\n files.push((async () => {\n data[name] = await onFile(file, info);\n if (!file.readableEnded) throw Error('Incomplete read');\n })());\n });\n\n const result = new Promise<Record<string, any>>((resolve, reject) => {\n formData.on('close', () => { resolve(Promise.all(files).then(() => data)); });\n formData.on('error', (error) => { reject(error); });\n });\n\n req.pipe(formData);\n return result;\n};\n","//\n// classes.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 { Server, Router, Request } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport queryType from 'query-types';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\n\nconst verifyRelatedBy = (relatedBy: any) => {\n if (!_.isPlainObject(relatedBy)) return;\n if (!_.isString(relatedBy.className) || _.isEmpty(relatedBy.className)) throw Error('Invalid option');\n if (!_.isString(relatedBy.objectId) || _.isEmpty(relatedBy.objectId)) throw Error('Invalid option');\n if (!_.isString(relatedBy.key) || _.isEmpty(relatedBy.key)) throw Error('Invalid option');\n}\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n const defaultHandler = async (req: Request<{ name?: string; }>) => {\n\n const { name } = req.params;\n\n const {\n operation,\n random,\n attributes,\n update,\n setOnInsert,\n relatedBy,\n silent,\n ...options\n } = deserialize(req.body) as any;\n\n verifyRelatedBy(relatedBy);\n\n const payload = proto.connect(req);\n const query = relatedBy ? payload.Relation(\n payload.Object(relatedBy.className, relatedBy.objectId),\n relatedBy.key,\n ) : payload.Query(name!);\n query[PVK].options = options;\n\n const opts = { master: payload.isMaster, silent };\n\n if (\n _.includes(['File', '_Job', '_JobScope'], name) &&\n _.includes(['insert', 'insertMany', 'upsertOne', 'upsertMany'], operation)\n ) throw Error('Invaild operation');\n\n switch (operation) {\n case 'explain':\n if (!payload.isMaster) throw Error('No permission');\n return query.explain(opts);\n case 'count': return query.count(opts);\n case 'find':\n {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = query[PVK].options.limit ?? maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n return await query.find(opts);\n }\n case 'random':\n {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = query[PVK].options.limit ?? maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n return await query.random(random, opts);\n }\n case 'nonrefs':\n {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = query[PVK].options.limit ?? maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n return await query.nonrefs(opts);\n }\n case 'insert': return query.insert(attributes, opts);\n case 'insertMany': return query.insertMany(attributes, opts);\n case 'updateOne': return query.updateOne(update, opts);\n case 'updateMany': return query.updateMany(update, opts);\n case 'upsertOne': return query.upsertOne(update, setOnInsert, opts);\n case 'upsertMany': return query.upsertMany(update, setOnInsert, opts);\n case 'deleteOne': return query.deleteOne(opts);\n case 'deleteMany': return query.deleteMany(opts);\n default: throw Error('Invalid operation');\n }\n }\n\n router.post(\n '/classes/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n await response(res, () => defaultHandler(req));\n }\n );\n\n router.post(\n '/relation',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n await response(res, () => defaultHandler(req));\n }\n );\n\n const createQuery = <E>(payload: ProtoService<E>, req: Request<{ name?: string; }>, checkLimit: boolean) => {\n\n const { name } = req.params;\n\n const {\n filter,\n sort,\n includes,\n skip,\n limit,\n relatedBy,\n } = req.query as any;\n\n verifyRelatedBy(relatedBy);\n\n const query = relatedBy ? payload.Relation(\n payload.Object(relatedBy.className, relatedBy.objectId),\n relatedBy.key,\n ) : payload.Query(name!);\n\n query[PVK].options.filter = !_.isEmpty(filter) && _.isString(filter) ? _.castArray(deserialize(filter)) as any : [];\n query[PVK].options.sort = _.isPlainObject(sort) && _.every(_.values(sort), _.isNumber) ? sort as any : undefined;\n query[PVK].options.includes = _.isArray(includes) && _.every(includes, _.isString) ? includes as any : undefined;\n query[PVK].options.skip = _.isNumber(skip) ? skip : undefined;\n\n if (checkLimit) {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = _.isNumber(limit) ? limit : maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n } else {\n query[PVK].options.limit = _.isNumber(limit) ? limit : undefined;\n }\n\n return query;\n };\n\n router.get(\n '/classes/:name',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).find({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/relation',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).find({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/random',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n const { weight } = req.query as any;\n\n await response(res, async () => createQuery(payload, req, true).random({ weight }, { master: payload.isMaster }));\n }\n );\n\n router.get(\n '/relation/random',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n const { weight } = req.query as any;\n\n await response(res, async () => createQuery(payload, req, true).random({ weight }, { master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/nonrefs',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).nonrefs({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/relation/nonrefs',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).nonrefs({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/:id',\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, () => payload.Query(name).get(id, { master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/:id/refs',\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, async () => payload.refs(payload.Object(name, id), { master: payload.isMaster }));\n }\n );\n\n router.patch(\n '/classes/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n const update = _.mapValues(deserialize(req.body) as any, v => ({ $set: v }));\n await response(res, () => createQuery(payload, req, false).updateMany(update as any, { master: payload.isMaster }));\n }\n );\n\n router.patch(\n '/classes/:name/:id',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n const query = payload.Query(name).equalTo('_id', id);\n\n const update = _.mapValues(deserialize(req.body) as any, v => ({ $set: v }));\n await response(res, () => query.updateOne(update as any, { master: payload.isMaster }));\n }\n );\n\n router.delete(\n '/classes/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n if (!_.isEmpty(req.body)) return void res.sendStatus(400);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, () => createQuery(payload, req, false).deleteMany({ master: payload.isMaster }));\n }\n );\n\n router.delete(\n '/relation',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n if (!_.isEmpty(req.body)) return void res.sendStatus(400);\n\n const payload = proto.connect(req);\n\n await response(res, () => createQuery(payload, req, false).deleteMany({ master: payload.isMaster }));\n }\n );\n\n router.delete(\n '/classes/:name/:id',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n if (!_.isEmpty(req.body)) return void res.sendStatus(400);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n const query = payload.Query(name).equalTo('_id', id);\n\n await response(res, () => query.deleteOne({ master: payload.isMaster }));\n }\n );\n\n return router;\n}","//\n// function.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { TObject } from '../../internals/object';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/functions/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n if (_.isNil(proto[PVK].functions[name])) return void res.sendStatus(404);\n\n await response(res, () => {\n\n const payload = proto.connect(req, x => ({\n params: x.rebind(deserialize(req.body, { objAttrs: TObject.defaultReadonlyKeys })),\n }));\n\n return payload[PVK].run(payload, name, payload, { master: payload.isMaster });\n });\n }\n );\n\n return router;\n}","//\n// job.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { TObject } from '../../internals/object';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/jobs/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n if (_.isNil(proto[PVK].jobs[name])) return void res.sendStatus(404);\n\n await response(res, () => {\n\n const payload = proto.connect(req);\n const params = payload.rebind(deserialize(req.body, { objAttrs: TObject.defaultReadonlyKeys }));\n\n return payload[PVK].scheduleJob(payload, name, params, { master: payload.isMaster });\n });\n }\n );\n\n return router;\n}","//\n// files.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 { Router } from '@o2ter/server-js';\nimport { Readable } from 'node:stream';\nimport { ProtoService } from '../proto';\nimport { decodeFormStream, response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { UPLOAD_TOKEN_HEADER_NAME } from '../../internals/const';\nimport { BinaryData } from '@o2ter/utils-js';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/files',\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n await response(res, async () => {\n\n const payload = proto.connect(req);\n const uploadToken = req.header(UPLOAD_TOKEN_HEADER_NAME);\n\n const { maxUploadSize } = payload[PVK].varifyUploadToken(payload, uploadToken, payload.isMaster);\n const { attributes, file } = await decodeFormStream(req, (file, info) => proto.fileStorage.create(proto, file, info, maxUploadSize));\n\n try {\n\n const obj = payload.Object('File');\n obj[PVK].mutated = _.mapValues(deserialize(attributes) as any, v => ({ $set: v })) as any;\n obj[PVK].extra.data = file;\n\n return obj.save({ master: payload.isMaster, uploadToken });\n\n } catch (e) {\n\n if (file?._id) proto[PVK].destroyFileData(proto, file._id);\n\n throw e;\n }\n });\n }\n );\n\n router.get(\n '/files/:id/:name',\n async (req, res, next) => {\n\n const { id, name } = req.params;\n\n const payload = proto.connect(req);\n const query = payload.Query('File').equalTo('_id', id);\n\n const file = await query.first({ master: payload.isMaster });\n if (!file || file.filename !== name) return void res.sendStatus(404);\n if (_.isNil(file.token) || _.isNil(file.size) || _.isNil(file.type)) return void res.sendStatus(404);\n\n const ranges = req.range(file.size);\n\n const match = req.headers['if-none-match'];\n if (match === `\"${id}\"`) {\n res.status(304).end();\n return;\n }\n res.setHeader('Content-Type', file.type);\n res.setHeader('Cache-Control', 'public, max-age=0');\n res.setHeader('ETag', `\"${id}\"`);\n\n let stream: AsyncIterable<BinaryData>;\n\n if (_.isArray(ranges) && ranges.type === 'bytes') {\n\n const startBytes = _.minBy(ranges, r => r.start)?.start ?? 0;\n const endBytes = _.maxBy(ranges, r => r.end)?.end ?? (file.size - 1);\n\n res.setHeader('Content-Length', endBytes - startBytes + 1);\n res.setHeader('Content-Range', `bytes ${startBytes}-${endBytes}/${file.size}`);\n res.status(206);\n\n stream = payload.fileStorage.fileData(payload, file.token, startBytes, endBytes + 1);\n\n } else {\n\n res.setHeader('Content-Length', file.size);\n res.status(200);\n\n stream = payload.fileStorage.fileData(payload, file.token);\n }\n\n Readable.from(stream).pipe(res).on('error', err => next(err));\n }\n );\n\n return router;\n}","//\n// user.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.get(\n '/user/me',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.currentUser());\n }\n );\n\n router.post(\n '/user/:id/password',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { id } = req.params;\n const payload = proto.connect(req);\n\n await response(res, async () => {\n\n if (!payload.isMaster) throw Error('No permission');\n\n const user = await payload.Query('User').get(id, { master: true });\n if (!user) throw Error('User not found');\n\n const { password } = _.isEmpty(req.body) ? { password: null } : deserialize(req.body) as any;\n if (_.isEmpty(password)) {\n await payload.unsetPassword(user, { master: true });\n } else {\n await payload.setPassword(user, password, { master: true });\n }\n });\n }\n );\n\n router.post(\n '/user/logout',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.logoutUser(req));\n }\n );\n\n return router;\n}","//\n// user.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/notify',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.notify(deserialize(req.body) as any));\n }\n );\n\n return router;\n}","//\n// schema.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 { Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.get(\n '/schema',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.schema as any;\n });\n }\n );\n\n router.get(\n '/schema/:name',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n if (_.isNil(proto.schema[name])) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.schema[name] as any;\n });\n }\n );\n\n return router;\n}","//\n// schema.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.get(\n '/config',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.config({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/configAcl',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.configAcl({ master: true });\n });\n }\n );\n\n router.post(\n '/config',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n const { values, acl } = deserialize(req.body) as any;\n\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.setConfig(values, { master: true, acl });\n });\n }\n );\n\n return router;\n}","//\n// index.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 { Router } from 'express';\nimport { Server } from '@o2ter/server-js';\nimport { ProtoService } from './server/proto';\nimport { ProtoServiceKeyOptions, ProtoServiceOptions } from './server/proto/types';\nimport authHandler from './server/auth';\nimport classesRoute from './server/routes/classes';\nimport functionRoute from './server/routes/function';\nimport jobRoute from './server/routes/job';\nimport filesRoute from './server/routes/files';\nimport userRoute from './server/routes/user';\nimport notifyRoute from './server/routes/notify';\nimport schemaRoute from './server/routes/schema';\nimport configRoute from './server/routes/config';\nimport { TSchema } from './internals/schema';\nimport { PVK } from './internals/private';\nimport { TValueWithoutObject } from './internals/types';\nimport Decimal from 'decimal.js';\nimport { response } from './server/routes/common';\nimport { QuerySelector } from './server/query/dispatcher/parser';\nimport { serialize } from './internals/codec';\n\nexport * from './internals/codec';\nexport { classExtends } from './internals/utils';\nexport { TFileStorage } from './server/file';\nexport { ProtoService } from './server/proto';\nexport { ProtoClient } from './client';\n\n/**\n * Schema definition utility functions.\n */\nexport const schema = _.assign((x: Record<string, TSchema>) => x, {\n /**\n * Defines a boolean schema.\n * @param defaultValue - The default value for the boolean.\n * @returns The boolean schema.\n */\n boolean: (defaultValue?: boolean) => ({ type: 'boolean', default: defaultValue }) as const,\n\n /**\n * Defines a number schema.\n * @param defaultValue - The default value for the number.\n * @returns The number schema.\n */\n number: (defaultValue?: number) => ({ type: 'number', default: defaultValue }) as const,\n\n /**\n * Defines a decimal schema.\n * @param defaultValue - The default value for the decimal.\n * @returns The decimal schema.\n */\n decimal: (defaultValue?: Decimal) => ({ type: 'decimal', default: defaultValue }) as const,\n\n /**\n * Defines a string schema.\n * @param defaultValue - The default value for the string.\n * @returns The string schema.\n */\n string: (defaultValue?: string) => ({ type: 'string', default: defaultValue }) as const,\n\n /**\n * Defines a string array schema.\n * @param defaultValue - The default value for the string array.\n * @returns The string array schema.\n */\n stringArray: (defaultValue?: string[]) => ({ type: 'string[]', default: defaultValue }) as const,\n\n /**\n * Defines a date schema.\n * @param defaultValue - The default value for the date.\n * @returns The date schema.\n */\n date: (defaultValue?: Date) => ({ type: 'date', default: defaultValue }) as const,\n\n /**\n * Defines an object schema.\n * @param defaultValue - The default value for the object.\n * @returns The object schema.\n */\n object: <T extends Record<string, TValueWithoutObject>>(defaultValue?: T) => ({ type: 'object', default: defaultValue }) as const,\n\n /**\n * Defines an array schema.\n * @param defaultValue - The default value for the array.\n * @returns The array schema.\n */\n array: <T extends TValueWithoutObject[]>(defaultValue?: T) => ({ type: 'array', default: defaultValue }) as const,\n\n /**\n * Defines a vector schema.\n * @param dimension - The dimension of the vector.\n * @param defaultValue - The default value for the vector.\n * @returns The vector schema.\n */\n vector: (dimension: number, defaultValue?: number[]) => ({ type: 'vector', dimension, default: defaultValue }) as const,\n\n /**\n * Defines a shape schema.\n * @param shape - The shape definition.\n * @returns The shape schema.\n */\n shape: (shape: Record<string, TSchema.DataType>) => ({ type: 'shape', shape }) as const,\n\n /**\n * Defines a pointer schema.\n * @param target - The target of the pointer.\n * @returns The pointer schema.\n */\n pointer: (target: string) => ({ type: 'pointer', target }) as const,\n\n /**\n * Defines a relation schema.\n * @param target - The target of the relation.\n * @param foreignField - The foreign field of the relation.\n * @returns The relation schema.\n */\n relation: (target: string, foreignField?: string) => ({ type: 'relation', target, foreignField }) as const,\n});\n\n/**\n * Creates a ProtoRoute.\n * @param options - The options for the ProtoRoute.\n * @returns A promise that resolves to a Router.\n */\nexport const ProtoRoute = async <E>(options: {\n proto: ProtoService<E> | (ProtoServiceOptions<E> & ProtoServiceKeyOptions);\n}): Promise<Router> => {\n\n const proto = options.proto instanceof ProtoService ? options.proto : new ProtoService(options.proto);\n await proto[PVK].prepare();\n\n const router = Server.Router().use(\n authHandler(proto),\n (req, res, next) => {\n const payload = proto.connect(req);\n if (!payload.isInvalidMasterToken) return next();\n res.status(400).json({ message: 'Invalid token' });\n },\n );\n\n router.get('/health', (req, res) => { res.sendStatus(200); });\n router.get('/sessionInfo', async (req, res) => {\n await response(res, () => proto.connect(req).sessionInfo());\n });\n\n classesRoute(router, proto);\n functionRoute(router, proto);\n jobRoute(router, proto);\n filesRoute(router, proto);\n userRoute(router, proto);\n notifyRoute(router, proto);\n schemaRoute(router, proto);\n configRoute(router, proto);\n\n return router;\n}\n\n/**\n * Registers a ProtoSocket.\n * @param proto - The ProtoService instance.\n * @param server - The server instance.\n * @param endpoint - The optional endpoint.\n * @returns The socket.io instance.\n */\nexport const registerProtoSocket = <E>(\n proto: ProtoService<E>,\n server: Server,\n endpoint?: string,\n) => {\n const io = endpoint ? server.socket().of(endpoint) : server.socket();\n\n io.on('connection', async (socket) => {\n\n type QueryOpts = {\n event: string;\n className: string;\n filter: QuerySelector | boolean;\n };\n\n let events: Record<string, QuerySelector | boolean> = {};\n let queries: Record<string, QueryOpts> = {};\n\n const connect = async (token: string) => {\n const payload = await proto.connectWithSessionToken(token);\n const { remove: remove_basic } = payload.listen(data => {\n const ids = _.keys(_.pickBy(events, v => v instanceof QuerySelector ? v.eval(data) : v));\n const payload = JSON.parse(serialize(data));\n if (!_.isEmpty(ids)) socket.emit('ON_EV_NOTIFY', { ids, data: payload });\n });\n const { remove: remove_livequery } = payload[PVK]._liveQuery(payload, (ev, objs) => {\n const ids: Record<string, string[]> = {};\n for (const obj of objs) {\n ids[obj.objectId!] = _.keys(_.pickBy(queries, v => {\n if (v.event !== ev || v.className !== obj.className) return false;\n return v.filter instanceof QuerySelector ? v.filter.eval(obj) : v.filter;\n }));\n }\n if (_.isEmpty(ids)) return;\n const payload = JSON.parse(serialize(_.filter(objs, obj => !_.isEmpty(ids[obj.objectId!]))));\n socket.emit('ON_EV_LIVEQUERY', { ids, data: payload });\n });\n return () => {\n remove_basic();\n remove_livequery();\n };\n };\n\n const { token } = socket.handshake.auth;\n let remove = connect(token);\n\n socket.on('auth', (token) => {\n remove.then(rm => rm());\n remove = connect(token);\n });\n\n socket.on('disconnect', () => {\n remove.then(rm => rm());\n });\n\n socket.on('EV_NOTIFY', (payload) => {\n events = _.mapValues(payload, v => {\n if (_.isBoolean(v)) return true;\n try {\n return QuerySelector.decode(v);\n } catch (error) {\n proto.logger.error(error);\n return false;\n }\n });\n });\n\n socket.on('EV_LIVEQUERY', (payload) => {\n queries = _.mapValues(payload, v => {\n const { event = '', className = '', filter } = v ?? {};\n if (_.isBoolean(v)) return { event, className, filter: true };\n try {\n return { event, className, filter: QuerySelector.decode(filter) };\n } catch (error) {\n proto.logger.error(error);\n return { event, className, filter: false };\n }\n });\n });\n });\n\n return io;\n}\n\nexport default ProtoRoute;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/server/utils.ts","../../src/server/query/dispatcher/index.ts","../../src/server/proto/proxy.ts","../../src/server/query/index.ts","../../src/server/proto/defaults.ts","../../src/server/crypto/password.ts","../../src/server/proto/internal.ts","../../src/server/proto/session.ts","../../src/server/schedule.ts","../../src/server/proto/index.ts","../../src/server/auth/index.ts","../../src/server/routes/common.ts","../../src/server/routes/classes.ts","../../src/server/routes/function.ts","../../src/server/routes/job.ts","../../src/server/routes/files.ts","../../src/server/routes/user.ts","../../src/server/routes/notify.ts","../../src/server/routes/schema.ts","../../src/server/routes/config.ts","../../src/index.ts"],"sourcesContent":["//\n// utils.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';\n\nexport const normalize = <T>(x: T): T => {\n if (_.isString(x)) return x.normalize('NFD') as T;\n if (_.isArray(x)) return _.map(x, x => normalize(x)) as T;\n if (_.isPlainObject(x)) return _.fromPairs(_.map(_.toPairs(x as object), ([k, v]) => [normalize(k), normalize(v)])) as T;\n return x;\n};\n","//\n// methods.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 { ProtoService } from '../../proto/index';\nimport { QueryValidator } from './validator';\nimport { FindOptions, RelationOptions } from '../../storage';\nimport { TQueryBaseOptions } from '../../../internals/query/base';\nimport { ExtraOptions } from '../../../internals/options';\nimport { TQueryRandomOptions } from '../../../internals/query';\nimport { TValueWithUndefined } from '../../../internals/types';\nimport { PVK } from '../../../internals/private';\nimport { TUpdateOp } from '../../../internals/object/types';\nimport { normalize } from '../../utils';\nimport { TQueryAccumulator } from '../../../internals/query/types/accumulators';\nimport { QueryExpression } from './parser/expressions';\n\nexport const fetchUserPerms = async <E>(proto: ProtoService<E>) => _.uniq(_.compact([..._.map(await proto.currentRoles(), x => `role:${x}`), (await proto.currentUser())?.id]));\n\nexport const dispatcher = <E>(\n proto: ProtoService<E>,\n options: ExtraOptions<boolean> & {\n disableSecurity: boolean;\n createFile: boolean;\n },\n) => {\n\n const acls = async () => options.master ? [] : await fetchUserPerms(proto);\n const validator = async () => new QueryValidator(proto, await acls(), {\n master: options.master ?? false,\n disableSecurity: options.disableSecurity,\n });\n\n const createFile = options.createFile;\n\n return {\n async explain(\n query: FindOptions & RelationOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n return proto.storage.explain(decoded);\n },\n async count(\n query: FindOptions & RelationOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'count')) throw Error('No permission');\n return proto.storage.count(_validator.decodeQuery(normalize(query), 'read'));\n },\n async find(\n query: FindOptions & RelationOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n return proto.storage.find(decoded);\n },\n async nonrefs(\n query: FindOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n return proto.storage.nonrefs(decoded);\n },\n async random(\n query: FindOptions & RelationOptions,\n opts?: TQueryRandomOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n const decoded = _validator.decodeQuery(normalize(query), 'read');\n const isGet = _validator.isGetMethod(decoded.filter);\n if (!_validator.validateCLPs(query.className, isGet ? 'get' : 'find')) throw Error('No permission');\n const weight = opts?.weight ? QueryExpression.decode(opts.weight, false) : undefined;\n for (const key of weight?.keyPaths() ?? []) {\n if (!_validator.validateKey(query.className, key, 'read', QueryValidator.patterns.path)) throw Error('No permission');\n }\n return proto.storage.random(decoded, { weight });\n },\n async insert(\n options: {\n className: string;\n includes?: string[];\n matches?: Record<string, TQueryBaseOptions>;\n groupMatches?: Record<string, Record<string, TQueryAccumulator>>;\n },\n values: Record<string, TValueWithUndefined>[],\n ) {\n if (!createFile && options.className === 'File') throw Error('File is not support insert');\n QueryValidator.recursiveCheck(values);\n const _validator = await validator();\n const _groupMatches = _validator.decodeGroupMatches(options.className, options.groupMatches ?? {});\n const _includes = _validator.decodeIncludes(options.className, options.includes ?? ['*'], _groupMatches);\n const _matches = _validator.decodeMatches(options.className, options.matches ?? {}, _includes);\n if (!_validator.validateCLPs(options.className, 'create')) throw Error('No permission');\n const _attrs = normalize(_.map(values, attr => _validator.validateFields(options.className, attr, 'create', QueryValidator.patterns.path)));\n while (true) {\n try {\n return await proto.storage.atomic(\n (storage) => storage.insert({\n className: options.className,\n includes: _includes,\n matches: _matches,\n groupMatches: _groupMatches,\n objectIdSize: proto[PVK].options.objectIdSize\n }, _attrs),\n { lockTable: options.className, retry: true },\n );\n } catch (e) {\n if (proto.storage.isDuplicateIdError(e)) continue;\n throw e;\n }\n }\n },\n async update(\n query: FindOptions,\n update: Record<string, TUpdateOp>\n ) {\n QueryValidator.recursiveCheck(query, update);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'update')) throw Error('No permission');\n return proto.storage.atomic((storage) => storage.update(\n _validator.decodeQuery(normalize(query), 'update'),\n normalize(_validator.validateFields(query.className, update, 'update', QueryValidator.patterns.path)),\n ));\n },\n async upsert(\n query: FindOptions,\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>\n ) {\n if (query.className === 'File') throw Error('File is not support upsert');\n QueryValidator.recursiveCheck(query, update, setOnInsert);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'create', 'update')) throw Error('No permission');\n const _query = _validator.decodeQuery(normalize(query), 'update');\n const _update = normalize(_validator.validateFields(query.className, update, 'update', QueryValidator.patterns.path));\n const _setOnInsert = normalize(_validator.validateFields(query.className, setOnInsert, 'create', QueryValidator.patterns.path));\n while (true) {\n try {\n return await proto.storage.atomic(\n (storage) => storage.upsert(_query, _update, _setOnInsert),\n { lockTable: query.className, retry: true },\n );\n } catch (e) {\n if (proto.storage.isDuplicateIdError(e)) continue;\n throw e;\n }\n }\n },\n async delete(\n query: FindOptions\n ) {\n QueryValidator.recursiveCheck(query);\n const _validator = await validator();\n if (!_validator.validateCLPs(query.className, 'delete')) throw Error('No permission');\n return proto.storage.atomic((storage) => storage.delete(_validator.decodeQuery(normalize(query), 'update')));\n },\n };\n};\n\n","//\n// proxy.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 { prototypes } from '@o2ter/utils-js';\n\nexport const proxy = <T>(x: T): T => {\n const self = x as any;\n const proxy = _.create(self) as any;\n for (const name of _.uniq(_.flatMap(prototypes(proxy), x => Object.getOwnPropertyNames(x)))) {\n if (name === 'constructor') continue;\n const value = _.isFunction(self[name]) ? self[name].bind(self) : self[name];\n Object.defineProperty(proxy, name, { get: () => value });\n }\n return proxy;\n};\n","//\n// methods.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 { _serviceOf, ProtoService } from '../proto';\nimport { dispatcher } from './dispatcher';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { PVK } from '../../internals/private';\nimport { ExtraOptions } from '../../internals/options';\nimport { TQuery, TQueryOptions, TQueryRandomOptions } from '../../internals/query';\nimport { TObject } from '../../internals/object';\nimport { TExtended } from '../../internals/object/methods';\nimport { TValueWithUndefined } from '../../internals/types';\nimport { TUpdateOp } from '../../internals/object/types';\nimport { resolveColumn } from './dispatcher/validator';\nimport { isPointer, isRelation } from '../../internals/schema';\nimport { proxy } from '../proto/proxy';\nimport { LiveQuerySubscription } from '../../internals/liveQuery';\n\ntype _QueryOptions = {\n insecure?: boolean;\n createFile?: boolean;\n relatedBy?: {\n className: string;\n id: string;\n key: string;\n };\n};\n\nabstract class _ProtoQuery<T extends string, E, M extends boolean> extends TQuery<T, E, M> {\n\n protected _proto: ProtoService<E>;\n protected _opts: _QueryOptions;\n\n constructor(proto: ProtoService<E>, opts: _QueryOptions) {\n super();\n this._proto = proto;\n this._opts = opts;\n }\n\n abstract get className(): T;\n\n private get _queryOptions() {\n return {\n ...this[PVK].options,\n className: this.className,\n relatedBy: this._opts.relatedBy,\n };\n }\n\n private _dispatcher(\n options?: ExtraOptions<M>\n ): ReturnType<typeof dispatcher<E>> {\n const schema = this._proto.schema[this.className];\n if (_.isNil(schema)) throw Error('Invalid className');\n if (this._opts.insecure) {\n if (options?.master !== true) throw Error('No permission');\n }\n return dispatcher(_serviceOf(options) ?? this._proto, {\n ...options ?? {},\n disableSecurity: !!this._opts.insecure,\n createFile: !!this._opts.createFile,\n });\n }\n\n explain(options?: ExtraOptions<M>) {\n return this._dispatcher(options).explain(this._queryOptions);\n }\n\n count(options?: ExtraOptions<M>) {\n return this._dispatcher(options).count(this._queryOptions);\n }\n\n private _objectMethods<U extends TObject | TObject[] | undefined>(object: U) {\n return this._proto.rebind(object) as TExtended<U, T, E>;\n }\n\n find(options?: ExtraOptions<M>) {\n const self = this;\n return asyncStream(async function* () {\n const objects = await self._dispatcher(options).find(self._queryOptions);\n for await (const object of objects) yield self._objectMethods(object);\n });\n }\n\n nonrefs(options?: ExtraOptions<M>) {\n const self = this;\n return asyncStream(async function* () {\n const objects = await self._dispatcher(options).nonrefs(self._queryOptions);\n for await (const object of objects) yield self._objectMethods(object);\n });\n }\n\n random(\n opts?: TQueryRandomOptions,\n options?: ExtraOptions<M>\n ) {\n const self = this;\n return asyncStream(async function* () {\n const objects = await self._dispatcher(options).random(self._queryOptions, opts);\n for await (const object of objects) yield self._objectMethods(object);\n });\n }\n\n private _on_upsert(objects: TObject[]) {\n const createTraggers = this._proto[PVK].triggers[this.className]?.create ?? [];\n const updateTraggers = this._proto[PVK].triggers[this.className]?.update ?? [];\n for (const obj of objects) {\n for (const tragger of obj.__v === 0 ? createTraggers : updateTraggers) {\n (async () => {\n try {\n await tragger(proxy(Object.setPrototypeOf({ object: obj }, this._proto)));\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n if (this._proto.schema[this.className]?.liveQuery) {\n (async () => {\n try {\n await this._proto[PVK].publishLiveQuery(this._proto, 'create', _.filter(objects, x => x.__v === 0));\n await this._proto[PVK].publishLiveQuery(this._proto, 'update', _.filter(objects, x => x.__v !== 0));\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n\n private _on_delete(objects: TObject[]) {\n const traggers = this._proto[PVK].triggers[this.className]?.delete ?? [];\n for (const obj of objects) {\n for (const tragger of traggers) {\n (async () => {\n try {\n await tragger(proxy(Object.setPrototypeOf({ object: obj }, this._proto)));\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n if (this._proto.schema[this.className]?.liveQuery) {\n (async () => {\n try {\n await this._proto[PVK].publishLiveQuery(this._proto, 'delete', objects);\n } catch (e) {\n this._proto.logger.error(e);\n }\n })();\n }\n }\n\n async insertMany(\n values: Record<string, TValueWithUndefined>[],\n options?: ExtraOptions<M>\n ) {\n const objs = this._objectMethods(\n await this._dispatcher(options).insert({\n className: this.className,\n includes: this[PVK].options.includes,\n matches: this[PVK].options.matches,\n groupMatches: this[PVK].options.groupMatches,\n }, values)\n );\n if (!options?.silent) this._on_upsert(objs);\n return objs;\n }\n\n async updateMany(\n update: Record<string, TUpdateOp>,\n options?: ExtraOptions<M>\n ) {\n const objs = this._objectMethods(\n await this._dispatcher(options).update(this._queryOptions, update)\n );\n if (!options?.silent) this._on_upsert(objs);\n return objs;\n }\n\n async upsertMany(\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>,\n options?: ExtraOptions<M>\n ) {\n const objs = this._objectMethods(\n await this._dispatcher(options).upsert(this._queryOptions, update, setOnInsert)\n );\n if (!options?.silent) this._on_upsert(objs);\n return objs;\n }\n\n async deleteMany(options?: ExtraOptions<M>) {\n const objs = this._objectMethods(\n await this._dispatcher(options).delete(this._queryOptions)\n );\n if (!options?.silent) this._on_delete(objs);\n return objs;\n }\n}\n\nexport class ProtoQuery<T extends string, E, M extends boolean> extends _ProtoQuery<T, E, M> {\n\n private _className: T;\n\n constructor(className: T, proto: ProtoService<E>, opts: _QueryOptions) {\n super(proto, opts);\n this._className = className;\n }\n\n get className(): T {\n return this._className;\n }\n\n clone(options?: TQueryOptions) {\n const clone = new ProtoQuery(this.className, this._proto, this._opts);\n clone[PVK].options = options ?? { ...this[PVK].options };\n return clone;\n }\n\n subscribe() {\n return new LiveQuerySubscription<T, E>(\n this.className,\n this._proto,\n this[PVK].options.filter ?? [],\n );\n }\n}\n\nexport class ProtoRelationQuery<E, M extends boolean> extends _ProtoQuery<string, E, M> {\n\n constructor(proto: ProtoService<E>, opts: _QueryOptions) {\n super(proto, opts);\n }\n\n get className(): string {\n const { className, key } = this._opts.relatedBy!;\n const { dataType } = resolveColumn(this._proto.schema, className, key);\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid relation key: ${key}`);\n return dataType.target;\n }\n\n clone(options?: TQueryOptions) {\n const clone = new ProtoRelationQuery(this._proto, this._opts);\n clone[PVK].options = options ?? { ...this[PVK].options };\n return clone;\n }\n\n subscribe(): LiveQuerySubscription<string, E> {\n throw Error('Unable to subscribe to relationship query');\n }\n}\n","//\n// defaults.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 { TSchema } from '../../internals/schema';\n\nexport const defaultSchema: Record<string, TSchema> = {\n 'User': {\n fields: {\n password: 'object',\n },\n classLevelPermissions: {\n find: [],\n count: [],\n delete: [],\n },\n fieldLevelPermissions: {\n _expired_at: { create: [], update: [] },\n },\n secureFields: ['password'],\n },\n 'Role': {\n fields: {\n name: 'string',\n users: { type: 'relation', target: 'User' },\n roles: { type: 'relation', target: 'Role' },\n },\n classLevelPermissions: {\n create: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n _expired_at: { create: [], update: [] },\n },\n indexes: [\n {\n keys: { name: 1 },\n unique: true,\n },\n ],\n },\n 'File': {\n fields: {\n filename: 'string',\n size: 'number',\n type: 'string',\n token: 'string',\n nonce: 'string',\n },\n classLevelPermissions: {\n find: [],\n count: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n size: { update: [] },\n type: { update: [] },\n token: { update: [] },\n nonce: { update: [] },\n _expired_at: { update: [] },\n },\n indexes: [\n {\n keys: { token: 1 },\n unique: true,\n },\n {\n keys: { nonce: 1 },\n unique: true,\n },\n ],\n },\n '_Job': {\n fields: {\n name: 'string',\n data: 'object',\n error: 'object',\n user: { type: 'pointer', target: 'User' },\n startedAt: 'date',\n completedAt: 'date',\n locks: { type: 'relation', target: '_JobScope', foreignField: 'job' },\n },\n classLevelPermissions: {\n find: [],\n count: [],\n create: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n name: { update: [] },\n data: { update: [] },\n error: { update: [] },\n user: { update: [] },\n startedAt: { create: [], update: [] },\n completedAt: { create: [], update: [] },\n _expired_at: { create: [], update: [] },\n },\n indexes: [\n { keys: { completedAt: 1, _created_at: 1 } },\n ],\n },\n '_JobScope': {\n fields: {\n scope: 'string',\n job: { type: 'pointer', target: '_Job' },\n },\n classLevelPermissions: {\n get: [],\n find: [],\n count: [],\n create: [],\n update: [],\n delete: [],\n },\n fieldLevelPermissions: {\n scope: { update: [] },\n job: { update: [] },\n _expired_at: { create: [], update: [] },\n },\n indexes: [\n {\n keys: { scope: 1 },\n unique: true,\n },\n ],\n },\n}\n","//\n// password.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 { scrypt, BinaryLike, ScryptOptions } from 'node:crypto';\nimport { promisify } from 'util';\nimport { randomBytes } from '@o2ter/crypto-js';\n\nconst _scrypt = promisify<BinaryLike, BinaryLike, number, ScryptOptions, Buffer>(scrypt);\n\ntype _PasswordHashOptions = {\n 'scrypt': {\n log2n: number;\n blockSize: number;\n parallel: number;\n keySize: number;\n saltSize: number;\n };\n};\n\nexport type PasswordHashOptions = {\n [K in keyof _PasswordHashOptions]: { alg: K } & _PasswordHashOptions[K];\n}[keyof _PasswordHashOptions];\n\nconst _passwordHash = async <T extends keyof _PasswordHashOptions>(\n alg: T,\n password: string,\n salt: Buffer | Uint8Array,\n options: _PasswordHashOptions[T],\n) => {\n switch (alg) {\n case 'scrypt':\n\n if (!_.isSafeInteger(options.log2n)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.blockSize)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.parallel)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.keySize)) throw Error('Invalid options');\n if (!_.isSafeInteger(options.saltSize)) throw Error('Invalid options');\n\n const _opts: ScryptOptions = {\n N: 1 << options.log2n,\n blockSize: options.blockSize,\n parallelization: options.parallel,\n };\n\n const derivedKey = await _scrypt(password, salt, options.keySize, _opts);\n\n return derivedKey.toString('base64');\n\n default: throw Error('Invalid algorithm');\n }\n}\n\nexport const passwordHash = async <T extends keyof _PasswordHashOptions>(\n alg: T,\n password: string,\n options: _PasswordHashOptions[T],\n) => {\n const salt = randomBytes(options.saltSize);\n return {\n alg,\n salt: salt.toString('base64'),\n derivedKey: await _passwordHash(alg, password, salt, options),\n ...options\n };\n}\n\nexport const varifyPassword = async <T extends keyof _PasswordHashOptions>(\n alg: T,\n password: string,\n options: _PasswordHashOptions[T] & { salt: string; derivedKey: string; },\n) => {\n if (!_.isString(options.salt)) return false;\n if (!_.isString(options.derivedKey)) return false;\n try {\n return options.derivedKey === await _passwordHash(alg, password, Buffer.from(options.salt, 'base64'), options);\n } catch {\n return false;\n }\n}","//\n// internal.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 jwt from 'jsonwebtoken';\nimport { Blob } from 'node:buffer';\nimport { Readable } from 'node:stream';\nimport { defaultSchema } from './defaults';\nimport { ProtoServiceOptions, ProtoServiceKeyOptions } from './types';\nimport { ProtoFunction, ProtoFunctionOptions, ProtoJobFunction, ProtoJobFunctionOptions, ProtoTriggerFunction } from '../../internals/proto/types';\nimport { generateId } from '../crypto/random';\nimport { TSchema, _typeof, defaultObjectKeyTypes, isPointer, isPrimitive, isRelation, isShape } from '../../internals/schema';\nimport { resolveDataType, QueryValidator } from '../query/dispatcher/validator';\nimport { passwordHash, varifyPassword } from '../crypto/password';\nimport { proxy } from './proxy';\nimport { _serviceOf, ProtoService } from '.';\nimport { base64ToBuffer, isBinaryData, prototypes } from '@o2ter/utils-js';\nimport { ProtoInternalType } from '../../internals/proto';\nimport { TObject } from '../../internals/object';\nimport { TValueWithoutObject, TValue } from '../../internals/types';\nimport { ExtraOptions } from '../../internals/options';\nimport { TUser } from '../../internals/object/user';\nimport { TFile } from '../../internals/object/file';\nimport { FileData } from '../../internals/buffer';\nimport { PVK } from '../../internals/private';\nimport { fetchUserPerms } from '../query/dispatcher';\nimport { EventData } from '../../internals/proto';\nimport { normalize } from '../utils';\nimport { PROTO_LIVEQUERY_MSG, PROTO_NOTY_MSG } from '../../internals/const';\nimport { TJob } from '../../internals/object/job';\nimport { deserialize, serialize } from '../../internals/codec';\nimport { ProtoQuery } from '../query';\nimport { TQuerySelector } from '../../internals/query/types/selectors';\nimport { QuerySelector } from '../query/dispatcher/parser';\n\nconst validateForeignField = (schema: Record<string, TSchema>, key: string, dataType: TSchema.RelationType) => {\n if (!dataType.foreignField) return;\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid foreign field: ${key}`);\n const foreignField = resolveDataType(schema, dataType.target, dataType.foreignField);\n if (_.isNil(foreignField)) throw Error(`Invalid foreign field: ${key}`);\n if (isPrimitive(foreignField)) throw Error(`Invalid foreign field: ${key}`);\n if (foreignField.type === 'relation' && !_.isNil(foreignField.foreignField)) throw Error(`Invalid foreign field: ${key}`);\n}\n\nconst validateShapedObject = (schema: Record<string, TSchema>, dataType: TSchema.ShapeType) => {\n if (_.isEmpty(dataType.shape)) throw Error('Invalid empty shape');\n for (const [key, type] of _.entries(dataType.shape)) {\n if (!key.match(QueryValidator.patterns.fieldName)) throw Error(`Invalid field name: ${key}`);\n if (isShape(type)) {\n validateShapedObject(schema, type);\n } else if (isRelation(type)) {\n validateForeignField(schema, key, type);\n }\n }\n}\n\nconst validateSchemaName = (schema: Record<string, TSchema>) => {\n for (const name of ['_Schema', '_Config']) {\n if (!_.isNil(schema[name])) throw Error('Reserved name of class');\n }\n for (const [, _schema] of _.toPairs(schema)) {\n for (const [key] of _.toPairs(_schema.fields)) {\n if (_.includes(TObject.defaultKeys, key)) throw Error(`Reserved field name: ${key}`);\n }\n }\n}\n\nconst validateSchema = (schema: Record<string, TSchema>) => {\n for (const [className, _schema] of _.toPairs(schema)) {\n\n if (!className.match(QueryValidator.patterns.className)) throw Error(`Invalid class name: ${className}`);\n\n for (const [key, dataType] of _.toPairs(_schema.fields)) {\n if (!key.match(QueryValidator.patterns.fieldName)) throw Error(`Invalid field name: ${key}`);\n if (isShape(dataType)) {\n validateShapedObject(schema, dataType);\n } else if (isPointer(dataType)) {\n if (_.isNil(defaultSchema[dataType.target] ?? schema[dataType.target])) throw Error(`Invalid target: ${key}`);\n } else if (isRelation(dataType)) {\n if (_.isNil(defaultSchema[dataType.target] ?? schema[dataType.target])) throw Error(`Invalid target: ${key}`);\n validateForeignField(schema, key, dataType);\n }\n const fields = _.keys(_schema.fields);\n for (const key of _.keys(_schema.fieldLevelPermissions)) {\n if (!fields.includes(key)) throw Error(`Invalid field permission: ${key}`);\n }\n for (const key of _schema.secureFields ?? []) {\n if (!fields.includes(key)) throw Error(`Invalid field permission: ${key}`);\n }\n }\n }\n}\n\nconst mergeSchema = (...schemas: Record<string, TSchema>[]) => _.reduce(schemas, (acc, schema) => ({\n ...acc,\n ..._.mapValues(schema, (s, className) => ({\n fields: {\n ...defaultObjectKeyTypes,\n ...(acc[className]?.fields ?? {}),\n ...s.fields,\n },\n classLevelPermissions: _.mergeWith(\n acc[className]?.classLevelPermissions ?? {},\n s.classLevelPermissions,\n (l, r) => _.isArray(l) ? [...l, ...r] : undefined,\n ),\n additionalObjectPermissions: _.mergeWith(\n acc[className]?.additionalObjectPermissions ?? {},\n s.additionalObjectPermissions,\n (l, r) => _.isArray(l) ? [...l, ...r] : undefined,\n ),\n fieldLevelPermissions: _.mergeWith(\n acc[className]?.fieldLevelPermissions ?? {},\n s.fieldLevelPermissions,\n (l, r) => _.isArray(l) ? [...l, ...r] : undefined,\n ),\n secureFields: [\n ...(acc[className]?.secureFields ?? []),\n ...(s.secureFields ?? []),\n ],\n indexes: [\n ...(acc[className]?.indexes ?? [\n { keys: { _rperm: 1 } },\n { keys: { _wperm: 1 } },\n { keys: { _created_at: 1 } },\n { keys: { _updated_at: 1 } },\n { keys: { _expired_at: 1 } },\n ]),\n ...(s.indexes ?? []),\n ],\n liveQuery: acc[className]?.liveQuery || s.liveQuery,\n })),\n}), {} as Record<string, TSchema>);\n\nexport class ProtoInternal<Ext, P extends ProtoService<Ext>> implements ProtoInternalType<Ext, P> {\n\n options: Required<ProtoServiceOptions<Ext>> & ProtoServiceKeyOptions;\n\n functions: Record<string, ProtoFunction<Ext, any, any> | ProtoFunctionOptions<Ext>> = {};\n triggers: Record<string, {\n create: ProtoTriggerFunction<any, Ext>[];\n update: ProtoTriggerFunction<any, Ext>[];\n delete: ProtoTriggerFunction<any, Ext>[];\n }> = {};\n jobs: Record<string, ProtoJobFunction<Ext, any> | ProtoJobFunctionOptions<Ext>> = {};\n\n jobRunner = new JobRunner<Ext, P>();\n\n constructor(options: Required<ProtoServiceOptions<Ext>> & ProtoServiceKeyOptions) {\n validateSchemaName(options.schema);\n const schema = mergeSchema(defaultSchema, options.fileStorage.schema, options.schema);\n validateSchema(schema);\n if (!_.every(options.roleResolver?.inheritKeys, k => {\n const type = resolveDataType(schema, 'Role', k);\n return type && isRelation(type) && _.includes(['User', 'Role'], type.target);\n })) {\n throw Error(`Invalid role keys`);\n }\n this.options = {\n ...options,\n schema,\n };\n }\n\n async prepare() {\n await this.options.storage.prepare(this.options.schema);\n }\n\n shutdown() {\n this.jobRunner.shutdown();\n }\n\n generateId() {\n return generateId(this.options.objectIdSize);\n }\n\n private async _perms(proto: P) {\n return _.uniq(['*', ...await fetchUserPerms(proto)]);\n }\n\n async config(proto: P, options?: { master?: boolean; }) {\n return this.options.storage.config(options?.master ? undefined : await this._perms(proto));\n }\n configAcl() {\n return this.options.storage.configAcl();\n }\n async setConfig(values: Record<string, TValueWithoutObject>, acl?: string[]) {\n return this.options.storage.setConfig(normalize(values), normalize(acl));\n }\n\n async run(proto: P, name: string, payload: any, options?: ExtraOptions<boolean>) {\n\n const func = this.functions[name];\n\n if (_.isNil(func)) throw Error('Function not found');\n if (_.isFunction(func)) return func(proxy(payload ?? proto));\n\n const { callback, validator } = func;\n\n const roles = await proto.currentRoles();\n\n if (!options?.master) {\n if (!!validator?.requireUser && !(await proto.currentUser())) throw Error('No permission');\n if (!!validator?.requireMaster) throw Error('No permission');\n if (_.isArray(validator?.requireAnyUserRoles) && !_.some(validator?.requireAnyUserRoles, x => _.includes(roles, x))) throw Error('No permission');\n if (_.isArray(validator?.requireAllUserRoles) && _.some(validator?.requireAllUserRoles, x => !_.includes(roles, x))) throw Error('No permission');\n }\n\n return callback(proxy(payload ?? proto));\n }\n\n async varifyPassword(proto: P, user: TUser, password: string, options: ExtraOptions<true>) {\n if (!user.id) throw Error('Invalid user object');\n const _user = await proto.InsecureQuery('User')\n .equalTo('_id', user.id)\n .includes('_id', 'password')\n .first(options);\n const { alg, ...opts } = _user?.get('password') ?? {};\n return varifyPassword(alg, password, opts);\n }\n\n async setPassword(proto: P, user: TUser, password: string, options: ExtraOptions<true>) {\n if (!user.id) throw Error('Invalid user object');\n if (_.isEmpty(password)) throw Error('Invalid password');\n const { alg, ...opts } = this.options.passwordHashOptions;\n const hashed = await passwordHash(alg, password, opts);\n await proto.InsecureQuery('User')\n .equalTo('_id', user.id)\n .includes('_id')\n .updateOne({\n password: { $set: hashed },\n }, options);\n }\n\n async unsetPassword(proto: P, user: TUser, options: ExtraOptions<true>) {\n if (!user.id) throw Error('Invalid user object');\n await proto.InsecureQuery('User')\n .equalTo('_id', user.id)\n .includes('_id')\n .updateOne({\n password: { $set: {} },\n }, options);\n }\n\n async updateFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n\n if ('filename' in object[PVK].mutated && _.isEmpty(object.get('filename'))) {\n throw Error('Invalid filename');\n }\n\n const updated = await proto.Query(object.className)\n .equalTo('_id', object.id)\n .includes(...object.keys())\n .updateOne(object[PVK].mutated, options);\n\n if (updated) {\n object[PVK].attributes = updated.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n }\n\n varifyUploadToken(proto: P, token?: string, isMaster?: boolean) {\n\n const {\n nonce,\n attributes,\n maxUploadSize,\n } = (_.isString(token) ? this.jwtVarify(token, 'upload') ?? {} : {}) as {\n nonce?: string;\n maxUploadSize?: number;\n attributes?: Record<string, any>;\n };\n if (!isMaster && !nonce) throw Error('Upload token is required');\n\n return {\n nonce,\n attributes: _.isObject(attributes) ? deserialize(\n JSON.stringify(attributes),\n { objAttrs: ['_id'] },\n ) as Record<string, TValue> : {},\n maxUploadSize: maxUploadSize ?? this.options.maxUploadSize,\n };\n }\n\n async createFile(proto: P, object: TFile, options?: ExtraOptions<boolean> & { uploadToken?: string; }) {\n\n const data = object[PVK].extra.data as FileData | { _id: string; size: number; };\n if (_.isNil(data)) throw Error('Invalid file object');\n\n const {\n nonce,\n attributes = {},\n maxUploadSize = this.options.maxUploadSize,\n } = options?.uploadToken ? this.varifyUploadToken(proto, options.uploadToken, options.master) : {};\n\n if (nonce) {\n const found = await proto.Query('File').equalTo('nonce', nonce).first({ master: true });\n if (found) throw Error('Invalid upload token');\n }\n\n let file: { _id: string; size: number; };\n\n const info = {\n mimeType: object.get('type'),\n filename: object.get('filename'),\n };\n\n if (_.isEmpty(info.filename)) {\n throw Error('Invalid filename');\n }\n\n if (_.isString(data)) {\n file = await proto.fileStorage.create(proto, Buffer.from(data), info, maxUploadSize);\n } else if (isBinaryData(data) || data instanceof Readable) {\n file = await proto.fileStorage.create(proto, data, info, maxUploadSize);\n } else if (data instanceof Blob) {\n file = await proto.fileStorage.create(proto, await data.arrayBuffer(), info, maxUploadSize);\n } else if ('base64' in data) {\n const buffer = base64ToBuffer(data.base64);\n file = await proto.fileStorage.create(proto, buffer, info, maxUploadSize);\n } else if ('_id' in data && 'size' in data) {\n file = data;\n } else {\n throw Error('Invalid file object');\n }\n\n try {\n\n for (const [key, value] of _.entries(attributes)) {\n object.set(key, value);\n }\n object.set('token', file._id);\n object.set('size', file.size);\n if (nonce) object.set('nonce', nonce);\n\n const query = new ProtoQuery('File', proto, { createFile: true });\n const created = await query.includes(...object.keys()).insert(_.fromPairs([...object._set_entries()]), options);\n\n if (created) {\n object[PVK].attributes = created.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n\n } catch (e) {\n this.destroyFileData(proto, file._id);\n throw e;\n }\n }\n\n async saveFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n if (object.id) {\n object = await this.updateFile(proto, object, options);\n } else {\n object = await this.createFile(proto, object, options);\n }\n return object;\n }\n\n async deleteFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n\n object = await object.fetchIfNeeded(['token'], options);\n\n const deleted = await proto.Query('File')\n .equalTo('_id', object.id)\n .deleteOne(options);\n\n if (deleted) {\n object[PVK].attributes = deleted.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n this.destroyFileData(proto, object.token!);\n\n return object;\n }\n\n fileData(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n const self = this;\n return Readable.from({\n [Symbol.asyncIterator]: async function* () {\n object = await object.fetchIfNeeded(['token'], options);\n const chunks = self.options.fileStorage.fileData(proto, object.attributes.token as string);\n yield* chunks;\n }\n });\n }\n\n destroyFileData(proto: P, id: string) {\n (async () => {\n try {\n await proto.fileStorage.destroy(proto, id);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n\n jwtSign(payload: any, options: 'login' | 'upload' | jwt.SignOptions) {\n const opts = (() => {\n switch (options) {\n case 'login': return this.options.jwtSignOptions;\n case 'upload': return this.options.jwtUploadSignOptions;\n default: return options;\n }\n })();\n return jwt.sign(payload, this.options.jwtToken, opts);\n }\n\n jwtVarify(token: string, options: 'login' | 'upload' | jwt.VerifyOptions = {}) {\n try {\n const opts = (() => {\n switch (options) {\n case 'login': return this.options.jwtVerifyOptions;\n case 'upload': return this.options.jwtUploadVerifyOptions;\n default: return options;\n }\n })();\n const payload = jwt.verify(token, this.options.jwtToken, { ...opts, complete: false });\n if (!_.isObject(payload)) return;\n return payload;\n } catch {\n return;\n }\n }\n\n async notify(proto: P, data: Record<string, TValueWithoutObject> & { _rperm?: string[]; }) {\n if (data._rperm && (!_.isArray(data._rperm) || !_.every(data._rperm, _.isString))) {\n throw Error('Invalid data type');\n }\n return this.options.pubsub.publish(\n PROTO_NOTY_MSG,\n {\n ...data,\n _id: this.generateId(),\n _created_at: new Date(),\n _rperm: data._rperm || ['*'],\n }\n );\n }\n\n listen(proto: P, callback: (data: EventData) => void) {\n const isMaster = proto.isMaster;\n const roles = isMaster ? [] : this._perms(proto);\n return {\n remove: this.options.pubsub.subscribe(\n PROTO_NOTY_MSG,\n payload => {\n const { _rperm } = payload as EventData;\n (async () => {\n try {\n if (!isMaster && !_.some(await roles, x => _.includes(_rperm, x))) return;\n await callback(payload as EventData);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n ),\n };\n }\n\n async publishLiveQuery(proto: P, event: string, objects: TObject[]) {\n if (_.isEmpty(objects)) return;\n return this.options.pubsub.publish(\n PROTO_LIVEQUERY_MSG,\n JSON.parse(serialize({ event, objects }, { objAttrs: TObject.defaultKeys })),\n );\n }\n\n _liveQuery(\n proto: P,\n callback: (event: string, objects: TObject[]) => void,\n ) {\n const isMaster = proto.isMaster;\n const roles = isMaster ? [] : this._perms(proto);\n return {\n remove: this.options.pubsub.subscribe(\n PROTO_LIVEQUERY_MSG,\n payload => {\n const { event, objects } = deserialize(JSON.stringify(payload)) as { event: string; objects: TObject[]; };\n (async () => {\n try {\n const _roles = await roles;\n const payload = proto.rebind(isMaster ? objects : _.filter(objects, object => {\n const acl = object.acl();\n const clp = proto.schema[object.className].classLevelPermissions?.get ?? ['*'];\n return _.some(_roles, x => _.includes(clp, x) && _.includes(acl.read, x));\n }));\n if (!_.isEmpty(payload)) await callback(event, payload);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n ),\n };\n }\n\n liveQuery(\n proto: P,\n event: string,\n className: string,\n filter: TQuerySelector[],\n callback: (object: TObject) => void,\n ) {\n const _filter = _.isEmpty(filter) ? true : QuerySelector.decode(filter);\n return this._liveQuery(proto, (ev, objs) => {\n if (event !== ev) return;\n for (const object of objs) {\n if (className !== object.className) continue;\n (async () => {\n try {\n if (_filter === true || _filter.eval(object)) await callback(object);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n });\n }\n\n validateCLPs(\n className: string,\n acls: string[],\n keys: (keyof TSchema.CLPs)[],\n ) {\n if (!_.has(this.options.schema, className)) throw Error('No permission');\n const perms = this.options.schema[className].classLevelPermissions ?? {};\n for (const key of keys) {\n if (_.every(perms[key] ?? ['*'], x => !_.includes(acls, x))) return false;\n }\n return true;\n }\n\n async refs(proto: P, object: TObject, options?: ExtraOptions<boolean>) {\n const roles = options?.master ? [] : await this._perms(proto);\n const classNames = options?.master ? _.keys(this.options.schema) : _.filter(_.keys(this.options.schema), x => this.validateCLPs(x, roles, ['find']));\n const storage = _serviceOf(options)?.storage ?? this.options.storage;\n return storage.refs(object, classNames, options?.master ? undefined : roles);\n }\n\n async scheduleJob(proto: P, name: string, params: any, options?: ExtraOptions<boolean>) {\n\n const opt = this.jobs[name];\n if (_.isNil(opt)) throw Error('Job not found');\n\n const user = await proto.currentUser();\n\n if (!_.isFunction(opt)) {\n const roles = await proto.currentRoles();\n const { validator } = opt;\n if (!options?.master) {\n if (!!validator?.requireUser && !user) throw Error('No permission');\n if (!!validator?.requireMaster) throw Error('No permission');\n if (_.isArray(validator?.requireAnyUserRoles) && !_.some(validator?.requireAnyUserRoles, x => _.includes(roles, x))) throw Error('No permission');\n if (_.isArray(validator?.requireAllUserRoles) && _.some(validator?.requireAllUserRoles, x => !_.includes(roles, x))) throw Error('No permission');\n }\n }\n\n const obj = proto.Object('_Job');\n obj.set('name', name);\n obj.set('data', params);\n obj.set('user', user);\n await obj.save({ master: true });\n\n this.jobRunner.excuteJob(proto);\n\n return obj;\n }\n}\n\nclass JobRunner<Ext, P extends ProtoService<Ext>> {\n\n private _running = false;\n private _stopped = false;\n\n static TIMEOUT = 1000 * 60 * 5;\n static HEALTH = 1000 * 60;\n\n shutdown() {\n this._stopped = true;\n }\n\n private async cleanUpOldJobs(proto: P) {\n await proto.Query('_JobScope').or(\n q => q.lessThan('_updated_at', new Date(Date.now() - JobRunner.TIMEOUT)),\n q => q.notEqualTo('job.completedAt', null),\n ).deleteMany({ master: true });\n }\n\n private async getAvailableJobs(proto: P) {\n const running = _.map(await proto.Query('_JobScope').find({ master: true }), x => x.get('scope'));\n const availableJobs = _.pickBy(proto[PVK].jobs, opt => {\n return _.isFunction(opt) || _.isEmpty(_.intersection(opt.scopes ?? [], running));\n });\n return _.keys(availableJobs);\n }\n\n private async getNextJob(proto: P) {\n const availableJobs = await this.getAvailableJobs(proto);\n return await proto.Query('_Job')\n .containedIn('name', availableJobs)\n .or(\n q => q.lessThan('startedAt', new Date(Date.now() - JobRunner.TIMEOUT)),\n q => q.equalTo('startedAt', null),\n )\n .equalTo('completedAt', null)\n .empty('locks')\n .includes('*', 'user')\n .sort({ _created_at: 1 })\n .first({ master: true });\n }\n\n private async startJob(proto: P, job: TJob, opt: ProtoJobFunction<Ext, any> | ProtoJobFunctionOptions<Ext>) {\n await proto.withTransaction(async (session) => {\n for (const scope of _.isFunction(opt) ? [] : opt.scopes ?? []) {\n const obj = session.Object('_JobScope');\n obj.set('scope', scope);\n obj.set('job', job);\n await obj.save({ master: true });\n }\n job.set('startedAt', new Date());\n await job.save({ master: true, session });\n });\n }\n\n private async updateJobScope(proto: P, job: TJob) {\n try {\n await proto.Query('_JobScope').equalTo('job', job).updateOne({}, { master: true });\n } catch (e) { }\n }\n\n private async executeJobFunction(proto: P, job: TJob, opt: ProtoJobFunction<Ext, any> | ProtoJobFunctionOptions<Ext>) {\n const payload = Object.setPrototypeOf({ params: job.data, user: job.user, job }, this);\n const func = _.isFunction(opt) ? opt : opt.callback;\n await func(proxy(payload));\n }\n\n private async finalizeJob(job: TJob, error: any = null) {\n if (error) job.set('error', _.pick(error, _.uniq(_.flatMap(prototypes(error), x => Object.getOwnPropertyNames(x)))));\n job.set('completedAt', new Date());\n await job.save({ master: true });\n }\n\n async excuteJob(proto: P) {\n if (this._running || this._stopped) return;\n this._running = true;\n\n while (!this._stopped) {\n await this.cleanUpOldJobs(proto);\n\n const job = await this.getNextJob(proto);\n if (!job) break;\n\n const opt = proto[PVK].jobs[job.name];\n if (_.isNil(opt)) continue;\n\n try {\n await this.startJob(proto, job, opt);\n } catch (e) {\n continue;\n }\n\n (async () => {\n const timer = setInterval(() => this.updateJobScope(proto, job), JobRunner.HEALTH);\n try {\n await this.executeJobFunction(proto, job, opt);\n await this.finalizeJob(job);\n } catch (e) {\n await this.finalizeJob(job, e);\n } finally {\n clearInterval(timer);\n }\n this.excuteJob(proto);\n })();\n }\n\n this._running = false;\n }\n}\n","//\n// session.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 jwt from 'jsonwebtoken';\nimport { CookieOptions, Request, Response } from '@o2ter/server-js';\nimport { ProtoService } from './index';\nimport { AUTH_COOKIE_KEY, MASTER_PASS_HEADER_NAME, MASTER_USER_HEADER_NAME } from '../../internals/const';\nimport { randomUUID } from '@o2ter/crypto-js';\nimport { PVK } from '../../internals/private';\nimport { TUser } from '../../internals/object/user';\nimport { TRole } from '../../internals/object/role';\n\nexport type Session = jwt.JwtPayload & {\n sessionId: string;\n createdAt: Date;\n loginedAt: Date;\n};\n\nconst sessionMap = new WeakMap<Request, Session>();\n\nconst _sessionWithToken = <E>(proto: ProtoService<E>, token: string) => {\n if (_.isEmpty(token)) return;\n const payload = proto[PVK].jwtVarify(token, 'login');\n if (!_.isObject(payload)) return;\n return {\n ...payload,\n sessionId: payload.sessionId ?? randomUUID(),\n createdAt: payload.createdAt && _.isSafeInteger(payload.createdAt) ? new Date(payload.createdAt) : new Date,\n loginedAt: payload.loginedAt && _.isSafeInteger(payload.loginedAt) ? new Date(payload.loginedAt) : new Date,\n } as Session;\n}\n\nconst _session = <E>(proto: ProtoService<E>, request: Request) => {\n\n const cached = sessionMap.get(request);\n if (cached) return cached;\n\n sessionMap.set(request, {\n sessionId: randomUUID(),\n createdAt: new Date,\n loginedAt: new Date,\n });\n\n const jwtToken = proto[PVK].options.jwtToken;\n if (_.isEmpty(jwtToken)) throw Error('Invalid jwt token');\n\n let authorization = '';\n if (request.headers.authorization) {\n const parts = request.headers.authorization.split(' ');\n if (parts.length === 2 && parts[0] === 'Bearer') authorization = parts[1];\n } else if (request.cookies[AUTH_COOKIE_KEY]) {\n authorization = request.cookies[AUTH_COOKIE_KEY];\n }\n\n if (_.isEmpty(authorization)) return;\n\n const session = _sessionWithToken(proto, authorization);\n if (!_.isObject(session)) return;\n\n sessionMap.set(request, session);\n return session;\n}\n\nexport const sessionId = <E>(proto: ProtoService<E>, request: Request): string | undefined => {\n const session = _session(proto, request);\n return sessionMap.get(request)?.sessionId ?? session?.sessionId;\n}\n\nconst userCacheMap = new WeakMap<any, {\n [K in string]?: Promise<{ user?: TUser; _roles?: TRole[] }>;\n}>;\n\nconst fetchSessionInfo = async <E>(proto: ProtoService<E>, userId: string = '') => {\n if (!userCacheMap.has(proto[PVK])) userCacheMap.set(proto[PVK], {});\n const cache = userCacheMap.get(proto[PVK])!;\n if (_.isNil(cache[userId])) cache[userId] = (async () => {\n const _user = userId ? await proto.Query('User').get(userId, { master: true }) : undefined;\n const user = proto.req ? await proto[PVK].options.userResolver(proto, _user) : _user;\n const _roles = user instanceof TUser ? _.filter(await proto.userRoles(user), x => !_.isEmpty(x.name)) : [];\n cache[userId] = undefined;\n return { user, _roles };\n })();\n const { user, _roles } = await cache[userId];\n return {\n user: user?.clone(),\n _roles: _.map(_roles, x => x.clone()),\n };\n}\n\nexport const sessionWithToken = async <E>(proto: ProtoService<E>, token: string) => {\n const session = _sessionWithToken(proto, token);\n const info = await fetchSessionInfo(proto, session?.user);\n return {\n ...session ?? {},\n ...info,\n loginedAt: info?.user ? session?.loginedAt : undefined,\n };\n}\n\ntype SessionInfo<E> = Partial<Awaited<ReturnType<typeof fetchSessionInfo<E>>>>;\nconst sessionInfoMap = new WeakMap<Request, SessionInfo<any>>();\n\nexport const session = async <E>(proto: ProtoService<E>, request: Request) => {\n\n const session = _session(proto, request);\n const cached = sessionInfoMap.get(request) as SessionInfo<E>;\n if (cached) return {\n ...session ?? {},\n ...cached,\n loginedAt: cached?.user ? session?.loginedAt : undefined,\n };\n\n const info = await fetchSessionInfo(proto, session?.user);\n sessionInfoMap.set(request, info);\n\n return {\n ...session ?? {},\n ...info,\n loginedAt: info?.user ? session?.loginedAt : undefined,\n };\n}\n\nexport const sessionIsMaster = <E>(proto: ProtoService<E>, request: Request) => {\n const user = request.header(MASTER_USER_HEADER_NAME);\n const pass = request.header(MASTER_PASS_HEADER_NAME);\n if (_.isEmpty(user) || _.isEmpty(pass)) return false;\n return _.some(proto[PVK].options.masterUsers, x => x.user === user && x.pass === pass) ? 'valid' : 'invalid';\n}\n\nexport const signUser = async <E>(\n proto: ProtoService<E>,\n res: Response,\n user?: TUser,\n options?: {\n cookieOptions?: CookieOptions;\n jwtSignOptions?: jwt.SignOptions;\n }\n) => {\n if (_.isNil(proto[PVK].options.jwtToken)) return;\n const session = _session(proto, res.req);\n const cookieOptions = options?.cookieOptions ?? session?.cookieOptions ?? proto[PVK].options.cookieOptions;\n const token = proto[PVK].jwtSign({\n sessionId: session?.sessionId ?? randomUUID(),\n createdAt: session?.createdAt?.getTime() ?? Date.now(),\n loginedAt: user ? session?.loginedAt?.getTime() ?? Date.now() : undefined,\n user: user?.id,\n cookieOptions,\n }, options?.jwtSignOptions ?? 'login');\n res.cookie(AUTH_COOKIE_KEY, token, cookieOptions);\n sessionInfoMap.set(res.req, user ? await fetchSessionInfo(proto, user.id) : {});\n}\n","//\n// schedule.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 { ProtoService } from './proto';\nimport { PVK } from '../internals/private';\n\nconst scheduleOp = {\n expireDocument: async (proto: ProtoService<any>) => {\n await proto.gc();\n },\n excuteJob: async (proto: ProtoService<any>) => {\n proto[PVK].jobRunner.excuteJob(proto);\n },\n};\n\nexport type ScheduleOp = keyof typeof scheduleOp;\n\nexport const schedule = (proto: ProtoService<any>) => {\n let running = false;\n const execute = async () => {\n if (running) return;\n running = true;\n for (const [op, task] of _.entries(scheduleOp)) {\n if (!_.isFunction(task)) continue;\n try {\n await task(proto);\n } catch (e) {\n proto.logger.error(`Errors on schedule ${op}: ${e}`);\n }\n }\n running = false;\n }\n const schedule = setInterval(execute, 60 * 1000);\n return {\n execute,\n destroy() { clearInterval(schedule); }\n }\n}\n","//\n// index.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 jwt from 'jsonwebtoken';\nimport { ProtoQuery, ProtoRelationQuery } from '../query';\nimport { ProtoInternal } from './internal';\nimport { CookieOptions, Request } from '@o2ter/server-js';\nimport { ProtoServiceOptions, ProtoServiceKeyOptions } from './types';\nimport { ProtoFunction, ProtoFunctionOptions, ProtoJobFunction, ProtoJobFunctionOptions, ProtoTriggerFunction } from '../../internals/proto/types';\nimport { sessionId, sessionIsMaster, session, signUser, Session, sessionWithToken } from './session';\nimport { _logLevels, EventData, Logger, ProtoType, TransactionOptions } from '../../internals/proto';\nimport { schedule } from '../schedule';\nimport { serialize, TSerializable } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { TExtensions, TObjectType } from '../../internals/object/types';\nimport { TQuery } from '../../internals/query';\nimport { TUser } from '../../internals/object/user';\nimport { ExtraOptions } from '../../internals/options';\nimport { TValueWithoutObject, TValue } from '../../internals/types';\nimport { randomUUID } from '@o2ter/crypto-js';\nimport { TObject } from '../../internals/object';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { TRole } from '../../internals/object/role';\nimport { PathName } from '../../internals/query/types';\nimport { QuerySelector } from '../query/dispatcher/parser';\nimport { _typeof, isRelation } from '../../internals/schema';\nimport { resolveDataType } from '../query/dispatcher/validator';\nimport { TQuerySelector } from '../../internals/query/types/selectors';\n\nexport const _serviceOf = (options?: ExtraOptions<any>) => options?.session instanceof ProtoService ? options?.session : undefined;\n\nexport class ProtoService<Ext = any> extends ProtoType<Ext> {\n\n /** @internal */\n [PVK]: ProtoInternal<Ext, this>;\n private _storage?: ProtoServiceOptions<Ext>['storage'];\n private _schedule = schedule(this);\n\n req?: Request;\n session?: Session;\n\n constructor(options: ProtoServiceOptions<Ext> & ProtoServiceKeyOptions) {\n super();\n this[PVK] = new ProtoInternal({\n userResolver: (_req, user) => user,\n roleResolver: {},\n objectIdSize: 10,\n maxFetchLimit: 1000,\n maxUploadSize: 20 * 1024 * 1024,\n pubsub: {\n publish: () => void 0,\n subscribe: () => () => void 0,\n },\n classExtends: {} as TExtensions<Ext>,\n cookieOptions: { maxAge: 365 * 24 * 60 * 60 * 1000, httpOnly: true },\n jwtSignOptions: { expiresIn: '30d' },\n jwtVerifyOptions: {},\n jwtUploadSignOptions: { expiresIn: '1d' },\n jwtUploadVerifyOptions: {},\n passwordHashOptions: {\n alg: 'scrypt',\n log2n: 14,\n blockSize: 8,\n parallel: 1,\n keySize: 64,\n saltSize: 64,\n },\n logger: {},\n ...options,\n });\n }\n\n async shutdown() {\n this._schedule.destroy();\n this[PVK].shutdown();\n }\n\n get logger() {\n const logger = this[PVK].options.logger;\n const loggerLevel = logger.loggerLevel ?? 'warn';\n const callbacks = _.map(_logLevels, (x, i) => [x, (...args: any[]) => {\n if (loggerLevel !== 'all' && _.indexOf(_logLevels, loggerLevel) < i) return;\n const func = logger[x] ?? console[x];\n if (_.isFunction(func)) func(...args);\n }] as const);\n return {\n loggerLevel,\n ..._.fromPairs(callbacks as any),\n } as Logger;\n }\n\n classes(): string[] {\n return _.keys(this[PVK].options.schema);\n }\n\n Query<T extends string>(className: T): TQuery<T, Ext, boolean> {\n return new ProtoQuery<T, Ext, boolean>(className, this, {});\n }\n\n Relation<T extends string>(object: TObject, key: PathName<T>): TQuery<string, Ext, boolean> {\n const id = object.id;\n if (!id) throw Error('Invalid object');\n return new ProtoRelationQuery<Ext, boolean>(this, {\n relatedBy: {\n className: object.className,\n id: id,\n key,\n },\n });\n }\n\n InsecureQuery<T extends string>(className: T): TQuery<T, Ext, true> {\n return new ProtoQuery<T, Ext, true>(className, this, { insecure: true });\n }\n\n get sessionId(): string | undefined {\n if (this.session) return this.session.sessionId;\n return this.req ? sessionId(this, this.req) : undefined;\n }\n\n async sessionInfo() {\n if (this.session) return this.session;\n return this.req ? session(this, this.req) : undefined;\n }\n\n async currentUser(): Promise<TUser | undefined> {\n const session = await this.sessionInfo();\n return session?.user;\n }\n\n async _currentRoles(): Promise<TRole[]> {\n const session = await this.sessionInfo();\n return session?._roles ?? [];\n }\n\n async currentRoles(): Promise<string[]> {\n const roles = await this._currentRoles();\n return _.compact(_.map(roles, x => x.name));\n }\n\n get isMaster(): boolean {\n return this.req ? sessionIsMaster(this, this.req) === 'valid' : false;\n }\n\n get isInvalidMasterToken(): boolean {\n return this.req ? sessionIsMaster(this, this.req) === 'invalid' : false;\n }\n\n connect<R extends Request, T extends object>(\n req: R,\n attrs?: T | ((x: this & { req: R; }) => T)\n ): this & { req: R; } & T {\n const payload = _.create(this, { req });\n return _.assign(payload, _.isFunction(attrs) ? attrs(payload) : attrs)\n }\n\n async connectWithSessionToken<T extends object>(\n token: string,\n attrs?: T | ((x: this & { session?: Session; }) => T)\n ): Promise<this & { session?: Session; } & T> {\n const session = _.isString(token) ? await sessionWithToken(this, token) : undefined;\n const payload = _.create(this, { session });\n return _.assign(payload, _.isFunction(attrs) ? attrs(payload) : attrs)\n }\n\n async userRoles(user: TUser) {\n const self = this;\n const { inheritKeys, resolver } = self[PVK].options.roleResolver;\n const defaultResolver = async () => {\n const schema = self.schema;\n const userKeys = _.filter(inheritKeys, k => {\n const type = resolveDataType(schema, 'Role', k);\n return !!type && isRelation(type) && type.target === 'User';\n });\n const roleKeys = _.filter(inheritKeys, k => {\n const type = resolveDataType(schema, 'Role', k);\n return !!type && isRelation(type) && type.target === 'Role';\n });\n let queue = await self.Query('Role')\n .or(_.map(_.uniq(['users', ...userKeys]), k => q => q.isIntersect(k, [user])))\n .includes('name')\n .find({ master: true });\n let roles = queue;\n while (!_.isEmpty(queue)) {\n queue = await self.Query('Role')\n .or(_.map(_.uniq(['roles', ...roleKeys]), k => q => q.isIntersect(k, queue)))\n .notContainedIn('_id', _.compact(_.map(roles, x => x.id)))\n .includes('name')\n .find({ master: true });\n roles = _.uniqBy([...roles, ...queue], x => x.id);\n }\n return roles;\n };\n if (resolver) return resolver(user, defaultResolver);\n return defaultResolver();\n }\n\n async becomeUser(\n req: Request,\n user: TUser,\n options?: {\n cookieOptions?: CookieOptions | undefined;\n jwtSignOptions?: jwt.SignOptions | undefined;\n }\n ) {\n if (!user.id) throw Error('Invalid user object');\n if (req.res) await signUser(this, req.res, user, options);\n }\n\n async logoutUser(\n req: Request,\n options?: {\n cookieOptions?: CookieOptions | undefined;\n jwtSignOptions?: jwt.SignOptions | undefined;\n }\n ) {\n if (req.res) await signUser(this, req.res, undefined, options);\n }\n\n varifyPassword(user: TUser, password: string, options: ExtraOptions<true>) {\n return this[PVK].varifyPassword(this, user, password, options);\n }\n\n setPassword(user: TUser, password: string, options: ExtraOptions<true>) {\n return this[PVK].setPassword(this, user, password, options);\n }\n\n unsetPassword(user: TUser, options: ExtraOptions<true>) {\n return this[PVK].unsetPassword(this, user, options);\n }\n\n get schema(): ProtoServiceOptions<Ext>['schema'] {\n return this[PVK].options.schema;\n }\n\n get storage(): ProtoServiceOptions<Ext>['storage'] {\n return this._storage ?? this[PVK].options.storage;\n }\n\n get fileStorage(): ProtoServiceOptions<Ext>['fileStorage'] {\n return this[PVK].options.fileStorage;\n }\n\n async config(options?: { master?: boolean; }) {\n return this[PVK].config(this, options);\n }\n configAcl(options: { master: true; }) {\n if (options.master !== true) throw Error('No permission');\n return this[PVK].configAcl();\n }\n async setConfig(values: Record<string, TValueWithoutObject>, options: { master: true; acl?: string[]; }) {\n if (options.master !== true) throw Error('No permission');\n await this[PVK].setConfig(values, options.acl);\n }\n\n run<R extends TSerializable | void = any>(\n name: string,\n params?: TSerializable,\n options?: ExtraOptions<boolean>\n ) {\n const payload = Object.setPrototypeOf({ params }, this);\n return this[PVK].run(this, name, payload, options) as Promise<R>;\n }\n\n define<P extends TSerializable = any, R extends TSerializable | void = any>(\n name: string,\n callback: ProtoFunction<Ext, P, R>,\n options?: Omit<ProtoFunctionOptions<Ext>, 'callback'>,\n ) {\n this[PVK].functions[name] = options ? { callback, ...options } : callback;\n }\n\n afterCreate<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ) {\n if (_.isNil(this[PVK].triggers[className])) {\n this[PVK].triggers[className] = { create: [], update: [], delete: [] };\n }\n this[PVK].triggers[className].create.push(callback);\n }\n\n afterUpdate<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ) {\n if (_.isNil(this[PVK].triggers[className])) {\n this[PVK].triggers[className] = { create: [], update: [], delete: [] };\n }\n this[PVK].triggers[className].update.push(callback);\n }\n\n afterDelete<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ) {\n if (_.isNil(this[PVK].triggers[className])) {\n this[PVK].triggers[className] = { create: [], update: [], delete: [] };\n }\n this[PVK].triggers[className].delete.push(callback);\n }\n\n scheduleJob(name: string, params?: TValueWithoutObject, options?: ExtraOptions<boolean>) {\n return this[PVK].scheduleJob(this, name, params, options);\n }\n\n defineJob<P extends TValueWithoutObject = any>(\n name: string,\n callback: ProtoJobFunction<Ext, P>,\n options?: Omit<ProtoJobFunctionOptions<Ext>, 'callback'>,\n ) {\n this[PVK].jobs[name] = options ? { callback, ...options } : callback;\n }\n\n lockTable(className: string | string[], update: boolean) {\n return this.storage.lockTable(className, update);\n }\n\n withTransaction<T>(\n callback: (connection: ProtoService<Ext>) => PromiseLike<T>,\n options?: TransactionOptions,\n ) {\n return this.storage.withTransaction((storage) => callback(_.create(this, { _storage: storage })), options);\n }\n\n generateUploadToken(options: {\n maxUploadSize?: number;\n attributes?: Record<string, TValue>;\n jwtSignOptions?: jwt.SignOptions;\n } = {}) {\n return this[PVK].jwtSign({\n nonce: randomUUID(),\n maxUploadSize: options.maxUploadSize,\n attributes: JSON.parse(serialize(\n options.attributes ?? {},\n { objAttrs: ['_id'] },\n )),\n }, options?.jwtSignOptions ?? 'upload');\n }\n\n jwtSign(payload: any, options: jwt.SignOptions) {\n return this[PVK].jwtSign(payload, options);\n }\n\n jwtVarify(token: string, options: jwt.VerifyOptions = {}) {\n return this[PVK].jwtVarify(token, options);\n }\n\n notify(data: Record<string, TValueWithoutObject> & { _rperm?: string[]; }) {\n return this[PVK].notify(this, data);\n }\n\n listen(\n callback: (data: EventData) => void,\n selector?: TQuerySelector\n ) {\n const _selector = !_.isNil(selector) ? QuerySelector.decode(selector) : undefined;\n return this[PVK].listen(this, async data => {\n if (_selector && !_selector.eval(data)) return;\n await callback(data);\n });\n }\n\n refs(object: TObject, options?: ExtraOptions<boolean>) {\n if (!object.id) throw Error('Invalid object');\n const self = this;\n return asyncStream(async function* () {\n const objects = await self[PVK].refs(self, object, options);\n for await (const object of objects) yield self.rebind(object) as TObjectType<string, Ext>;\n });\n }\n\n async gc(classNames?: string | string[]) {\n const time = new Date();\n for (const className of _.castArray(classNames ?? this.classes())) {\n if (className === 'File') {\n const found = this.storage.find({\n className: 'File',\n filter: QuerySelector.decode({ _expired_at: { $lt: time } }),\n matches: {},\n groupMatches: {},\n includes: ['_id', '_expired_at', 'token'],\n objectIdSize: 0\n });\n for await (const item of found) {\n const token = item.get('token');\n if (!_.isEmpty(token)) await this.fileStorage.destroy(this, token);\n }\n }\n await this.storage.delete({\n className,\n filter: QuerySelector.decode({ _expired_at: { $lt: time } }),\n includes: ['_id', '_expired_at'],\n matches: {},\n groupMatches: {},\n objectIdSize: 0\n });\n }\n }\n}\n","//\n// index.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 { ProtoService } from '../proto/index';\nimport { RequestHandler } from '@o2ter/server-js';\nimport { signUser } from '../proto/session';\n\nexport default <E>(proto: ProtoService<E>): RequestHandler => async (req, res, next) => {\n try {\n const connected = proto.connect(req);\n await signUser(connected, res, await connected.currentUser());\n return next();\n } catch (e) {\n proto.logger.error(e);\n return next(new Error('Internal server error'));\n }\n};\n","//\n// common.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 { Readable } from 'node:stream';\nimport { Request, Response } from '@o2ter/server-js';\nimport busboy, { FileInfo } from 'busboy';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { TSerializable, serialize } from '../../internals/codec';\n\nexport const encodeError = (error: any) => {\n if (error instanceof String) return { message: error };\n if (error instanceof Error) return { message: error.message };\n return error;\n}\n\nexport const response = async <T extends TSerializable>(\n res: Response,\n callback: () => Awaitable<void | T>,\n) => {\n try {\n const data = await callback();\n res.type('application/json').send(serialize(data ?? null));\n } catch (error) {\n res.status(400).json(encodeError(error));\n }\n};\n\nexport const decodeFormStream = (\n req: Request,\n onFile: (file: Readable, info: FileInfo) => PromiseLike<any>\n) => {\n\n const formData = busboy(req);\n const data: Record<string, any> = {};\n const files: Promise<void>[] = [];\n\n formData.on('field', (name, val) => { data[name] = val; });\n formData.on('file', (name, file, info) => {\n files.push((async () => {\n data[name] = await onFile(file, info);\n if (!file.readableEnded) throw Error('Incomplete read');\n })());\n });\n\n const result = new Promise<Record<string, any>>((resolve, reject) => {\n formData.on('close', () => { resolve(Promise.all(files).then(() => data)); });\n formData.on('error', (error) => { reject(error); });\n });\n\n req.pipe(formData);\n return result;\n};\n","//\n// classes.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 { Server, Router, Request } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport queryType from 'query-types';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\n\nconst verifyRelatedBy = (relatedBy: any) => {\n if (!_.isPlainObject(relatedBy)) return;\n if (!_.isString(relatedBy.className) || _.isEmpty(relatedBy.className)) throw Error('Invalid option');\n if (!_.isString(relatedBy.id) || _.isEmpty(relatedBy.id)) throw Error('Invalid option');\n if (!_.isString(relatedBy.key) || _.isEmpty(relatedBy.key)) throw Error('Invalid option');\n}\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n const defaultHandler = async (req: Request<{ name?: string; }>) => {\n\n const { name } = req.params;\n\n const {\n operation,\n random,\n attributes,\n update,\n setOnInsert,\n relatedBy,\n silent,\n ...options\n } = deserialize(req.body) as any;\n\n verifyRelatedBy(relatedBy);\n\n const payload = proto.connect(req);\n const query = relatedBy ? payload.Relation(\n payload.Object(relatedBy.className, relatedBy.id),\n relatedBy.key,\n ) : payload.Query(name!);\n query[PVK].options = options;\n\n const opts = { master: payload.isMaster, silent };\n\n if (\n _.includes(['File', '_Job', '_JobScope'], name) &&\n _.includes(['insert', 'insertMany', 'upsertOne', 'upsertMany'], operation)\n ) throw Error('Invaild operation');\n\n switch (operation) {\n case 'explain':\n if (!payload.isMaster) throw Error('No permission');\n return query.explain(opts);\n case 'count': return query.count(opts);\n case 'find':\n {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = query[PVK].options.limit ?? maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n return await query.find(opts);\n }\n case 'random':\n {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = query[PVK].options.limit ?? maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n return await query.random(random, opts);\n }\n case 'nonrefs':\n {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = query[PVK].options.limit ?? maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n return await query.nonrefs(opts);\n }\n case 'insert': return query.insert(attributes, opts);\n case 'insertMany': return query.insertMany(attributes, opts);\n case 'updateOne': return query.updateOne(update, opts);\n case 'updateMany': return query.updateMany(update, opts);\n case 'upsertOne': return query.upsertOne(update, setOnInsert, opts);\n case 'upsertMany': return query.upsertMany(update, setOnInsert, opts);\n case 'deleteOne': return query.deleteOne(opts);\n case 'deleteMany': return query.deleteMany(opts);\n default: throw Error('Invalid operation');\n }\n }\n\n router.post(\n '/classes/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n await response(res, () => defaultHandler(req));\n }\n );\n\n router.post(\n '/relation',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n await response(res, () => defaultHandler(req));\n }\n );\n\n const createQuery = <E>(payload: ProtoService<E>, req: Request<{ name?: string; }>, checkLimit: boolean) => {\n\n const { name } = req.params;\n\n const {\n filter,\n sort,\n includes,\n skip,\n limit,\n relatedBy,\n } = req.query as any;\n\n verifyRelatedBy(relatedBy);\n\n const query = relatedBy ? payload.Relation(\n payload.Object(relatedBy.className, relatedBy.id),\n relatedBy.key,\n ) : payload.Query(name!);\n\n query[PVK].options.filter = !_.isEmpty(filter) && _.isString(filter) ? _.castArray(deserialize(filter)) as any : [];\n query[PVK].options.sort = _.isPlainObject(sort) && _.every(_.values(sort), _.isNumber) ? sort as any : undefined;\n query[PVK].options.includes = _.isArray(includes) && _.every(includes, _.isString) ? includes as any : undefined;\n query[PVK].options.skip = _.isNumber(skip) ? skip : undefined;\n\n if (checkLimit) {\n const maxFetchLimit = payload[PVK].options.maxFetchLimit;\n query[PVK].options.limit = _.isNumber(limit) ? limit : maxFetchLimit;\n if (query[PVK].options.limit > maxFetchLimit) throw Error('Query over limit');\n } else {\n query[PVK].options.limit = _.isNumber(limit) ? limit : undefined;\n }\n\n return query;\n };\n\n router.get(\n '/classes/:name',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).find({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/relation',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).find({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/random',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n const { weight } = req.query as any;\n\n await response(res, async () => createQuery(payload, req, true).random({ weight }, { master: payload.isMaster }));\n }\n );\n\n router.get(\n '/relation/random',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n const { weight } = req.query as any;\n\n await response(res, async () => createQuery(payload, req, true).random({ weight }, { master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/nonrefs',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).nonrefs({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/relation/nonrefs',\n queryType.middleware(),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n\n await response(res, async () => createQuery(payload, req, true).nonrefs({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/:id',\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, () => payload.Query(name).get(id, { master: payload.isMaster }));\n }\n );\n\n router.get(\n '/classes/:name/:id/refs',\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, async () => payload.refs(payload.Object(name, id), { master: payload.isMaster }));\n }\n );\n\n router.patch(\n '/classes/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n const update = _.mapValues(deserialize(req.body) as any, v => ({ $set: v }));\n await response(res, () => createQuery(payload, req, false).updateMany(update as any, { master: payload.isMaster }));\n }\n );\n\n router.patch(\n '/classes/:name/:id',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n const query = payload.Query(name).equalTo('_id', id);\n\n const update = _.mapValues(deserialize(req.body) as any, v => ({ $set: v }));\n await response(res, () => query.updateOne(update as any, { master: payload.isMaster }));\n }\n );\n\n router.delete(\n '/classes/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n if (!_.isEmpty(req.body)) return void res.sendStatus(400);\n\n const { name } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n\n await response(res, () => createQuery(payload, req, false).deleteMany({ master: payload.isMaster }));\n }\n );\n\n router.delete(\n '/relation',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n if (!_.isEmpty(req.body)) return void res.sendStatus(400);\n\n const payload = proto.connect(req);\n\n await response(res, () => createQuery(payload, req, false).deleteMany({ master: payload.isMaster }));\n }\n );\n\n router.delete(\n '/classes/:name/:id',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n if (!_.isEmpty(req.body)) return void res.sendStatus(400);\n\n const { name, id } = req.params;\n const classes = proto.classes();\n\n if (!_.includes(classes, name)) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n const query = payload.Query(name).equalTo('_id', id);\n\n await response(res, () => query.deleteOne({ master: payload.isMaster }));\n }\n );\n\n return router;\n}","//\n// function.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { TObject } from '../../internals/object';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/functions/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n if (_.isNil(proto[PVK].functions[name])) return void res.sendStatus(404);\n\n await response(res, () => {\n\n const payload = proto.connect(req, x => ({\n params: x.rebind(deserialize(req.body, { objAttrs: TObject.defaultReadonlyKeys })),\n }));\n\n return payload[PVK].run(payload, name, payload, { master: payload.isMaster });\n });\n }\n );\n\n return router;\n}","//\n// job.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { TObject } from '../../internals/object';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/jobs/:name',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n if (_.isNil(proto[PVK].jobs[name])) return void res.sendStatus(404);\n\n await response(res, () => {\n\n const payload = proto.connect(req);\n const params = payload.rebind(deserialize(req.body, { objAttrs: TObject.defaultReadonlyKeys }));\n\n return payload[PVK].scheduleJob(payload, name, params, { master: payload.isMaster });\n });\n }\n );\n\n return router;\n}","//\n// files.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 { Router } from '@o2ter/server-js';\nimport { Readable } from 'node:stream';\nimport { ProtoService } from '../proto';\nimport { decodeFormStream, response } from './common';\nimport { deserialize } from '../../internals/codec';\nimport { PVK } from '../../internals/private';\nimport { UPLOAD_TOKEN_HEADER_NAME } from '../../internals/const';\nimport { BinaryData } from '@o2ter/utils-js';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/files',\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n await response(res, async () => {\n\n const payload = proto.connect(req);\n const uploadToken = req.header(UPLOAD_TOKEN_HEADER_NAME);\n\n const { maxUploadSize } = payload[PVK].varifyUploadToken(payload, uploadToken, payload.isMaster);\n const { attributes, file } = await decodeFormStream(req, (file, info) => proto.fileStorage.create(proto, file, info, maxUploadSize));\n\n try {\n\n const obj = payload.Object('File');\n obj[PVK].mutated = _.mapValues(deserialize(attributes) as any, v => ({ $set: v })) as any;\n obj[PVK].extra.data = file;\n\n return obj.save({ master: payload.isMaster, uploadToken });\n\n } catch (e) {\n\n if (file?._id) proto[PVK].destroyFileData(proto, file._id);\n\n throw e;\n }\n });\n }\n );\n\n router.get(\n '/files/:id/:name',\n async (req, res, next) => {\n\n const { id, name } = req.params;\n\n const payload = proto.connect(req);\n const query = payload.Query('File').equalTo('_id', id);\n\n const file = await query.first({ master: payload.isMaster });\n if (!file || file.filename !== name) return void res.sendStatus(404);\n if (_.isNil(file.token) || _.isNil(file.size) || _.isNil(file.type)) return void res.sendStatus(404);\n\n const ranges = req.range(file.size);\n\n const match = req.headers['if-none-match'];\n if (match === `\"${id}\"`) {\n res.status(304).end();\n return;\n }\n res.setHeader('Content-Type', file.type);\n res.setHeader('Cache-Control', 'public, max-age=0');\n res.setHeader('ETag', `\"${id}\"`);\n\n let stream: AsyncIterable<BinaryData>;\n\n if (_.isArray(ranges) && ranges.type === 'bytes') {\n\n const startBytes = _.minBy(ranges, r => r.start)?.start ?? 0;\n const endBytes = _.maxBy(ranges, r => r.end)?.end ?? (file.size - 1);\n\n res.setHeader('Content-Length', endBytes - startBytes + 1);\n res.setHeader('Content-Range', `bytes ${startBytes}-${endBytes}/${file.size}`);\n res.status(206);\n\n stream = payload.fileStorage.fileData(payload, file.token, startBytes, endBytes + 1);\n\n } else {\n\n res.setHeader('Content-Length', file.size);\n res.status(200);\n\n stream = payload.fileStorage.fileData(payload, file.token);\n }\n\n Readable.from(stream).pipe(res).on('error', err => next(err));\n }\n );\n\n return router;\n}","//\n// user.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.get(\n '/user/me',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.currentUser());\n }\n );\n\n router.post(\n '/user/:id/password',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { id } = req.params;\n const payload = proto.connect(req);\n\n await response(res, async () => {\n\n if (!payload.isMaster) throw Error('No permission');\n\n const user = await payload.Query('User').get(id, { master: true });\n if (!user) throw Error('User not found');\n\n const { password } = _.isEmpty(req.body) ? { password: null } : deserialize(req.body) as any;\n if (_.isEmpty(password)) {\n await payload.unsetPassword(user, { master: true });\n } else {\n await payload.setPassword(user, password, { master: true });\n }\n });\n }\n );\n\n router.post(\n '/user/logout',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.logoutUser(req));\n }\n );\n\n return router;\n}","//\n// user.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.post(\n '/notify',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.notify(deserialize(req.body) as any));\n }\n );\n\n return router;\n}","//\n// schema.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 { Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.get(\n '/schema',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.schema as any;\n });\n }\n );\n\n router.get(\n '/schema/:name',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const { name } = req.params;\n if (_.isNil(proto.schema[name])) return void res.sendStatus(404);\n\n const payload = proto.connect(req);\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.schema[name] as any;\n });\n }\n );\n\n return router;\n}","//\n// schema.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 { Server, Router } from '@o2ter/server-js';\nimport { ProtoService } from '../proto';\nimport { response } from './common';\nimport { deserialize } from '../../internals/codec';\n\nexport default <E>(router: Router, proto: ProtoService<E>) => {\n\n router.get(\n '/config',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => payload.config({ master: payload.isMaster }));\n }\n );\n\n router.get(\n '/configAcl',\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n const payload = proto.connect(req);\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.configAcl({ master: true });\n });\n }\n );\n\n router.post(\n '/config',\n Server.text({ type: '*/*' }),\n async (req, res) => {\n res.setHeader('Cache-Control', ['no-cache', 'no-store']);\n\n const payload = proto.connect(req);\n const { values, acl } = deserialize(req.body) as any;\n\n await response(res, () => {\n if (!payload.isMaster) throw Error('No permission');\n return payload.setConfig(values, { master: true, acl });\n });\n }\n );\n\n return router;\n}","//\n// index.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 { Router } from 'express';\nimport { Server } from '@o2ter/server-js';\nimport { ProtoService } from './server/proto';\nimport { ProtoServiceKeyOptions, ProtoServiceOptions } from './server/proto/types';\nimport authHandler from './server/auth';\nimport classesRoute from './server/routes/classes';\nimport functionRoute from './server/routes/function';\nimport jobRoute from './server/routes/job';\nimport filesRoute from './server/routes/files';\nimport userRoute from './server/routes/user';\nimport notifyRoute from './server/routes/notify';\nimport schemaRoute from './server/routes/schema';\nimport configRoute from './server/routes/config';\nimport { TSchema } from './internals/schema';\nimport { PVK } from './internals/private';\nimport { TValueWithoutObject } from './internals/types';\nimport Decimal from 'decimal.js';\nimport { response } from './server/routes/common';\nimport { QuerySelector } from './server/query/dispatcher/parser';\nimport { serialize } from './internals/codec';\n\nexport * from './internals/codec';\nexport { classExtends } from './internals/utils';\nexport { TFileStorage } from './server/file';\nexport { ProtoService } from './server/proto';\nexport { ProtoClient } from './client';\n\n/**\n * Schema definition utility functions.\n */\nexport const schema = _.assign((x: Record<string, TSchema>) => x, {\n /**\n * Defines a boolean schema.\n * @param defaultValue - The default value for the boolean.\n * @returns The boolean schema.\n */\n boolean: (defaultValue?: boolean) => ({ type: 'boolean', default: defaultValue }) as const,\n\n /**\n * Defines a number schema.\n * @param defaultValue - The default value for the number.\n * @returns The number schema.\n */\n number: (defaultValue?: number) => ({ type: 'number', default: defaultValue }) as const,\n\n /**\n * Defines a decimal schema.\n * @param defaultValue - The default value for the decimal.\n * @returns The decimal schema.\n */\n decimal: (defaultValue?: Decimal) => ({ type: 'decimal', default: defaultValue }) as const,\n\n /**\n * Defines a string schema.\n * @param defaultValue - The default value for the string.\n * @returns The string schema.\n */\n string: (defaultValue?: string) => ({ type: 'string', default: defaultValue }) as const,\n\n /**\n * Defines a string array schema.\n * @param defaultValue - The default value for the string array.\n * @returns The string array schema.\n */\n stringArray: (defaultValue?: string[]) => ({ type: 'string[]', default: defaultValue }) as const,\n\n /**\n * Defines a date schema.\n * @param defaultValue - The default value for the date.\n * @returns The date schema.\n */\n date: (defaultValue?: Date) => ({ type: 'date', default: defaultValue }) as const,\n\n /**\n * Defines an object schema.\n * @param defaultValue - The default value for the object.\n * @returns The object schema.\n */\n object: <T extends Record<string, TValueWithoutObject>>(defaultValue?: T) => ({ type: 'object', default: defaultValue }) as const,\n\n /**\n * Defines an array schema.\n * @param defaultValue - The default value for the array.\n * @returns The array schema.\n */\n array: <T extends TValueWithoutObject[]>(defaultValue?: T) => ({ type: 'array', default: defaultValue }) as const,\n\n /**\n * Defines a vector schema.\n * @param dimension - The dimension of the vector.\n * @param defaultValue - The default value for the vector.\n * @returns The vector schema.\n */\n vector: (dimension: number, defaultValue?: number[]) => ({ type: 'vector', dimension, default: defaultValue }) as const,\n\n /**\n * Defines a shape schema.\n * @param shape - The shape definition.\n * @returns The shape schema.\n */\n shape: (shape: Record<string, TSchema.DataType>) => ({ type: 'shape', shape }) as const,\n\n /**\n * Defines a pointer schema.\n * @param target - The target of the pointer.\n * @returns The pointer schema.\n */\n pointer: (target: string) => ({ type: 'pointer', target }) as const,\n\n /**\n * Defines a relation schema.\n * @param target - The target of the relation.\n * @param foreignField - The foreign field of the relation.\n * @returns The relation schema.\n */\n relation: (target: string, foreignField?: string) => ({ type: 'relation', target, foreignField }) as const,\n});\n\n/**\n * Creates a ProtoRoute.\n * @param options - The options for the ProtoRoute.\n * @returns A promise that resolves to a Router.\n */\nexport const ProtoRoute = async <E>(options: {\n proto: ProtoService<E> | (ProtoServiceOptions<E> & ProtoServiceKeyOptions);\n}): Promise<Router> => {\n\n const proto = options.proto instanceof ProtoService ? options.proto : new ProtoService(options.proto);\n await proto[PVK].prepare();\n\n const router = Server.Router().use(\n authHandler(proto),\n (req, res, next) => {\n const payload = proto.connect(req);\n if (!payload.isInvalidMasterToken) return next();\n res.status(400).json({ message: 'Invalid token' });\n },\n );\n\n router.get('/health', (req, res) => { res.sendStatus(200); });\n router.get('/sessionInfo', async (req, res) => {\n await response(res, () => proto.connect(req).sessionInfo());\n });\n\n classesRoute(router, proto);\n functionRoute(router, proto);\n jobRoute(router, proto);\n filesRoute(router, proto);\n userRoute(router, proto);\n notifyRoute(router, proto);\n schemaRoute(router, proto);\n configRoute(router, proto);\n\n return router;\n}\n\n/**\n * Registers a ProtoSocket.\n * @param proto - The ProtoService instance.\n * @param server - The server instance.\n * @param endpoint - The optional endpoint.\n * @returns The socket.io instance.\n */\nexport const registerProtoSocket = <E>(\n proto: ProtoService<E>,\n server: Server,\n endpoint?: string,\n) => {\n const io = endpoint ? server.socket().of(endpoint) : server.socket();\n\n io.on('connection', async (socket) => {\n\n type QueryOpts = {\n event: string;\n className: string;\n filter: QuerySelector | boolean;\n };\n\n let events: Record<string, QuerySelector | boolean> = {};\n let queries: Record<string, QueryOpts> = {};\n\n const connect = async (token: string) => {\n const payload = await proto.connectWithSessionToken(token);\n const { remove: remove_basic } = payload.listen(data => {\n const ids = _.keys(_.pickBy(events, v => v instanceof QuerySelector ? v.eval(data) : v));\n const payload = JSON.parse(serialize(data));\n if (!_.isEmpty(ids)) socket.emit('ON_EV_NOTIFY', { ids, data: payload });\n });\n const { remove: remove_livequery } = payload[PVK]._liveQuery(payload, (ev, objs) => {\n const ids: Record<string, string[]> = {};\n for (const obj of objs) {\n ids[obj.id!] = _.keys(_.pickBy(queries, v => {\n if (v.event !== ev || v.className !== obj.className) return false;\n return v.filter instanceof QuerySelector ? v.filter.eval(obj) : v.filter;\n }));\n }\n if (_.isEmpty(ids)) return;\n const payload = JSON.parse(serialize(_.filter(objs, obj => !_.isEmpty(ids[obj.id!]))));\n socket.emit('ON_EV_LIVEQUERY', { ids, data: payload });\n });\n return () => {\n remove_basic();\n remove_livequery();\n };\n };\n\n const { token } = socket.handshake.auth;\n let remove = connect(token);\n\n socket.on('auth', (token) => {\n remove.then(rm => rm());\n remove = connect(token);\n });\n\n socket.on('disconnect', () => {\n remove.then(rm => rm());\n });\n\n socket.on('EV_NOTIFY', (payload) => {\n events = _.mapValues(payload, v => {\n if (_.isBoolean(v)) return true;\n try {\n return QuerySelector.decode(v);\n } catch (error) {\n proto.logger.error(error);\n return false;\n }\n });\n });\n\n socket.on('EV_LIVEQUERY', (payload) => {\n queries = _.mapValues(payload, v => {\n const { event = '', className = '', filter } = v ?? {};\n if (_.isBoolean(v)) return { event, className, filter: true };\n try {\n return { event, className, filter: QuerySelector.decode(filter) };\n } catch (error) {\n proto.logger.error(error);\n return { event, className, filter: false };\n }\n });\n });\n });\n\n return io;\n}\n\nexport default ProtoRoute;"],"names":[],"mappings":"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"}
|