octonode is a library for nodejs to access the github v3 api
npm install octonode
var github = require('octonode');
// Then we instanciate a client with or without a token (as show in a later section)
var ghme = client.me();
var ghuser = client.user('pkumar');
var ghrepo = client.repository('pkumar/hub');
var ghorg = client.organization('flatiron');
Many of the below use cases use parts of the above code
github.auth.config({
username: 'pkumar',
password: 'password'
}).login(['user', 'repo', 'gist'], function (err, token) {
console.log(token);
});
// Web application which authenticates to github
var http = require('http');
var url = require('url');
var qs = require('querystring');
// Build the authorization config and url
var auth_url = github.auth.config({
client_id: 'mygithubclientid',
client_secret: 'mygithubclientsecret'
}).login(['user', 'repo', 'gist']);
// Web server
http.createServer(function (req, res) {
uri = url.parse(req.url);
// Redirect to github login
if (uri.pathname=='/') {
res.writeHead(301, {'Content-Type': 'text/plain', 'Location': auth_url})
res.end('Redirecting to ' + auth_url);
}
// Callback url from github login
else if (uri.pathname=='/auth') {
github.auth.login(qs.parse(uri.query).code, function (err, token) {
console.log(token);
});
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('');
} else {
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('');
}
}).listen(3000);
console.log('Server started on 3000');
var client = new github.client();
client.get('/users/pkumar', function (err, status, body) {
console.log(body); //json object
});
var client = new github.client('someaccesstoken');
client.get('/user', function (err, status, body) {
console.log(body); //json object
});
All the callbacks for the following will take first an error argument, then a data argument, like this:
ghme.info(function(err, data) {
console.log("error: " + err);
console.log("data: " + data);
});
Token required for the following:
ghme.info(callback); //json
ghme.update({
"name": "monalisa octocat",
"email": "octocat@github.com",
"blog": "https://github.com/blog",
"company": "GitHub",
"location": "San Francisco",
"hireable": true,
"bio": "There once..."
}, callback);
ghme.emails(callback); //array of emails
ghme.emails(['new1@ma.il', 'new2@ma.il'], callback); //array of emails
ghme.emails('new@ma.il', callback); //array of emails
ghme.emails(['new1@ma.il', 'new2@ma.il']);
ghme.emails('new@ma.il');
ghme.followers(callback); //array of github users
ghme.following(callback); //array of github users
ghme.following('marak', callback); //boolean
ghme.follow('marak');
ghme.unfollow('marak');
ghme.keys(callback); //array of keys
ghme.keys(1, callback); //key
ghme.keys({"title":"laptop", "key":"ssh-rsa AAA..."}, callback); //key
ghme.keys(1, {"title":"desktop", "key":"ssh-rsa AAA..."}, callback); //key
ghme.keys(1);
No token required for the following
ghuser.info(callback); //json
ghuser.followers(callback); //array of github users
ghuser.following(callback); //array of github users
No token required for the following
ghrepo.info(callback); //json
No token required for the following
ghorg.info(callback); //json
If you like this project, please watch this and follow me.
npm test
Here is a list of Contributors
// public orgs for unauthenticated, private and public for authenticated
me.get_organizations(callback);
// public repos for unauthenticated, private and public for authenticated
me.get_repositories(callback);
me.create_repository({name: ''}, callback);
me.get_watched_repositories(callback);
me.is_watching('repo', callback);
me.start_watching('repo', callback);
me.stop_watching('repo', callback);
me.get_issues(params, callback);
// organization data
var org = octonode.Organization('bulletjs');
org.update(dict_with_update_properties, callback);
org.get_members(callback);
org.get_member('user', callback);
org.add_member('user', 'team', callback);
org.remove_member('user', callback);
org.get_public_members(callback);
org.is_public_member('user', callback);
org.make_member_public('user', callback);
org.conceal_member('user', callback);
org.get_teams(callback);
org.get_team('team', callback);
org.create_team({name:'', repo_names:'', permission:''}, callback);
org.edit_team({name:'', permission:''}, callback);
org.delete_team('name', callback);
org.get_team_members('team', callback);
org.get_team_member('team', 'user', callback);
org.remove_member_from_team('user', 'team', callback);
org.get_repositories(callback);
org.create_repository({name: ''}, callback);
org.get_team_repositories('team', callback);
org.get_team_repository('team', 'name', callback);
org.add_team_repository('team', 'name', callback);
org.remove_team_repository('team', 'name', callback);
var repo = octonode.Repository('pksunkara/octonode');
repo.update({name: ''}, callback);
repo.get_contributors(callback);
repo.get_languages(callback);
repo.get_teams(callback);
repo.get_tags(callback);
repo.get_branches(callback);
// collaborator information
repo.get_collaborators(callback);
repo.has_collaborator('name', callback);
repo.add_collaborator('name', callback);
repo.remove_collaborator('name', callback);
// commit data
repo.get_commits(callback);
repo.get_commit('sha-id', callback);
repo.get_all_comments(callback);
repo.get_commit_comments('SHA ID', callback);
repo.comment_on_commit({body: '', commit_id: '', line: '', path: '', position: ''}, callback);
repo.get_single_comment('comment id', callback);
repo.edit_single_comment('comment id', callback);
repo.delete_single_comment('comment id', callback);
// downloads
repo.get_downloads(callback);
repo.get_download(callback);
repo.create_download({name: ''}, 'filepath', callback);
repo.delete_download(callback);
// fork data
repo.get_forks(callback);
repo.create_fork(callback);
// keys
repo.get_deploy_keys(callback);
repo.get_deploy_key('id', callback);
repo.create_deploy_key({title: '', key: ''}, callback);
repo.edit_deploy_key({title: '', key: ''}, callback);
repo.delete_deploy_key('id', callback);
// watcher data
repo.get_watchers(callback);
// pull requests
repo.get_all_pull_request_comments(callback);
repo.get_pull_request_comment('id', callback);
repo.create_pull_request_comment('id', {body:'', commit_id:'', path:'', position:''}, callback);
repo.reply_to_pull_request_comment('id', 'body', callback);
repo.edit_pull_request_comment('id', 'body', callback);
repo.delete_pull_request_comment('id', callback);
repo.get_issues(params, callback);
repo.get_issue('id', callback);
repo.create_issue({title: ''}, callback);
repo.edit_issue({title: ''}, callback);
repo.get_issue_comments('issue', callback);
repo.get_issue_comment('id', callback);
repo.create_issue_comment('id', 'comment', callback);
repo.edit_issue_comment('id', 'comment', callback);
repo.delete_issue_comment('id', callback);
repo.get_issue_events('id', callback);
repo.get_events(callback);
repo.get_event('id', callback);
repo.get_labels(callback);
repo.get_label('id', callback);
repo.create_label('name', 'color', callback);
repo.edit_label('name', 'color', callback);
repo.delete_label('id', callback);
repo.get_issue_labels('issue', callback);
repo.add_labels_to_issue('issue', ['label1', 'label2'], callback);
repo.remove_label_from_issue('issue', 'labelid', callback);
repo.set_labels_for_issue('issue', ['label1', 'label2'], callback);
repo.remove_all_labels_from_issue('issue', callback);
repo.get_labels_for_milestone_issues('milestone', callback);
repo.get_milestones(callback);
repo.get_milestone('id', callback);
repo.create_milestone('title', callback);
repo.edit_milestone('title', callback);
repo.delete_milestone('id', callback);
// raw git access
repo.get_blob('sha-id', callback);
repo.create_blob('content', 'encoding', callback);
repo.get_commit('sha-id', callback);
repo.create_commit('message', 'tree', [parents], callback);
repo.get_reference('ref', callback);
repo.get_all_references(callback);
repo.create_reference('ref', 'sha', callback);
repo.update_reference('ref', 'sha', force, callback);
I accept pull requests and guarantee a reply back within a day
MIT/X11
Report here. Guaranteed reply within a day.
Pavan Kumar Sunkara (pavan.sss1991@gmail.com)