promised-redmine

Redmine Rest API Client for node.js with Promises/A+ compliance

node-promised-redmine

Redmine REST API Client for node.js implemented with promises/A+

This was a modified version of the original redmine module by sotarok using D.js to implement it as a promises/A+ compatible api. But it has been largely rewrote since and is a totally different project now.

  • support both http / https protocols
  • support basicAuth authentication
  • compatible with promises/A+ through D.js
  • simple api
  • recursively retrieve issues until given date
  • exponential backoff retries
  • Settings getter/setter
    • all setters return the Redmine instance and are chainable
    • (get|set)ApiKey(key) api key given by your redmine server
    • (get|set)Host(host) ip or hostname of the redmine api endpoint
    • (get|set)Port(port) set remote server port default to 80
    • (get|set)BasicAuth(auth) string used as auth option of the http request
    • (get|set)Protocol(protocol) http or https
    • (get|set)PathPrefix(prefix) path prefix to prepend to each request paths
    • (get|set)SslCaCert(certFilePath) path or array of path to authority certificates files to check the remote host against
    • (get|set)SslClientCert(certFilePath) path to public x509 certificate file to use
    • setSslClientKey(keyFilePath, passPhrase)* path to client private key file to use for SSL and associated passphrase
    • (get|set)MaxTry(maxTry) max number of retry on request error default to 1 (get|set)MaxDelay(maxDelay) max time in ms to wait between two retry on request error default to 2000 (get|set)Verbose(verbose) boolean value that turn on/off console.log on errors and retries. (default setting to false)
  • Generics
    • all generic methods path doesn't require leading slash nor the .json extension e.g. for issues it can be "issues" or "issues/{id}"
    • get(path, params) get a single resource or a list or resources
    • getAllSince(what, since, params) helper to get all items of a collection since the given date (isoString or Date instance)
    • post(path, params) create a new resource on corresponding path
    • put(path, params) update a given resource with params
    • del(path, params) remove given resource
  • Issues
    • getIssues(params) return list of issues (max 100)
    • getIssue(id, params) return an issue details by its id
    • getAllIssuesSince(since, params) return all issues since given date (isoString or Date instance)
    • postIssue(issue, params) create a new issue
    • updateIssue(id, issue, params) update issue with given id
    • deleteIssue(id, params) delete an issue by its id
  • Users
    • getUsers(params) return list of users (max 100)
    • getUser(id, params) retrieve user details by its id
    • getUserCurrent(params) return current user (the one corresponding to the apiKey)
  • Projects
    • getProjects(params) get a list of projects (max 100)
    • getProject(id, params) return details about a single project by its id
    • getAllProjectsSince(since, params) return all projects updated since given date (isoString or Date instance)
  • Time Entries
    • getTimeEntries(params) returns a list of time entries
    • getTimeEntry(id, params) returns time entry of given id
    • postTimeEntry(timeEntry, params) returns time entry of given id
    • updateTimeEntry(id, timeEntry, params) update time entry corresponding to the given id
    • deleteTimeEntry(id, params) delete time entry of given id

All request made can use following additional parameters in the params argument:

  • retry: a retry settings based on an exponential backoff algorithm. You can set thoose settings for all request using setMaxRetry and setMaxDelay methods, or on a request basis by passing a retry property to the params parameter. This retry property should be an object with one or two property of maxTry and maxDelay e.g. var params = {retry: {maxTry:3}}
  • impersonate: allow you to add a X-Redmine-Switch-User header on a request basis. This will only work when you are authenticated as an admin user in the first place. var params = {impersonate: 'username'};
var Redmine = require('promised-redmine');
var config = {
  host: "localhost", // required 
  apiKey: "XXXXXX", // required 
  pathPrefix: "/myRedminePath",
  protocol: "http",
  // if using SSL settings, change protocol and port accordingly 
  sslCaCert: '/path/to/root/ca.pem', // defaults to null 
  sslClientCert: '/path/to/client/cert.pem', // defaults to null 
  sslClientKey: '/path/to/client/cert.key', // defaults to null 
  sslClientPassphrase: 'clientKeyPassphrase' // defaults to null 
}
var redmineApi = new Redmine(config);
redmineApi.getIssues()
  .success(function(issues){ // success is an alias of then without the promise rejection management in D.js the underlying promise library 
    // do something with that 
  })

Install from npm:

$ npm install promised-redmine

Contributions are always welcome. I have no more redmine installation available for testing. So if you have one you can share for testing purpose, it will be of great help to this project.