diff --git a/packages/api-graphql/src/internals/operations/get.ts b/packages/api-graphql/src/internals/operations/get.ts index fc727f22c21..f0a87a88759 100644 --- a/packages/api-graphql/src/internals/operations/get.ts +++ b/packages/api-graphql/src/internals/operations/get.ts @@ -13,9 +13,10 @@ import { import { AuthModeParams, ClientWithModels, + ConfigurableHeadersParams, + FieldSelectionParams, GraphQLOptionsV6, GraphQLResult, - ListArgs, QueryArgs, V6Client, V6ClientSSRRequest, @@ -60,7 +61,7 @@ async function _get( modelIntrospection: ModelIntrospectionSchema, model: SchemaModel, arg: QueryArgs, - options: AuthModeParams & ListArgs, + options: AuthModeParams & ConfigurableHeadersParams & FieldSelectionParams, operation: ModelOperation, context?: AmplifyServer.ContextSpec, ) { diff --git a/packages/api-graphql/src/internals/operations/subscription.ts b/packages/api-graphql/src/internals/operations/subscription.ts index 03947238fb6..50d43651663 100644 --- a/packages/api-graphql/src/internals/operations/subscription.ts +++ b/packages/api-graphql/src/internals/operations/subscription.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { map } from 'rxjs'; -import { V6Client, GraphqlSubscriptionResult } from '../../types'; +import { V6Client, GraphqlSubscriptionResult, ListArgs, AuthModeParams } from '../../types'; import { initializeModel, generateGraphQLDocument, @@ -24,7 +24,7 @@ export function subscriptionFactory( ) { const { name } = model as any; - const subscription = (args?: any) => { + const subscription = (args?: ListArgs & AuthModeParams) => { const query = generateGraphQLDocument( modelIntrospection, name, @@ -56,15 +56,20 @@ export function subscriptionFactory( map(value => { const [key] = Object.keys(value.data); const data = (value.data as any)[key]; - const [initialized] = initializeModel( - client as V6Client>, - name, - [data], - modelIntrospection, - auth.authMode, - auth.authToken, - ); - return initialized; + + if (args?.selectionSet) { + return data; + } else { + const [initialized] = initializeModel( + client as V6Client>, + name, + [data], + modelIntrospection, + auth.authMode, + auth.authToken, + ); + return initialized; + } }), ); }; diff --git a/packages/api-graphql/src/types/index.ts b/packages/api-graphql/src/types/index.ts index 87dcac756d4..8daafb4fd71 100644 --- a/packages/api-graphql/src/types/index.ts +++ b/packages/api-graphql/src/types/index.ts @@ -457,12 +457,18 @@ export type ServerClientGenerationParams = { export type QueryArgs = Record; -export type ListArgs = { +export type FieldSelectionParams = { selectionSet?: string[]; - filter?: {}; +}; + +export type ConfigurableHeadersParams = { headers?: CustomHeaders; }; +export type ListArgs = { + filter?: {}; +} & ConfigurableHeadersParams & FieldSelectionParams; + export type AuthModeParams = { authMode?: GraphQLAuthMode; authToken?: string;