gdsn

GDSN utility library for Node.js

A GDSN service library for Node.js.

Provides useful utilities for data pools and trading parties.

Get the latest published release from npm (0.1.1):

npm install gdsn

To run a quick test:

npm test
  • must instantiate a specific data pool instance to handle the message
  • will create a GDSNResponse back to the source DP
  • will create a new CIN to the dataRecipient trading party
var Gdsn = require('gdsn')
var gdsn = new Gdsn({
  homeDataPoolGln: '1100001011285',  
  templatePath: './node_modules/gdsn/templates/'
  out_dir: './test'
})
gdsn.processCinFromOtherDp(cinInboundFile)
  • should be 13 digits
  • may contain leading zeroes (it's a string, not a number)
  • the last digit is a check digit
var Gdsn = require('gdsn')
var gdsn = new Gdsn()
var gln = '1100001011292'
var isValid = gdsn.validateGln(gln) // return [true|false] 
console.log('GLN ' + gln + ' is ' + (isValid ? 'valid' : 'invalid'))
  • should be 14 digits
  • may contain leading zeroes (it's a string, not a number)
  • the last digit is a check digit
var Gdsn = require('gdsn')
var gdsn = new Gdsn()
var gtin = '00749384988152'
var isValid = gdsn.validateGtin(gtin) // return [true|false] 
console.log('GTIN ' + gtin + ' is ' + (isValid ? 'valid' : 'invalid'))
  • uses in-memory DOM
  • not good for large CIN messages, see streaming approach below
var Gdsn = require('gdsn')
var gdsn = new Gdsn()
gdsn.getXmlDomForFile(cinFile, function(err$cin) {
  if (err) throw err
  var items = gdsn.getTradeItemsForDom($cin)
  for (in items) {
    var item = items[i]
    console.log('Found item with GTIN ' + item.gtin + ', extracted from message ' + item.msg_id)
  }
  console.log('item count: ' + items.length)
})
  • large CIN files may be 10+ MB and contain hundreds of items
  • this approach uses a callback to pass the complete array of items after the stream has ended
var Gdsn = require('gdsn')
var gdsn = new Gdsn()
gdsn.items.getTradeItemsFromFile(cinFile, function(erritems) {
  if (err) throw err
  for (in items) {
    var item = items[i]
    console.log('Found item with GTIN ' + item.gtin + ', extracted from message ' + item.msg_id)
  }
  console.log('item count: ' + items.length)
})
  • this approach lets your callback work with each trade item as it is read
  • the first trade item will not be passed until the dataRecipient has been read from the stream
var fs   = require('fs')
var Gdsn = require('gdsn')
var gdsn = new Gdsn()
var readable = fs.createReadStream(cinFile, {encoding: 'utf8'})
var items = []
gdsn.items.getEachTradeItemFromStream(readable, function (erritem) {
  if (err) throw err
  if (item) {
    console.log('Found item with GTIN ' + item.gtin + ', extracted from message ' + item.msg_id)
    items.push(item)
  }
  else {
    // all done 
    console.log('item count: ' + items.length)
  }
})
  • this approach lets your callback work with each party as it is read
  • the first party will not be passed until the message id has been read from the stream
var fs   = require('fs')
var Gdsn = require('gdsn')
var gdsn = new Gdsn()
var readable = fs.createReadStream(rpddFile, {encoding: 'utf8'})
var parties = []
gdsn.parties.getEachPartyFromStream(readable, function (errparty) {
  if (err) throw err
  if (party) {
    console.log('Found party with GLN ' + party.gln + ', extracted from message ' + party.msg_id)
    parties.push(party)
  }
  else {
    // all done 
    console.log('party count: ' + parties.length)
  }
})