{"version":3,"sources":["jsdelivr-header.js","/npm/objection-authorize@4.0.2/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,KAAO,QAAQ,eACf,MAAQ,QAAQ,gBAGtB,eAAe,oBAAoB,GACjC,IAAK,EAAK,QAAQ,4BAA6B,OAE/C,MAAM,EAAU,EAAK,QAAQ,WAC7B,EAAK,QAAQ,YAAa,EAC1B,EAAK,QAAQ,gBAAkB,EAAK,cACpC,EAAK,QAAQ,WAAa,CAC5B,CAEA,OAAO,QAAU,CAAC,EAAK,EAAU,WAAY,KAC3C,IAAK,GAA0B,iBAAZ,EACjB,MAAM,IAAI,MACR,sFAYJ,EAAO,MARa,CAClB,YAAa,YACb,yBAA0B,IAC1B,sBAAuB,IACvB,KAAM,CACJ,mCAAmC,IAGb,GAE1B,MAAM,EAAU,QAAQ,cAAc,KAEtC,OAAO,IACL,MAAM,UAA0B,EAAM,aACpC,MAAA,CAAO,GACL,OAAO,KAAK,QAAQ,CAAE,WACxB,CAEA,SAAA,CAAU,EAAM,EAAU,GACxB,OAAO,KAAK,QAAQ,CAClB,MAAO,OAAO,OAAO,CAAE,KAAM,EAAK,aAAe,GACjD,MAAO,OAAO,OAAO,CAAC,EAAG,EAAM,GAC/B,UAAW,EACX,OAAQ,KAAK,aACb,YAAY,GAEhB,CAEA,0BAAA,GACE,OAAO,KAAK,QAAQ,CAClB,6BAA6B,GAEjC,CAEA,qBAAA,GACE,OAAO,KAAK,QAAQ,CAClB,wBAAwB,GAE5B,EAGF,OAAO,cAAc,EACnB,uBAAW,GACT,OAAO,CACT,CAEA,yBAAa,CAAa,SAClB,MAAM,aAAa,GACzB,IAAI,EAAQ,EAAK,EAAM,UAAU,aACnC,CAEA,uBAAa,CAAW,SAChB,MAAM,WAAW,GACvB,IAAI,EAAQ,EAAK,EAAM,QAAQ,aACjC,CAEA,yBAAa,CAAa,SAClB,MAAM,aAAa,SACnB,oBAAoB,GAC1B,IAAI,EAAQ,EAAK,EAAM,UAAU,aACnC,CAEA,yBAAa,CAAa,SAClB,MAAM,aAAa,SACnB,oBAAoB,GAC1B,IAAI,EAAQ,EAAK,EAAM,UAAU,aACnC,CAEA,aAAA,CAAc,EAAM,EAAS,OAAQ,GACnC,MAAM,EAAO,CACX,MAAO,GACP,WAAY,GACZ,SAAU,GACV,QAAS,CACP,MAAO,OAAO,OAAO,CAAE,KAAM,EAAK,aAAe,GACjD,MAAO,OAAO,OAAO,CAAC,EAAG,EAAM,GAC/B,QAAS,EACT,UAAW,KACX,OAAQ,KAAK,YACb,YAAY,IAIV,EAAS,IAAI,EAAQ,EAAK,EAAM,GAAQ,cAK9C,OAAO,KAAK,KAAK,SAAU,EAC7B,EACF,CACF","file":"/npm/objection-authorize@4.0.2/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/objection-authorize@4.0.2/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const pick = require('lodash/pick')\nconst merge = require('lodash/merge')\n\n// TODO: @sssss465 I mean like this kind of shit\nasync function fillResourceContext(args) {\n  if (!args.context._fetchResourceContextFromDB) return\n\n  const OGValue = args.context._authorize\n  args.context._authorize = false\n  args.context._resource = await args.asFindQuery()\n  args.context._authorize = OGValue\n}\n\nmodule.exports = (acl, library = 'role-acl', opts) => {\n  if (!acl || typeof library === 'object') {\n    throw new Error(\n      \"usage: require('objection-authorize')(acl, library: String[, opts: Object])(Model)\"\n    )\n  }\n\n  const defaultOpts = {\n    defaultRole: 'anonymous',\n    unauthenticatedErrorCode: 401,\n    unauthorizedErrorCode: 403,\n    casl: {\n      useInputItemAsResourceForRelation: false\n    }\n  }\n  opts = merge(defaultOpts, opts)\n\n  const Adapter = require(`./adapters/${library}`)\n\n  return Model => {\n    class AuthZQueryBuilder extends Model.QueryBuilder {\n      action(_action) {\n        return this.context({ _action })\n      }\n\n      authorize(user, resource, optOverride) {\n        return this.context({\n          _user: Object.assign({ role: opts.defaultRole }, user),\n          _opts: Object.assign({}, opts, optOverride),\n          _resource: resource,\n          _class: this.modelClass(),\n          _authorize: true\n        })\n      }\n\n      fetchResourceContextFromDB() {\n        return this.context({\n          _fetchResourceContextFromDB: true\n        })\n      }\n\n      diffInputFromResource() {\n        return this.context({\n          _diffInputFromResource: true\n        })\n      }\n    }\n\n    return class extends Model {\n      static get QueryBuilder() {\n        return AuthZQueryBuilder\n      }\n\n      static async beforeInsert(args) {\n        await super.beforeInsert(args)\n        new Adapter(acl, args, 'create').checkAccess()\n      }\n\n      static async beforeFind(args) {\n        await super.beforeFind(args)\n        new Adapter(acl, args, 'read').checkAccess()\n      }\n\n      static async beforeUpdate(args) {\n        await super.beforeUpdate(args)\n        await fillResourceContext(args)\n        new Adapter(acl, args, 'update').checkAccess()\n      }\n\n      static async beforeDelete(args) {\n        await super.beforeDelete(args)\n        await fillResourceContext(args)\n        new Adapter(acl, args, 'delete').checkAccess()\n      }\n\n      authorizeRead(user, action = 'read', optOverride) {\n        const args = {\n          items: [],\n          inputItems: [],\n          relation: '',\n          context: {\n            _user: Object.assign({ role: opts.defaultRole }, user),\n            _opts: Object.assign({}, opts, optOverride),\n            _action: action,\n            _resource: this,\n            _class: this.constructor,\n            _authorize: true\n          }\n        }\n\n        const fields = new Adapter(acl, args, action).allowedFields\n\n        // using lodash's implementation of pick instead of \"internal\" Objection.js one\n        // because the ORM's implementation doesn't support nested JSON:\n        // https://git.io/JLMsm\n        return pick(this.toJSON(), fields)\n      }\n    }\n  }\n}\n"]}