Akamai NetStorage HTTP API for Node.js
JavaScript
Latest commit a57ffd2 Jan 25, 2017 @kkamkou readme updated
Permalink
Failed to load latest commit information.
lib readme updated Jan 25, 2017
test
.codeclimate.yml Merge branch 'issue-9' Jan 25, 2017
.gitignore
.jshintrc dotfiles updated Oct 25, 2013
.travis.yml more node.js versions Jan 25, 2017
Dockerfile Add some sort of timeout to underlying HTTP connection, closes #5 Oct 16, 2015
LICENSE
README.md
package.json

README.md

node-akamai-http-api

Akamai NetStorage HTTP API for Node.js (Unofficial).

Build Status Dependency Status Coverage Status Code Climate

Installation

"dependencies": {
  "akamai-http-api": "0.6.*" // see the "releases" section
}

npm update

Initialization

var akamai = require('akamai-http-api');
akamai.setConfig({
  keyName: 'keyName',
  key: 'aLongString',
  host: 'changeme.akamaihd.net',
  ssl: true, // optional, default: false
  verbose: false, // optional, default: false
  request: { // optional, request.js options, see: https://github.com/request/request#requestoptions-callback
    timeout: 20000 // 20s is the dafault value
  }
});

Notices

  1. You have to enable the netstorage HTTP API access using the control.akamai.com website
  2. Ensure there are no more than 15 operations/second on netstorage, otherwise you can expect netstorage to serve 500 errors.
  3. Double check the host value. In case of typo (fe: test.upload.akamai.com), the client just sits there trying to open up a socket. Default timeout is 20s.

API

Advanced

upload

var fs = require('fs'),
  stream = fs.createReadStream('cool/file.jpg');
akamai.upload(stream, '/12345/MyFolder/MyFile.jpg', function (err, data) {});

download

var fs = require('fs'),
  stream = fs.createWriteStream('cool/file_download.jpg');
akamai.download(pathRemoteFile, stream, function (err, data) {});

mtime

akamai.mtime('/12345/MyFolder/MyFile.jpg', new Date(), function (err, data) {});

Basic

du

akamai.du('/12345/MyFolder', function (err, data) {});

dir

akamai.dir('/12345/MyFolder', function (err, data) {});

stat

akamai.stat('/12345/MyFolder', function (err, data) {});

delete

akamai.delete('/12345/MyFolder/MyFile.jpg', function (err, data) {});

mkdir

akamai.mkdir('/12345/MyFolder', function (err, data) {});

rmdir

akamai.rmdir('/12345/MyFolder', function (err, data) {});

rename

akamai.rename('/12345/MyFile.jpg', '/12345/MyFileNew.jpg', function (err, data) {});

symlink

akamai.symlink('/12345/MyFile.jpg', '/12345/MyFileSymlink.jpg', function (err, data) {});

Helpers

fileExists

akamai.fileExists('/12345/MyFile.jpg', function (err, boolFlag) {});

Exceptions

For the communication netstorage HTTP API uses HTTP codes. Hence, a number of methods may trigger an exception. For example mkdir in case the target already exists. Or symlink in case the target doesn't exist.

To handle these exceptions the err object has an abnormal code attribute.

akamai.mkdir('...', function (err, data) {
  if (err.code === 409) { } // it already exists
  if (err.message.indexOf(409) !== -1) // the same
});

How to extend it?

var akamai = require('akamai-http-api'),
  _ = require('lodash'),
  myAkamai = Object.create(akamai);

// custom headers for the upload function
myAkamai.upload = function (stream, path, custHeaders, cb) {
  var options = {
    request: {method: 'put'},
    headers: _.extend({action: 'upload', 'upload-type': 'binary'}, custHeaders)
  };
  stream.pipe(this.getRequestObject(path, options, cb));
  return this;
};

// quick-delete function (you should enable it first!)
myAkamai.quickDelete = function (path, cb) {
  var options = {
    request: {method: 'put'},
    headers: {action: 'quick-delete', 'quick-delete': 'imreallyreallysure'}
  };
  this.getRequestObject(path, options, cb);
  return this;
};

// exporting outside
module.exports = myAkamai;

Docker

# modify test/akamai.js#19-21 first
[sudo] docker build -t node-akamai-http-api .
[sudo] docker run -ti --rm node-akamai-http-api

License

The MIT License (MIT)
Copyright (c) 2013-2017 Kanstantsin Kamkou