Extensions
extensions
contains a set of methods to make additional actions within your
resolvers.
extensions.evictFromApiCache(typeName: string, fieldName: string, keyValuePair: Record<string, string>) : Object
-
Evicts an item from the AWS AppSync server-side cache. The first argument is the type name. The second argument is the field name. The third argument is an object containing key-value pair items that specify the caching key value. You must put the items in the object in the same order as the caching keys in the cached resolver's
cachingKey
. For more information about caching, see Caching behavior.Example 1:
This example evicts the items that were cached for a resolver called
Query.allClasses
on which a caching key calledcontext.arguments.semester
was used. When the mutation is called and the resolver runs, if an entry is successfully cleared, then the response contains anapiCacheEntriesDeleted
value in the extensions object that shows how many entries were deleted.import { util, extensions } from '@aws-appsync/utils'; export const request = (ctx) => ({ payload: null }); export function response(ctx) { extensions.evictFromApiCache('Query', 'allClasses', { 'context.arguments.semester': ctx.args.semester, }); return null; }
Note
This function only works for mutations, not queries.
extensions.setSubscriptionFilter(filterJsonObject)
-
Defines enhanced subscription filters. Each subscription notification event is evaluated against provided subscription filters and delivers notifications to clients if all filters evaluate to
true
. The argument isfilterJsonObject
(More information about this argument can be found below in the Argument: filterJsonObject section.). See Enhanced subscription filtering.Note
You can use this extension function only in the response handler of a subscription resolver. Also, we recommend using
util.transform.toSubscriptionFilter
to create your filter. extensions.setSubscriptionInvalidationFilter(filterJsonObject)
-
Defines subscription invalidation filters. Subscription filters are evaluated against the invalidation payload, then invalidate a given subscription if the filters evaluate to
true
. The argument isfilterJsonObject
(More information about this argument can be found below in the Argument: filterJsonObject section.). See Enhanced subscription filtering.Note
You can use this extension function only in the response handler of a subscription resolver. Also, we recommend using
util.transform.toSubscriptionFilter
to create your filter. extensions.invalidateSubscriptions(invalidationJsonObject)
-
Used to initiate a subscription invalidation from a mutation. The argument is
invalidationJsonObject
(More information about this argument can be found below in the Argument: invalidationJsonObject section.).Note
This extension can be used only in the response mapping templates of the mutation resolvers.
You can only use at most five unique
extensions.invalidateSubscriptions()
method calls in any single request. If you exceed this limit, you will receive a GraphQL error.
Argument: filterJsonObject
The
JSON object defines either subscription or invalidation filters. It's an array of
filters in a filterGroup
. Each filter is a collection of individual
filters.
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
Each filter has three attributes:
-
fieldName
– The GraphQL schema field. -
operator
– The operator type. -
value
– The values to compare to the subscription notificationfieldName
value.
The following is an example assignment of these attributes:
{ "fieldName" : "severity", "operator" : "le", "value" : context.result.severity }
Argument: invalidationJsonObject
The invalidationJsonObject
defines the following:
-
subscriptionField
– The GraphQL schema subscription to invalidate. A single subscription, defined as a string in thesubscriptionField
, is considered for invalidation. -
payload
– A key-value pair list that's used as the input for invalidating subscriptions if the invalidation filter evaluates totrue
against their values.The following example invalidates subscribed and connected clients using the
onUserDelete
subscription when the invalidation filter defined in the subscription resolver evaluates totrue
against thepayload
value.export const request = (ctx) => ({ payload: null }); export function response(ctx) { extensions.invalidateSubscriptions({ subscriptionField: 'onUserDelete', payload: { group: 'Developer', type: 'Full-Time' }, }); return ctx.result; }