         else
             return null
 
-    add_user_to_project: (opts) =>
-        opts = defaults opts,
-            project_id : required
-            account_id : required
-            group      : required  # see PROJECT_GROUPS above
-            cb         : required  # cb(err)
-
-
-    remove_user_from_project: (opts) =>
-        opts = defaults opts,
-            project_id : required
-            account_id : required
-            group      : required  # see PROJECT_GROUPS above
-            cb         : required  # cb(err)
+
 
     # cb(err, true if project is public)
     project_is_public: (opts) =>

            path        : required
            cb          : required
        x = {}; x[opts.path] = true
        db.table('projects').get(opts.project_id).replace(@r.row.without(public_paths:x).run(opts.cb))

    # get map {project_group:[{account_id:?,first_name:?,last_name:?}], ...}
    get_project_users: (opts) =>
        opts = defaults opts,
            project_id : required
            groups     : PROJECT_GROUPS
            cb         : required

    # Set last_edited for this project to right now, and possibly update its size.
    # It is safe and efficient to call this function very frequently since it will

# TODO: client api -- get rid of any reference to consistency and objectify


async = require('async')
_ = require('underscore')

winston = require('winston')
winston.remove(winston.transports.Console)
winston.add(winston.transports.Console, {level: 'debug', timestamp:true, colorize:true})

{defaults} = misc = require('misc')
required = defaults.required

