-
Notifications
You must be signed in to change notification settings - Fork 730
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
Add graphql-ws
protocol support
#2168
Conversation
- Clone and install Apollo Server docs-examples - Move SimpleUploadServer to port 4001 and lock nvm to v12.22.10 - Stop using node v12 as default (CI installed is v16)
Thank you for implementing this. Quick question though: the new |
That's a good question @alexdavid. We do have ping/pong as WebSocket infrastructure, i.e.: transport level, but nothing at the protocol level. I'm going to change this to a draft PR until I'm 100% certain about the requirement. Thanks for the heads-up! |
@@ -43,18 +45,29 @@ commands: | |||
name: Start StarWars Server | |||
background: true | |||
- run: | |||
command: cd SimpleUploadServer && npm install && npm start | |||
command: cd SimpleUploadServer && nvm use && npm install && npm start |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Required to tell nvm to actually use the .nvmrc
file created to lock SimpleUploadServer to node v12.
} | ||
}, | ||
{ | ||
"package": "Nimble", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding Nimble to main
, currently it only exists in the 1.0 branches.
@@ -64,6 +64,8 @@ const server = new ApolloServer({ | |||
} | |||
}); | |||
|
|||
server.listen().then(({ url }) => { | |||
server.listen({ | |||
port: 4001 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Apollo Server documentation example defaults to port 4000
. Since it's maintained by other teams and serves as a documentation example it's easier for us to move the SimpleUploadServer service to port 4001
.
@@ -7,6 +7,7 @@ final class OperationMessage { | |||
enum Types : String { | |||
case connectionInit = "connection_init" // Client -> Server | |||
case connectionTerminate = "connection_terminate" // Client -> Server | |||
case subscribe = "subscribe" // Client -> Server |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Messages that are additive so that we can continue to support both protocols.
@alexdavid I've added message support for ping/pong in 348dcf0 and it's tested in 6edea9b. Thanks for calling that out. |
@@ -0,0 +1 @@ | |||
v12.22.10 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SimpleUploadServer needs to be upgraded to the latest Apollo Server at some point but for now we have to do this.
import SubscriptionAPI | ||
|
||
class GraphqlTransportWsProtocolTests: XCTestCase { | ||
private let asyncTimeout: DispatchTimeInterval = .seconds(3) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A longer async wait interval for slower environments such as CI.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These tests look great, but I'm really confused why CI would need a 3 second time out. If we are mocking the Socket and the Transport, it shouldn't need all that time. These are unit tests, not integration tests, right?
If it's taking that long, I'm wondering if there is something going wrong with a locking thread or something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The longer timeout is my 'easy' fix attempt at resolving failed CI test. It's not that though, still working on resolving the failed tests. Yes these are unit tests with mocking.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All protocol messages are defined in OperationMessage and the behavior logic is in WebSocketTransport. The way this is implemented now effectively means there is no segmentation of protocol behaviour and an active web socket could receive a message from any protocol and it would process it; not ideal.
Yeah, we should separate our concerns better when we refactor all of this in 2.0. But this behavior shouldn't be likely to cause any tangible problems for the time being, right? Are you just calling this out to be thorough, or are you concerned about this?
import SubscriptionAPI | ||
|
||
class GraphqlTransportWsProtocolTests: XCTestCase { | ||
private let asyncTimeout: DispatchTimeInterval = .seconds(3) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These tests look great, but I'm really confused why CI would need a 3 second time out. If we are mocking the Socket and the Transport, it shouldn't need all that time. These are unit tests, not integration tests, right?
If it's taking that long, I'm wondering if there is something going wrong with a locking thread or something?
Not concerned since servers implement a single protocol. Calling it out as behaviour we should not carry forward into 2.0. |
Move OperationMessageMatchers to correct target and remove Nimble linking from ApolloTestSupport
This reverts commit d63d078.
209c7a0
to
9c92529
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome job!
* Implement graphql-transport-ws protocol support * Add graphql-transport-ws integration test based on Apollo Server docs-examples * Add CI step for Apollo Server graphql-transport-ws tests * After installing node v12 switch to use v16 * Instruct nvm to use version in .nvmrc * Update documentation and tutorial * Change WSProtocol cases to closer match library names * Remove initializer defaults and require web socket protocol on designated initializer. * Update Subscriptions documentation * Add WSProtocol option for AWS AppSync * Add ping/pong message support required by graphql-ws * Update documentation and tutorial * Add tests for subscriptionWsProtocol * Add tests for graphqlWSProtocol * Revert to naming aligned with the protocols and not the implementation libraries * Use longer async timeout for slower environments like CI * Fix test names * Fix project configuration * Rename protocol parameter on WebSocket initializers * Revert "Use longer async timeout for slower environments like CI" * Fix async timing bug and refactor websocket protocol tests
* Update version number * Update changelog * Update SourceDocsLib dependecy * Update generated documentation * Update changelog with cache key caveat * Update changelog for merging of apollographql#2147 * Update changelog for apollographql#2177 and apollographql#2168 * Update documentation
* Attempted fix for integration test failing on CI (apollographql#2024) * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.6 (apollographql#2026) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Update apollo-tooling to v2.33.9 (apollographql#2028) * Update to v2.33.9 of the CLI tooling * Update StarWarsAPI output generated by updated tooling * Update test with expected output * Keep the parameter spacing * Gateway clarification based on license change * Update SQLite.swift to version 13.0 (apollographql#2015) * Update Package.swift and podspec * Updated XcodeProj * Bump SQLite.swift minimum required version to 0.13.1 Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> * Release `0.50.0` (apollographql#2031) * Update version number for release * Updated changelog for release * Update documentation for release changes * Update changelog for apollographql#2015 * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.8 (apollographql#2038) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Update caching.mdx (apollographql#2042) fixed typo * Update ROADMAP.md (apollographql#2053) * Clean up Github API for performance tests * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.9 (apollographql#2062) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Make filesystem diagram a bit easier to understand (apollographql#2063) * Update ASCII art for filesystem, clarify where Apollo Codegen folder goes * update spacing to make comments clearer, fix missing file emoji * Allow periods in arguments to be ignored when parsing cacheKeys (apollographql#2057) * Allow commas in arguments to be ignored when parsing cacheKeys * Update * More tests * No-split case * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.11 (apollographql#2068) Co-authored-by: Renovate Bot <bot@renovateapp.com> * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.12 (apollographql#2074) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Add tutorial on subscriptions to match Android (apollographql#2072) * Remove bits from under construction that are going to be handled with blog posts, update versions * Get rid of fragments and cache, bring over android subscriptions stuff * this is actually part 9 on iOS * bring over screenshots from Android tutorial * Correct link * Update everything for iOS * update index and link from prior step to include subscriptions * Fix link to subscriptions * add missing image * fix borked link * be clearer about replacing the print statement * remove "unnecessary" quotation marks * add missing sentence, make image less ginormous * Fix direction I definitely know my left from my right! :woman-facepaming: Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * add missing word Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Bump mermaid from 8.13.6 to 8.13.8 in /docs (apollographql#2083) Bumps [mermaid](https://github.com/knsv/mermaid) from 8.13.6 to 8.13.8. - [Release notes](https://github.com/knsv/mermaid/releases) - [Changelog](https://github.com/mermaid-js/mermaid/blob/develop/docs/CHANGELOG.md) - [Commits](mermaid-js/mermaid@8.13.6...8.13.8) --- updated-dependencies: - dependency-name: mermaid dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): update dependency engine.io to 4.1.2 [security] (apollographql#2094) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(deps): update dependency follow-redirects to 1.14.7 [security] (apollographql#2092) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(deps): update dependency node-forge to 1.0.0 [security] (apollographql#2095) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Add note about acceptable extensions for types of schema file. (apollographql#2059) * Docs: Bump to Gatsby v3 (apollographql#2104) * Bump gatsby to v3, bump docs theme to version that supports v3 * Bump docs theme to latest prerelease for gatsby v3 * Bump docs theme to new major version * fix(deps): pin dependency gatsby-theme-apollo-docs to 6.0.0 (apollographql#2113) Co-authored-by: Renovate Bot <bot@renovateapp.com> * fix(deps): pin dependency gatsby to 3.14.6 (apollographql#2123) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Edits to intro and installation docs (apollographql#2125) * Edits to intro and installation docs * Fix broken links * Edits from @designatednerd plus new screenshots * Fix tutorial URL and tweak downloading a schema article (apollographql#2133) * Split advanced "Creating a client" content into separate article (apollographql#2143) * WIP on revamp to Creating a client article * Break request chain content into separate article * Fix broken links * Incorporate feedback * Disable flaky integration test Will go back and fix this during WebSocket updates after 1.0 alpha * Update gatsby config to deploy 1.0 alpha docs * Update roadmap after 1.0.0-alpha.1 release (apollographql#2145) * [v1.0.0 Alpha 1] JavascriptError @unchecked Sendable (apollographql#2147) * fix: added unchecked sendable to JavascriptError to be able to compile with Swift 5.6 * Update CircleCI to use latest images * Change JavaScriptError properties to read-only * Fix typo in header doc Co-authored-by: TizianoCoroneo <tizianocoroneo@me.com> Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> * Update documentation to clarify schema download format and filename (apollographql#2160) * Update documentation to clarify schema download format and filename * Fix documentation link * chore(deps): update dependency follow-redirects to 1.14.8 [security] (apollographql#2161) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Update license copyright notice * Delete Jazzy config - not supported * Update list of active maintainers * [Fix apollographql#2170] Do not refetch query watcher from server after cache miss when cache policy is cache only (apollographql#2177) * [Fix apollographql#2170] Do not refetch query watcher from server after cache miss when cache policy is cache only * Revert test broken test infra change * Add `graphql-ws` protocol support (apollographql#2168) * Implement graphql-transport-ws protocol support * Add graphql-transport-ws integration test based on Apollo Server docs-examples * Add CI step for Apollo Server graphql-transport-ws tests * After installing node v12 switch to use v16 * Instruct nvm to use version in .nvmrc * Update documentation and tutorial * Change WSProtocol cases to closer match library names * Remove initializer defaults and require web socket protocol on designated initializer. * Update Subscriptions documentation * Add WSProtocol option for AWS AppSync * Add ping/pong message support required by graphql-ws * Update documentation and tutorial * Add tests for subscriptionWsProtocol * Add tests for graphqlWSProtocol * Revert to naming aligned with the protocols and not the implementation libraries * Use longer async timeout for slower environments like CI * Fix test names * Fix project configuration * Rename protocol parameter on WebSocket initializers * Revert "Use longer async timeout for slower environments like CI" * Fix async timing bug and refactor websocket protocol tests * chore(deps): update dependency prismjs to 1.27.0 [security] (apollographql#2179) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Release 0.51.0 (apollographql#2086) * Update version number * Update changelog * Update SourceDocsLib dependecy * Update generated documentation * Update changelog with cache key caveat * Update changelog for merging of apollographql#2147 * Update changelog for apollographql#2177 and apollographql#2168 * Update documentation * Enable lazy access to the request body creation for leverage in custom built interceptors (apollographql#2184) * Release `0.51.1` (apollographql#2188) * Update project version * Update changelog for apollographql#2184 * Update documentation * Updates for new docs infra (apollographql#2197) * Prepare ios docs for new infra * Add sidebar config * Update ExpansionPanelList components * Update code fences * Move _redirects file * Fix links * Update docset title * Update sidebar config * Add version to ios docs config * Remove imports and fix links * Remove mb from homepage button * Add algolia filters * Remove files from old Gatsby docs theme (apollographql#2202) * Remove files from old Gatsby docs theme * Remove netlify.toml * Clear body on APQ retry in JSONRequest (apollographql#2206) * Release 0.51.2 (apollographql#2207) * Release 0.51.2 * Fix Package file * Fix changelog version. * Add netlify config for deploy previews (apollographql#2208) * Add netlify config for deploy previews * Trigger deploy * Remove circle config * Update docs repo branch * Use buttonlink component * Add codegen option for excludes (apollographql#2205) * Add exclude options * Add test case * Fix typo (apollographql#2212) * Start a docs production deploy when docs changes get merged (apollographql#2211) * Create docs-publish.yml * Tweak ignore command * Bump minimist from 1.2.5 to 1.2.6 in /SimpleUploadServer (apollographql#2214) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump node-fetch from 2.6.6 to 2.6.7 in /SimpleUploadServer (apollographql#2215) Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.6 to 2.6.7. - [Release notes](https://github.com/node-fetch/node-fetch/releases) - [Commits](node-fetch/node-fetch@v2.6.6...v2.6.7) --- updated-dependencies: - dependency-name: node-fetch dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add note to tutorial about the `graphql-ws` subscription library (apollographql#2219) * Add note to tutorial about new subscription library * tweak spacing * tweak phrasing * Add links and clarify which library is not maintained Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Update tutorial-obtain-schema.md (apollographql#2225) Change extension of the downloaded schema file. * Update tutorial-execute-query.md (apollographql#2228) * Update tutorial-execute-query.md * Change the schema file type to json. * chore: Update Xcode build tool versions on CircleCI (apollographql#2242) * chose: update xcode build environment versions * fix: update Node version to match CircleCI image * chore: Update roadmap * fix: Sandbox documentation links (apollographql#2254) * ci: Update xcode image to fix Node version mismatch * ci: Update Node version to match what is installed with Xcode 13.3.1 image * chore: updates roadmap (apollographql#2258) * chore: updates roadmap * Update ROADMAP.md Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Update ROADMAP.md Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Update build phases example to propagate errors to Xcode (apollographql#2260) Without the explicit propagation I wasn't seeing errors in Xcode. Build phase shell env: `/bin/sh` Xcode version: `Version 13.2.1 (13C100)` * Add a comment about a new use of the X-APOLLO-OPERATION-NAME header (apollographql#2267) * Set permissions for GitHub actions (apollographql#2248) * updates roadmap for june 2022 (apollographql#2295) * Update CircleCI tool versions (apollographql#2304) * ci: Update Xcode and iOS simulator versions * ci: Update Node version * fix: `graphql_transport_ws` protocol should send 'complete' to end subscription (apollographql#2320) * fix: graphql_transport_ws protocol should send 'complete' to end subscription * fix: Require MockWebSocket to be initialized with a graphql subscriptions protocol * tests: Fix StarWarsSubscriptionTests to use updated MockWebSocket initializer * Replace print statement with CodegenLogger.log (apollographql#2348) * Fix buttons on docs root (apollographql#2369) * Expose GraphQLResultError Path String (apollographql#2361) * Expose the path as a String * tests: Add unit tests for ResponsePath Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> * Revert "Fix buttons on docs root (apollographql#2369)" (apollographql#2371) This reverts commit d26751a. * release: 0.52.0 (apollographql#2370) * chore: Update release version number * chore: Update changelog * dep: Update packages * docs: Update API reference * Fix typo (apollographql#2379) Removed duplicate "the" * Fix incorrect parameter name (apollographql#2380) `id` was set as a parameter, but the query expects `launchId`. * chore: Update ROADMAP for Beta release cycle (apollographql#2393) * Remove all instances of bitcode as not supported in Xcode 14 (apollographql#2398) https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes * Release 0.53.0 (apollographql#2406) * chore: Update version number * chore: Update CHANGELOG * fix: checkout at tag with legacy optionals behavior (apollographql#2412) * Update version in Swift Scripting docs (apollographql#2416) * Re-added support for iOS 11 Co-authored-by: Anthony Miller <anthonymdev@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot <bot@renovateapp.com> Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> Co-authored-by: hwillson <hugh@octonary.com> Co-authored-by: Hesham Salman <iron-ham@github.com> Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> Co-authored-by: bogdanbeczkowski <bogdanbeczkowski@gmail.com> Co-authored-by: Ellen Shapiro <designatednerd@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Janessa Garrow <janessa@apollographql.com> Co-authored-by: Stephen Barlow <stephen@apollographql.com> Co-authored-by: TizianoCoroneo <tizianocoroneo@me.com> Co-authored-by: Calvin Cestari <calvin.cestari@apollographql.com> Co-authored-by: Rick Fast <rfast@expediagroup.com> Co-authored-by: Trevor Blades <tdblades@gmail.com> Co-authored-by: bannzai <kingkong999yhirose@gmail.com> Co-authored-by: Ayden Lee <lcmini6528@gmail.com> Co-authored-by: Rose M Koron <32436232+rkoron007@users.noreply.github.com> Co-authored-by: Carrione <miroslav.tourek@gmail.com> Co-authored-by: Martin Bonnin <martin@mbonnin.net> Co-authored-by: JV <jvajda@apollographql.com> Co-authored-by: Adam Zethraeus <adam@zethrae.us> Co-authored-by: David Glasser <glasser@apollographql.com> Co-authored-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com> Co-authored-by: Hilton Campbell <github@crosswaterbridge.com> Co-authored-by: Joshua Shroyer <98055534+joshuashroyer-toast@users.noreply.github.com> Co-authored-by: Mischa Hildebrand <web@mischa-hildebrand.de> Co-authored-by: stareque-atlassian <46062249+stareque-atlassian@users.noreply.github.com> Co-authored-by: Yuki Yamamoto <yymmt3.waste@gmail.com>
* Attempted fix for integration test failing on CI (apollographql#2024) * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.6 (apollographql#2026) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Update apollo-tooling to v2.33.9 (apollographql#2028) * Update to v2.33.9 of the CLI tooling * Update StarWarsAPI output generated by updated tooling * Update test with expected output * Keep the parameter spacing * Gateway clarification based on license change * Update SQLite.swift to version 13.0 (apollographql#2015) * Update Package.swift and podspec * Updated XcodeProj * Bump SQLite.swift minimum required version to 0.13.1 Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> * Release `0.50.0` (apollographql#2031) * Update version number for release * Updated changelog for release * Update documentation for release changes * Update changelog for apollographql#2015 * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.8 (apollographql#2038) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Update caching.mdx (apollographql#2042) fixed typo * Update ROADMAP.md (apollographql#2053) * Clean up Github API for performance tests * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.9 (apollographql#2062) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Make filesystem diagram a bit easier to understand (apollographql#2063) * Update ASCII art for filesystem, clarify where Apollo Codegen folder goes * update spacing to make comments clearer, fix missing file emoji * Allow periods in arguments to be ignored when parsing cacheKeys (apollographql#2057) * Allow commas in arguments to be ignored when parsing cacheKeys * Update * More tests * No-split case * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.11 (apollographql#2068) Co-authored-by: Renovate Bot <bot@renovateapp.com> * fix(deps): update dependency gatsby-theme-apollo-docs to v5.3.12 (apollographql#2074) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Add tutorial on subscriptions to match Android (apollographql#2072) * Remove bits from under construction that are going to be handled with blog posts, update versions * Get rid of fragments and cache, bring over android subscriptions stuff * this is actually part 9 on iOS * bring over screenshots from Android tutorial * Correct link * Update everything for iOS * update index and link from prior step to include subscriptions * Fix link to subscriptions * add missing image * fix borked link * be clearer about replacing the print statement * remove "unnecessary" quotation marks * add missing sentence, make image less ginormous * Fix direction I definitely know my left from my right! :woman-facepaming: Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * add missing word Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Bump mermaid from 8.13.6 to 8.13.8 in /docs (apollographql#2083) Bumps [mermaid](https://github.com/knsv/mermaid) from 8.13.6 to 8.13.8. - [Release notes](https://github.com/knsv/mermaid/releases) - [Changelog](https://github.com/mermaid-js/mermaid/blob/develop/docs/CHANGELOG.md) - [Commits](mermaid-js/mermaid@8.13.6...8.13.8) --- updated-dependencies: - dependency-name: mermaid dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): update dependency engine.io to 4.1.2 [security] (apollographql#2094) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(deps): update dependency follow-redirects to 1.14.7 [security] (apollographql#2092) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(deps): update dependency node-forge to 1.0.0 [security] (apollographql#2095) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Add note about acceptable extensions for types of schema file. (apollographql#2059) * Docs: Bump to Gatsby v3 (apollographql#2104) * Bump gatsby to v3, bump docs theme to version that supports v3 * Bump docs theme to latest prerelease for gatsby v3 * Bump docs theme to new major version * fix(deps): pin dependency gatsby-theme-apollo-docs to 6.0.0 (apollographql#2113) Co-authored-by: Renovate Bot <bot@renovateapp.com> * fix(deps): pin dependency gatsby to 3.14.6 (apollographql#2123) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Edits to intro and installation docs (apollographql#2125) * Edits to intro and installation docs * Fix broken links * Edits from @designatednerd plus new screenshots * Fix tutorial URL and tweak downloading a schema article (apollographql#2133) * Split advanced "Creating a client" content into separate article (apollographql#2143) * WIP on revamp to Creating a client article * Break request chain content into separate article * Fix broken links * Incorporate feedback * Disable flaky integration test Will go back and fix this during WebSocket updates after 1.0 alpha * Update gatsby config to deploy 1.0 alpha docs * Update roadmap after 1.0.0-alpha.1 release (apollographql#2145) * [v1.0.0 Alpha 1] JavascriptError @unchecked Sendable (apollographql#2147) * fix: added unchecked sendable to JavascriptError to be able to compile with Swift 5.6 * Update CircleCI to use latest images * Change JavaScriptError properties to read-only * Fix typo in header doc Co-authored-by: TizianoCoroneo <tizianocoroneo@me.com> Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> * Update documentation to clarify schema download format and filename (apollographql#2160) * Update documentation to clarify schema download format and filename * Fix documentation link * chore(deps): update dependency follow-redirects to 1.14.8 [security] (apollographql#2161) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Update license copyright notice * Delete Jazzy config - not supported * Update list of active maintainers * [Fix apollographql#2170] Do not refetch query watcher from server after cache miss when cache policy is cache only (apollographql#2177) * [Fix apollographql#2170] Do not refetch query watcher from server after cache miss when cache policy is cache only * Revert test broken test infra change * Add `graphql-ws` protocol support (apollographql#2168) * Implement graphql-transport-ws protocol support * Add graphql-transport-ws integration test based on Apollo Server docs-examples * Add CI step for Apollo Server graphql-transport-ws tests * After installing node v12 switch to use v16 * Instruct nvm to use version in .nvmrc * Update documentation and tutorial * Change WSProtocol cases to closer match library names * Remove initializer defaults and require web socket protocol on designated initializer. * Update Subscriptions documentation * Add WSProtocol option for AWS AppSync * Add ping/pong message support required by graphql-ws * Update documentation and tutorial * Add tests for subscriptionWsProtocol * Add tests for graphqlWSProtocol * Revert to naming aligned with the protocols and not the implementation libraries * Use longer async timeout for slower environments like CI * Fix test names * Fix project configuration * Rename protocol parameter on WebSocket initializers * Revert "Use longer async timeout for slower environments like CI" * Fix async timing bug and refactor websocket protocol tests * chore(deps): update dependency prismjs to 1.27.0 [security] (apollographql#2179) Co-authored-by: Renovate Bot <bot@renovateapp.com> * Release 0.51.0 (apollographql#2086) * Update version number * Update changelog * Update SourceDocsLib dependecy * Update generated documentation * Update changelog with cache key caveat * Update changelog for merging of apollographql#2147 * Update changelog for apollographql#2177 and apollographql#2168 * Update documentation * Enable lazy access to the request body creation for leverage in custom built interceptors (apollographql#2184) * Release `0.51.1` (apollographql#2188) * Update project version * Update changelog for apollographql#2184 * Update documentation * Updates for new docs infra (apollographql#2197) * Prepare ios docs for new infra * Add sidebar config * Update ExpansionPanelList components * Update code fences * Move _redirects file * Fix links * Update docset title * Update sidebar config * Add version to ios docs config * Remove imports and fix links * Remove mb from homepage button * Add algolia filters * Remove files from old Gatsby docs theme (apollographql#2202) * Remove files from old Gatsby docs theme * Remove netlify.toml * Clear body on APQ retry in JSONRequest (apollographql#2206) * Release 0.51.2 (apollographql#2207) * Release 0.51.2 * Fix Package file * Fix changelog version. * Add netlify config for deploy previews (apollographql#2208) * Add netlify config for deploy previews * Trigger deploy * Remove circle config * Update docs repo branch * Use buttonlink component * Add codegen option for excludes (apollographql#2205) * Add exclude options * Add test case * Fix typo (apollographql#2212) * Start a docs production deploy when docs changes get merged (apollographql#2211) * Create docs-publish.yml * Tweak ignore command * Bump minimist from 1.2.5 to 1.2.6 in /SimpleUploadServer (apollographql#2214) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump node-fetch from 2.6.6 to 2.6.7 in /SimpleUploadServer (apollographql#2215) Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.6 to 2.6.7. - [Release notes](https://github.com/node-fetch/node-fetch/releases) - [Commits](node-fetch/node-fetch@v2.6.6...v2.6.7) --- updated-dependencies: - dependency-name: node-fetch dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add note to tutorial about the `graphql-ws` subscription library (apollographql#2219) * Add note to tutorial about new subscription library * tweak spacing * tweak phrasing * Add links and clarify which library is not maintained Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Update tutorial-obtain-schema.md (apollographql#2225) Change extension of the downloaded schema file. * Update tutorial-execute-query.md (apollographql#2228) * Update tutorial-execute-query.md * Change the schema file type to json. * chore: Update Xcode build tool versions on CircleCI (apollographql#2242) * chose: update xcode build environment versions * fix: update Node version to match CircleCI image * chore: Update roadmap * fix: Sandbox documentation links (apollographql#2254) * ci: Update xcode image to fix Node version mismatch * ci: Update Node version to match what is installed with Xcode 13.3.1 image * chore: updates roadmap (apollographql#2258) * chore: updates roadmap * Update ROADMAP.md Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Update ROADMAP.md Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> * Update build phases example to propagate errors to Xcode (apollographql#2260) Without the explicit propagation I wasn't seeing errors in Xcode. Build phase shell env: `/bin/sh` Xcode version: `Version 13.2.1 (13C100)` * Add a comment about a new use of the X-APOLLO-OPERATION-NAME header (apollographql#2267) * Set permissions for GitHub actions (apollographql#2248) * updates roadmap for june 2022 (apollographql#2295) * Update CircleCI tool versions (apollographql#2304) * ci: Update Xcode and iOS simulator versions * ci: Update Node version * fix: `graphql_transport_ws` protocol should send 'complete' to end subscription (apollographql#2320) * fix: graphql_transport_ws protocol should send 'complete' to end subscription * fix: Require MockWebSocket to be initialized with a graphql subscriptions protocol * tests: Fix StarWarsSubscriptionTests to use updated MockWebSocket initializer * Replace print statement with CodegenLogger.log (apollographql#2348) * Fix buttons on docs root (apollographql#2369) * Expose GraphQLResultError Path String (apollographql#2361) * Expose the path as a String * tests: Add unit tests for ResponsePath Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> * Revert "Fix buttons on docs root (apollographql#2369)" (apollographql#2371) This reverts commit d26751a. * release: 0.52.0 (apollographql#2370) * chore: Update release version number * chore: Update changelog * dep: Update packages * docs: Update API reference * Fix typo (apollographql#2379) Removed duplicate "the" * Fix incorrect parameter name (apollographql#2380) `id` was set as a parameter, but the query expects `launchId`. * chore: Update ROADMAP for Beta release cycle (apollographql#2393) * Remove all instances of bitcode as not supported in Xcode 14 (apollographql#2398) https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes * Release 0.53.0 (apollographql#2406) * chore: Update version number * chore: Update CHANGELOG * fix: checkout at tag with legacy optionals behavior (apollographql#2412) * Update version in Swift Scripting docs (apollographql#2416) * Re-added support for iOS 11 * Update to 0.53.0 Co-authored-by: Anthony Miller <anthonymdev@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot <bot@renovateapp.com> Co-authored-by: Calvin Cestari <calvincestari@users.noreply.github.com> Co-authored-by: hwillson <hugh@octonary.com> Co-authored-by: Hesham Salman <iron-ham@github.com> Co-authored-by: Calvin Cestari <calvin.cestari@gmail.com> Co-authored-by: bogdanbeczkowski <bogdanbeczkowski@gmail.com> Co-authored-by: Ellen Shapiro <designatednerd@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Janessa Garrow <janessa@apollographql.com> Co-authored-by: Stephen Barlow <stephen@apollographql.com> Co-authored-by: TizianoCoroneo <tizianocoroneo@me.com> Co-authored-by: Calvin Cestari <calvin.cestari@apollographql.com> Co-authored-by: Rick Fast <rfast@expediagroup.com> Co-authored-by: Trevor Blades <tdblades@gmail.com> Co-authored-by: bannzai <kingkong999yhirose@gmail.com> Co-authored-by: Ayden Lee <lcmini6528@gmail.com> Co-authored-by: Rose M Koron <32436232+rkoron007@users.noreply.github.com> Co-authored-by: Carrione <miroslav.tourek@gmail.com> Co-authored-by: Martin Bonnin <martin@mbonnin.net> Co-authored-by: JV <jvajda@apollographql.com> Co-authored-by: Adam Zethraeus <adam@zethrae.us> Co-authored-by: David Glasser <glasser@apollographql.com> Co-authored-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com> Co-authored-by: Hilton Campbell <github@crosswaterbridge.com> Co-authored-by: Joshua Shroyer <98055534+joshuashroyer-toast@users.noreply.github.com> Co-authored-by: Mischa Hildebrand <web@mischa-hildebrand.de> Co-authored-by: stareque-atlassian <46062249+stareque-atlassian@users.noreply.github.com> Co-authored-by: Yuki Yamamoto <yymmt3.waste@gmail.com>
* Implement graphql-transport-ws protocol support * Add graphql-transport-ws integration test based on Apollo Server docs-examples * Add CI step for Apollo Server graphql-transport-ws tests * After installing node v12 switch to use v16 * Instruct nvm to use version in .nvmrc * Update documentation and tutorial * Change WSProtocol cases to closer match library names * Remove initializer defaults and require web socket protocol on designated initializer. * Update Subscriptions documentation * Add WSProtocol option for AWS AppSync * Add ping/pong message support required by graphql-ws * Update documentation and tutorial * Add tests for subscriptionWsProtocol * Add tests for graphqlWSProtocol * Revert to naming aligned with the protocols and not the implementation libraries * Use longer async timeout for slower environments like CI * Fix test names * Fix project configuration * Rename protocol parameter on WebSocket initializers * Revert "Use longer async timeout for slower environments like CI" * Fix async timing bug and refactor websocket protocol tests
* Update version number * Update changelog * Update SourceDocsLib dependecy * Update generated documentation * Update changelog with cache key caveat * Update changelog for merging of apollographql#2147 * Update changelog for apollographql#2177 and apollographql#2168 * Update documentation
This introduces support for the
graphql-transport-ws
WebSocket sub-protocol implemented in the graphql-ws library. This is a modern, actively maintained successor to thegraphql-ws
sub-protocol implemented in the subscriptions-transport-ws library.Notable changes:
but defaults to using theThis is a breaking change that requires the user to select a protocol when initializing agraphql_ws
protocol.WebSocket
instance.SubscriptionAPI
) which is built with a single test to validate the implementation of thegraphql-transport-ws
protocol in an end-to-end test using an Apollo Server documentation example.SimpleUploadServer
.How to configure which WebSocket protocol is used:
Providing aURLRequest
with theSec-WebSocket-Protocol
header preconfigured. WebSocket will respect this value if preset otherwise will default to using thegraphql_ws
protocol.WebSocket(request:webSocketProtocol:)
,WebSocket(url:webSocketProtocol:)
orWebSocket(url:writeQueueQOS:webSocketProtocol:)
Protocol differences and how we support them
All protocol messages are defined in OperationMessage and the behavior logic is in WebSocketTransport. The way this is implemented now effectively means there is no segmentation of protocol behaviour and an active web socket could receive a message from any protocol and it would process it; not ideal.
Future changes
This is an aged implementation that has served us well so far, and I've added tests where we had none before but is not scalable nor ideal. Major version 2.0 will focus on the networking stack and at that time we can completely overhaul how we support GraphQL over WebSocket protocols.
Closes #1622