Awesome
node-sellsy
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
- Works with your oauth private app id
- Simple promise call for all methods in http://api.sellsy.fr/documentation/methodes
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
sellsy.customers.create(data)
sellsy.customers.get({ email: 'customer@gmail.com' })
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 julien@bouquillon.com http://github.com/revolunet and contributors