rpcchannel
Version:
Easy RPC with permission controls
72 lines (52 loc) • 6.48 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EnforceArgumentSchema = EnforceArgumentSchema;
exports.EnforceMethodArgSchema = EnforceMethodArgSchema;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _ajv = _interopRequireDefault(require("ajv"));
var ajv = new _ajv["default"](); // eslint-disable-next-line
function EnforceArgumentSchema(schema, func) {
var ValidateSchema = ajv.compile(schema); // I really just have to force this since TS has no way of doing this, AFAIK
// eslint-disable-next-line
return function () {
var _ValidateSchema$error;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
ValidateSchema(args);
if ((_ValidateSchema$error = ValidateSchema.errors) === null || _ValidateSchema$error === void 0 ? void 0 : _ValidateSchema$error.length) {
var error = new _ajv["default"].ValidationError((0, _toConsumableArray2["default"])(ValidateSchema.errors));
ValidateSchema.errors.length = 0;
throw error;
}
return func.apply(void 0, args);
};
}
function EnforceMethodArgSchema(schema) {
return function ( // eslint-disable-next-line
target, propertyKey, descriptor) {
var func = descriptor.value;
if (typeof func !== 'function') {
throw new TypeError('Cannot validate schema for non-function');
}
var ValidateSchema = ajv.compile(schema); // eslint-disable-next-line
descriptor.value = function () {
var _ValidateSchema$error2;
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
ValidateSchema(args);
if ((_ValidateSchema$error2 = ValidateSchema.errors) === null || _ValidateSchema$error2 === void 0 ? void 0 : _ValidateSchema$error2.length) {
var error = new _ajv["default"].ValidationError((0, _toConsumableArray2["default"])(ValidateSchema.errors));
ValidateSchema.errors.length = 0;
throw error;
}
return func.apply(this, args);
};
return descriptor;
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2hlbWEudHMiXSwibmFtZXMiOlsiYWp2IiwiQWp2IiwiRW5mb3JjZUFyZ3VtZW50U2NoZW1hIiwic2NoZW1hIiwiZnVuYyIsIlZhbGlkYXRlU2NoZW1hIiwiY29tcGlsZSIsImFyZ3MiLCJlcnJvcnMiLCJsZW5ndGgiLCJlcnJvciIsIlZhbGlkYXRpb25FcnJvciIsIkVuZm9yY2VNZXRob2RBcmdTY2hlbWEiLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJ2YWx1ZSIsIlR5cGVFcnJvciIsImFwcGx5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFJQSxJQUFNQSxHQUFHLEdBQUcsSUFBSUMsZUFBSixFQUFaLEMsQ0FFQTs7QUFDQSxTQUFTQyxxQkFBVCxDQUNFQyxNQURGLEVBRUVDLElBRkYsRUFHSztBQUNILE1BQU1DLGNBQWMsR0FBR0wsR0FBRyxDQUFDTSxPQUFKLENBQVlILE1BQVosQ0FBdkIsQ0FERyxDQUVIO0FBQ0E7O0FBQ0EsU0FBUyxZQUFvQjtBQUFBOztBQUFBLHNDQUFoQkksSUFBZ0I7QUFBaEJBLE1BQUFBLElBQWdCO0FBQUE7O0FBQzNCRixJQUFBQSxjQUFjLENBQUNFLElBQUQsQ0FBZDs7QUFDQSxpQ0FBSUYsY0FBYyxDQUFDRyxNQUFuQiwwREFBSSxzQkFBdUJDLE1BQTNCLEVBQW1DO0FBQ2pDLFVBQU1DLEtBQUssR0FBRyxJQUFJVCxnQkFBSVUsZUFBUixxQ0FBNEJOLGNBQWMsQ0FBQ0csTUFBM0MsRUFBZDtBQUNBSCxNQUFBQSxjQUFjLENBQUNHLE1BQWYsQ0FBc0JDLE1BQXRCLEdBQStCLENBQS9CO0FBQ0EsWUFBTUMsS0FBTjtBQUNEOztBQUNELFdBQU9OLElBQUksTUFBSixTQUFRRyxJQUFSLENBQVA7QUFDRCxHQVJEO0FBU0Q7O0FBRUQsU0FBU0ssc0JBQVQsQ0FBZ0NULE1BQWhDLEVBQWdEO0FBQzlDLFNBQU8sV0FDTDtBQUNBVSxFQUFBQSxNQUZLLEVBR0xDLFdBSEssRUFJTEMsVUFKSyxFQUtlO0FBQ3BCLFFBQU1YLElBQUksR0FBR1csVUFBVSxDQUFDQyxLQUF4Qjs7QUFDQSxRQUFJLE9BQU9aLElBQVAsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDOUIsWUFBTSxJQUFJYSxTQUFKLENBQWMseUNBQWQsQ0FBTjtBQUNEOztBQUNELFFBQU1aLGNBQWMsR0FBR0wsR0FBRyxDQUFDTSxPQUFKLENBQVlILE1BQVosQ0FBdkIsQ0FMb0IsQ0FNcEI7O0FBQ0FZLElBQUFBLFVBQVUsQ0FBQ0MsS0FBWCxHQUFtQixZQUEwQjtBQUFBOztBQUFBLHlDQUFiVCxJQUFhO0FBQWJBLFFBQUFBLElBQWE7QUFBQTs7QUFDM0NGLE1BQUFBLGNBQWMsQ0FBQ0UsSUFBRCxDQUFkOztBQUNBLG9DQUFJRixjQUFjLENBQUNHLE1BQW5CLDJEQUFJLHVCQUF1QkMsTUFBM0IsRUFBbUM7QUFDakMsWUFBTUMsS0FBSyxHQUFHLElBQUlULGdCQUFJVSxlQUFSLHFDQUE0Qk4sY0FBYyxDQUFDRyxNQUEzQyxFQUFkO0FBQ0FILFFBQUFBLGNBQWMsQ0FBQ0csTUFBZixDQUFzQkMsTUFBdEIsR0FBK0IsQ0FBL0I7QUFDQSxjQUFNQyxLQUFOO0FBQ0Q7O0FBQ0QsYUFBT04sSUFBSSxDQUFDYyxLQUFMLENBQVcsSUFBWCxFQUFpQlgsSUFBakIsQ0FBUDtBQUNELEtBUkQ7O0FBU0EsV0FBT1EsVUFBUDtBQUNELEdBdEJEO0FBdUJEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFqdiBmcm9tICdhanYnXG5cbnR5cGUgU2NoZW1hID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBib29sZWFuXG5cbmNvbnN0IGFqdiA9IG5ldyBBanYoKVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbmZ1bmN0aW9uIEVuZm9yY2VBcmd1bWVudFNjaGVtYTxGIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPihcbiAgc2NoZW1hOiBTY2hlbWEsXG4gIGZ1bmM6IEZcbik6IEYge1xuICBjb25zdCBWYWxpZGF0ZVNjaGVtYSA9IGFqdi5jb21waWxlKHNjaGVtYSlcbiAgLy8gSSByZWFsbHkganVzdCBoYXZlIHRvIGZvcmNlIHRoaXMgc2luY2UgVFMgaGFzIG5vIHdheSBvZiBkb2luZyB0aGlzLCBBRkFJS1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgcmV0dXJuICgoKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgVmFsaWRhdGVTY2hlbWEoYXJncylcbiAgICBpZiAoVmFsaWRhdGVTY2hlbWEuZXJyb3JzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEFqdi5WYWxpZGF0aW9uRXJyb3IoWy4uLlZhbGlkYXRlU2NoZW1hLmVycm9yc10pXG4gICAgICBWYWxpZGF0ZVNjaGVtYS5lcnJvcnMubGVuZ3RoID0gMFxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMoLi4uYXJncylcbiAgfSkgYXMgdW5rbm93bikgYXMgRlxufVxuXG5mdW5jdGlvbiBFbmZvcmNlTWV0aG9kQXJnU2NoZW1hKHNjaGVtYTogU2NoZW1hKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdGFyZ2V0OiBhbnksXG4gICAgcHJvcGVydHlLZXk6IHN0cmluZyxcbiAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3JcbiAgKTogUHJvcGVydHlEZXNjcmlwdG9yIHtcbiAgICBjb25zdCBmdW5jID0gZGVzY3JpcHRvci52YWx1ZVxuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IHZhbGlkYXRlIHNjaGVtYSBmb3Igbm9uLWZ1bmN0aW9uJylcbiAgICB9XG4gICAgY29uc3QgVmFsaWRhdGVTY2hlbWEgPSBhanYuY29tcGlsZShzY2hlbWEpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgVmFsaWRhdGVTY2hlbWEoYXJncylcbiAgICAgIGlmIChWYWxpZGF0ZVNjaGVtYS5lcnJvcnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBBanYuVmFsaWRhdGlvbkVycm9yKFsuLi5WYWxpZGF0ZVNjaGVtYS5lcnJvcnNdKVxuICAgICAgICBWYWxpZGF0ZVNjaGVtYS5lcnJvcnMubGVuZ3RoID0gMFxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncylcbiAgICB9XG4gICAgcmV0dXJuIGRlc2NyaXB0b3JcbiAgfVxufVxuXG5leHBvcnQgeyBFbmZvcmNlQXJndW1lbnRTY2hlbWEsIEVuZm9yY2VNZXRob2RBcmdTY2hlbWEgfVxuIl19