api.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import type { TypedDocumentNode } from '@graphql-typed-document-node/core';
  2. import { GraphQLClient, RequestDocument } from 'graphql-request';
  3. import { request as graphqlRequest, Variables } from 'graphql-request';
  4. const API_URL = 'http://localhost:3000/admin-api';
  5. const client = new GraphQLClient(API_URL, {
  6. credentials: 'include',
  7. mode: 'cors',
  8. });
  9. export type VariablesAndRequestHeadersArgs<V extends Variables> =
  10. V extends Record<any, never>
  11. ? [variables?: V, requestHeaders?: HeadersInit]
  12. : [variables: V, requestHeaders?: HeadersInit];
  13. function query<T, V extends Variables = Variables>(
  14. document: RequestDocument | TypedDocumentNode<T, V>,
  15. variables?: V,
  16. ) {
  17. return client.request<T>({
  18. document,
  19. variables,
  20. });
  21. }
  22. function mutate<T, V extends Variables = Variables>(
  23. document: RequestDocument | TypedDocumentNode<T, V>,
  24. ): (variables: V) => Promise<T>;
  25. function mutate<T, V extends Variables = Variables>(
  26. document: RequestDocument | TypedDocumentNode<T, V>,
  27. variables: V,
  28. ): Promise<T>;
  29. function mutate<T, V extends Variables = Variables>(
  30. document: RequestDocument | TypedDocumentNode<T, V>,
  31. maybeVariables?: V,
  32. ) {
  33. if (maybeVariables) {
  34. return client.request<T>({
  35. document,
  36. variables: maybeVariables,
  37. });
  38. } else {
  39. return (variables: V): Promise<T> => {
  40. return client.request<T>({
  41. document,
  42. variables,
  43. });
  44. };
  45. }
  46. }
  47. export const api = {
  48. query,
  49. mutate,
  50. };