UNPKG

@graphql-authz/directive

Version:
77 lines 6.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.authZGraphQLDirective = authZGraphQLDirective; exports.authZDirective = authZDirective; const utils_1 = require("@graphql-tools/utils"); const graphql_1 = require("graphql"); function authZGraphQLDirective(rules, directiveName = 'authz') { const RulesEnum = new graphql_1.GraphQLEnumType({ name: 'AuthZRules', values: Object.keys(rules).reduce((result, key) => { result[key] = { value: key }; return result; }, {}) }); const CompositeRulesInput = new graphql_1.GraphQLInputObjectType({ name: 'AuthZDirectiveCompositeRulesInput', fields: { and: { type: new graphql_1.GraphQLList(RulesEnum) }, or: { type: new graphql_1.GraphQLList(RulesEnum) }, not: { type: RulesEnum } } }); const DeepCompositeRulesInput = new graphql_1.GraphQLInputObjectType({ name: 'AuthZDirectiveDeepCompositeRulesInput', fields: () => ({ id: { type: RulesEnum }, and: { type: new graphql_1.GraphQLList(DeepCompositeRulesInput) }, or: { type: new graphql_1.GraphQLList(DeepCompositeRulesInput) }, not: { type: DeepCompositeRulesInput } }) }); return new graphql_1.GraphQLDirective({ name: directiveName, locations: [ graphql_1.DirectiveLocation.FIELD_DEFINITION, graphql_1.DirectiveLocation.OBJECT, graphql_1.DirectiveLocation.INTERFACE ], args: { rules: { type: new graphql_1.GraphQLList(RulesEnum) }, compositeRules: { type: new graphql_1.GraphQLList(CompositeRulesInput) }, deepCompositeRules: { type: new graphql_1.GraphQLList(DeepCompositeRulesInput) } } }); } function authZDirective(directiveName = 'authz') { function addAuthZExtensionsDirective(schema, schemaItem) { var _a, _b, _c, _d; const authZDirectiveArgs = (_a = (0, utils_1.getDirective)(schema, schemaItem, directiveName)) === null || _a === void 0 ? void 0 : _a[0]; if (!authZDirectiveArgs) { return undefined; } schemaItem.extensions = { ...schemaItem.extensions, authz: { ...(_b = schemaItem.extensions) === null || _b === void 0 ? void 0 : _b.authz, directives: [ ...(((_d = (_c = schemaItem.extensions) === null || _c === void 0 ? void 0 : _c.authz) === null || _d === void 0 ? void 0 : _d.directives) || []), { name: directiveName, arguments: authZDirectiveArgs } ] } }; return schemaItem; } return { authZDirectiveTransformer: schema => (0, utils_1.mapSchema)(schema, { [utils_1.MapperKind.INTERFACE_FIELD]: fieldConfig => addAuthZExtensionsDirective(schema, fieldConfig), [utils_1.MapperKind.OBJECT_FIELD]: fieldConfig => addAuthZExtensionsDirective(schema, fieldConfig), [utils_1.MapperKind.OBJECT_TYPE]: type => addAuthZExtensionsDirective(schema, type), [utils_1.MapperKind.INTERFACE_TYPE]: type => addAuthZExtensionsDirective(schema, type) }) }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxzREFnREM7QUFVRCx3Q0E2Q0M7QUF0SEQsZ0RBQTJFO0FBRTNFLHFDQVdpQjtBQUVqQixTQUFnQixxQkFBcUIsQ0FDbkMsS0FBa0IsRUFDbEIsYUFBYSxHQUFHLE9BQU87SUFFdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSx5QkFBZSxDQUFDO1FBQ3BDLElBQUksRUFBRSxZQUFZO1FBQ2xCLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDN0IsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUNELEVBQUUsQ0FDSDtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxnQ0FBc0IsQ0FBQztRQUNyRCxJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLE1BQU0sRUFBRTtZQUNOLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLHFCQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUkscUJBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4QyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQ3pCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSx1QkFBdUIsR0FDM0IsSUFBSSxnQ0FBc0IsQ0FBQztRQUN6QixJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN2QixHQUFHLEVBQUUsRUFBRSxJ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