@8base/apollo-links

A collection of Apollo links for more efficient communication with the 8base API.

Usage no npm install needed!

<script type="module">
  import 8baseApolloLinks from 'https://cdn.skypack.dev/@8base/apollo-links';
</script>

README

8base Apollo Links

A collection of Apollo links for more efficient communication with the 8base API.

API

Table of Contents

TokenRefreshLink

Extends ApolloLink

Token Refresh Link renew authentication token when it's expired.

Parameters

  • options TokenRefreshLinkOptions The token refresh link options.
    • options.getRefreshTokenParameters Function Used to refresh token parameters.
    • options.onAuthSuccess Function Callback which is executed when an attempt to refresh authentication is successful.
    • options.onAuthError Function? Callback which is executed when an attempt to refresh authentication fails.

SuccessLink

SuccessLink calls handler on every successful operation.

Parameters

  • successHandler Function success handler.

Handler

Success handler takes the following parameters:

  • operation Operation apollo graphql operation.

Usage

import { ApolloLink } from 'apollo-link';
import { BatchHttpLink } from 'apollo-link-batch-http';
import { getMainDefinition } from 'apollo-utilities';
import {
  AuthLink,
  FileUploadLink,
  SuccessLink,
} from '@8base/apollo-links';

const successHandler = ({ operation }) => {
  console.log(operation.getContext().someUsefulData);
};

const getAuthState = () => ({
  workspaceId: '',
  email: '',
  token: '',
});

const getRefreshTokenParameters = () => ({
  email: '',
  refreshToken: '',
});

const authSuccessHandler = ({ token, refreshToken}) => {
  console.log({ token, refreshToken });
}

const authErrorHandler = () => {
  console.log('Auth error');
}


const links = ApolloLink.from([
  new FileUploadLink(),
  new SuccessLink(successHandler),
  new AuthLink({
    getAuthState: getAuthState,
    getRefreshTokenParameters: getRefreshTokenParameters,
    onAuthSuccess: authSuccessHandler,
    onAuthError: authErrorHandler,
  }),
  ApolloLink.split(
    ({ query }) => {
      const definition = getMainDefinition(query);

      return (
        definition.kind === 'OperationDefinition' &&
        definition.operation === 'subscription'
      );
    },
    new SubscriptionLink({
      uri: 'wss://api-ws.8base.com',
      getAuthState: getAuthState,
      onAuthError: authErrorHandler,
    }),
    new BatchHttpLink({
      uri: 'https://api.8base.com',
    }),
  ),
])