Skip to content

Conversation

@lennyburdette
Copy link
Contributor

No description provided.

Meschreiber and others added 10 commits April 21, 2025 14:38
Connectors directives are not part of the Federation spec so this
changelog entry is misleading.
It seems a bit counterintuitive that the `Reviews` subgraph contributes
to the `inStock` field of the `Product` type. I'd like to update the
code example so that it contributes to the `rating` field instead. This
change is also consistent with the code example in the overview section
of [the
document](http://apollographql.com/docs/graphos/schema-design/federated-schemas/entities/intro).
Updates gateway 0.x EOL
Co-authored-by: Sachin D. Shinde <sachin@apollographql.com>
Co-authored-by: Taylor Ninesling <taylor.ninesling@apollographql.com>
Co-authored-by: Dylan Anthony <dylan@apollographql.com>
Co-authored-by: Ben Newman <ben@apollographql.com>
Co-authored-by: Taylor Jones <45475656+tayrrible@users.noreply.github.com>
Co-authored-by: Taylor Jones <taylor@apollographql.com>
Co-authored-by: Nicholas Cioli <nicholas.cioli@apollographql.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Maria Elisabeth Schreiber <maria.schreiber@apollographql.com>
Co-authored-by: Chris Lenfest <clenfest@apollographql.com>
Co-authored-by: Edward Huang <edward.huang@apollographql.com>
Co-authored-by: Matt Peake <7741049+peakematt@users.noreply.github.com>
Co-authored-by: kamila-brylewska-zendesk <kamila.brylewska@zendesk.com>
Co-authored-by: Andrew McGivery <andrew.mcgivery@apollographql.com>
Co-authored-by: Duckki Oe <duckki.oe@apollographql.com>
Co-authored-by: Dale Seo <5466341+DaleSeo@users.noreply.github.com>
<!--
First, 🌠 thank you 🌠 for taking the time to consider a contribution to
Apollo!

Here are some important details to follow:

* ⏰ Your time is important
To save your precious time, if the contribution you are making will
take more than an hour, please make sure it has been discussed in an
        issue first. This is especially true for feature requests!

* 💡 Features
Feature requests can be created and discussed within a GitHub Issue.
Be sure to search for existing feature requests (and related issues!)
prior to opening a new request. If an existing issue covers the need,
please upvote that issue by using the 👍 emote, rather than opening a
        new issue.

* 🕷 Bug fixes
These can be created and discussed in this repository. When fixing a
bug,
please _try_ to add a test which verifies the fix. If you cannot, you
should
still submit the PR but we may still ask you (and help you!) to create a
test.

* Federation versions
Please make sure you're targeting the federation version you're opening
the PR for. Federation 2 (alpha) is currently located on the `main`
branch and prior versions of Federation live on the `version-0.x`
branch.

* 📖 Contribution guidelines
Follow
https://github.com/apollographql/federation/blob/HEAD/CONTRIBUTING.md
when submitting a pull request. Make sure existing tests still pass, and
add
        tests for all new behavior.

* ✏️ Explain your pull request
Describe the big picture of your changes here to communicate to what
        your pull request is meant to accomplish. Provide 🔗 links 🔗 to
        associated issues!

We hope you will find this to be a positive experience! Open source
contribution can be intimidating and we hope to alleviate that pain as
much
as possible. Without following these guidelines, you may be missing
context
that can help you succeed with your contribution, which is why we
encourage
discussion first. Ultimately, there is no guarantee that we will be able
to
merge your pull-request, but by following these guidelines we can try to
avoid disappointment.

-->
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @apollo/composition@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

### Patch Changes

- Allow merging external types when using arrays as default arguments.
([#3262](#3262))

- Updated dependencies
\[[`1462c91879d41884c0a7e60551d8dd0d67c832d3`](1462c91),
[`9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d`](9614b26)]:
    -   @apollo/query-graphs@2.11.0
    -   @apollo/federation-internals@2.11.0

## @apollo/gateway@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

### Patch Changes

- Corrects a set of denial-of-service (DOS) vulnerabilities that made it
possible for an attacker to render gateway inoperable with certain
simple query patterns due to uncontrolled resource consumption. All
prior-released versions and configurations are vulnerable.
([#3238](#3238))

See the associated GitHub Advisories
[GHSA-q2f9-x4p4-7xmh](GHSA-q2f9-x4p4-7xmh)
and
[GHSA-p2q6-pwh5-m6jr](GHSA-p2q6-pwh5-m6jr)
for more information.

- Updated dependencies
\[[`1462c91879d41884c0a7e60551d8dd0d67c832d3`](1462c91),
[`9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d`](9614b26),
[`9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d`](9614b26)]:
    -   @apollo/query-planner@2.11.0
    -   @apollo/federation-internals@2.11.0
    -   @apollo/composition@2.11.0

## @apollo/federation-internals@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

### Patch Changes

- Corrects a set of denial-of-service (DOS) vulnerabilities that made it
possible for an attacker to render gateway inoperable with certain
simple query patterns due to uncontrolled resource consumption. All
prior-released versions and configurations are vulnerable.
([#3238](#3238))

See the associated GitHub Advisories
[GHSA-q2f9-x4p4-7xmh](GHSA-q2f9-x4p4-7xmh)
and
[GHSA-p2q6-pwh5-m6jr](GHSA-p2q6-pwh5-m6jr)
for more information.

## @apollo/query-graphs@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

### Patch Changes

- Corrects a set of denial-of-service (DOS) vulnerabilities that made it
possible for an attacker to render gateway inoperable with certain
simple query patterns due to uncontrolled resource consumption. All
prior-released versions and configurations are vulnerable.
([#3238](#3238))

See the associated GitHub Advisories
[GHSA-q2f9-x4p4-7xmh](GHSA-q2f9-x4p4-7xmh)
and
[GHSA-p2q6-pwh5-m6jr](GHSA-p2q6-pwh5-m6jr)
for more information.

- Updated dependencies
\[[`1462c91879d41884c0a7e60551d8dd0d67c832d3`](1462c91),
[`9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d`](9614b26)]:
    -   @apollo/federation-internals@2.11.0

## @apollo/query-planner@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

### Patch Changes

- Corrects a set of denial-of-service (DOS) vulnerabilities that made it
possible for an attacker to render gateway inoperable with certain
simple query patterns due to uncontrolled resource consumption. All
prior-released versions and configurations are vulnerable.
([#3238](#3238))

See the associated GitHub Advisories
[GHSA-q2f9-x4p4-7xmh](GHSA-q2f9-x4p4-7xmh)
and
[GHSA-p2q6-pwh5-m6jr](GHSA-p2q6-pwh5-m6jr)
for more information.

- Updated dependencies
\[[`1462c91879d41884c0a7e60551d8dd0d67c832d3`](1462c91),
[`9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d`](9614b26)]:
    -   @apollo/query-graphs@2.11.0
    -   @apollo/federation-internals@2.11.0

## @apollo/subgraph@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

### Patch Changes

- Updated dependencies
\[[`1462c91879d41884c0a7e60551d8dd0d67c832d3`](1462c91),
[`9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d`](9614b26)]:
    -   @apollo/federation-internals@2.11.0

## apollo-federation-integration-testsuite@2.11.0

### Minor Changes

- Adds connect spec v0.2, available for use with Apollo Router 2.3.0 or
greater.
([#3262](#3262))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…fos in the stack gets above a configured value. (#3254)
Uses the new `MinVersionBadge` component and makes syntax consistent.

---------

Co-authored-by: Liz Hennessy <95302380+lizhennessy@users.noreply.github.com>
Fix link to migration breaking changes for Fed 1

---------

Co-authored-by: Maria Elisabeth Schreiber <maria.schreiber@apollographql.com>
@lennyburdette lennyburdette requested review from a team as code owners June 12, 2025 13:43
@changeset-bot
Copy link

changeset-bot bot commented Jun 12, 2025

🦋 Changeset detected

Latest commit: b0bfc2b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 7 packages
Name Type
@apollo/composition Patch
@apollo/federation-internals Patch
@apollo/gateway Patch
@apollo/query-planner Patch
@apollo/query-graphs Patch
@apollo/subgraph Patch
apollo-federation-integration-testsuite Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@codesandbox-ci
Copy link

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

@lennyburdette lennyburdette merged commit b734ea0 into next Jun 12, 2025
15 checks passed
@lennyburdette lennyburdette deleted the lb/merge-main branch June 12, 2025 15:33
lennyburdette pushed a commit that referenced this pull request Jun 18, 2025
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to next, this PR will
be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`next` is currently in **pre mode** so this branch has prereleases
rather than normal releases. If you want to exit prereleases, run
`changeset pre exit` on `next`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## @apollo/composition@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

### Patch Changes

- Adding new CompositionOption `maxValidationSubgraphPaths`. This value
represents the maximum number of SubgraphPathInfo objects that may exist
in a ValidationTraversal when checking for satisfiability. Setting this
value can help composition error before running out of memory. Default
is 1,000,000.
([#3275](#3275))

- Allow merging external types when using arrays as default arguments.
([#3096](#3096))

- Updated dependencies
\[[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0)]:
    -   @apollo/query-graphs@2.12.0-preview.0
    -   @apollo/federation-internals@2.12.0-preview.0

## @apollo/gateway@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

### Patch Changes

- Updated dependencies
\[[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0),
[`0dbc7cc72ffacf324231e9ccb2de4189f6bf3289`](0dbc7cc)]:
    -   @apollo/query-planner@2.12.0-preview.0
    -   @apollo/composition@2.12.0-preview.0
    -   @apollo/federation-internals@2.12.0-preview.0

## @apollo/federation-internals@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

### Patch Changes

- Adding new CompositionOption `maxValidationSubgraphPaths`. This value
represents the maximum number of SubgraphPathInfo objects that may exist
in a ValidationTraversal when checking for satisfiability. Setting this
value can help composition error before running out of memory. Default
is 1,000,000.
([#3275](#3275))

## @apollo/query-graphs@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

### Patch Changes

- Updated dependencies
\[[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0)]:
    -   @apollo/federation-internals@2.12.0-preview.0

## @apollo/query-planner@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

### Patch Changes

- Updated dependencies
\[[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0)]:
    -   @apollo/query-graphs@2.12.0-preview.0
    -   @apollo/federation-internals@2.12.0-preview.0

## @apollo/subgraph@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

### Patch Changes

- Updated dependencies
\[[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0)]:
    -   @apollo/federation-internals@2.12.0-preview.0

## apollo-federation-integration-testsuite@2.12.0-preview.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot mentioned this pull request Nov 4, 2025
dariuszkuc added a commit that referenced this pull request Nov 4, 2025
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to next, this PR will
be updated.


# Releases
## @apollo/composition@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

- Added isSuccess argument to @connect and @source
([#3294](#3294))

- Fixes a bug where composition may not generate a satisfiability error
for an unsatisfiable `@shareable` mutation field.
([#3305](#3305))
([#3305](#3305))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

- Automatically propagate authorization requirements from implementing
type to interface in the supergraph.
([#3321](#3321))

Authorization requirements now automatically propagate from implementing
types to interfaces during composition. Direct auth specifications on
interfaces are no longer allowed. Interface access requires satisfying
ALL implementing types' requirements (`AND` rule), with these
requirements included in the supergraph for backward compatibility with
older routers.

- Fix transitive auth requirements on `@requires` and `@fromcontext`
([#3321](#3321))

Adds new `postMergeValidation` check to ensure that all fields that
depends on data from other parts of the supergraph through `@requires`
and/or `@fromContext` directives explicitly specify matching
`@authenticated`, `@requiresScopes` and/or `@policy` auth requirements,
e.g.

    ```graphql
    type T @key(fields: "id") {
      id: ID!
      extra: String @external
# we need explicit `@authenticated` as it is needed to access extra
      requiresExtra: String @requires(fields: "extra") @authenticated
    }

    type T @key(fields: "id") {
      id: ID!
      extra: String @authenticated
    }
    ```

- Preparing new preview release 2.12.0-preview.3 (patch).
([#3308](#3308))

- Adding new CompositionOption `maxValidationSubgraphPaths`. This value
represents the maximum number of SubgraphPathInfo objects that may exist
in a ValidationTraversal when checking for satisfiability. Setting this
value can help composition error before running out of memory. Default
is 1,000,000.
([#3275](#3275))

- Restrict usage of auth directives on interfaces
([#3321](#3321))

Restricts usage of `@authenticated`, `@policy` and `@requiresScopes`
from being applied on interfaces, interface objects and their fields.

GraphQL spec currently does not define any interface inheritance rules
and developers have to explicitly redefine all interface fields on their
implementations. At runtime, GraphQL servers cannot return abstract
types and always return concrete output types. Due to the above,
applying auth directives on the interfaces may lead to unexpected
runtime behavior as they won't have any effect at runtime.

- Allow merging external types when using arrays as default arguments.
([#3096](#3096))

- Stricter merge rules for @requiresScopes and @Policy
([#3321](#3321))

Current merge policies for `@authenticated`, `@requiresScopes` and
`@policy` were inconsistent.

If a shared field uses the same authorization directives across
subgraphs, composition merges them using `OR` logic. However, if a
shared field uses different authorization directives across subgraphs
composition merges them using `AND` logic. This simplified schema
evolution, but weakened security requirements. Therefore, the behavior
has been changed to always apply `AND` logic to authorization directives
applied to the same field across subgraphs.

Since `@policy` and `@requiresScopes` values represent boolean
conditions in Disjunctive Normal Form, we can merge them conjunctively
to get the final auth requirements. For example:

    ```graphql
    # subgraph A
    type T @authenticated {
      # requires scopes (A1 AND A2) OR A3
      secret: String @requiresScopes(scopes: [["A1", "A2"], ["A3"]])
    }

    # subgraph B
    type T {
      # requires scopes B1 OR B2
      secret: String @requiresScopes(scopes: [["B1"], ["B2"]]
    }

    # composed supergraph
    type T @authenticated {
      secret: String @requiresScopes(
        scopes: [
          ["A1", "A2", "B1"],
          ["A1", "A2", "B2"],
          ["A3", "B1"],
          ["A3", "B2"]
        ])
    }
    ```

    This algorithm also deduplicates redundant requirements, e.g.

    ```graphql
    # subgraph A
    type T {
      # requires A1 AND A2 scopes to access
      secret: String @requiresScopes(scopes: [["A1", "A2"]])
    }

    # subgraph B
    type T {
      # requires only A1 scope to access
      secret: String @requiresScopes(scopes: [["A1"]])
    }

    # composed supergraph
    type T {
      # requires only A1 scope to access as A2 is redundant
      secret: String @requiresScopes(scopes: [["A1"]])
    }
    ```

- Fixed handling `@requires` dependency on fields returned by
`@interfaceObject`
([#3318](#3318))

Depending on the merge order of the types, we could fail composition if
a type that `@requires` data from an `@interfaceObject` is merged before
the interface. Updated merge logic to use explicit merge order of
scalars, input objects, interfaces, and finally objects.

- Updated dependencies
\[[`3e2b0a8569a9fe46726182887ed0b4bfc0b52468`](3e2b0a8),
[`bb4614d338ae03bac51a5fc2439590f172c4e54d`](bb4614d),
[`99f2da21de88f9ad9a32ee7ed64b2d4a92887b40`](99f2da2),
[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`3fd5157b309f1d3439b2d87c67b0601fb246d04c`](3fd5157),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0),
[`4bda3a498eba36e187dfd9ae673eca12d3f3502c`](4bda3a4),
[`e7e67579908d5cd2fa6fe558228dffe4808cd98d`](e7e6757),
[`f3ab499eaf62b1a1c0f08b838d2cbde5accb303a`](f3ab499),
[`faea2d1174d80593264f2227cfde9a2ba1a59b96`](faea2d1),
[`97b9d2edfcfeed99124f9e115f992cbef3804682`](97b9d2e),
[`f6af504f1ba8283fd00af0d6e3c9c1a665d62736`](f6af504),
[`a595235d3cf8f67611efd8395332b64d067b5f1f`](a595235)]:
    -   @apollo/query-graphs@2.12.0
    -   @apollo/federation-internals@2.12.0

## @apollo/gateway@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

- Updated dependencies
\[[`3e2b0a8569a9fe46726182887ed0b4bfc0b52468`](3e2b0a8),
[`bb4614d338ae03bac51a5fc2439590f172c4e54d`](bb4614d),
[`99f2da21de88f9ad9a32ee7ed64b2d4a92887b40`](99f2da2),
[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`3fd5157b309f1d3439b2d87c67b0601fb246d04c`](3fd5157),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0),
[`4bda3a498eba36e187dfd9ae673eca12d3f3502c`](4bda3a4),
[`e7e67579908d5cd2fa6fe558228dffe4808cd98d`](e7e6757),
[`f3ab499eaf62b1a1c0f08b838d2cbde5accb303a`](f3ab499),
[`faea2d1174d80593264f2227cfde9a2ba1a59b96`](faea2d1),
[`0dbc7cc72ffacf324231e9ccb2de4189f6bf3289`](0dbc7cc),
[`97b9d2edfcfeed99124f9e115f992cbef3804682`](97b9d2e),
[`f6af504f1ba8283fd00af0d6e3c9c1a665d62736`](f6af504),
[`bc07e979b9fd24c9b94740b170f11023fe99ba1e`](bc07e97),
[`a595235d3cf8f67611efd8395332b64d067b5f1f`](a595235),
[`9cbdcb53f859c877a476e2725faa4cb205506f57`](9cbdcb5)]:
    -   @apollo/query-planner@2.12.0
    -   @apollo/composition@2.12.0
    -   @apollo/federation-internals@2.12.0

## @apollo/federation-internals@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

- Added isSuccess argument to @connect and @source
([#3294](#3294))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

- Automatically propagate authorization requirements from implementing
type to interface in the supergraph.
([#3321](#3321))

Authorization requirements now automatically propagate from implementing
types to interfaces during composition. Direct auth specifications on
interfaces are no longer allowed. Interface access requires satisfying
ALL implementing types' requirements (`AND` rule), with these
requirements included in the supergraph for backward compatibility with
older routers.

- Fix transitive auth requirements on `@requires` and `@fromcontext`
([#3321](#3321))

Adds new `postMergeValidation` check to ensure that all fields that
depends on data from other parts of the supergraph through `@requires`
and/or `@fromContext` directives explicitly specify matching
`@authenticated`, `@requiresScopes` and/or `@policy` auth requirements,
e.g.

    ```graphql
    type T @key(fields: "id") {
      id: ID!
      extra: String @external
# we need explicit `@authenticated` as it is needed to access extra
      requiresExtra: String @requires(fields: "extra") @authenticated
    }

    type T @key(fields: "id") {
      id: ID!
      extra: String @authenticated
    }
    ```

- Preparing new preview release 2.12.0-preview.3 (patch).
([#3308](#3308))

- Adding new CompositionOption `maxValidationSubgraphPaths`. This value
represents the maximum number of SubgraphPathInfo objects that may exist
in a ValidationTraversal when checking for satisfiability. Setting this
value can help composition error before running out of memory. Default
is 1,000,000.
([#3275](#3275))

- Fixed demand control validations
([#3314](#3314))

Updated `@cost`/`@listSize` validations to use correct federation spec
to look them up in the schema.

- Restrict usage of auth directives on interfaces
([#3321](#3321))

Restricts usage of `@authenticated`, `@policy` and `@requiresScopes`
from being applied on interfaces, interface objects and their fields.

GraphQL spec currently does not define any interface inheritance rules
and developers have to explicitly redefine all interface fields on their
implementations. At runtime, GraphQL servers cannot return abstract
types and always return concrete output types. Due to the above,
applying auth directives on the interfaces may lead to unexpected
runtime behavior as they won't have any effect at runtime.

- Stricter merge rules for @requiresScopes and @Policy
([#3321](#3321))

Current merge policies for `@authenticated`, `@requiresScopes` and
`@policy` were inconsistent.

If a shared field uses the same authorization directives across
subgraphs, composition merges them using `OR` logic. However, if a
shared field uses different authorization directives across subgraphs
composition merges them using `AND` logic. This simplified schema
evolution, but weakened security requirements. Therefore, the behavior
has been changed to always apply `AND` logic to authorization directives
applied to the same field across subgraphs.

Since `@policy` and `@requiresScopes` values represent boolean
conditions in Disjunctive Normal Form, we can merge them conjunctively
to get the final auth requirements. For example:

    ```graphql
    # subgraph A
    type T @authenticated {
      # requires scopes (A1 AND A2) OR A3
      secret: String @requiresScopes(scopes: [["A1", "A2"], ["A3"]])
    }

    # subgraph B
    type T {
      # requires scopes B1 OR B2
      secret: String @requiresScopes(scopes: [["B1"], ["B2"]]
    }

    # composed supergraph
    type T @authenticated {
      secret: String @requiresScopes(
        scopes: [
          ["A1", "A2", "B1"],
          ["A1", "A2", "B2"],
          ["A3", "B1"],
          ["A3", "B2"]
        ])
    }
    ```

    This algorithm also deduplicates redundant requirements, e.g.

    ```graphql
    # subgraph A
    type T {
      # requires A1 AND A2 scopes to access
      secret: String @requiresScopes(scopes: [["A1", "A2"]])
    }

    # subgraph B
    type T {
      # requires only A1 scope to access
      secret: String @requiresScopes(scopes: [["A1"]])
    }

    # composed supergraph
    type T {
      # requires only A1 scope to access as A2 is redundant
      secret: String @requiresScopes(scopes: [["A1"]])
    }
    ```

## @apollo/query-graphs@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

- Fixes a bug where query planning may unexpectedly error due to
attempting to generate a plan where a `@shareable` mutation field is
called more than once across multiple subgraphs.
([#3304](#3304))
([#3304](#3304))

- Updated dependencies
\[[`3e2b0a8569a9fe46726182887ed0b4bfc0b52468`](3e2b0a8),
[`bb4614d338ae03bac51a5fc2439590f172c4e54d`](bb4614d),
[`99f2da21de88f9ad9a32ee7ed64b2d4a92887b40`](99f2da2),
[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`3fd5157b309f1d3439b2d87c67b0601fb246d04c`](3fd5157),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0),
[`4bda3a498eba36e187dfd9ae673eca12d3f3502c`](4bda3a4),
[`e7e67579908d5cd2fa6fe558228dffe4808cd98d`](e7e6757),
[`faea2d1174d80593264f2227cfde9a2ba1a59b96`](faea2d1),
[`97b9d2edfcfeed99124f9e115f992cbef3804682`](97b9d2e),
[`f6af504f1ba8283fd00af0d6e3c9c1a665d62736`](f6af504),
[`a595235d3cf8f67611efd8395332b64d067b5f1f`](a595235)]:
    -   @apollo/federation-internals@2.12.0

## @apollo/query-planner@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

- Fixes a bug where query planning may unexpectedly error due to
attempting to generate a plan where a `@shareable` mutation field is
called more than once across multiple subgraphs.
([#3304](#3304))
([#3304](#3304))

- Updated dependencies
\[[`3e2b0a8569a9fe46726182887ed0b4bfc0b52468`](3e2b0a8),
[`bb4614d338ae03bac51a5fc2439590f172c4e54d`](bb4614d),
[`99f2da21de88f9ad9a32ee7ed64b2d4a92887b40`](99f2da2),
[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`3fd5157b309f1d3439b2d87c67b0601fb246d04c`](3fd5157),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0),
[`4bda3a498eba36e187dfd9ae673eca12d3f3502c`](4bda3a4),
[`e7e67579908d5cd2fa6fe558228dffe4808cd98d`](e7e6757),
[`f3ab499eaf62b1a1c0f08b838d2cbde5accb303a`](f3ab499),
[`faea2d1174d80593264f2227cfde9a2ba1a59b96`](faea2d1),
[`97b9d2edfcfeed99124f9e115f992cbef3804682`](97b9d2e),
[`f6af504f1ba8283fd00af0d6e3c9c1a665d62736`](f6af504),
[`a595235d3cf8f67611efd8395332b64d067b5f1f`](a595235)]:
    -   @apollo/query-graphs@2.12.0
    -   @apollo/federation-internals@2.12.0

## @apollo/subgraph@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

- When a `GraphQLScalarType` resolver is provided to
`buildSubgraphSchema()`, omitted configuration options in the
`GraphQLScalarType` no longer cause the corresponding properties in the
GraphQL document/AST to be cleared. To explicitly clear these
properties, use `null` for the configuration option instead.
([#3287](#3287))

- Updated dependencies
\[[`3e2b0a8569a9fe46726182887ed0b4bfc0b52468`](3e2b0a8),
[`bb4614d338ae03bac51a5fc2439590f172c4e54d`](bb4614d),
[`99f2da21de88f9ad9a32ee7ed64b2d4a92887b40`](99f2da2),
[`468f27842608f4e390cfc88bc7e6b4b0945f95ff`](468f278),
[`3fd5157b309f1d3439b2d87c67b0601fb246d04c`](3fd5157),
[`b734ea04d118db09cf6077fdd968c8f04a96327a`](b734ea0),
[`4bda3a498eba36e187dfd9ae673eca12d3f3502c`](4bda3a4),
[`e7e67579908d5cd2fa6fe558228dffe4808cd98d`](e7e6757),
[`faea2d1174d80593264f2227cfde9a2ba1a59b96`](faea2d1),
[`97b9d2edfcfeed99124f9e115f992cbef3804682`](97b9d2e),
[`f6af504f1ba8283fd00af0d6e3c9c1a665d62736`](f6af504),
[`a595235d3cf8f67611efd8395332b64d067b5f1f`](a595235)]:
    -   @apollo/federation-internals@2.12.0

## apollo-federation-integration-testsuite@2.12.0

### Minor Changes

- Federation 2.12 and Connect 0.3
([#3276](#3276))

- Add connect spec v0.2
([#3228](#3228))

- Federation v2.12 release
([#3323](#3323))

### Patch Changes

- Preparing preview.2 release
([#3255](#3255))

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dariuszkuc <9501705+dariuszkuc@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants