Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaking API: Allow WebsocketInitFunc to add payload to Ack (#4) #2791

Merged
merged 1 commit into from Sep 19, 2023

Conversation

telemenar
Copy link
Contributor

  • Allow WebsocketInitFunc to add payload to Ack

The connection ACK message in the protocol for both graphql-ws and graphql-transport-ws allows for a payload in the connection ack message.

We really wanted to use this to establish better telemetry in our use of websockets in graphql.

I have:

  • Added tests covering the bug / feature (see testing)
  • Updated any relevant documentation (see docs)

* Allow WebsocketInitFunc to add payload to Ack

The connection ACK message in the protocol for both
graphql-ws and graphql-transport-ws allows for a payload in the
connection ack message.

We really wanted to use this to establish better telemetry in our use of
websockets in graphql.

* Fix lint error in test

* Switch argument ordering.

---------

Co-authored-by: Chris Pride <cpride@observeinc.com>
@coveralls
Copy link

coveralls commented Sep 12, 2023

Coverage Status

coverage: 75.761% (+0.01%) from 75.748% when pulling da137ea on observeinc:master into fceb331 on 99designs:master.

@UnAfraid
Copy link
Contributor

Wouldn't it be better if this change would add the functionality without breaking the compatibility?

@StevenACoffman
Copy link
Collaborator

@UnAfraid Do you have some recommended changes for how to accomplish this goal without breaking compatibility?

@UnAfraid
Copy link
Contributor

@UnAfraid Do you have some recommended changes for how to accomplish this goal without breaking compatibility?

Sure, we can deprecate InitFunc and add new func OnInitFunc for example.
(Naming to be improved)

type InitOptions struct {
  InitPayload InitPayload
  // Room for more in the future
}

type InitDataPayload struct {
  Payload map[string]any
  // Room for more in the future
}

type OnInitFunc func(ctx context.Context, options InitOptions) (context.Context, InitDataPayload, error)

@telemenar
Copy link
Contributor Author

telemenar commented Sep 13, 2023

I thought about going that direction but it adds potential for confusion around which api to use and there is no pressure to actually cease using the deprecated variant. So it is likely just a permanent increase of the api surface area and a small complexity increase to deal with both options.

The proposed change is compile time breaking, however it is a super fast fix to maintain existing behavior. (Add another nil to your return statements and add it to the type.)

Part of why I used a pointer type was so make this as minimal change to existing behavior as possible so it didn’t start sending an empty payload when there was previously no payload. To make sure that if you do the minimum compile fix there was 0 chance it would be behavior breaking.

@RumenNikiforovTruckstop

In my opinion causing compile error on someone who just updated their dependencies would be more confusing, now they'll have to check why that broke, what changed, why it changed, etc..

And transport.InitPayload is already a reference type, its a map, it shouldn't be pointer

@telemenar
Copy link
Contributor Author

Acknowledged, on the upgrade path. I personally just think that the short term hit is better than the long term complexity and confusion.

Yes the underlying map that is InitPayload is a reference type. (Pet peeve: this is only documented as part of the golang faq and not part of the golang language specification.) However, if you just look at a function using the type you don’t know that. Which is why I went with the pointer type as to me that confers optionality. I wish golang had a clear standard optional type I would have preferred to have that instead.

Also, despite my pushback, I’m perfectly happy to make changes based on the desire of the maintainers. I just want to make sure my motivations for not having taken that approach in the first place are documented.

Let me know the path I should take here.

@telemenar
Copy link
Contributor Author

@StevenACoffman -- as maintainer preferences on the way forward here?

@StevenACoffman
Copy link
Collaborator

StevenACoffman commented Sep 19, 2023

Sorry for the delay.

While it would be polite to Deprecate the old API, and give people a small (one release ~= 2 weeks) heads up that they should migrate to the new API before upgrading gives them a compile error. However, I can't think of a better name than "WebsocketInitFunc". I'm going to merge this, but I'm going to let that simmer for a bit before the next release to see if there's a large contingent of people for whom adding a default argument to this is a significant burden.

I have updated the PR title to highlight it's breaking nature.

@StevenACoffman StevenACoffman changed the title Allow WebsocketInitFunc to add payload to Ack (#4) Breaking API: Allow WebsocketInitFunc to add payload to Ack (#4) Sep 19, 2023
@StevenACoffman StevenACoffman merged commit af4d394 into 99designs:master Sep 19, 2023
18 checks passed
@telemenar
Copy link
Contributor Author

Sounds good let me know if you’d like any follow up work from me.

nicolerenee pushed a commit to infratographer/metadata-api that referenced this pull request Oct 20, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [github.com/99designs/gqlgen](https://togithub.com/99designs/gqlgen) |
require | patch | `v0.17.38` -> `v0.17.39` |

---

### Release Notes

<details>
<summary>99designs/gqlgen (github.com/99designs/gqlgen)</summary>

###
[`v0.17.39`](https://togithub.com/99designs/gqlgen/releases/tag/v0.17.39)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.38...v0.17.39)

#### What's Changed

- Breaking API: Allow WebsocketInitFunc to add payload to Ack
([#&#8203;4](https://togithub.com/99designs/gqlgen/issues/4)) by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2791
- add close flag into wsConnection to avoid duplicate calls of CloseFunc
by [@&#8203;vlad-tokarev](https://togithub.com/vlad-tokarev) in
[99designs/gqlgen#2803
- fix: CodeGen for omit_slice_element_pointers and GetMany Entity
Resolvers by [@&#8203;parkerroan](https://togithub.com/parkerroan) in
[99designs/gqlgen#2802
- feat: update getting-started CreateTodo mutationResolver by
[@&#8203;gitxiongpan](https://togithub.com/gitxiongpan) in
[99designs/gqlgen#2810
- Feature: Support Apollo Federation Auth Directives by
[@&#8203;parkerroan](https://togithub.com/parkerroan) in
[99designs/gqlgen#2809
- Consider go type name when autobinding by
[@&#8203;dany74q](https://togithub.com/dany74q) in
[99designs/gqlgen#2812
- Update generated files that change when building by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2813
- Add a pong only keep alive for the new protocol by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2814
- Store parsed Schema on ExecutableSchema rather than use global
variable by [@&#8203;gitxiongpan](https://togithub.com/gitxiongpan) in
[99designs/gqlgen#2811
- Add ability to not fail when pong is not received. by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2815
- Adding duration scalar conforming to ISO8601 standard by
[@&#8203;rwrz](https://togithub.com/rwrz) in
[99designs/gqlgen#2800
- Bump postcss from 8.4.24 to 8.4.31 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2819
- Add [@&#8203;interfaceObject](https://togithub.com/interfaceObject)
and [@&#8203;composeDirective](https://togithub.com/composeDirective) at
Federation 2 directive lists. by
[@&#8203;wangmir](https://togithub.com/wangmir) in
[99designs/gqlgen#2821

#### New Contributors

- [@&#8203;vlad-tokarev](https://togithub.com/vlad-tokarev) made their
first contribution in
[99designs/gqlgen#2803
- [@&#8203;parkerroan](https://togithub.com/parkerroan) made their first
contribution in
[99designs/gqlgen#2802
- [@&#8203;dany74q](https://togithub.com/dany74q) made their first
contribution in
[99designs/gqlgen#2812
- [@&#8203;rwrz](https://togithub.com/rwrz) made their first
contribution in
[99designs/gqlgen#2800
- [@&#8203;wangmir](https://togithub.com/wangmir) made their first
contribution in
[99designs/gqlgen#2821

**Full Changelog**:
99designs/gqlgen@v0.17.38...v0.17.39

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/infratographer/metadata-api).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi44My4wIiwidXBkYXRlZEluVmVyIjoiMzcuMTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@dbarrosop
Copy link

dbarrosop commented Nov 1, 2023

Hi, I just updated my dependencies and fell into this breaking change. While I am ok with small breaking changes like this (I agree a small breaking change now is better than confusion over time) I am struggling to understand how to fix the breaking change. The PR description indicates that documentation has been fixed but I couldn't find such documentation in this PR. The function signature isn't clear either, it just says it wants me to return a pointer but nothing mentions what this pointer is for so I don't know how to fix this breaking change. Am I supposed to return nil, a pointer to the payload I got or something else? And what is this good for?

Thanks!

@dsaiko
Copy link

dsaiko commented Jan 31, 2024

No any documentation, no sample provided, none of existing examples updated ...
Have no idea what I should return and I really do not want to spend my time going through the source code and guessing ...

@StevenACoffman
Copy link
Collaborator

StevenACoffman commented Jan 31, 2024

@dsaiko I am sorry for your frustration, but I rely on the small coterie of regular websocket contributors. Both @UnAfraid and @telemenar have been reliable in making valuable improvements.

If this change that happened 133 days ago is now causing an unexpected problem for you, please describe what happened and how you eventually resolve it.

Please help those who follow in your footsteps, and leave the documentation better than you currently find it.

@dbarrosop
Copy link

dbarrosop commented Feb 1, 2024

FWIW I solved it by returning nil. To be clear, the work here is greatly appreciated, this library is really good and the websocket support just works™. However, there are a few bits here and there that are a bit underdocumented and this is one of those bits (the PR also mentions docs have been updated but the link doesn't send you anywhere useful). Given that this introduced a breaking change a quick note in how to migrate (which is as simple as adding nil) and how this could be useful would've saved some of the initial frustration (the new test is very telling and could have been reused for explaining the functionality).

Anyway, this happens in most libraries all the time so I don't think it's worth dwelling too much on it, it's the cost of using opensource so keep up with this amazing work.

github-merge-queue bot pushed a commit to infratographer/x that referenced this pull request Apr 2, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/99designs/gqlgen](https://togithub.com/99designs/gqlgen) |
`v0.17.38` -> `v0.17.45` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2f99designs%2fgqlgen/v0.17.45?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2f99designs%2fgqlgen/v0.17.45?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2f99designs%2fgqlgen/v0.17.38/v0.17.45?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2f99designs%2fgqlgen/v0.17.38/v0.17.45?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>99designs/gqlgen (github.com/99designs/gqlgen)</summary>

###
[`v0.17.45`](https://togithub.com/99designs/gqlgen/releases/tag/v0.17.45)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.44...v0.17.45)

#### What's Changed

- Bump github.com/matryer/moq from 0.3.3 to 0.3.4 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2939
- Bump [@&#8203;apollo/client](https://togithub.com/apollo/client) from
3.9.4 to 3.9.5 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2938
- Bump vitest from 1.2.2 to 1.3.0 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2937
- Bump graphql-ws from 5.14.3 to 5.15.0 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2935
- Bump vite from 5.1.1 to 5.1.3 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2936
- Bump golang.org/x/tools from 0.17.0 to 0.18.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2940
- Optionally render entity requires populator function for advanced
[@&#8203;requires](https://togithub.com/requires) use cases by
[@&#8203;jesse-apollo](https://togithub.com/jesse-apollo) in
[99designs/gqlgen#2884
- Bump vite from 5.1.3 to 5.1.4 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2947
- Bump
[@&#8203;graphql-codegen/introspection](https://togithub.com/graphql-codegen/introspection)
from 4.0.2 to 4.0.3 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2944
- Bump
[@&#8203;graphql-codegen/client-preset](https://togithub.com/graphql-codegen/client-preset)
from 4.2.2 to 4.2.4 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2945
- Bump github.com/PuerkitoBio/goquery from 1.8.1 to 1.9.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2943
- Bump vitest from 1.3.0 to 1.3.1 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2946
- Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 in /\_examples by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2955
- Bump github.com/PuerkitoBio/goquery from 1.9.0 to 1.9.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2954
- Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2953
- Add option to omit resolver fields from models by
[@&#8203;Desuuuu](https://togithub.com/Desuuuu) in
[99designs/gqlgen#2957
- fix(docs): convert an unnecessarily capitalized word to lowercase by
[@&#8203;hxrxchang](https://togithub.com/hxrxchang) in
[99designs/gqlgen#2959
- Update explicit_requires to support models generated into same package
by [@&#8203;ericbock](https://togithub.com/ericbock) in
[99designs/gqlgen#2965
- Add case for resolvers_always_return_pointers:false in explicit
requires generation. by
[@&#8203;jesse-apollo](https://togithub.com/jesse-apollo) in
[99designs/gqlgen#2966
- Bump google.golang.org/protobuf from 1.32.0 to 1.33.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2964
- Bump [@&#8203;apollo/client](https://togithub.com/apollo/client) from
3.9.5 to 3.9.6 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2962
- Bump vite from 5.1.4 to 5.1.5 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2961
- Bump typescript from 5.3.3 to 5.4.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2960
- Bump golang.org/x/tools from 0.18.0 to 0.19.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2963

#### New Contributors

- [@&#8203;jesse-apollo](https://togithub.com/jesse-apollo) made their
first contribution in
[99designs/gqlgen#2884
- [@&#8203;hxrxchang](https://togithub.com/hxrxchang) made their first
contribution in
[99designs/gqlgen#2959
- [@&#8203;ericbock](https://togithub.com/ericbock) made their first
contribution in
[99designs/gqlgen#2965

**Full Changelog**:
99designs/gqlgen@v0.17.44...v0.17.45

###
[`v0.17.44`](https://togithub.com/99designs/gqlgen/releases/tag/v0.17.44)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.43...v0.17.44)

#### What's Changed

- Bump vite from 4.3.9 to 4.5.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2885
- Update federation plugin by
[@&#8203;trevor-scheer](https://togithub.com/trevor-scheer) in
[99designs/gqlgen#2876
- Work with https://specs.apollo.dev/federation/v2.x by
[@&#8203;StevenACoffman](https://togithub.com/StevenACoffman) in
[99designs/gqlgen#2891
- Update x/tools and add go v1.21,v1.22 in CI workflows by
[@&#8203;ryicoh](https://togithub.com/ryicoh) in
[99designs/gqlgen#2894
- Bump actions/setup-go from 3 to 5 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2900
- Bump actions/checkout from 3 to 4 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2903
- Bump actions/setup-node from 3 to 4 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2910
- Bump nick-fields/retry from 2 to 3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2907
- Bump golangci/golangci-lint-action from 3.5.0 to 3.7.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2896
- Bump github.com/stretchr/testify from 1.8.2 to 1.8.4 in /\_examples by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2897
- Bump github.com/gorilla/websocket from 1.5.0 to 1.5.1 in /\_examples
by [@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2901
- Bump github.com/matryer/moq from 0.2.7 to 0.3.3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2902
- Bump vitest from 0.32.0 to 1.2.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2919
- Bump styled-components from 5.3.11 to 6.1.8 in /\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2905
- Bump graphql-sse from 2.1.4 to 2.5.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2913
- Bump typescript from 4.9.5 to 5.3.3 in /\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2917
- Bump react-scripts from 2.1.8 to 5.0.1 in /\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2914
- Bump github.com/urfave/cli/v2 from 2.25.5 to 2.27.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2912
- Bump subscriptions-transport-ws from 0.9.19 to 0.11.0 in
/\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2911
- Bump github.com/google/uuid from 1.3.0 to 1.6.0 in /\_examples by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2909
- Bump github.com/rs/cors from 1.9.0 to 1.10.1 in /\_examples by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2904
- Bump graphql from 14.7.0 to 16.8.1 in /\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2899
- Bump jest from 25.5.4 to 29.7.0 in /\_examples/federation by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2920
- Bump typescript from 5.1.3 to 5.3.3 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2921
- Bump
[@&#8203;graphql-codegen/schema-ast](https://togithub.com/graphql-codegen/schema-ast)
from 4.0.0 to 4.0.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2918
- Bump github.com/mattn/go-isatty from 0.0.19 to 0.0.20 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2908
- Bump urql from 4.0.4 to 4.0.6 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2906
- Bump github.com/hashicorp/golang-lru/v2 from 2.0.3 to 2.0.7 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2915
- Bump node-fetch from 2.7.0 to 3.3.2 in /\_examples/federation by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2916
- graphql/uint: Fix unmarshalling of negative numbers by
[@&#8203;mnPanic](https://togithub.com/mnPanic) in
[99designs/gqlgen#2922
- Bump golangci/golangci-lint-action from 3.7.0 to 4.0.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2928
- Bump github.com/google/uuid from 1.3.0 to 1.6.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2924
- Bump github.com/stretchr/testify from 1.8.2 to 1.8.4 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2925
- Bump google.golang.org/protobuf from 1.30.0 to 1.32.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2926
- Bump react from 16.14.0 to 18.2.0 in /\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2929
- Bump vite from 4.5.2 to 5.1.1 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2931
- Bump
[@&#8203;graphql-codegen/cli](https://togithub.com/graphql-codegen/cli)
from 4.0.1 to 5.0.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2932
- Bump github.com/sosodev/duration from 1.1.0 to 1.2.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2927
- Bump react-dom from 16.14.0 to 18.2.0 in /\_examples/chat by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2930

#### New Contributors

- [@&#8203;trevor-scheer](https://togithub.com/trevor-scheer) made their
first contribution in
[99designs/gqlgen#2876
- [@&#8203;ryicoh](https://togithub.com/ryicoh) made their first
contribution in
[99designs/gqlgen#2894
- [@&#8203;mnPanic](https://togithub.com/mnPanic) made their first
contribution in
[99designs/gqlgen#2922

**Full Changelog**:
99designs/gqlgen@v0.17.43...v0.17.44

###
[`v0.17.43`](https://togithub.com/99designs/gqlgen/releases/tag/v0.17.43)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.42...v0.17.43)

#### What's Changed

- Fix code generation for federated multi-key, multi-entity types by
[@&#8203;bpeters-cmu](https://togithub.com/bpeters-cmu) in
[99designs/gqlgen#2877
- Add config option to omit root objects from models by
[@&#8203;ghjm](https://togithub.com/ghjm) in
[99designs/gqlgen#2878
- add omitempty config to example gqlgen.yml by
[@&#8203;PaulVasilenko](https://togithub.com/PaulVasilenko) in
[99designs/gqlgen#2880
- Update gqlparser to v2.5.11 by
[@&#8203;StevenACoffman](https://togithub.com/StevenACoffman) in
[99designs/gqlgen#2882

#### New Contributors

- [@&#8203;bpeters-cmu](https://togithub.com/bpeters-cmu) made their
first contribution in
[99designs/gqlgen#2877
- [@&#8203;ghjm](https://togithub.com/ghjm) made their first
contribution in
[99designs/gqlgen#2878
- [@&#8203;PaulVasilenko](https://togithub.com/PaulVasilenko) made their
first contribution in
[99designs/gqlgen#2880

**Full Changelog**:
99designs/gqlgen@v0.17.42...v0.17.43

###
[`v0.17.42`](https://togithub.com/99designs/gqlgen/blob/HEAD/CHANGELOG.md#v01742---2023-12-29)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.41...v0.17.42)

- <a
href="https://togithub.com/99designs/gqlgen/commit/7bf0c223aec642d086793698bc2a0d1a6fdb09b4"><tt>[`7bf0c22`](https://togithub.com/99designs/gqlgen/commit/7bf0c223)</tt></a>
release v0.17.42

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/c811d47ec498bdd50591f163e7d23a7524e98280"><tt>c811d47e</tt></a>
fix: avoid panic from tracing on bad request (<a
href="https://togithub.com/99designs/gqlgen/pull/2871">#&#8203;2871</a>)</summary>

This fixes a panic which arises from the tracing components when a
request has some defect which results in an error when creating the
operation context. The transports consistently handle this by calling
`DispatchError(graphql.WithOperationContext(ctx, rc), err)` where `rc`
is the OperationContext which was not correctly constructed. This seems
dangerous, because middleware may assume that if there in an
`OperationContext` in the `context.Context` than they are being invoked
on a normal codepath and can assume their other interceptors have been
invoked in the normal order. Also, using a value returned by a function
which also returned a non-nil error is very unusual. However, I have no
idea what the impact of changing that dangerous behavior in the
transports would be, so I opted to make the tracing component more
resilient instead.

</details></dd></dl>

- <a
href="https://togithub.com/99designs/gqlgen/commit/13bb415268dda837690835e65e331746c8df892b"><tt>[`13bb415`](https://togithub.com/99designs/gqlgen/commit/13bb4152)</tt></a>
fix for entity interfce code gen with related test (<a
href="https://togithub.com/99designs/gqlgen/pull/2868">[#&#8203;2868](https://togithub.com/99designs/gqlgen/issues/2868)</a>)

- <a
href="https://togithub.com/99designs/gqlgen/commit/0354649c0309af6acfe089d12d103060d55a5805"><tt>[`0354649`](https://togithub.com/99designs/gqlgen/commit/0354649c)</tt></a>
Remove archived dependency appdash (<a
href="https://togithub.com/99designs/gqlgen/pull/2866">[#&#8203;2866](https://togithub.com/99designs/gqlgen/issues/2866)</a>)

- <a
href="https://togithub.com/99designs/gqlgen/commit/0d43599cdab22912d4ddd061c3b3ffd5d8da3845"><tt>[`0d43599`](https://togithub.com/99designs/gqlgen/commit/0d43599c)</tt></a>
Update examples go.mod with appdash replacements (<a
href="https://togithub.com/99designs/gqlgen/pull/2863">[#&#8203;2863](https://togithub.com/99designs/gqlgen/issues/2863)</a>)

- <a
href="https://togithub.com/99designs/gqlgen/commit/7dd971c871c0b0159ad26c9bf3095a8ba3780402"><tt>[`7dd971c`](https://togithub.com/99designs/gqlgen/commit/7dd971c8)</tt></a>
Use defer wg.Done() in FieldSet Dispatch (<a
href="https://togithub.com/99designs/gqlgen/pull/2861">[#&#8203;2861](https://togithub.com/99designs/gqlgen/issues/2861)</a>)

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/24ea195cebea095035caf4d23af7f3d75fd0a041"><tt>24ea195c</tt></a>
vikstrous/dataloadgen replaces recommended dataloader package in example
docs (<a
href="https://togithub.com/99designs/gqlgen/pull/2770">#&#8203;2770</a>)</summary>

-   update example for dataloadgen

-   improved example with link to example repo

-   undo unnecessary changes

-   fix wrong signature

-   fix creation of loader

-   Update docs/content/reference/dataloaders.md

</details></dd></dl>

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/42f6e39d48e3a301bf39cd4e8fd180250bc25f2c"><tt>42f6e39d</tt></a>
Allow fields that return root level definitions (<a
href="https://togithub.com/99designs/gqlgen/pull/2858">#&#8203;2858</a>)</summary>

- generate structs for root level definitions to support fields that
return Query, Mutation or Subscription

-   removed unnecessary comment

-   re-ran go generate

***

</details></dd></dl>

- <a
href="https://togithub.com/99designs/gqlgen/commit/682a58dd6af5fda53509fbf4cfa45d23b5bb1c86"><tt>[`682a58d`](https://togithub.com/99designs/gqlgen/commit/682a58dd)</tt></a>
Add go generate for examples so contributors never forget (<a
href="https://togithub.com/99designs/gqlgen/pull/2859">[#&#8203;2859](https://togithub.com/99designs/gqlgen/issues/2859)</a>)

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/e080a96de178520fcfaf5a8d68836981ec4df9a9"><tt>e080a96d</tt></a>
Modify to prevent unreachable code from occurring (<a
href="https://togithub.com/99designs/gqlgen/pull/2846">#&#8203;2846</a>)</summary>

-   fix: 型の数でソートする処理を追加

-   戻し

-   fix: case文の最初にスーパークラスが来ないようにする

-   testdata追加

-   fix: Added sorting by number of types.

- fix: Prevent superclass from appearing at the beginning of case
statement

</details></dd></dl>

- <a
href="https://togithub.com/99designs/gqlgen/commit/68744ad2a1e9d5869ab6a00b49814c6ae9583186"><tt>[`68744ad`](https://togithub.com/99designs/gqlgen/commit/68744ad2)</tt></a>
Bump changelog

- <a
href="https://togithub.com/99designs/gqlgen/commit/e4cf21d24518deb99af6d4c0ea86de11d6889349"><tt>[`e4cf21d`](https://togithub.com/99designs/gqlgen/commit/e4cf21d2)</tt></a>
v0.17.41 postrelease bump

 <!-- end of Commits -->

<!-- end of Else -->

<!-- end of If NoteGroups -->

###
[`v0.17.41`](https://togithub.com/99designs/gqlgen/blob/HEAD/CHANGELOG.md#v01741---2023-12-03)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.40...v0.17.41)

- <a
href="https://togithub.com/99designs/gqlgen/commit/fe60938c55308b1cd5562556cdb976771cfcc6cc"><tt>[`fe60938`](https://togithub.com/99designs/gqlgen/commit/fe60938c)</tt></a>
release v0.17.41

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/5e98a16a3a5a5678f1b6481275d81f52f9462f90"><tt>5e98a16a</tt></a>
fix fieldset.New bug when prefix slice has len < cap (<a
href="https://togithub.com/99designs/gqlgen/pull/2851">#&#8203;2851</a>)</summary>

-   fix fieldset.New bug when prefix slice has len < cap

-   ignore gocritic warning

</details></dd></dl>

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/bd9657f3e50b7b9642c05039a5364ce2262faaf4"><tt>bd9657f3</tt></a>
Improve ResolverImplementer.Implment (<a
href="https://togithub.com/99designs/gqlgen/pull/2850">#&#8203;2850</a>)</summary>

-   improve resolver implement render

-   add error when multiple implementors

-   add initial test

</details></dd></dl>

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/cb3c1c890e5a255776df9577c80b0c15218cf254"><tt>cb3c1c89</tt></a>
Updated apollo sandbox (<a
href="https://togithub.com/99designs/gqlgen/pull/2849">#&#8203;2849</a>)</summary>

Added all supported options to new window.EmbeddedSandbox object

</details></dd></dl>

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/eb5cea7206767bda3582040fd9e4c98174aaa6b1"><tt>eb5cea72</tt></a>
Small template fix to save space in the generated file (<a
href="https://togithub.com/99designs/gqlgen/pull/2841">#&#8203;2841</a>)</summary>

-   Small template fix to save space in the generated file

-   Re-generate

***

</details></dd></dl>

- <a
href="https://togithub.com/99designs/gqlgen/commit/c0ca5091a10417c34192da4d3c064a0fed2a7fdb"><tt>[`c0ca509`](https://togithub.com/99designs/gqlgen/commit/c0ca5091)</tt></a>
Omittable can now be serialized as json (<a
href="https://togithub.com/99designs/gqlgen/pull/2839">[#&#8203;2839](https://togithub.com/99designs/gqlgen/issues/2839)</a>)

- <a
href="https://togithub.com/99designs/gqlgen/commit/dcb7619111642cc82a21b8e80ce1300213af1368"><tt>[`dcb7619`](https://togithub.com/99designs/gqlgen/commit/dcb76191)</tt></a>
fix: sample program indentation (<a
href="https://togithub.com/99designs/gqlgen/pull/2840">[#&#8203;2840](https://togithub.com/99designs/gqlgen/issues/2840)</a>)

<dl><dd><details><summary><a
href="https://togithub.com/99designs/gqlgen/commit/132ec1ce579e9ce3dc772afebf9703c1403d588e"><tt>132ec1ce</tt></a>
Updated GraphiQL 3.0.1 => 3.0.6 (<a
href="https://togithub.com/99designs/gqlgen/pull/2837">#&#8203;2837</a>)</summary>

-   Updated GraphiQL 3.0.1 => 3.0.6

-   Added unit tests to cover integrity of playgrounds

-   Updated vulnerable dependency

-   Close response body

</details></dd></dl>

- <a
href="https://togithub.com/99designs/gqlgen/commit/917407005eb4198aa43875984fb77caeaa7fca36"><tt>[`9174070`](https://togithub.com/99designs/gqlgen/commit/91740700)</tt></a>
v0.17.40 postrelease bump

 <!-- end of Commits -->

<!-- end of Else -->

<!-- end of If NoteGroups -->

###
[`v0.17.40`](https://togithub.com/99designs/gqlgen/releases/tag/v0.17.40)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.39...v0.17.40)

##### What's Changed

- resolver: fix case-insensitive file name collision by
[@&#8203;erankor](https://togithub.com/erankor) in
[99designs/gqlgen#2829
- Bump [@&#8203;babel/traverse](https://togithub.com/babel/traverse)
from 7.22.5 to 7.23.2 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2831
- Map based input types fields are now coerced to the right type by
[@&#8203;endSly](https://togithub.com/endSly) in
[99designs/gqlgen#2830

**Full Changelog**:
99designs/gqlgen@v0.17.39...v0.17.40

###
[`v0.17.39`](https://togithub.com/99designs/gqlgen/releases/tag/v0.17.39)

[Compare
Source](https://togithub.com/99designs/gqlgen/compare/v0.17.38...v0.17.39)

#### What's Changed

- Breaking API: Allow WebsocketInitFunc to add payload to Ack
([#&#8203;4](https://togithub.com/99designs/gqlgen/issues/4)) by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2791
- add close flag into wsConnection to avoid duplicate calls of CloseFunc
by [@&#8203;vlad-tokarev](https://togithub.com/vlad-tokarev) in
[99designs/gqlgen#2803
- fix: CodeGen for omit_slice_element_pointers and GetMany Entity
Resolvers by [@&#8203;parkerroan](https://togithub.com/parkerroan) in
[99designs/gqlgen#2802
- feat: update getting-started CreateTodo mutationResolver by
[@&#8203;gitxiongpan](https://togithub.com/gitxiongpan) in
[99designs/gqlgen#2810
- Feature: Support Apollo Federation Auth Directives by
[@&#8203;parkerroan](https://togithub.com/parkerroan) in
[99designs/gqlgen#2809
- Consider go type name when autobinding by
[@&#8203;dany74q](https://togithub.com/dany74q) in
[99designs/gqlgen#2812
- Update generated files that change when building by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2813
- Add a pong only keep alive for the new protocol by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2814
- Store parsed Schema on ExecutableSchema rather than use global
variable by [@&#8203;gitxiongpan](https://togithub.com/gitxiongpan) in
[99designs/gqlgen#2811
- Add ability to not fail when pong is not received. by
[@&#8203;telemenar](https://togithub.com/telemenar) in
[99designs/gqlgen#2815
- Adding duration scalar conforming to ISO8601 standard by
[@&#8203;rwrz](https://togithub.com/rwrz) in
[99designs/gqlgen#2800
- Bump postcss from 8.4.24 to 8.4.31 in /integration by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[99designs/gqlgen#2819
- Add [@&#8203;interfaceObject](https://togithub.com/interfaceObject)
and [@&#8203;composeDirective](https://togithub.com/composeDirective) at
Federation 2 directive lists. by
[@&#8203;wangmir](https://togithub.com/wangmir) in
[99designs/gqlgen#2821

#### New Contributors

- [@&#8203;vlad-tokarev](https://togithub.com/vlad-tokarev) made their
first contribution in
[99designs/gqlgen#2803
- [@&#8203;parkerroan](https://togithub.com/parkerroan) made their first
contribution in
[99designs/gqlgen#2802
- [@&#8203;dany74q](https://togithub.com/dany74q) made their first
contribution in
[99designs/gqlgen#2812
- [@&#8203;rwrz](https://togithub.com/rwrz) made their first
contribution in
[99designs/gqlgen#2800
- [@&#8203;wangmir](https://togithub.com/wangmir) made their first
contribution in
[99designs/gqlgen#2821

**Full Changelog**:
99designs/gqlgen@v0.17.38...v0.17.39

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/infratographer/x).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4wLjMiLCJ1cGRhdGVkSW5WZXIiOiIzNy4yMzAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants