Skip to content

AmbulanceG8/g8-js-sdk

Repository files navigation

g8-js-sdk

Dependencies Dependencies Code Climate score Code Climate issues Node.js version NPM version Security version MIT License PRs Welcome

Description

This module provides an Ambulance G8 API implementation.

Install

$ npm install g8-js-sdk --save

Features

  • Logins
  • Passwords
  • Users
  • UsersDevicesPositions

Documentation

Examples

Create your g8-js-sdk sdk by requiring it, making it's initial configuration and instantiating it.

From import

import sdk from 'g8-js-sdk';

From require

const sdk = require('g8-js-sdk');

Instantiate it

import SDK from 'g8-js-sdk';

// Create your instance and export it
const sdk = SDK.create();

Refresh token

Bellow, it's an example of a react-native custom refresh token implementation. Obviously, you have to adapt it with your own logic.

import DeviceInfo from 'react-native-device-info';
import {User, Authentication} from './storage';
import SDK from 'g8-js-sdk';

const sdk = SDK.create();

sdk.common.refreshToken((error) => {
  if (!error.response && !error.response.data && !error.response.data.name) {
    console.log('[lib/sdk] - unexpected error.', error);
    return Promise.reject({error: {name: 'Oups...', message: `The request could not succeed.`}});
  }

  if (error.response.data.name === 'NotAuthenticated' && error.response.data.message === 'TOKEN_EXPIRED') {
    console.info('[lib/sdk] - token expired received, start refresh token process.');
    return Promise.all([
      User.get(),
      Authentication.get(),
    ])
      .then(([user, authentication]) => {
        sdk.common.deleteCommonHeaders(['authorization']);
        return sdk.logins.update({id: user.id}, {name: 'test'}, {
          'x-refresh-token': authentication.refresh_token,
          'x-device-uid': DeviceInfo.getUniqueID(),
        })
          .then((response) => {
            sdk.common.addCommonHeaders({authorization: `Bearer ${response.token}`});
            console.info('[lib/sdk] - new refresh token retrieved.');
            return Authentication.save({token: `Bearer ${response.token}`, refresh_token: response.refresh_token})
              .then(() => {
                console.info('[lib/sdk] - retry same request with new access token.');
                error.config.headers.authorization = `Bearer ${response.token}`;
                console.log('[lib/sdk] - retry conf', error.config);
                return sdk.common.retry(error.config);
              });
          });
      })
      .catch((e) => {
        console.log('[lib/sdk] - error during refresh token process.', e);
        if (!e.status) {
          console.log('[lib/sdk] - unexpected error.', e);
          return Promise.reject({error: {name: 'Oups...', message: `The request could not succeed.`}});
        }
        return Promise.reject(e);
      });
  }
  console.log('[lib/sdk] - dispatch error to the next catch.', error);
  return Promise.reject(error);
});

export default sdk;

Scripts

Run using npm run <script> command.

clean - remove coverage data, Jest cache and transpiled files,
lint - lint source files and tests,
typecheck - check type annotations,
test - lint, typecheck and run tests with coverage,
test-only - run tests with coverage,
test:watch - interactive watch mode to automatically re-run tests,
build - compile source files,
build:watch - interactive watch mode, compile sources on change.

License

MIT © Dimitri DO BAIRRO