6.2.0 • Published 5 years ago

dts-api-client v6.2.0

Weekly downloads
746
License
-
Repository
-
Last release
5 years ago

DTS API client

Installation

npm i --save dts-api-client

Package can be consumed in Webpack and Node.js environments.

Webpack setup

If you need to use the upload client in a Webpack application, use the following configuration:

config.resolve = {
  alias: {
    'aws-sdk': 'aws-sdk/dist/aws-sdk.min.js'
  }
};

Ignore the packages that you don't need completely to reduce the footprint:

config.plugins = [
  new webpack.IgnorePlugin(/^(aws-sdk)$/), //If you don't use the upload client
  new webpack.IgnorePlugin(/^(jquery)$/),  //If you don't use the legacy client
  new webpack.IgnorePlugin(/^(socketcluster-client)$/),  //If you don't use the socket client
];

Configuration

If you don't use some of the clients (e.g. the upload client), set the related configuration section to a false key.

Not set configuration properties will use the default configuration.

import DtsApi from 'dts-api-client';

/* Application configuration */
const application = {
    "client_id": "d04ad813dac443b28a490ddca27b9178",
    "security": "oauth",
    "redirect_uri": "https://web.snap.menu/"
};

/* Client configuration */
const client = new DtsApi.Client({
    /* All client configs and keys are optional */

    //API client configuration
    api: {
        host: 'api.managesnap.com',
        secure: true,
        path: '/frontend/',
        application: application //Optional, defaults to { security: 'oauth' }                
    },

    //Alternative API configuration (with Swagger object):
    /*
    api: {
      spec: require('./swagger.json')
    },
    */

    //CDN client configuration
    cdn: {
        host: 'cdn.snap.menu',
        secure: false,
        path: '/',
        application: application
    },

    //Socket client configuration
    socket: {
        host: 'socket.managesnap.com',
        secure: true,
        path: '/snap/',
        application: application
    },

    //Partial configuration example:
    //Legacy client configuration
    legacy: {
        host: 'api-jwt.managesnap.com'
        //See? No secure or path here
    },

    //Exclude client example:
    //Upload client configuration
    upload: false
});

/* Manager configuration */
const manager = new DtsApi.Manager([
    application
])

Usage Example

class Application {
  constructor(mainApplication, client, manager) {
    this._mainApplication = mainApplication;
    this._client = client;
    this._manager = manager;
  }

  //An OAuth callback is received (i.e. check current URL on application launch)
  oauthCallback(application, data) {
    //Create new token to save
    let token = {
      access_token: data.access_token,
      refresh_token: data.refresh_token,
      expires_in: data.expires_in
    };

    this._saveToken(token, application);
  }

  //Watch for API token events
  watchAuthentication() {
    this._manager.tokenExpiring.add((token, application) => this._refreshToken(token, application));
    this._manager.tokenExpired.add((token, application) => this._refreshToken(token, application));
  }

  _refreshToken(token, application) {
    return this.client.api.request('oauth2', 'grantToken', {
      grant_type: 'refresh_token',
      client_id: application.client_id,
      refresh_token: token.refresh_token
    })
    .then(token => {
      console.log('OAuth token refreshed', token);
      this._saveToken(token, application);
    })
    .catch(e => {
      console.error('Unable to refresh an OAuth token.', e);

      if (this._manager.isAccessValid(application)) {
        console.warn('Falling back to an existing OAuth token.');
        return Promise.resolve();
      }

      return Promise.reject(e);
    });
  }

  _saveToken(token, application) {
    this._client.authorize(application, token);
    this._manager.saveToken(application, token);
  }

  //Enable WebSocket connections and listen to client events
  configureWebSocket() {
    this._client.socket.isEnabled = true; //Explicitly indicate when you need a WebSocket connection

    console.log('WebSocket is connected:', this._client.socket.isConnected);
    this._client.socket.isConnectedChanged.add(isConnected => console.log('WebSocket is connected:', isConnected));
    this._client.socket.onError.add(err => console.error('WebSocket error:', err));
  }

