console/packages/libraries/apollo/CHANGELOG.md
TheGuildBot 36dd9d3bff
Upcoming Release Changes (#7470)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-12 11:52:17 +01:00

25 KiB

@graphql-hive/apollo

0.47.0

Minor Changes

  • #7462 60133a4 Thanks @adambenhassen! - Add Layer 2 (L2) cache support for persisted documents.

    This feature adds a second layer of caching between the in-memory cache (L1) and the CDN for persisted documents. This is particularly useful for:

    • Serverless environments: Where in-memory cache is lost between invocations
    • Multi-instance deployments: To share cached documents across server instances
    • Reducing CDN calls: By caching documents in Redis or similar external caches

    The lookup flow is: L1 (memory) -> L2 (Redis/external) -> CDN

    Example with GraphQL Yoga:

    import { createYoga } from 'graphql-yoga'
    import { createClient } from 'redis'
    import { useHive } from '@graphql-hive/yoga'
    
    const redis = createClient({ url: 'redis://localhost:6379' })
    await redis.connect()
    
    const yoga = createYoga({
      plugins: [
        useHive({
          experimental__persistedDocuments: {
            cdn: {
              endpoint: 'https://cdn.graphql-hive.com/artifacts/v1/<target_id>',
              accessToken: '<cdn_access_token>'
            },
            layer2Cache: {
              cache: {
                get: key => redis.get(`hive:pd:${key}`),
                set: (key, value, opts) =>
                  redis.set(`hive:pd:${key}`, value, opts?.ttl ? { EX: opts.ttl } : {})
              },
              ttlSeconds: 3600, // 1 hour for found documents
              notFoundTtlSeconds: 60 // 1 minute for not-found (negative caching)
            }
          }
        })
      ]
    })
    

    Features:

    • Configurable TTL for found documents (ttlSeconds)
    • Configurable TTL for negative caching (notFoundTtlSeconds)
    • Graceful fallback to CDN if L2 cache fails
    • Support for waitUntil in serverless environments
    • Apollo Server integration auto-uses context cache if available

Patch Changes

  • Updated dependencies [60133a4]:
    • @graphql-hive/core@0.20.0

0.46.0

Minor Changes

Patch Changes

0.45.0

Minor Changes

  • #7346 f266368 Thanks @n1ru4l! - Add support for providing a logger object via HivePluginOptions.

    It is possible to provide the following options:

    • 'trace'
    • 'debug'
    • 'info' default
    • 'warn'
    • 'error'
    import { createHive } from '@graphql-hive/core'
    
    const client = createHive({
      logger: 'info'
    })
    

    In addition to that, it is also possible to provide a Hive Logger instance, that allows more control over how you want to log and forward logs.

    import { createHive } from '@graphql-hive/core'
    import { Logger } from '@graphql-hive/logger'
    
    const client = createHive({
      logger: new Logger()
    })
    

    Head to our Hive Logger documentation to learn more.


    The HivePluginOptions.debug option is now deprecated. Instead, please use the logger option to control logging levels.

     import { createHive } from '@graphql-hive/core'
    
     const client = createHive({
    -  debug: process.env.DEBUG === "1",
    +  logger: process.env.DEBUG === "1" ? "debug" : "info",
     })
    

    Note: If the logger property is provided, the debug option is ignored.


    The HivePluginOptions.agent.logger option is now deprecated. Instead, please provide HivePluginOptions.logger.

     import { createHive } from '@graphql-hive/core'
    
     const logger = new Logger()
    
     const client = createHive({
       agent: {
    -    logger,
       },
    +  logger,
     })
    

    Note: If both options are provided, the agent option is ignored.

  • #7346 f266368 Thanks @n1ru4l! - Persisted Documents Improvements

    Persisted documents now support specifying a mirror endpoint that will be used in case the main CDN is unreachable. Provide an array of endpoints to the client configuration.

    import { createClient } from '@graphql-hive/core'
    
    const client = createClient({
      experimental__persistedDocuments: {
        cdn: {
          endpoint: [
            'https://cdn.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688',
            'https://cdn-mirror.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688'
          ],
          accessToken: ''
        }
      }
    })
    

    In addition to that, the underlying logic for looking up documents now uses a circuit breaker. If a single endpoint is unreachable, further lookups on that endpoint are skipped.

    The behaviour of the circuit breaker can be customized via the circuitBreaker configuration.

    import { createClient } from '@graphql-hive/core'
    
    const client = createClient({
      experimental__persistedDocuments: {
        cdn: {
          endpoint: [
            'https://cdn.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688',
            'https://cdn-mirror.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688'
          ],
          accessToken: ''
        },
        circuitBreaker: {
          // open circuit if 50 percent of request result in an error
          errorThresholdPercentage: 50,
          // start monitoring the circuit after 10 requests
          volumeThreshold: 10,
          // time before the backend is tried again after the circuit is open
          resetTimeout: 30_000
        }
      }
    })
    
  • #7346 f266368 Thanks @n1ru4l! - Supergraph Manager Improvements

    Persisted documents now support specifying a mirror endpoint that will be used in case the main CDN is unreachable. Provide an array of endpoints to the supergraph manager configuration.

    import { createSupergraphManager } from '@graphql-hive/apollo'
    
    const supergraphManager = createSupergraphManager({
      endpoint: [
        'https://cdn.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688',
        'https://cdn-mirror.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688'
      ],
      key: ''
    })
    

    In addition to that, the underlying logic for looking up documents now uses a circuit breaker. If a single endpoint is unreachable, further lookups on that endpoint are skipped.

    import { createSupergraphManager } from '@graphql-hive/apollo'
    
    const supergraphManager = createSupergraphManager({
      endpoint: [
        'https://cdn.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688',
        'https://cdn-mirror.graphql-hive.com/artifacts/v1/9fb37bc4-e520-4019-843a-0c8698c25688'
      ],
      key: '',
      circuitBreaker: {
        // open circuit if 50 percent of request result in an error
        errorThresholdPercentage: 50,
        // start monitoring the circuit after 10 requests
        volumeThreshold: 10,
        // time before the backend is tried again after the circuit is open
        resetTimeout: 30_000
      }
    })
    

Patch Changes

0.42.1

Patch Changes

  • Updated dependencies [64c8368]:
    • @graphql-hive/core@0.15.1

0.42.0

Minor Changes

  • #7280 2cc443c Thanks @n1ru4l! - Support circuit breaking for usage reporting.

    Circuit breaking is a fault-tolerance pattern that prevents a system from repeatedly calling a failing service. When errors or timeouts exceed a set threshold, the circuit “opens,” blocking further requests until the service recovers.

    This ensures that during a network issue or outage, the service using the Hive SDK remains healthy and is not overwhelmed by failed usage reports or repeated retries.

    import { createClient } from '@graphql-hive/core'
    
    const client = createClient({
      agent: {
        circuitBreaker: {
          /**
           * Count of requests before starting evaluating.
           * Default: 5
           */
          volumeThreshold: 5,
          /**
           * Percentage of requests failing before the circuit breaker kicks in.
           * Default: 50
           */
          errorThresholdPercentage: 1,
          /**
           * After what time the circuit breaker is attempting to retry sending requests in milliseconds
           * Default: 30_000
           */
          resetTimeout: 10_000
        }
      }
    })
    

Patch Changes

  • Updated dependencies [2cc443c]:
    • @graphql-hive/core@0.15.0

0.41.0

Minor Changes

  • #7264 582bc0e Thanks @n1ru4l! - Introduce debug log level. HTTP retry log pollute the error log. The retries are now logged to the debug level. In order to see debug logs set the debug option to true.

    const hive = createHive({
      debug: true
    })
    

    If you are using a custom logger, make sure to provide a debug logging method implementation.

    const hive = createHive({
      debug: true,
      agent: {
        logger: {
          info() {},
          error() {},
          debug() {}
        }
      }
    })
    

Patch Changes

  • Updated dependencies [582bc0e]:
    • @graphql-hive/core@0.14.0

0.40.2

Patch Changes

  • #7253 43920cd Thanks @ardatan! - Send correct version of the client packages, previously they were sending the version of @graphql-hive/core package.

  • Updated dependencies [43920cd, 43920cd]:

    • @graphql-hive/core@0.13.2

0.40.1

Patch Changes

  • #7248 d8f6e25 Thanks @n1ru4l! - Support project and personal access tokens (hvp1/ and hvu1/).

  • Updated dependencies [d8f6e25]:

    • @graphql-hive/core@0.13.1

0.40.0

Minor Changes

0.39.2

Patch Changes

  • Updated dependencies [8d56b98]:
    • @graphql-hive/core@0.13.0

0.39.1

Patch Changes

  • Updated dependencies [bbd5643]:
    • @graphql-hive/core@0.12.0

0.39.0

Minor Changes

  • #6637 5130fc1 Thanks @n1ru4l! - Add error logging for invalid combinations of the target and token configuration.

    • Please make sure to provide the target option for usage reporting when using a token that starts with hvo1/.
    • Please make sure to not provide a target option for usage reporting when a token does not start with hvo1/

Patch Changes

  • Updated dependencies [5130fc1]:
    • @graphql-hive/core@0.11.0

0.38.1

Patch Changes

0.38.0

Minor Changes

  • #6574 494697e Thanks @n1ru4l! - Add support for providing a target for usage reporting with organization access tokens. This can either be a slug following the format $organizationSlug/$projectSlug/$targetSlug (e.g the-guild/graphql-hive/staging) or an UUID (e.g. a0f4c605-6541-4350-8cfe-b31f21a4bf80)

    import { useHive } from '@graphql-hive/apollo'
    
    const hivePlugin = useHive({
      enabled: true,
      token: 'ORGANIZATION_ACCESS_TOKEN',
      usage: {
        target: 'my-org/my-project/my-target'
      }
    })
    

Patch Changes

0.37.1

Patch Changes

  • Updated dependencies [ae2d16d]:
    • @graphql-hive/core@0.9.1

0.37.0

Minor Changes

  • #6488 f7d65fe Thanks @n1ru4l! - Include and log a x-request-id header for all requests sent to the Hive API. This helps users to share more context with Hive staff when encountering errors.

Patch Changes

  • Updated dependencies [f7d65fe]:
    • @graphql-hive/core@0.9.0

0.36.5

Patch Changes

0.36.4

Patch Changes

  • #6118 039c66b Thanks @ardatan! - Remove internal _testing_ option to replace the underlying fetch implementation, and add fetch option to do the same as part of the public API.
  • Updated dependencies [039c66b]:
    • @graphql-hive/core@0.8.3

0.36.3

Patch Changes

0.36.2

Patch Changes

0.36.1

Patch Changes

0.36.0

Minor Changes

  • #5401 3ffdb6e Thanks @n1ru4l! - Deduplicate persisted document lookups from the registry for reducing the amount of concurrent HTTP requests.

Patch Changes

  • Updated dependencies [3ffdb6e]:
    • @graphql-hive/core@0.8.0

0.35.1

Patch Changes

0.35.0

Minor Changes

Patch Changes

  • #5361 3f03e7b Thanks @kamilkisiela! - Fixed issue where usage reports were sent only on app disposal or max batch size, now also sent at set intervals.
  • Updated dependencies [3f03e7b, 0a3b24d]:
    • @graphql-hive/core@0.7.0

0.34.1

Patch Changes

  • #5304 f2fef08 Thanks @kamilkisiela! - Fixed a logging issue where both initiated requests and successful responses were being recorded. This was causing the logs to be filled with unnecessary information and affected hive artifact:fetch --artifact command.

  • Updated dependencies [f2fef08]:

    • @graphql-hive/core@0.6.1

0.34.0

Minor Changes

  • #5234 e6dc5c9 Thanks @n1ru4l! - Better HTTP info, error and debug logging.

    For the supergraph manager, pass a console instance as the logger property.

    import { createSupergraphManager } from '@graphql-hive/apollo'
    
    const manager = createSupergraphManager({
      ...otherOptions,
      logger: console
    })
    

    For the supergraph SDL fetcher pass a console instance as the logger property.

    import { createSupergraphSDLFetcher } from '@graphql-hive/apollo'
    
    const manager = createSupergraphSDLFetcher({
      ...otherOptions,
      logger: console
    })
    
  • #5234 e6dc5c9 Thanks @n1ru4l! - Improved logging output of HTTP requests and retires.

Patch Changes

  • Updated dependencies [e6dc5c9]:
    • @graphql-hive/core@0.6.0

0.33.4

Patch Changes

  • Updated dependencies [f1e43c6]:
    • @graphql-hive/core@0.5.0

0.33.3

Patch Changes

0.33.2

Patch Changes

  • #4958 6aa9cfb Thanks @n1ru4l! - Prevent GraphQL document with selection set not satisfiable by the server to cause unhandled rejections.

0.33.1

Patch Changes

  • #4932 cbc8364 Thanks @n1ru4l! - Prevent failing usage reporting when returning an object with additional properties aside from name and version from the client info object/factory function.
  • Updated dependencies [cbc8364]:
    • @graphql-hive/core@0.3.1

0.33.0

Minor Changes

  • #4573 06d465e Thanks @kamilkisiela! - Break @graphql-hive/client into library-specific packages:

    • @graphql-hive/core - Core functionality
    • @graphql-hive/apollo - Apollo Client integration
    • @graphql-hive/yoga - Yoga Server integration
    • @graphql-hive/envelop - Envelop integration

    Migration steps are available in the README of each package.

  • #4494 c5eeac5 Thanks @kamilkisiela! - 🚨 BREAKING CHANGE 🚨 Requires now Node v16+

  • #4573 06d465e Thanks @kamilkisiela! - 🚨 BREAKING CHANGE 🚨 hiveApollo is now useHive

    Migration

    Migration steps are available in the README.

    - import { hiveApollo } from '@graphql-hive/client';
    + import { useHive } from '@graphql-hive/apollo';
    

Patch Changes