This library provides a simple wrapper for Leanpub API. Before starting to use it, you will need to generate an API key for yourself.
As the JavaScript API is missing plenty of functionality still, I've outlined curl based alternatives below. The idea is that these will be converted to JavaScript as time permits. PRs are welcome!
To quote the official documentation:
- Go to your author dashboard
- Click on the button that says "Enable the Leanpub API" and copy the API key. You are going to need it to access the API.
The API depends on your book slug: https://leanpub.com/SLUG
.
var leanpub = require('leanpub');
var client = leanpub({
// optional. without this most operations won't work
// or return partial data
apiKey: process.env.LEANPUB,
bookSlug: process.env.SLUG
});
...
// the API relies on optional callbacks. Example:
client.previewFull(function(err, d) {
if(err) {
return console.error(err);
}
console.log(d);
});
There are a few ways to generate a preview version of your book:
...
client.previewFull();
client.previewSubset(); // preview based on Subset.txt
// Not supported yet. PR welcome.
// See https://leanpub.com/help/api#previewing-and-publishing for reference.
// client.previewSingle(...);
It is possible to publish a book silently or with email:
...
client.publish(); // silent publish
client.publish({
releaseNotes: 'Please let me know what you think'
});
To know how your current job is progressing, use:
...
client.jobStatus(function(err, d) {
if(err) {
return console.error(err);
}
console.log(d);
});
Leanpub provides both public and private (download urls etc.) information about books:
...
client.bookSummary(function(err, d) {
if(err) {
return console.error(err);
}
console.log(d);
});
You can get book urls through summary information. These should be kept secret. You can book files like this:
...
// not implemented yet. PR welcome. This should stream to the given file
//client.latestVersion({format: 'pdf', output: 'yourbook.pdf'}, cb);
Sales data can be fetched in either JSON or XML like this:
...
client.sales({
format: 'xml' // defaults to json
}, cb);
Individual sales can be fetched like this:
...
client.individualSales({
format: 'xml', // defaults to json
page: 2 // defaults to page 1, each page contains 50 sales
}, cb);
Existing coupons can be fetched like this:
...
client.coupons({
format: 'xml' // defaults to json
}, cb);
They can be created through POST
:
...
client.createCoupon({
couponCode: 'testcoupon', // required
packageDiscounts: [ // required
{
discountedPrice: 10,
packageSlug: 'book'
}
],
startDate: new Date(), // required
endDate: new Date(), // optional
maxUses: 1, // required
note: 'test coupon', // optional
suspended: false // optional, defaults to false
}, cb);
And updated through PUT
:
...
client.updateCoupon({
couponCode: 'testcoupon', // required
suspended: true
}, cb);
leanpub is available under MIT. See LICENSE for more details.