  //Restore authentication on application startup
  startup() {
    return this._manager.applications.reduce((promise, application) => {
      let token = this._manager.getToken(application); //Read active token

      //Check if refresh token has not expired
      if (!this._manager.isAccessValid(application)) {
        //No refresh token found
        if (!token || !token.refresh_token) {
          return promise;
        }

        return promise.then(() => {
          console.log(`Refreshing access for '${application.client_id}'...`);

          return this.refreshAccess(application)
          .then(() => console.log(`Access for '${application.client_id}' has been refreshed.`))
          .catch(e => {
            console.warn(`Unable to refresh access for '${application.client_id}'`, e);
            return Promise.resolve();
          });
        });
      }

      // Optional: authenticate Raygun with the current API user
      //
      // if (application === this._mainApplication) {
      //   let metadata = this._manager.getTokenMetadata(token);
      //   Raygun.setUser(metadata.location, false, undefined, undefined, undefined, metadata.device);
      // }

      return promise.then(() => this._client.authorize(application, token));
    }, Promise.resolve());
  }

  //Check if API token is valid
  get isAccessValid() {
    let token = this._manager.getToken(this._mainApplication);

    if (!token || !token.refresh_token) {
      return false;
    }

    return this._manager.isAccessValid(this._mainApplication);
  }

  //Get an OAuth authorization URL to redirect when an API token is not valid
  authorize() {
    return this._client.api.getAuthorizationUrl(this._mainApplication)
    .then(url => window.location = url);
  }

  //Call API
  loadLocationInfo(id) {
    return this._client.api.request('asset', 'assetLocationRead', { token: id });
  }

  //Load data from CDN
  loadData() {
    return this._client.cdn.load('deployment/847429c4-bb61-40b5-b3fa-a4a50151030c/4a69171b-9b85-416f-af2e-71739ed865e2.json');
  }

  //Load data from CDN as a binary blob
  loadBinary() {
    return this._client.cdn.loadBinary('version/2b8cd287-d93c-455e-a1ef-a4b100f06550_470_410.jpg');
  }

  //Subscribe to a WebSocket topic
  listenToTopic() {
    this._client.socket.subscribe('location_847429c4-bb61-40b5-b3fa-a4a50151030c', message => {
      console.log(message);
    });
  }

  //Send a WebSocket message to a topic
  publishToTopic(message) {
    this._client.socket.publish('location_847429c4-bb61-40b5-b3fa-a4a50151030c', message);
  }

  //Send a WebSocket event
  sendEvent(message) {
    this._client.socket.emit('some_event', message);
  }
}
6.2.0

5 years ago

6.1.0

5 years ago

6.0.0

5 years ago

5.0.5

5 years ago

5.0.3

5 years ago

5.0.2

5 years ago

5.0.1

5 years ago

5.0.0

5 years ago

4.4.16

5 years ago

4.5.6

5 years ago

4.5.5

5 years ago

4.5.4

5 years ago

4.5.3

5 years ago

4.5.1

5 years ago

4.5.0

5 years ago

4.4.14

5 years ago

4.4.13

5 years ago

4.4.12

5 years ago

4.4.11

5 years ago

4.4.10

5 years ago

4.4.9

5 years ago

4.4.8

5 years ago

4.4.7

5 years ago

4.4.6

5 years ago

4.4.5

5 years ago

4.4.4

5 years ago

4.4.3

5 years ago

4.4.2

6 years ago

4.4.1

6 years ago

4.4.0

6 years ago

4.3.50

6 years ago

4.3.49

6 years ago

4.3.48

6 years ago

4.3.47

6 years ago

4.3.46

6 years ago

4.3.45

6 years ago

4.3.44

6 years ago

4.3.43

6 years ago

4.3.42

6 years ago

4.3.41

6 years ago

4.3.40

6 years ago

4.3.39

6 years ago

4.3.38

6 years ago

4.3.37

6 years ago

4.3.36

6 years ago

4.3.35

6 years ago

4.3.34

