# These are directives and definitions from Apollo related to federation

"""
Used in federation
"""
scalar _FieldSet
scalar link__Import

directive @external on FIELD_DEFINITION
directive @requires(fields: _FieldSet!) on FIELD_DEFINITION
directive @provides(fields: _FieldSet!) on FIELD_DEFINITION
directive @key(fields: _FieldSet!) repeatable on OBJECT | INTERFACE
directive @shareable on FIELD_DEFINITION | OBJECT
directive @tag(name: String!) repeatable on FIELD_DEFINITION
directive @link(url: String!, import: [link__Import]) repeatable on SCHEMA
directive @override(from: String!) on FIELD_DEFINITION

"""
Union of all types that can be federated

TODO: add the rest of the entities once they have reference resolvers.
"""
union _Entity =
    | ApplicationV2
    | RoleV2
    | ApplicationGroup
    | LabelParticipant
    | Collaborator
    | Subaccount
    | Vendor
    | Identity
    | ParentCompany

"""
scalar _Any is used to represent any type in the _entities query
"""
scalar _Any

extend type Query {
    # lint-disable fields-are-camel-cased
    """
    Query._entities query is used to resolve federated types.
    """
    _entities(representations: [_Any!]!): [_Entity]!
}
