2.3.3 • Published 4 years ago

@stone-payments/emd-generic-sdk v2.3.3

Weekly downloads
13
License
-
Repository
-
Last release
4 years ago

Emerald Generic SDK

Install

npm install --save @stone-payments/emd-generic-sdk

Import

import * as sdk from '@stone-payments/emd-generic-sdk';

BaseUrl

Setting the baseUrl

sdk.baseUrl.set('http://custom.api/');

Authorization

Setting the authorization header

sdk.authorization.set(sdk.BEARER, 't0k3n-7483-000');

Retrieving the authorization header

sdk.authorization.get();

Removing a header

sdk.authorization.remove();

Headers

Setting a header

sdk.headers.append('Content-Type', 'application/json');

Retrieving all headers

sdk.headers.get();

Removing a header

sdk.headers.remove('Content-Type');

Usage Examples

The Banking Javascript SDK uses window.fetch under the hood. The only difference is that it injects the headers, including authorization, to every request.

Remember to always get the baseUrl from the SDK, as it will be set by the application.

Making a request

const baseUrl = sdk.baseUrl.get();
sdk.request(`${baseUrl}v1/api/users`, { method: 'GET' });
const baseUrl = sdk.baseUrl.get();
const customHeaders = new Headers();

customHeaders.append('Content-Type', 'text/xml');

sdk.request(`${baseUrl}v1/api/users`, {
  method: 'GET',
  headers: customHeaders
});

Read the full Fetch API documentation on MDN.

Using Middlewares

Middlewares run before and after every request in the same order that they were declared. Every middleware must call either proceed or quit in order to work.

sdk.middleware.use({
  beforeRequest({ proceed, quit }) {
    if (conditionMet) {
      proceed();
    } else {
      quit();
    }
  },
  afterRequest({ proceed }) {
    logSomething();
    proceed();
  }
});

sdk.middleware.use({
  async beforeRequest({ proceed }) {
    await doSomethingAsync();
    proceed();
  }
});

sdk.middleware.use({
  async afterRequest({ proceed, response }) {
    if (response.status === 403) {
      const body = await response.clone().json();

      if (body.type === 'srn:error:challenge_required') {
        proceed(fetch('http://some.url'));
      } else {
        proceed();
      }
    }
    proceed();
  }
});

Complete Example

In the application

In the application, the package should be declared as a dependency.

import * as sdk from '@stone-payments/emd-generic-sdk';

sdk.baseUrl.set('https://randomuser.me/api/');
sdk.headers.append('Content-Type', 'application/json');
sdk.authorization.set(sdk.BEARER, authService.token);

sdk.middleware.use({
  beforeRequest ({ proceed }) {
    if (authService.isTokenExpired()) {
      authService.refreshToken();
      sdk.authorization.set(sdk.BEARER, authService.token);
    }
    proceed();
  }
});

In the component

In the component, the package should be declared as a peerDependency.

import * as sdk from '@stone-payments/emd-generic-sdk';

const baseUrl = sdk.baseUrl.get();

const customHeaders = new Headers();
customHeaders.append('Page', '5');

sdk.request(`${baseUrl}?gender=male`, {
  method: 'GET',
  headers: customHeaders
})
  .then(response => response.json());
2.3.3

4 years ago

2.3.2

4 years ago

2.3.1

5 years ago

2.3.0

5 years ago

2.2.0

5 years ago

2.1.2

5 years ago

2.1.1

5 years ago

2.1.0

5 years ago

2.0.0

5 years ago

1.1.0

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago