{"version":3,"sources":["../../../src/adapters/apollo-server/apollo-server-mutation.adapter.ts"],"sourcesContent":["//#region Imports\n\nimport type {\n  AdapterContract,\n  AdapterRequest,\n  GetResponseAdapterProps,\n  OnErrorProps,\n} from '../../contracts';\nimport {\n  type ILogger,\n  getDefaultIfUndefined,\n  getEventBodyAsBuffer,\n} from '../../core';\n\n//#endregion\n\n/**\n * The options for {@link ApolloServerMutationAdapter}\n *\n * @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter\n * @public\n */\nexport type ApolloServerMutationAdapterOptions = {\n  /**\n   * Specify the name of mutation that will be called when an event was received\n   */\n  mutationName: string;\n\n  /**\n   * Specify the mutation result schema.\n   * Use this to customize the behavior when you need to return a specific object to be handled by the Adapter, like SQS with Batch Mode.\n   *\n   * @defaultValue `{ __typename }`\n   */\n  mutationResultQuery?: string;\n};\n\n/**\n * The adapter that wraps another adapter to force a transformation of the event data as a mutation to Apollo Server be able to handle.\n *\n * @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter\n * @public\n */\nexport class ApolloServerMutationAdapter<TEvent, TContext, TResponse>\n  implements AdapterContract<TEvent, TContext, TResponse>\n{\n  //#region Constructor\n\n  /**\n   * The default constructor\n   */\n  constructor(\n    protected readonly baseAdapter: AdapterContract<\n      TEvent,\n      TContext,\n      TResponse\n    >,\n    protected readonly options: ApolloServerMutationAdapterOptions,\n  ) {}\n\n  //#endregion\n\n  //#region Public Methods\n\n  /**\n   * {@inheritDoc}\n   */\n  public canHandle(event: unknown, context: TContext, log: ILogger): boolean {\n    return this.baseAdapter.canHandle(event, context, log);\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  public getAdapterName(): string {\n    return this.baseAdapter.getAdapterName() + 'Mutation';\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  public getRequest(\n    event: TEvent,\n    context: TContext,\n    log: ILogger,\n  ): AdapterRequest {\n    const request = this.baseAdapter.getRequest(event, context, log);\n\n    request.method = 'POST';\n\n    const operationName = this.options.mutationName;\n    const mutationResultQuery = getDefaultIfUndefined(\n      this.options.mutationResultQuery,\n      '{ __typename }',\n    );\n\n    const mutationBody = JSON.stringify({\n      operationName,\n      query: `mutation ${operationName} ($event: String) { ${operationName} (event: $event) ${mutationResultQuery} }`,\n      variables: {\n        event: request.body?.toString() || '',\n      },\n    });\n\n    const [buffer, contentLength] = getEventBodyAsBuffer(mutationBody, false);\n\n    request.body = buffer;\n    request.headers['content-type'] = 'application/json';\n    request.headers['content-length'] = String(contentLength);\n\n    return request;\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  public getResponse(props: GetResponseAdapterProps<TEvent>): TResponse {\n    const { data, errors } = JSON.parse(props.body);\n\n    if (!errors) {\n      return this.baseAdapter.getResponse({\n        ...props,\n        body: JSON.stringify(data[this.options.mutationName]),\n      });\n    }\n\n    // when error happens, is the responsability of base adapter\n    // to deal with error status code.\n    return this.baseAdapter.getResponse(props);\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  public onErrorWhileForwarding(props: OnErrorProps<TEvent, TResponse>): void {\n    return this.baseAdapter.onErrorWhileForwarding(props);\n  }\n\n  //#endregion\n}\n"],"mappings":"iGA2CO,IAAMA,EAAN,KAEP,CAME,YACqBC,EAKAC,EACnB,CANmB,iBAAAD,EAKA,aAAAC,CAClB,CA1DL,MA6CA,CAAAC,EAAA,oCAsBS,UAAUC,EAAgBC,EAAmBC,EAAuB,CACzE,OAAO,KAAK,YAAY,UAAUF,EAAOC,EAASC,CAAG,CACvD,CAKO,gBAAyB,CAC9B,OAAO,KAAK,YAAY,eAAe,EAAI,UAC7C,CAKO,WACLF,EACAC,EACAC,EACgB,CAChB,IAAMC,EAAU,KAAK,YAAY,WAAWH,EAAOC,EAASC,CAAG,EAE/DC,EAAQ,OAAS,OAEjB,IAAMC,EAAgB,KAAK,QAAQ,aAC7BC,EAAsBC,EAC1B,KAAK,QAAQ,oBACb,gBACF,EAEMC,EAAe,KAAK,UAAU,CAClC,cAAAH,EACA,MAAO,YAAYA,CAAa,uBAAuBA,CAAa,oBAAoBC,CAAmB,KAC3G,UAAW,CACT,MAAOF,EAAQ,MAAM,SAAS,GAAK,EACrC,CACF,CAAC,EAEK,CAACK,EAAQC,CAAa,EAAIC,EAAqBH,EAAc,EAAK,EAExE,OAAAJ,EAAQ,KAAOK,EACfL,EAAQ,QAAQ,cAAc,EAAI,mBAClCA,EAAQ,QAAQ,gBAAgB,EAAI,OAAOM,CAAa,EAEjDN,CACT,CAKO,YAAYQ,EAAmD,CACpE,GAAM,CAAE,KAAAC,EAAM,OAAAC,CAAO,EAAI,KAAK,MAAMF,EAAM,IAAI,EAE9C,OAAKE,EASE,KAAK,YAAY,YAAYF,CAAK,EARhC,KAAK,YAAY,YAAY,CAClC,GAAGA,EACH,KAAM,KAAK,UAAUC,EAAK,KAAK,QAAQ,YAAY,CAAC,CACtD,CAAC,CAML,CAKO,uBAAuBD,EAA8C,CAC1E,OAAO,KAAK,YAAY,uBAAuBA,CAAK,CACtD,CAGF","names":["ApolloServerMutationAdapter","baseAdapter","options","__name","event","context","log","request","operationName","mutationResultQuery","getDefaultIfUndefined","mutationBody","buffer","contentLength","getEventBodyAsBuffer","props","data","errors"]}