UNPKG

17.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"Api.js","names":["_env","require","_err","_interopRequireDefault","_module","_get4","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","Reflect","construct","arguments","apply","_possibleConstructorReturn2","sham","Proxy","Boolean","prototype","valueOf","call","e","Api","_Module","_inherits2","_super","parent","_this2","_this","_classCallCheck2","_len","length","propsArray","Array","_key","concat","__api","setProps","Date","__parent","app","config","_createClass2","key","value","_init","_asyncToGenerator2","_regenerator","mark","_callee","_get2","_len2","_key2","_args","wrap","_callee$","_context","prev","next","_get3","Err","name","paths","_toConsumableArray2","path","stop","init","_checkAuth","_callee2","req","_callee2$","_context2","__errJwt","get","status","checkAuth","_x","_checkAdmin","_callee3","props","_args3","_callee3$","_context3","undefined","dev","isDev","abrupt","checkAdmin","_x2","url","params","_useMiddleware","_callee5","middleware","res","_callee5$","_context5","Promise","resolve","reject","_ref","_callee4","err","_callee4$","_context4","_x6","useMiddleware","_x3","_x4","_x5","_getRoutes","_callee6","_callee6$","_context6","__lifecycle","runStart","__run","getRoutes","__getRoutes","index","bind","_index","_callee7","_callee7$","_context7","e404","message","level","Module","exports","_default"],"sources":["../src/Api.js"],"sourcesContent":["import { isDev } from '@lskjs/env';\nimport Err from '@lskjs/err';\nimport Module from '@lskjs/module';\nimport get from 'lodash/get';\n// import hash from 'object-hash';\n// import Cacheman from 'cacheman';\n// import pick from 'lodash/pick';\n// import isArray from 'lodash/isArray';\n// import set from 'lodash/set';\n// import forEach from 'lodash/forEach';\n// import tryJSONparse from '@lskjs/utils/tryJSONparse';\n// import autobind from '@lskjs/utils/autobind';\n// import mapValues from 'lodash/mapValues';\n// import map from 'lodash/map';\n// import some from 'lodash/some';\n// import getDocsTemplate from './getDocsTemplate';\n\nexport class Api extends Module {\n __api = true;\n constructor(parent, ...propsArray) {\n super(parent, ...propsArray);\n this.setProps(...propsArray, {\n '__lifecycle.create': new Date(),\n __parent: parent,\n app: parent && parent.app,\n config: parent && parent.config,\n });\n // this.__parent = parent;\n // this.app = parent && parent.app;\n // this.__config = parent && parent.config;\n }\n\n async init(...propsArray) {\n await super.init(...propsArray);\n // TODO: временная ошибка, как только мигрируем код, заменим на варинг\n if (!this.app) {\n throw new Err(`API_APP_MISSING', 'Please use new ${this.name}(this) instead new ${this.name}(this.app)`);\n }\n if (!this.__parent) {\n throw new Err(`API_PARENT_MISSING', 'Please use new ${this.name}(this) instead new ${this.name}(this.app)`);\n }\n this.paths = [...(this.__parent.paths || []), this.path];\n }\n // async isAuth(req) {\n // if (req.__errJwt) return false;\n // if (!get(req, 'user._id')) return false;\n // return true;\n // }\n async checkAuth(req) {\n if (req.__errJwt) throw req.__errJwt;\n if (!get(req, 'user._id')) throw new Err('auth.unauthorized', { status: 401 });\n }\n // async isAdmin(req) {\n // if (req.__errJwt) return false;\n // if (!get(req, 'user._id')) return false;\n // if (!get(req, 'user.role') !== 'admin') return false;\n // return true;\n // }\n async checkAdmin(req, props = {}) {\n if (props.dev && isDev) return;\n if (req.__errJwt) throw req.__errJwt;\n if (get(req, 'user.role') !== 'admin') throw new Err('auth.notadmin', { status: 403 });\n }\n\n url(path, params) {\n return this.app.url((this.path || '/api') + path, params);\n }\n\n async useMiddleware(middleware, req, res) {\n return new Promise((resolve, reject) =>\n middleware(req, res, async (err) => {\n if (err) return reject(err);\n return resolve();\n }),\n );\n }\n\n async __getRoutes() {\n if (!this.__lifecycle.runStart) await this.__run();\n // TODO: подумать, нужно ли насильно биндить методы?\n // return mapValues(this.getRoutes(), (fn) => fn.bind(this));\n return this.getRoutes();\n }\n\n getRoutes() {\n return {\n '/': this.index.bind(this),\n };\n }\n\n async index() {\n return `${this.name} – ok`;\n }\n\n e404(req) {\n throw new Err('E_404', {\n status: 404,\n message: `Not found path ${req.path}`,\n path: req.path,\n level: 'warn',\n });\n }\n\n // cacheStore = new Cacheman('api', {\n // ttl: 60,\n // });\n // e(...args) {\n // return new Err(...args);\n // }\n\n // async validateParams(data, fields) {\n // const errors = map(fields, (validator, param) => {\n // if (validator && validator.required && data[param] == null) {\n // return {\n // name: 'api.validateParams.required',\n // param,\n // };\n // }\n // return undefined;\n // }).filter(Boolean);\n\n // if (some(errors, Boolean)) {\n // throw new Err({\n // code: 'api.validateParams',\n // status: 400,\n // data: {\n // errors,\n // },\n // });\n // }\n\n // return mapValues(fields, (validator, param) => {\n // const aliases = [param, ...(validator.alias || [])];\n // // eslint-disable-next-line no-restricted-syntax\n // for (const param2 of aliases) {\n // if (data[param2] != null) return data[param2];\n // }\n // return null;\n // });\n // }\n\n // getListParams(req) {\n // const { data } = req;\n // const params = mapValues(pick(data, ['filter', 'sort', 'skip', 'limit', 'select', 'view', 'operation']), (a) =>\n // tryJSONparse(a),\n // );\n\n // if (!params.filter) params.filter = {};\n // if (req.data) {\n // forEach(req.data, (val, key) => {\n // if (key.substr(0, 'filter.'.length) === 'filter.') {\n // set(params, key, val);\n // }\n // if (key.substr(0, 'sort.'.length) === 'sort.') {\n // set(params, key, val);\n // }\n // });\n // }\n // if (params.limit > 100) params.limit = 100;\n // if (!params.select) params.select = [];\n // if (typeof params.select === 'string') {\n // params.select = params.select\n // .trim()\n // .split(',')\n // .map((a) => a.trim());\n // }\n // if (!isArray(params.select)) throw new Err('select not array');\n // if (!params.view) params.view = 'default';\n // // params.operation = req.data.operation;\n\n // return params;\n // }\n\n // getGteLte(item) {\n // const $gte = get(item, '[0]');\n // const $lte = get(item, '[1]');\n // const res = {};\n // if ($lte !== null && typeof $lte !== 'undefined') {\n // res.$lte = $lte;\n // }\n // if ($gte !== null && typeof $gte !== 'undefined') {\n // res.$gte = $gte;\n // }\n // if (!Object.keys(res).length) return null;\n // return res;\n // }\n // assign(model, params, fields = []) {\n // if (fields.length === 0) {\n // console.error('Api.assign empty fields'); // eslint-disable-line no-console\n // return;\n // }\n // fields.forEach((field) => {\n // if (params[field] === undefined) return;\n // model[field] = params[field]; // eslint-disable-line no-param-reassign\n // if (!model.markModified) return;\n // model.markModified(field);\n // });\n // }\n // isAdmin(req) {\n // if (req.user?.role !== 'admin') throw this.e(403, '!admin');\n // // return req.user?.role === 'admin';\n // }\n // equal(objectId1, objectId2) {\n // return String(objectId1) === String(objectId2);\n // }\n // findAndCountByParams(Model, params, params2) {\n // const { then = (a) => a } = params2; // = a => a\n // return Promise.props({\n // __pack: 1,\n // count: params.count || params.count === '' ? Model.countByParams(params) : undefined,\n // data: Model.prepare(then(Model.findByParams(params, params2)), params2),\n // });\n // }\n // withSearchParams(data, field) {\n // const { search, filter = {}, ...other } = data;\n // if (!search) return data;\n // return {\n // ...other,\n // filter: {\n // ...filter,\n // $and: [\n // {\n // [field]: {\n // $regex: search,\n // $options: 'i',\n // },\n // },\n // ],\n // },\n // };\n // }\n // enableCache = false;\n // async cache(key, ...args) {\n // const [fn, params = { ttl: 60 }] = args.reverse();\n // if (!this.enableCache) return fn();\n // const { ttl } = params;\n // let hashedKey;\n // try {\n // hashedKey = hash(key);\n // } catch (err) {\n // try {\n // hashedKey = hash(JSON.stringify(key));\n // } catch (err2) {\n // console.error('Api.cache', err2); //eslint-disable-line\n // hashedKey = '!!!ERR!!!';\n // }\n // }\n // const value = await this.cacheStore.get(hashedKey);\n // if (value) return value;\n // const res = await fn();\n // this.cacheStore.set(hashedKey, res, ttl);\n // return res;\n // }\n\n // getDocsRoutes({ path, ...props } = {}) {\n // const params = {\n // name: get(this, 'app.config.about.title'),\n // description: get(this, 'app.config.about.description'),\n // docs: path ? this.app.url(`${path}/docs`) : this.url('/docs'),\n // docsJson: path ? this.app.url(`${path}/docs.json`) : this.url('/docs.json'),\n // path,\n // ...props,\n // };\n // return {\n // '': () => params,\n // '/docs': (req, res) => res.send(getDocsTemplate(params)),\n // '/docs.json': (req, res) => res.json(this.getDocs(this, params)),\n // };\n // }\n}\n\nexport default Api;\n"],"mappings":"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;IAAA;EAAA;IAAA3E,GAAA;IAAAC,KAAA,EAED,SAAAyE,UAAA,EAAY;MACV,OAAO;QACL,GAAG,EAAE,IAAI,CAACE,KAAK,CAACC,IAAI,CAAC,IAAI;MAC3B,CAAC;IACH;EAAC;IAAA7E,GAAA;IAAAC,KAAA;MAAA,IAAA6E,MAAA,OAAA3E,kBAAA,2BAAAC,YAAA,YAAAC,IAAA,CAED,SAAA0E,SAAA;QAAA,OAAA3E,YAAA,YAAAO,IAAA,UAAAqE,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAnE,IAAA,GAAAmE,SAAA,CAAAlE,IAAA;YAAA;cAAA,OAAAkE,SAAA,CAAAtC,MAAA,cAAAnD,MAAA,CACY,IAAI,CAAC0B,IAAI;YAAA;YAAA;cAAA,OAAA+D,SAAA,CAAA3D,IAAA;UAAA;QAAA,GAAAyD,QAAA;MAAA,CACpB;MAAA,SAAAH,MAAA;QAAA,OAAAE,MAAA,CAAA5G,KAAA,OAAAD,SAAA;MAAA;MAAA,OAAA2G,KAAA;IAAA;EAAA;IAAA5E,GAAA;IAAAC,KAAA,EAED,SAAAiF,KAAKxD,GAAG,EAAE;MACR,MAAM,IAAIT,eAAG,CAAC,OAAO,EAAE;QACrBc,MAAM,EAAE,GAAG;QACXoD,OAAO,oBAAA3F,MAAA,CAAoBkC,GAAG,CAACL,IAAI,CAAE;QACrCA,IAAI,EAAEK,GAAG,CAACL,IAAI;QACd+D,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EAAA;EAAA,OAAAzG,GAAA;AAAA,EA3PuB0G,kBAAM;AAAAC,OAAA,CAAA3G,GAAA,GAAAA,GAAA;AAAA,IAAA4G,QAAA,GA8PhB5G,GAAG;AAAA2G,OAAA,cAAAC,QAAA"}
\No newline at end of file