diff --git a/.api-reports/api-report-core.api.md b/.api-reports/api-report-core.api.md index 4bc22faf6ef..53a5e866698 100644 --- a/.api-reports/api-report-core.api.md +++ b/.api-reports/api-report-core.api.md @@ -200,10 +200,7 @@ export class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -219,10 +216,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-errors.api.md b/.api-reports/api-report-errors.api.md index 96c8bafc999..b388b1263dc 100644 --- a/.api-reports/api-report-errors.api.md +++ b/.api-reports/api-report-errors.api.md @@ -31,10 +31,7 @@ export class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -50,10 +47,7 @@ export interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-link_error.api.md b/.api-reports/api-report-link_error.api.md index bf6e3185840..5b1fb7b3ebf 100644 --- a/.api-reports/api-report-link_error.api.md +++ b/.api-reports/api-report-link_error.api.md @@ -6,7 +6,6 @@ import type { DocumentNode } from 'graphql'; import type { FormattedExecutionResult } from 'graphql'; -import type { GraphQLErrorExtensions } from 'graphql'; import type { GraphQLFormattedError } from 'graphql'; import { Observable } from 'zen-observable-ts'; import type { Observer } from 'zen-observable-ts'; @@ -86,10 +85,7 @@ export interface ErrorResponse { networkError?: NetworkError; // (undocumented) operation: Operation; - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; // (undocumented) response?: FormattedExecutionResult; } diff --git a/.api-reports/api-report-react.api.md b/.api-reports/api-report-react.api.md index bd6bae479c4..aa55cb6c431 100644 --- a/.api-reports/api-report-react.api.md +++ b/.api-reports/api-report-react.api.md @@ -257,10 +257,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -276,10 +273,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-react_components.api.md b/.api-reports/api-report-react_components.api.md index b1c44362975..e959ebba079 100644 --- a/.api-reports/api-report-react_components.api.md +++ b/.api-reports/api-report-react_components.api.md @@ -235,10 +235,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -254,10 +251,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-react_context.api.md b/.api-reports/api-report-react_context.api.md index 0ab3648be73..fce12509f51 100644 --- a/.api-reports/api-report-react_context.api.md +++ b/.api-reports/api-report-react_context.api.md @@ -255,10 +255,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -274,10 +271,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-react_hoc.api.md b/.api-reports/api-report-react_hoc.api.md index 25ca4e27760..bed23925132 100644 --- a/.api-reports/api-report-react_hoc.api.md +++ b/.api-reports/api-report-react_hoc.api.md @@ -234,10 +234,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -253,10 +250,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-react_hooks.api.md b/.api-reports/api-report-react_hooks.api.md index b293da7529f..83868e72f46 100644 --- a/.api-reports/api-report-react_hooks.api.md +++ b/.api-reports/api-report-react_hooks.api.md @@ -233,10 +233,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -252,10 +249,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-react_internal.api.md b/.api-reports/api-report-react_internal.api.md index c7e5bffee1a..91322733672 100644 --- a/.api-reports/api-report-react_internal.api.md +++ b/.api-reports/api-report-react_internal.api.md @@ -233,10 +233,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -252,10 +249,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-react_ssr.api.md b/.api-reports/api-report-react_ssr.api.md index fd416ee7db5..9c6b605a377 100644 --- a/.api-reports/api-report-react_ssr.api.md +++ b/.api-reports/api-report-react_ssr.api.md @@ -234,10 +234,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -253,10 +250,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-testing.api.md b/.api-reports/api-report-testing.api.md index 876fd753717..6763c70702e 100644 --- a/.api-reports/api-report-testing.api.md +++ b/.api-reports/api-report-testing.api.md @@ -234,10 +234,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -253,10 +250,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-testing_core.api.md b/.api-reports/api-report-testing_core.api.md index 56d109dd464..82e35138da4 100644 --- a/.api-reports/api-report-testing_core.api.md +++ b/.api-reports/api-report-testing_core.api.md @@ -233,10 +233,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -252,10 +249,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report-utilities.api.md b/.api-reports/api-report-utilities.api.md index 2040d463195..c8a866c726d 100644 --- a/.api-reports/api-report-utilities.api.md +++ b/.api-reports/api-report-utilities.api.md @@ -248,10 +248,7 @@ class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -267,10 +264,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.api-reports/api-report.api.md b/.api-reports/api-report.api.md index 5d15453120a..f17d91511c0 100644 --- a/.api-reports/api-report.api.md +++ b/.api-reports/api-report.api.md @@ -223,10 +223,7 @@ export class ApolloError extends Error { // (undocumented) networkError: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors: ReadonlyArray; } // @public (undocumented) @@ -242,10 +239,7 @@ interface ApolloErrorOptions { // (undocumented) networkError?: Error | ServerParseError | ServerError | null; // (undocumented) - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; } // @public (undocumented) diff --git a/.changeset/curvy-seahorses-walk.md b/.changeset/curvy-seahorses-walk.md new file mode 100644 index 00000000000..377f9ee5803 --- /dev/null +++ b/.changeset/curvy-seahorses-walk.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Fix type of `extensions` in `protocolErrors` for `ApolloError` and the `onError` link. According to the [multipart HTTP subscription protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol), fatal tranport errors follow the [GraphQL error format](https://spec.graphql.org/draft/#sec-Errors.Error-Result-Format) which require `extensions` to be a map as its value instead of an array. diff --git a/src/__tests__/__snapshots__/graphqlSubscriptions.ts.snap b/src/__tests__/__snapshots__/graphqlSubscriptions.ts.snap index cec1ed33bf9..8497fae92f5 100644 --- a/src/__tests__/__snapshots__/graphqlSubscriptions.ts.snap +++ b/src/__tests__/__snapshots__/graphqlSubscriptions.ts.snap @@ -40,11 +40,9 @@ ApolloError { exports[`GraphQL Subscriptions should throw an error if the result has protocolErrors on it 1`] = ` ApolloError { "cause": Object { - "extensions": Array [ - Object { - "code": "WEBSOCKET_MESSAGE_ERROR", - }, - ], + "extensions": Object { + "code": "WEBSOCKET_MESSAGE_ERROR", + }, "message": "cannot read message from websocket", }, "clientErrors": Array [], @@ -55,11 +53,9 @@ ApolloError { "networkError": null, "protocolErrors": Array [ Object { - "extensions": Array [ - Object { - "code": "WEBSOCKET_MESSAGE_ERROR", - }, - ], + "extensions": Object { + "code": "WEBSOCKET_MESSAGE_ERROR", + }, "message": "cannot read message from websocket", }, ], diff --git a/src/__tests__/graphqlSubscriptions.ts b/src/__tests__/graphqlSubscriptions.ts index 2008c92285f..d553f3b802d 100644 --- a/src/__tests__/graphqlSubscriptions.ts +++ b/src/__tests__/graphqlSubscriptions.ts @@ -275,11 +275,9 @@ describe("GraphQL Subscriptions", () => { [PROTOCOL_ERRORS_SYMBOL]: [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, } as any, ], }, @@ -296,11 +294,9 @@ describe("GraphQL Subscriptions", () => { protocolErrors: [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, }, ], }) @@ -390,12 +386,10 @@ describe("GraphQL Subscriptions", () => { [PROTOCOL_ERRORS_SYMBOL]: [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], - } as any, + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, + }, ], }, }, @@ -411,11 +405,9 @@ describe("GraphQL Subscriptions", () => { protocolErrors: [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, }, ], }) @@ -486,12 +478,10 @@ describe("GraphQL Subscriptions", () => { [PROTOCOL_ERRORS_SYMBOL]: [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], - } as any, + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, + }, ], }, }, diff --git a/src/errors/__tests__/ApolloError.ts b/src/errors/__tests__/ApolloError.ts index e672536f667..f6f49d85141 100644 --- a/src/errors/__tests__/ApolloError.ts +++ b/src/errors/__tests__/ApolloError.ts @@ -9,11 +9,9 @@ describe("ApolloError", () => { const protocolErrors = [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, }, ]; const networkError = new Error("Network error"); @@ -80,11 +78,9 @@ describe("ApolloError", () => { const protocolErrors = [ { message: "cannot read message from websocket", - extensions: [ - { - code: "WEBSOCKET_MESSAGE_ERROR", - }, - ], + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, }, ]; const apolloError = new ApolloError({ diff --git a/src/errors/index.ts b/src/errors/index.ts index 736c2e464ca..981e461dd1b 100644 --- a/src/errors/index.ts +++ b/src/errors/index.ts @@ -22,10 +22,7 @@ type FetchResultWithSymbolExtensions = FetchResult & { export interface ApolloErrorOptions { graphQLErrors?: ReadonlyArray; - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; clientErrors?: ReadonlyArray; networkError?: Error | ServerParseError | ServerError | null; errorMessage?: string; @@ -86,10 +83,7 @@ export class ApolloError extends Error { public name: string; public message: string; public graphQLErrors: ReadonlyArray; - public protocolErrors: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + public protocolErrors: ReadonlyArray; public clientErrors: ReadonlyArray; public networkError: Error | ServerParseError | ServerError | null; /** diff --git a/src/link/error/index.ts b/src/link/error/index.ts index e77e7b27f8d..4b0de084428 100644 --- a/src/link/error/index.ts +++ b/src/link/error/index.ts @@ -1,8 +1,4 @@ -import type { - FormattedExecutionResult, - GraphQLErrorExtensions, - GraphQLFormattedError, -} from "graphql"; +import type { FormattedExecutionResult, GraphQLFormattedError } from "graphql"; import { graphQLResultHasProtocolErrors, @@ -28,10 +24,7 @@ export interface ErrorResponse { * Fatal transport-level errors from multipart subscriptions. * See the [multipart subscription protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) for more information. */ - protocolErrors?: ReadonlyArray<{ - message: string; - extensions?: GraphQLErrorExtensions[]; - }>; + protocolErrors?: ReadonlyArray; response?: FormattedExecutionResult; operation: Operation; forward: NextLink;