@graphql-authz/directive
Version:
GraphQL Directive for graphql-authz
77 lines • 6.7 kB
JavaScript
;
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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