8000 GitHub - WolfBlader/dropbox-v2-api: Dropbox API wrapper for node
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

WolfBlader/dropbox-v2-api

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dropbox-v2-api

Actions Status NPM Downloads NPM Downloads npm version

The API is generated programmatically, based on endpoints description JSON fetched from official docs.

Why this package?

Get started

$ npm i -s dropbox-v2-api
const dropboxV2Api = require('dropbox-v2-api');

Auth

  • using token
// create session ref:
const dropbox = dropboxV2Api.authenticate({
    token: 'your token'
});

// use session ref to call API, i.e.:
dropbox({
    resource: 'users/get_account',
    parameters: {
        'account_id': 'dbid:AAH4f99T0taONIb-OurWxbNQ6ywGRopQngc'
    }
}, (err, result, response) => {
    if (err) { return console.log(err); }
    console.log(result);
});
//set credentials
const dropbox = dropboxV2Api.authenticate({
    client_id: 'APP_KEY',
    client_secret: 'APP_SECRET',
    redirect_uri: 'REDIRECT_URI',
    state: 'OPTIONAL_STATE_VALUE'
});
//generate and visit authorization sevice
const authUrl = dropbox.generateAuthUrl();
//after redirection, you should receive code
dropbox.getToken(code, (err, result, response) => {
    //you are authorized now!
    //your optional state, given in authenticate: response.query.state
});

Full API showcase

dropbox({
    resource: (string),
    parameters: (object?),
    readStream: (readable stream object?)
}, (err, result, response) => {
    if (err) { return console.log('err:', err); }
    console.log(result);
    console.log(response.headers);
});
  • resource (string) represent API target. It contains Dropbox's namespace and method name. eg. 'users/get_account', 'users/get_space_usage', 'files/upload', 'files/list_folder/longpoll', 'sharing/share_folder' more at official documentation
  • parameters (object?) optional parameters, depends on resource field
  • readStream (readable stream?) Upload-type requests might contains readStream field, which is readable stream

For Download-type requests, the function dropbox returns readable stream.

Upload and Download examples

upload see docs

Upload-type requests might contains readStream field, which is readable stream

dropbox({
    resource: 'files/upload',
    parameters: {
        path: '/dropbox/path/to/file.js'
    },
    readStream: fs.createReadStream('path/to/file.js')
}, (err, result, response) => {
    //upload completed
});

or, using streams:

const dropboxUploadStream = dropbox({
    resource: 'files/upload',
    parameters: {
        path: '/dropbox/path/to/file.js'
    }
}, (err, result, response) => {
    //upload completed
});

fs.createReadStream('path/to/file.js').pipe(dropboxUploadStream);

download see docs

Download-type requests return writableStream

dropbox({
    resource: 'files/download',
    parameters: {
        path: '/dropbox/image.jpg'
    }
}, (err, result, response) => {
    //download completed
})
.pipe(fs.createWriteStream('./image.jpg'));

Problems with downloading? More here

download & upload

You can easely use streams:

const downloadStream = dropbox({
    resource: 'files/download',
    parameters: { path: '/source/file/path' }
});

const uploadStream = dropbox({
    resource: 'files/upload',
    parameters: { path: '/target/file/path' }
}, (err, result, response) => {
    //upload finished
});

downloadStream.pipe(uploadStream);

API call examples

get_current_account see docs

dropbox({
    resource: 'users/get_current_account'
}, (err, result, response) => {
    if (err) { return console.log('err:', err); }
    console.log(result);
});

get_metadata see docs

dropbox({
    resource: 'files/get_metadata',
    parameters: {
        path: '/dropbox/path/to/file.js',
        include_media_info: false
	}
}, (err, result, response) => {
    if(err){ return console.log('err:', err); }
    console.log(result);
});

upload_session see docs

const CHUNK_LENGTH = 100;
//create read streams, which generates set of 100 (CHUNK_LENGTH) characters of values: 1 and 2
const firstUploadChunkStream = () => utils.createMockedReadStream('1', CHUNK_LENGTH);
const secondUploadChunkStream = () => utils.createMockedReadStream('2', CHUNK_LENGTH);

sessionStart((sessionId) => {
    sessionAppend(sessionId, () => {
        sessionFinish(sessionId);
    });
});

function sessionStart(cb) {
    dropbox({
        resource: 'files/upload_session/start',
        parameters: {
            close: false
        },
        readStream: firstUploadChunkStream()
    }, (err, result, response) => {
        if (err) { return console.log('sessionStart error: ', err) }
        console.log('sessionStart result:', result);
        cb(result.session_id);
    });
}


function sessionAppend(sessionId, cb) {
    dropbox({
        resource: 'files/upload_session/append',
        parameters: {
            cursor: {
                session_id: sessionId,
                offset: CHUNK_LENGTH
            },
            close: false,
        },
        readStream: secondUploadChunkStream()
    }, (err, result, response) => {
        if(err){ return console.log('sessionAppend error: ', err) }
        console.log('sessionAppend result:', result);
        cb();
    });
}

function sessionFinish(sessionId) {
    dropbox({
        resource: 'files/upload_session/finish',
        parameters: {
            cursor: {
                session_id: sessionId,
                offset: CHUNK_LENGTH * 2
            },
            commit: {
                path: "/result.txt",
                mode: "add",
                autorename: true,
                mute: false
            }
        }
    }, (err, result, response) => {
        if (err) { return console.log('sessionFinish error: ', err) }
        console.log('sessionFinish result:', result);
    });
}

Downloading issues

  1. FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

You can increase your default memory limit for an app: $ NODE_OPTIONS=--max_old_space_size= 4096 node app.js where 4096 stands for 4GB.

check test cases or examples for more examples...

About

Dropbox API wrapper for node

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%
0