Skip to content

revolunet/node-sellsy

Repository files navigation

node-sellsy

npm license github-issues

nodei.co

Node Sellsy API wrapper - works in NodeJS and in the browser.

The official Sellsy API is PHP based so here's a JavaScript handy replacement.

It can helps you automate most of Sellsy from their API.

For example i use a Stripe webhook to automate actions in Sellsy.

Features

QuickStart

npm i --save node-sellsy

var Sellsy = require("node-sellsy");

var sellsy = new Sellsy({
  creds: {
    consumerKey: "myConsumerKey",
    consumerSecret: "myConsumerSecret",
    userToken: "myUserToken",
    userSecret: "myUserSecret",
  },
});

var params = {
  search: {
    contains: "test",
  },
};

sellsy
  .api({
    method: "Client.getList",
    params: params,
  })
  .then((data) => {
    console.log("data", data);
  })
  .catch((e) => {
    console.log("error:", e);
  });

API

You can access the full Sellsy API using sellsy.api({ method, params }).

This call returns a promise.

Browser usage

Sellsy API doesnt provide CORS access so here's a drop-in proxy you can deploy on your own to use node-sellsy on the client : revolunet/sellsy-proxy.

Then, define the endPoint when creating your Sellsy instance :

var sellsy = new Sellsy({
  creds,
  endPoint: "http://path/to/sellsy/proxy",
});

Higher-level API methods :

Customer

Document

  • sellsy.documents.create(data)
  • sellsy.documents.createPayment(docType, docId, paymentData)
  • sellsy.documents.getList(docType, search)
  • sellsy.documents.getById(docType, docId)
  • sellsy.documents.updateStep(docType, docId, step)

Scripts

  • npm run readme : node ./node_modules/node-readme/bin/node-readme.js
  • npm run test : find ./spec -iname '*.spec.js' -exec ./node_modules/.bin/babel-node {} \; | ./node_modules/.bin/tap-spec
  • npm run zuul : ./node_modules/zuul/bin/zuul -- spec/**/*.spec.js
  • npm run build : babel -d ./dist ./src

Examples

Create an invoice

let sellsy = new Sellsy({
  creds: {
    consumerKey: "myConsumerKey",
    consumerSecret: "myConsumerSecret",
    userToken: "myUserToken",
    userSecret: "myUserSecret",
  },
});

const customerIdent = "1234";
const amountHorsTaxes = 42;

sellsy.customers.get({ ident: customerIdent }).then((customer) => {
  const documentData = {
    document: {
      doctype: "invoice",
      thirdid: customer.id,
      notes: customer.email,
      currency: "1",
      displayedDate: new Date().getTime() / 1000,
      subject: "Sujet de la facture",
      tags: "bookeo,stripe",
    },
    row: {
      1: {
        // use 'item' for object from catalog
        row_type: "once",
        row_name: "titre ligne facture",
        row_linkedid: null,
        row_notes: "notes ligne facture",
        row_tax: 20,
        row_unitAmount: amountHorsTaxes,
        row_qt: 1,
      },
    },
  };

  return sellsy.documents.create(documentData);
});

Then you can use

sellsy.documents.updateStep(createdDocument.type, createdDocument.id, 'paid') to mark invoice as paid and sellsy.documents.createPayment to record the payment method

Tests

  Customers.create should call sellsy api

    ✔ should call API twice
    ✔ should call Client.create with correct data
    ✔ should call Client.getList with correct data

  Customers.get should call sellsy api

    ✔ should call API
    ✔ should call get with correct data
    ✔ should return first result

  sellsy.api should be defined

    ✔ should be equal

  sellsy.api should init call oAuth.OAuth with correct parameters

    ✔ consumerKey
    ✔ consumerSecret

  sellsy.api post correct data to API

    ✔ userToken
    ✔ userSecret
    ✔ request
    ✔ io_mode
    ✔ method
    ✔ params

  Sellsy should use default api endPoint

    ✔ https://apifeed.sellsy.com/0/

  Sellsy should use given api endPoint

    ✔ http://path.to/proxy/test/


  total:     17
  passing:   17
  duration:  1.8s

Author

Julien Bouquillon [email protected] http://github.com/revolunet and contributors

License