@pothos/plugin-scope-auth
Version:
A Pothos plugin for adding scope based authorization checks to your GraphQL Schema
74 lines (73 loc) • 3.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "resolveHelper", {
enumerable: true,
get: function() {
return resolveHelper;
}
});
const _core = require("@pothos/core");
const _errors = require("./errors");
const _requestcache = /*#__PURE__*/ _interop_require_default(require("./request-cache"));
const _types = require("./types");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
const defaultUnauthorizedResolver = (_root, _args, _context, _info, error)=>{
throw error;
};
function resolveHelper(steps, plugin, fieldConfig) {
var _plugin_builder_options_scopeAuth;
var _fieldConfig_pothosOptions_unauthorizedResolver;
const unauthorizedResolver = (_fieldConfig_pothosOptions_unauthorizedResolver = fieldConfig.pothosOptions.unauthorizedResolver) !== null && _fieldConfig_pothosOptions_unauthorizedResolver !== void 0 ? _fieldConfig_pothosOptions_unauthorizedResolver : defaultUnauthorizedResolver;
const globalUnauthorizedError = (_plugin_builder_options_scopeAuth = plugin.builder.options.scopeAuth) === null || _plugin_builder_options_scopeAuth === void 0 ? void 0 : _plugin_builder_options_scopeAuth.unauthorizedError;
const defaultUnauthorizedError = (parent, _args, context, info, result)=>{
if (globalUnauthorizedError) {
return globalUnauthorizedError(parent, context, info, result);
}
if ((result.failure.kind === _types.AuthScopeFailureType.AuthScope || result.failure.kind === _types.AuthScopeFailureType.AuthScopeFunction) && result.failure.error) {
return result.failure.error;
}
return result.message;
};
var _fieldConfig_pothosOptions_unauthorizedError;
const createError = (_fieldConfig_pothosOptions_unauthorizedError = fieldConfig.pothosOptions.unauthorizedError) !== null && _fieldConfig_pothosOptions_unauthorizedError !== void 0 ? _fieldConfig_pothosOptions_unauthorizedError : defaultUnauthorizedError;
return (parent, args, context, info)=>{
let resolvedValue;
const cache = _requestcache.default.fromContext(context, plugin.builder);
function runSteps(index) {
for(let i = index; i < steps.length; i += 1){
const { run, errorMessage } = steps[i];
const stepResult = run(cache, parent, args, context, info, (val)=>{
resolvedValue = val;
});
if ((0, _core.isThenable)(stepResult)) {
return stepResult.then((result)=>{
if (result) {
const error = createError(parent, args, context, info, {
message: typeof errorMessage === 'function' ? errorMessage(parent, args, context, info) : errorMessage,
failure: result
});
return unauthorizedResolver(parent, args, context, info, typeof error === 'string' ? new _errors.ForbiddenError(error, result) : error);
}
return runSteps(i + 1);
});
}
if (stepResult) {
const error = createError(parent, args, context, info, {
message: typeof errorMessage === 'function' ? errorMessage(parent, args, context, info) : errorMessage,
failure: stepResult
});
return unauthorizedResolver(parent, args, context, info, typeof error === 'string' ? new _errors.ForbiddenError(error, stepResult) : error);
}
}
return resolvedValue;
}
return runSteps(0);
};
}
//# sourceMappingURL=resolve-helper.js.map