6 years ago

4.3.33

6 years ago

4.3.32

6 years ago

4.3.31

6 years ago

4.3.30

6 years ago

4.3.29

6 years ago

4.3.28

6 years ago

4.3.27

6 years ago

4.3.26

6 years ago

4.3.25

6 years ago

4.3.24

6 years ago

4.3.23

6 years ago

4.3.22

6 years ago

4.3.21

6 years ago

4.3.20

6 years ago

4.3.19

6 years ago

4.3.18

6 years ago

4.3.17

6 years ago

4.3.16

6 years ago

4.3.15

6 years ago

4.3.14

6 years ago

4.3.13

6 years ago

4.3.12

6 years ago

4.3.11

6 years ago

4.3.10

6 years ago

4.3.9

7 years ago

4.3.8

7 years ago

4.3.7

7 years ago

4.3.6

7 years ago

4.3.5

7 years ago

4.3.4

7 years ago

4.3.3

7 years ago

4.3.2

7 years ago

4.3.1

7 years ago

4.3.0

7 years ago

4.2.9

7 years ago

4.2.8

7 years ago

4.2.7

7 years ago

4.2.6

7 years ago

4.2.5

7 years ago

4.2.4

7 years ago

4.2.3

7 years ago

4.2.2

7 years ago

4.2.1

7 years ago

4.2.0

7 years ago

4.1.68

7 years ago

4.1.67

7 years ago

4.1.66

7 years ago

4.1.65

7 years ago

4.1.64

7 years ago

4.1.63

7 years ago

4.1.62

7 years ago

4.1.61

7 years ago

4.1.60

7 years ago

4.1.59

7 years ago

4.1.58

7 years ago

4.1.57

7 years ago

4.1.56

7 years ago

4.1.55

7 years ago

4.1.54

8 years ago

4.1.53

8 years ago

4.1.52

8 years ago

4.1.51

8 years ago

4.1.50

8 years ago

4.1.49

8 years ago

4.1.48

8 years ago

4.1.47

8 years ago

4.1.46

8 years ago

4.1.45

8 years ago

4.1.44

8 years ago

4.1.43

8 years ago

4.1.42

8 years ago

4.1.41

8 years ago

4.1.40

8 years ago

4.1.39

8 years ago

4.1.38

8 years ago

4.1.37

8 years ago

4.1.36

8 years ago

4.1.35

8 years ago

4.1.34

8 years ago

4.1.33

8 years ago

4.1.32

8 years ago

4.1.31

8 years ago

4.1.30

8 years ago

4.1.29

8 years ago

4.1.28

8 years ago

4.1.27

8 years ago

4.1.26

8 years ago

4.1.25

8 years ago

4.1.24

8 years ago

4.1.23

8 years ago

4.1.22

8 years ago

4.1.21

8 years ago

4.1.20

8 years ago

4.1.19

8 years ago

4.1.18

8 years ago

4.1.17

8 years ago

4.1.16

8 years ago

4.1.15

8 years ago

4.1.14

8 years ago

4.1.13

8 years ago

4.1.12

8 years ago

4.1.11

8 years ago

4.1.10

8 years ago

4.1.9

8 years ago

4.1.8

8 years ago

4.1.7

8 years ago

4.1.6

8 years ago

4.1.5

8 years ago

4.1.4

8 years ago

4.1.3

8 years ago

4.1.2

8 years ago

4.1.1

8 years ago

4.1.0

8 years ago

4.0.31

8 years ago

4.0.30

8 years ago

4.0.29

8 years ago

4.0.28

8 years ago

4.0.27

8 years ago

4.0.26

8 years ago

4.0.25

8 years ago

4.0.24

8 years ago

4.0.23

8 years ago

4.0.22

8 years ago

4.0.21

8 years ago

4.0.20

8 years ago

4.0.19

8 years ago

4.0.18

8 years ago

4.0.17

8 years ago

4.0.16

8 years ago

4.0.15

8 years ago

4.0.14

8 years ago

4.0.13

8 years ago

