You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
600 lines
22 KiB
600 lines
22 KiB
<?php
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Route Configuration
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Controls the HTTP route that your GraphQL server responds to.
|
|
| You may set `route` => false, to disable the default route
|
|
| registration and take full control.
|
|
|
|
|
*/
|
|
|
|
'route' => [
|
|
/*
|
|
* The URI the endpoint responds to, e.g. mydomain.com/graphql.
|
|
*/
|
|
'uri' => '/graphql',
|
|
|
|
/*
|
|
* Lighthouse creates a named route for convenient URL generation and redirects.
|
|
*/
|
|
'name' => 'graphql',
|
|
|
|
/*
|
|
* Beware that middleware defined here runs before the GraphQL execution phase,
|
|
* make sure to return spec-compliant responses in case an error is thrown.
|
|
*/
|
|
'middleware' => [
|
|
\Nuwave\Lighthouse\Support\Http\Middleware\AcceptJson::class,
|
|
|
|
// Logs in a user if they are authenticated. In contrast to Laravel's 'auth'
|
|
// middleware, this delegates auth and permission checks to the field level.
|
|
\Nuwave\Lighthouse\Support\Http\Middleware\AttemptAuthentication::class,
|
|
|
|
// Logs every incoming GraphQL query.
|
|
// \Nuwave\Lighthouse\Support\Http\Middleware\LogGraphQLQueries::class,
|
|
],
|
|
|
|
/*
|
|
* The `prefix` and `domain` configuration options are optional.
|
|
*/
|
|
//'prefix' => '',
|
|
//'domain' => '',
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Authentication Guard
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| The guard to use for authenticating GraphQL requests, if needed.
|
|
| This setting is used whenever Lighthouse looks for an authenticated user, for example in directives
|
|
| such as `@guard` and when applying the `AttemptAuthentication` middleware.
|
|
|
|
|
*/
|
|
|
|
'guard' => 'api',
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Schema Location
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Path to your .graphql schema file.
|
|
| Additional schema files may be imported from within that file.
|
|
|
|
|
*/
|
|
|
|
'schema' => [
|
|
'register' => __DIR__ . '/../src/GraphQL/Schema/schema.graphql',
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Schema Cache
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| A large part of schema generation consists of parsing and AST manipulation.
|
|
| This operation is very expensive, so it is highly recommended to enable
|
|
| caching of the final schema to optimize performance of large schemas.
|
|
|
|
|
*/
|
|
|
|
'cache' => [
|
|
/*
|
|
* Setting to true enables schema caching.
|
|
*/
|
|
'enable' => env('LIGHTHOUSE_CACHE_ENABLE', 'local' !== env('APP_ENV')),
|
|
|
|
/*
|
|
* Allowed values:
|
|
* - 1: uses the store, key and ttl config values to store the schema as a string in the given cache store.
|
|
* - 2: uses the path config value to store the schema in a PHP file allowing OPcache to pick it up.
|
|
*/
|
|
'version' => env('LIGHTHOUSE_CACHE_VERSION', 1),
|
|
|
|
/*
|
|
* The name of the cache item for the schema cache.
|
|
*/
|
|
'version' => env('LIGHTHOUSE_CACHE_VERSION', 1),
|
|
|
|
/*
|
|
* Allows using a specific cache store, uses the app's default if set to null.
|
|
* Only relevant if version is set to 1.
|
|
*/
|
|
'store' => env('LIGHTHOUSE_CACHE_STORE', null),
|
|
|
|
/*
|
|
* The name of the cache item for the schema cache.
|
|
* Only relevant if version is set to 1.
|
|
*/
|
|
'key' => env('LIGHTHOUSE_CACHE_KEY', 'lighthouse-schema'),
|
|
|
|
/*
|
|
* Duration in seconds the schema should remain cached, null means forever.
|
|
* Only relevant if version is set to 1.
|
|
*/
|
|
'ttl' => env('LIGHTHOUSE_CACHE_TTL', null),
|
|
|
|
/*
|
|
* File path to store the lighthouse schema.
|
|
* Only relevant if version is set to 2.
|
|
*/
|
|
'path' => env('LIGHTHOUSE_CACHE_PATH', base_path('bootstrap/cache/lighthouse-schema.php')),
|
|
|
|
/*
|
|
* Should the `@cache` directive use a tagged cache?
|
|
*/
|
|
'tags' => false,
|
|
],
|
|
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Query Cache
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Caches the result of parsing incoming query strings to boost performance on subsequent requests.
|
|
|
|
|
*/
|
|
|
|
'query_cache' => [
|
|
/*
|
|
* Setting to true enables query caching.
|
|
*/
|
|
'enable' => env('LIGHTHOUSE_QUERY_CACHE_ENABLE', true),
|
|
|
|
/*
|
|
* Allows using a specific cache store, uses the app's default if set to null.
|
|
*/
|
|
'store' => env('LIGHTHOUSE_QUERY_CACHE_STORE', null),
|
|
|
|
/*
|
|
* Duration in seconds the query should remain cached, null means forever.
|
|
*/
|
|
'ttl' => env(
|
|
'LIGHTHOUSE_QUERY_CACHE_TTL',
|
|
\Nuwave\Lighthouse\Support\AppVersion::atLeast(5.8)
|
|
? null
|
|
: 365 * 24 * 60 // For Laravel < 5.8 the exact value must be specified and it is counted in minutes
|
|
),
|
|
],
|
|
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Namespaces
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| These are the default namespaces where Lighthouse looks for classes to
|
|
| extend functionality of the schema. You may pass in either a string
|
|
| or an array, they are tried in order and the first match is used.
|
|
|
|
|
*/
|
|
|
|
'namespaces' => [
|
|
'models' => ['App', 'Marvel\\Database\\Models'],
|
|
'queries' => ['App\\GraphQL\\Queries', 'Marvel\\GraphQL\\Queries'],
|
|
'mutations' => ['App\\GraphQL\\Mutations', 'Marvel\\GraphQL\\Mutation'],
|
|
'subscriptions' => 'App\\GraphQL\\Subscriptions',
|
|
'interfaces' => 'App\\GraphQL\\Interfaces',
|
|
'unions' => 'App\\GraphQL\\Unions',
|
|
'scalars' => 'App\\GraphQL\\Scalars',
|
|
'directives' => ['App\\GraphQL\\Directives', 'Marvel\\GraphQL\\Directives'],
|
|
'validators' => ['App\\GraphQL\\Validators'],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Security
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Control how Lighthouse handles security related query validation.
|
|
| Read more at https://webonyx.github.io/graphql-php/security/
|
|
|
|
|
*/
|
|
|
|
'security' => [
|
|
'max_query_complexity' => \GraphQL\Validator\Rules\QueryComplexity::DISABLED,
|
|
'max_query_depth' => \GraphQL\Validator\Rules\QueryDepth::DISABLED,
|
|
'disable_introspection' => \GraphQL\Validator\Rules\DisableIntrospection::DISABLED,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Pagination
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Set defaults for the pagination features within Lighthouse, such as
|
|
| the @paginate directive, or paginated relation directives.
|
|
|
|
|
*/
|
|
|
|
'pagination' => [
|
|
/*
|
|
* Allow clients to query paginated lists without specifying the amount of items.
|
|
* Setting this to `null` means clients have to explicitly ask for the count.
|
|
*/
|
|
'default_count' => null,
|
|
|
|
/*
|
|
* Limit the maximum amount of items that clients can request from paginated lists.
|
|
* Setting this to `null` means the count is unrestricted.
|
|
*/
|
|
'max_count' => null,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Debug
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Control the debug level as described in https://webonyx.github.io/graphql-php/error-handling/
|
|
| Debugging is only applied if the global Laravel debug config is set to true.
|
|
|
|
|
| When you set this value through an environment variable, use the following reference table:
|
|
| 0 => INCLUDE_NONE
|
|
| 1 => INCLUDE_DEBUG_MESSAGE
|
|
| 2 => INCLUDE_TRACE
|
|
| 3 => INCLUDE_TRACE | INCLUDE_DEBUG_MESSAGE
|
|
| 4 => RETHROW_INTERNAL_EXCEPTIONS
|
|
| 5 => RETHROW_INTERNAL_EXCEPTIONS | INCLUDE_DEBUG_MESSAGE
|
|
| 6 => RETHROW_INTERNAL_EXCEPTIONS | INCLUDE_TRACE
|
|
| 7 => RETHROW_INTERNAL_EXCEPTIONS | INCLUDE_TRACE | INCLUDE_DEBUG_MESSAGE
|
|
| 8 => RETHROW_UNSAFE_EXCEPTIONS
|
|
| 9 => RETHROW_UNSAFE_EXCEPTIONS | INCLUDE_DEBUG_MESSAGE
|
|
| 10 => RETHROW_UNSAFE_EXCEPTIONS | INCLUDE_TRACE
|
|
| 11 => RETHROW_UNSAFE_EXCEPTIONS | INCLUDE_TRACE | INCLUDE_DEBUG_MESSAGE
|
|
| 12 => RETHROW_UNSAFE_EXCEPTIONS | RETHROW_INTERNAL_EXCEPTIONS
|
|
| 13 => RETHROW_UNSAFE_EXCEPTIONS | RETHROW_INTERNAL_EXCEPTIONS | INCLUDE_DEBUG_MESSAGE
|
|
| 14 => RETHROW_UNSAFE_EXCEPTIONS | RETHROW_INTERNAL_EXCEPTIONS | INCLUDE_TRACE
|
|
| 15 => RETHROW_UNSAFE_EXCEPTIONS | RETHROW_INTERNAL_EXCEPTIONS | INCLUDE_TRACE | INCLUDE_DEBUG_MESSAGE
|
|
|
|
|
*/
|
|
|
|
'debug' => env('LIGHTHOUSE_DEBUG', \GraphQL\Error\DebugFlag::INCLUDE_DEBUG_MESSAGE | \GraphQL\Error\DebugFlag::INCLUDE_TRACE),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Error Handlers
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Register error handlers that receive the Errors that occur during execution
|
|
| and handle them. You may use this to log, filter or format the errors.
|
|
| The classes must implement \Nuwave\Lighthouse\Execution\ErrorHandler
|
|
|
|
|
*/
|
|
|
|
'error_handlers' => [
|
|
\Nuwave\Lighthouse\Execution\AuthenticationErrorHandler::class,
|
|
\Nuwave\Lighthouse\Execution\AuthorizationErrorHandler::class,
|
|
\Nuwave\Lighthouse\Execution\ValidationErrorHandler::class,
|
|
\Nuwave\Lighthouse\Execution\ExtensionErrorHandler::class,
|
|
\Nuwave\Lighthouse\Execution\ReportingErrorHandler::class,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Field Middleware
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Register global field middleware directives that wrap around every field.
|
|
| Execution happens in the defined order, before other field middleware.
|
|
| The classes must implement \Nuwave\Lighthouse\Support\Contracts\FieldMiddleware
|
|
|
|
|
*/
|
|
|
|
'field_middleware' => [
|
|
\Nuwave\Lighthouse\Schema\Directives\TrimDirective::class,
|
|
\Nuwave\Lighthouse\Schema\Directives\SanitizeDirective::class,
|
|
\Nuwave\Lighthouse\Validation\ValidateDirective::class,
|
|
\Nuwave\Lighthouse\Schema\Directives\TransformArgsDirective::class,
|
|
\Nuwave\Lighthouse\Schema\Directives\SpreadDirective::class,
|
|
\Nuwave\Lighthouse\Schema\Directives\RenameArgsDirective::class,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Global ID
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| The name that is used for the global id field on the Node interface.
|
|
| When creating a Relay compliant server, this must be named "id".
|
|
|
|
|
*/
|
|
|
|
'global_id_field' => 'id',
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Batched Queries
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| GraphQL query batching means sending multiple queries to the server in one request,
|
|
| You may set this flag to either process or deny batched queries.
|
|
|
|
|
*/
|
|
|
|
// 'batched_queries' => true,
|
|
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Persisted Queries
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Lighthouse supports Automatic Persisted Queries (APQ), compatible with the
|
|
| [Apollo implementation](https://www.apollographql.com/docs/apollo-server/performance/apq).
|
|
| You may set this flag to either process or deny these queries.
|
|
|
|
|
*/
|
|
|
|
'persisted_queries' => true,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Persisted Queries
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Lighthouse supports Automatic Persisted Queries (APQ), compatible with the
|
|
| [Apollo implementation](https://www.apollographql.com/docs/apollo-server/performance/apq).
|
|
| You may set this flag to either process or deny these queries.
|
|
|
|
|
*/
|
|
|
|
'persisted_queries' => true,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Transactional Mutations
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, mutations such as @create or @update will be
|
|
| wrapped in a transaction to ensure atomicity.
|
|
|
|
|
*/
|
|
|
|
'transactional_mutations' => true,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Mass Assignment Protection
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, mutations will use forceFill() over fill() when populating
|
|
| a model with arguments in mutation directives. Since GraphQL constrains
|
|
| allowed inputs by design, mass assignment protection is not needed.
|
|
|
|
|
*/
|
|
|
|
'force_fill' => true,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Batchload Relations
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, relations marked with directives like @hasMany or @belongsTo
|
|
| will be optimized by combining the queries through the BatchLoader.
|
|
|
|
|
*/
|
|
|
|
'batchload_relations' => true,
|
|
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Shortcut Foreign Key Selection
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, Lighthouse will shortcut queries where the client selects only the
|
|
| foreign key pointing to a related model. Only works if the related model's primary
|
|
| key field is called exactly `id` for every type in your schema.
|
|
|
|
|
*/
|
|
|
|
'shortcut_foreign_key_selection' => false,
|
|
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Non-Null Pagination Results
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, the generated result type of paginated lists will be marked
|
|
| as non-nullable. This is generally more convenient for clients, but will
|
|
| cause validation errors to bubble further up in the result.
|
|
|
|
|
| This setting will be removed and always behave as if it were true in v6.
|
|
|
|
|
*/
|
|
|
|
'non_null_pagination_results' => false,
|
|
|
|
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Unbox BenSampo\Enum\Enum instances
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, Lighthouse will extract the internal $value from instances of
|
|
| BenSampo\Enum\Enum before passing it to ArgBuilderDirective::handleBuilder().
|
|
|
|
|
| This setting will be removed and always behave as if it were false in v6.
|
|
|
|
|
| It is only here to preserve compatibility, e.g. when expecting the internal
|
|
| value to be passed to a scope when using @scope, but not needed due to Laravel
|
|
| calling the Enum's __toString() method automagically when used in a query.
|
|
|
|
|
*/
|
|
|
|
'unbox_bensampo_enum_enum_instances' => true,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Shortcut Foreign Key Selection
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, Lighthouse will shortcut queries where the client selects only the
|
|
| foreign key pointing to a related model. Only works if the related model's primary
|
|
| key field is called exactly `id` for every type in your schema.
|
|
|
|
|
*/
|
|
|
|
'shortcut_foreign_key_selection' => false,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Non-Null Pagination Results
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, the generated result type of paginated lists will be marked
|
|
| as non-nullable. This is generally more convenient for clients, but will
|
|
| cause validation errors to bubble further up in the result.
|
|
|
|
|
| This setting will be removed and always behave as if it were true in v6.
|
|
|
|
|
*/
|
|
|
|
'non_null_pagination_results' => false,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Unbox BenSampo\Enum\Enum instances
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If set to true, Lighthouse will extract the internal $value from instances of
|
|
| BenSampo\Enum\Enum before passing it to ArgBuilderDirective::handleBuilder().
|
|
|
|
|
| This setting will be removed and always behave as if it were false in v6.
|
|
|
|
|
| It is only here to preserve compatibility, e.g. when expecting the internal
|
|
| value to be passed to a scope when using @scope, but not needed due to Laravel
|
|
| calling the Enum's __toString() method automagically when used in a query.
|
|
|
|
|
*/
|
|
|
|
'unbox_bensampo_enum_enum_instances' => true,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| GraphQL Subscriptions
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you can define GraphQL subscription broadcaster and storage drivers
|
|
| as well their required configuration options.
|
|
|
|
|
*/
|
|
|
|
'subscriptions' => [
|
|
/*
|
|
* Determines if broadcasts should be queued by default.
|
|
*/
|
|
'queue_broadcasts' => env('LIGHTHOUSE_QUEUE_BROADCASTS', true),
|
|
|
|
/*
|
|
* Determines the queue to use for broadcasting queue jobs.
|
|
*/
|
|
'broadcasts_queue_name' => env('LIGHTHOUSE_BROADCASTS_QUEUE_NAME', null),
|
|
|
|
/*
|
|
* Default subscription storage.
|
|
*
|
|
* Any Laravel supported cache driver options are available here.
|
|
*/
|
|
'storage' => env('LIGHTHOUSE_SUBSCRIPTION_STORAGE', 'redis'),
|
|
|
|
/*
|
|
* Default subscription storage time to live in seconds.
|
|
*
|
|
* Indicates how long a subscription can be active before it's automatically removed from storage.
|
|
* Setting this to `null` means the subscriptions are stored forever. This may cause
|
|
* stale subscriptions to linger indefinitely in case cleanup fails for any reason.
|
|
*/
|
|
'storage_ttl' => env('LIGHTHOUSE_SUBSCRIPTION_STORAGE_TTL', null),
|
|
|
|
/*
|
|
* Default subscription broadcaster.
|
|
*/
|
|
'broadcaster' => env('LIGHTHOUSE_BROADCASTER', 'pusher'),
|
|
|
|
/*
|
|
* Subscription broadcasting drivers with config options.
|
|
*/
|
|
'broadcasters' => [
|
|
'log' => [
|
|
'driver' => 'log',
|
|
],
|
|
'pusher' => [
|
|
'driver' => 'pusher',
|
|
'routes' => \Nuwave\Lighthouse\Subscriptions\SubscriptionRouter::class . '@pusher',
|
|
'connection' => 'pusher',
|
|
],
|
|
'echo' => [
|
|
'driver' => 'echo',
|
|
'connection' => env('LIGHTHOUSE_SUBSCRIPTION_REDIS_CONNECTION', 'default'),
|
|
'routes' => \Nuwave\Lighthouse\Subscriptions\SubscriptionRouter::class . '@echoRoutes',
|
|
],
|
|
],
|
|
|
|
/*
|
|
* Controls the format of the extensions response.
|
|
* Allowed values: 1, 2
|
|
*/
|
|
'version' => env('LIGHTHOUSE_SUBSCRIPTION_VERSION', 1),
|
|
|
|
/*
|
|
* Should the subscriptions extension be excluded when the response has no subscription channel?
|
|
* This optimizes performance by sending less data, but clients must anticipate this appropriately.
|
|
* Will default to true in v6 and be removed in v7.
|
|
*/
|
|
'exclude_empty' => env('LIGHTHOUSE_SUBSCRIPTION_EXCLUDE_EMPTY', false),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Defer
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Configuration for the experimental @defer directive support.
|
|
|
|
|
*/
|
|
|
|
'defer' => [
|
|
/*
|
|
* Maximum number of nested fields that can be deferred in one query.
|
|
* Once reached, remaining fields will be resolved synchronously.
|
|
* 0 means unlimited.
|
|
*/
|
|
'max_nested_fields' => 0,
|
|
|
|
/*
|
|
* Maximum execution time for deferred queries in milliseconds.
|
|
* Once reached, remaining fields will be resolved synchronously.
|
|
* 0 means unlimited.
|
|
*/
|
|
'max_execution_ms' => 0,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Apollo Federation
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Lighthouse can act as a federated service: https://www.apollographql.com/docs/federation/federation-spec.
|
|
|
|
|
*/
|
|
|
|
'federation' => [
|
|
/*
|
|
* Location of resolver classes when resolving the `_entities` field.
|
|
*/
|
|
'entities_resolver_namespace' => 'App\\GraphQL\\Entities',
|
|
],
|
|
|
|
];
|