August 26, 2024
·
552 commits
to main
since this release
@envelop/extended-validation@4.1.0
Minor Changes
-
#2281
70d4d7a
Thanks @UserType;! - Refactor Generic Auth plugin;- [BREAKING] - Now
@authdirective is renamed to@authenticated. If you want to keep the old
name you can configure the plugin to use the old name.
useGenericAuth({ // ... authDirectiveName: 'auth' })
- [BREAKING] - Now
directiveOrExtensionFieldNameis renamed toauthDirectiveName.
useGenericAuth({ // ... - directiveOrExtensionFieldName: 'auth', + authDirectiveName: 'auth', });- Now auth directives support
OBJECTandINTERFACElocations, so you can use the auth
directive on types as well.
directive @authenticated on OBJECT | INTERFACE type User @authenticated { id: ID! name: String! }
validateUserfunction does not receivefieldAuthDirectiveNodeandfieldAuthExtension
anymore. Instead, it takesfieldAuthArgswhich is an object that contains the arguments of the
auth directive or extension. So you don't need to parse the arguments manually anymore.
const validateUser: ValidateUserFn = params => { if (!params.fieldAuthArgs.roles.includes('admin')) { return createUnauthorizedError(params) } }
validateUser'sobjectTypeparameter is now renamed toparentType. And it takes the
original composite type instead of theGraphQLObjectTypeinstance. Now it can be
GraphQLInterfaceTypeas well.validateUser's current parameters are now;
export type ValidateUserFnParams<UserType> = { /** The user object. */ /** The field node from the operation that is being validated. */ fieldNode: FieldNode /** The parent type which has the field that is being validated. */ parentType: GraphQLObjectType | GraphQLInterfaceType /** The auth directive arguments for the type */ typeAuthArgs?: Record<string, any> /** The directives for the type */ typeDirectives?: ReturnType<typeof getDirectiveExtensions> /** Scopes that type requires */ typeScopes?: string[][] /** Policies that type requires */ typePolicies?: string[][] /** The object field */ field: GraphQLField<any, any> /** The auth directive arguments for the field */ fieldAuthArgs?: Record<string, any> /** The directives for the field */ fieldDirectives?: ReturnType<typeof getDirectiveExtensions> /** Scopes that field requires */ fieldScopes?: string[][] /** Policies that field requires */ fieldPolicies?: string[][] /** Extracted scopes from the user object */ userScopes: string[] /** Policies for the user */ userPolicies: string[] /** The args passed to the execution function (including operation context and variables) **/ executionArgs: ExecutionArgs /** Resolve path */ path: ReadonlyArray<string | number> }
- New directives for role-based auth are added
@requiresScopesand@policyfor more granular
control over the auth logic.
directive @requiresScopes(scopes: [String!]!) on OBJECT | INTERFACE | FIELD_DEFINITION directive @policy(policy: String!) on OBJECT | INTERFACE | FIELD_DEFINITION
Check README for more information.
- [BREAKING] - Now