Giter Site home page Giter Site logo

nmb2b-client-js's Introduction

Network Manager B2B Client

License NodeVersion PackageVersion Downloads Test codecov

Exposes a general purpose Javascript library to interact with NM B2B web services. The idea is to abstract pain points while offering an API that maps the NM B2B WS API.

NM target version: 26.0.0

Simple usage example

https://github.com/DGAC/nmb2b-client-js-example

asciicast

Features

  • No WSDL/XSD dependency. The library will download and cache those on start up.
  • Natural serialization/deserialization of certain types.

For instance, the Flow.retrieveOTMVPlan query expects a day attribute with the XSD type DateYearMonthDay. This type is a string, representing a date in the YYYY-MM-DD format. This library allows you to pass a traditional JS Date object instead.

const res = await Flow.retrieveOTMVPlan({
  dataset: { type: 'OPERATIONAL' },
  day: new Date(),
  otmvsWithDuration: { item: [{ trafficVolume: 'LFERMS' }] },
});
  • Request object key reordering when needed.

In SOAP, key order matters.

// OK
await Flow.retrieveOTMVPlan({
  dataset: { type: 'OPERATIONAL' },
  day: moment.utc().toDate(),
  otmvsWithDuration: { item: [{ trafficVolume: 'LFERMS' }] },
});

// Would normally fail
await const Flow.retrieveOTMVPlan({
  day: moment.utc().toDate(),
  dataset: { type: 'OPERATIONAL' },
  otmvsWithDuration: { item: [{ trafficVolume: 'LFERMS' }] },
});

The library reorder request object keys to match what's expressed in the XSD/WSDL. Therefore, the second example works fine.

  • TypeScript support.

The following example will raise a type error.

// Raises a type error
await Flow.retrieveOTMVPlan({
  dataset: { type: 'OPERATIONNAL' }, // Notice the typo
  day: moment.utc().toDate(),
  otmvsWithDuration: { item: [{ trafficVolume: 'LFERMS' }] },
});
  • Debug output

Debug output is controlled via the debug package. All debug output from this library is scoped under @dgac/nmb2b-client namespace.

Just set a DEBUG=@dgac/nmb2b-client* environment variable : asciicast

Usage

Main service

import makeB2BClient from '@dgac/nmb2b-client';

// See below for more information about the security argument
const client = await makeB2BClient({ security });

const res = await client.Airspace.queryCompleteAIXMDatasets();

Per domain service

import { makeAirspaceService } from '@dgac/nmb2b-client';

// See below for more information about the security argument
const Airspace = await makeAirspaceService({ security });

const res = await Airspace.queryCompleteAIXMDatasets();

Error handling

import { makeAirspaceService, NMB2BError } from '@dgac/nmb2b-client';

try {
  const Airspace = await makeAirspaceService({ security });

  const res = await Airspace.queryCompleteAIXMDatasets();
} catch (err) {
  if (err instanceof NMB2BError) {
    if (err.status === 'OBJECT_NOT_FOUND') {
      // ...
    }
  }

  // ...
}

B2B Security

Every request to the NM B2B web services must be authenticated using a client certificate. This library needs to be initialized with a security object, containing the certificate, key and passphrase associated.

With P12 certificate

import fs from 'fs';

const security = {
  pfx: fs.readFileSync('/path/to/cert.p12'),
  passphrase: 'your-passphrase',
};

makeB2BClient({ security }).then((client) => {
  client.Airspace.queryCompleteAIXMDatasets().then(() => {});
});

With PEM certificate

import fs from 'fs';

const security = {
  pem: fs.readFileSync('/path/to/cert.pem'),
  key: fs.readFileSync('/path/to/cert.key'),
  passphrase: 'your-passphrase',
};

makeB2BClient({ security }).then((client) => {
  client.Airspace.queryCompleteAIXMDatasets().then(() => {});
});

nmb2b-client-js's People

Contributors

kouak avatar dependabot[bot] avatar mariodeckers avatar greenkeeper[bot] avatar gael33 avatar sylvainmondou avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.