UNPKG

@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
"use strict"; 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