4.0.12

8 years ago

4.0.11

8 years ago

4.0.10

8 years ago

4.0.9

8 years ago

4.0.8

8 years ago

4.0.7

8 years ago

4.0.6

8 years ago

4.0.4

8 years ago

4.0.3

8 years ago

4.0.2

8 years ago

4.0.1

8 years ago

3.3.8

8 years ago

3.3.7

8 years ago

3.3.6

8 years ago

3.3.5

8 years ago

3.3.4

8 years ago

3.3.3

8 years ago

3.3.1

8 years ago

3.2.31

8 years ago

3.2.30

8 years ago

3.2.29

8 years ago

3.2.28

8 years ago

3.2.27

8 years ago

3.2.26

8 years ago

3.2.25

8 years ago

3.2.24

8 years ago

3.2.23

8 years ago

3.2.22

8 years ago

3.2.21

8 years ago

3.2.20

8 years ago

3.2.19

8 years ago

3.2.18

8 years ago

3.2.17

8 years ago

3.2.16

8 years ago

3.2.15

8 years ago

3.2.14

8 years ago

3.2.13

8 years ago

3.2.12

8 years ago

3.2.11

8 years ago

3.2.10

8 years ago

3.2.9

8 years ago

3.2.8

8 years ago

3.2.7

8 years ago

3.2.6

8 years ago

3.2.5

8 years ago

3.2.4

8 years ago

3.2.3

8 years ago

3.2.2

8 years ago

3.2.1

8 years ago

3.1.7

8 years ago

3.1.6

8 years ago

3.1.5

8 years ago

3.1.4

8 years ago

3.1.3

8 years ago

3.1.2

8 years ago

3.1.1

8 years ago

3.1.0

8 years ago

3.0.23

8 years ago

3.0.22

8 years ago

3.0.21

8 years ago

3.0.20

8 years ago

3.0.19

8 years ago

3.0.17

8 years ago

3.0.16

8 years ago

3.0.15

8 years ago

3.0.14

8 years ago

3.0.13

8 years ago

3.0.12

8 years ago

3.0.10

8 years ago

2.0.29

9 years ago

2.0.28

9 years ago

2.0.27

9 years ago

2.0.26

9 years ago

2.0.25

9 years ago

2.0.24

9 years ago

2.0.23

9 years ago

2.0.22

9 years ago

2.0.21

9 years ago

2.0.20

9 years ago

2.0.19

9 years ago

2.0.17

9 years ago

2.0.16

9 years ago

2.0.15

9 years ago

2.0.13

9 years ago

2.0.12

9 years ago

2.0.11

9 years ago

2.0.10

9 years ago

2.0.9

9 years ago

2.0.8

9 years ago

2.0.7

9 years ago

2.0.6

9 years ago

2.0.5

9 years ago

2.0.4

9 years ago

2.0.3

9 years ago

2.0.2

9 years ago

2.0.1

9 years ago

2.0.0

9 years ago

0.0.50

9 years ago

0.0.49

9 years ago

0.0.48

9 years ago

0.0.47

9 years ago

0.0.46

9 years ago

0.0.45

9 years ago

0.0.44

9 years ago

0.0.43

9 years ago

0.0.42

9 years ago

0.0.41

9 years ago

0.0.40

9 years ago

0.0.39

9 years ago

0.0.38

10 years ago

0.0.37

10 years ago

0.0.36

10 years ago

0.0.35

10 years ago

0.0.34

10 years ago

0.0.33

10 years ago

0.0.32

10 years ago

0.0.31

10 years ago

0.0.30

10 years ago

0.0.29

10 years ago

0.0.27

10 years ago

0.0.26

10 years ago

0.0.23

10 years ago

0.0.20

10 years ago

0.0.19

10 years ago

0.0.18

10 years ago

0.0.17

10 years ago

0.0.16

10 years ago

0.0.15

10 years ago

0.0.14

10 years ago

0.0.13

10 years ago

0.0.12

10 years ago

0.0.11

10 years ago

0.0.10

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago