0.4.1 • Published 4 years ago

onedrive-api-memento v0.4.1

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

onedrive-api

CircleCI

OneDrive API module for Node.js. It's built with pure functional programing, there are no unnecessary objects.

It's built for internal project so it supports only basic CRUD operations needed for project (for now). I will accept any pull requests.

Install

npm install onedrive-api

API

Items

Examples

Require module

var oneDriveAPI = require('onedrive-api');
oneDriveAPI.items.listChildren({
    accessToken: accessToken,
    itemId: 'root',
    drive: 'me', // 'me' | 'user' | 'drive' | 'group' | 'site'
    driveId: '' // BLANK | {user_id} | {drive_id} | {group_id} | {sharepoint_site_id}
  }).then((childrens) => {
  // list all children of given root directory
  //
  // console.log(childrens);
  // returns body of https://dev.onedrive.com/items/list.htm#response
  })

items.createFolder

Create Folder

Returns: Object - folder object

ParamTypeDefaultDescription
paramsObject
params.accessTokenStringOneDrive access token
params.rootItemIdStringrootItem id
params.nameStringNew folder name
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
oneDriveAPI.items.createFolder({
  accessToken: accessToken,
  rootItemId: "root",
  name: "Folder name"
}).then((item) => {
// console.log(item)
// returns body of https://dev.onedrive.com/items/create.htm#response
})

items.delete

Delete item (file or folder)

Returns: undefined - (204 No content)

ParamTypeDescription
paramsObject
params.accessTokenStringOneDrive access token
params.itemIdStringItem id
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
oneDriveAPI.items.delete({
  accessToken: accessToken,
  itemId: createdFolder.id
}).then(() => {
})

items.download

Download item content

Returns: Object - Readable stream with item's content

ParamTypeDescription
paramsObject
params.accessTokenStringOneDrive access token
params.itemIdStringitem id
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
var fileStream = oneDriveAPI.items.download({
  accessToken: accessToken,
  itemId: createdFolder.id
});
fileStream.pipe(SomeWritableStream);

items.customEndpoint

Call custom endpoint

Returns: Object - Readable stream with item's content

ParamTypeDescription
paramsObject
params.accessTokenStringOneDrive access token
params.urlStringEndpoint url. Ex. 'groups/{groupId}/drives'
params.bodyObjectfalseOptional body
params.methodStringOptional method
oneDriveAPI.items.customEndpoint({
  accessToken: accessToken,
  url: 'me/drive/special/cameraroll',
  // method: 'GET',
  // body: {}
}).then(r => {
  console.log(r)
}).catch(e => {
  console.log(e)
})

items.sync

Sync changes

Returns: Array - Changes since last sync

ParamTypeDescription
paramsObject
params.accessTokenStringOneDrive access token
params.nextStringnextLink (or deltaLink returned from last session).
oneDriveAPI.items.sync({
  accessToken: accessToken,
  next: 'https://graph.microsoft.com/v1.0/me/drive/delta(token=1230919asd190410jlka)'
}).then((item) => {
  // console.log(item);
  // returns body of https://docs.microsoft.com/nb-no/onedrive/developer/rest-api/api/driveitem_delta?view=odsp-graph-online#response
})

items.getMetadata

Get items metadata (file or folder)

Returns: Object - Item's metadata

ParamTypeDescription
paramsObject
params.accessTokenStringOneDrive access token
params.itemIdStringItem id
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
oneDriveAPI.items.getMetadata({
  accessToken: accessToken,
  itemId: createdFolder.id
}).then((item) => {
  // console.log(item);
  // returns body of https://dev.onedrive.com/items/update.htm#response
})

items.listChildren

List childrens

Returns: Array - object of children items

ParamTypeDefaultDescription
paramsObject
params.accessTokenStringOneDrive access token
params.itemIdStringrootItem id
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
oneDriveAPI.items.listChildren({
  accessToken: accessToken,
  itemId: createdFolder.id
}).then((childrens) => {
// console.log(childrens);
// returns body of https://dev.onedrive.com/items/list.htm#response
})

items.update

Update item metadata

Returns: Object - Item object

ParamTypeDescription
paramsObject
params.accessTokenStringOneDrive access token
params.itemIdStringItem id
params.toUpdateObjectObject to update
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
oneDriveAPI.items.update({
  accessToken: accessToken,
  itemId: createdFolder.id,
  toUpdate: {
        name: "newFolderName"
      }
}).then((item) => {
// console.log(item);
// returns body of https://dev.onedrive.com/items/update.htm#response
})

items.uploadSimple

Create file with simple upload

Returns: Object - Item

ParamTypeDefaultDescription
paramsObject
params.accessTokenStringOneDrive access token
params.filenameStringFile name
params.parentIdStringrootParent id
params.parentPathStringParent path (if parentPath is defined, than parentId is ignored)
params.readableStreamObjectReadable Stream with file's content
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
oneDriveAPI.items.uploadSimple({
  accessToken: accessToken,
  filename: filename,
  readableStream: readableStream
}).then((item) => {
// console.log(item);
// returns body of https://dev.onedrive.com/items/upload_put.htm#response
})

items.uploadSession

Create file with session upload. Use this for the files over 4MB. This is a synchronous wrapper around asynchronous method, which means that on the failed upload you can't resume the upload but need to retry the implementation. I am accepting PRs for asynchronous implementation

Returns: Object - Item

ParamTypeDefaultDescription
paramsObject
params.accessTokenStringOneDrive access token
params.filenameStringFile name
params.fileSizeNumberSize of the file
params.parentIdStringrootParent id
params.parentPathStringParent path (if parentPath is defined, than parentId is ignored)
params.readableStreamObjectReadable Stream with file's content
params.sharedBooleanfalseA flag to indicated whether this files is owned by the user or shared from another user. If true params.user has to be set.
params.userStringThe user who shared the file. Must be set if params.shared is true.
params.chunksToUploadNumber20Chunks to upload per request. More chunks per request requires more RAM
writeStreamBooleanfalseReturn writeStream instead of handling upload directly
cbFunction (err, results)Callback for writestream
// Handle by upload using this library (starts at once)
oneDriveAPI.items.uploadSession({
  accessToken: accessToken,
  filename: filename,
  fileSize: fileSize,
  readableStream: readableStream
}, (bytesUploaded) => {
  console.log(bytesUploaded)
}).then((item) => {
// console.log(item);
// returns body of https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_createuploadsession?view=odsp-graph-online#http-response
}).catch(e => console.log(e))

// Handle upload using write stream
let writestream = await oneDriveAPI.items.uploadSession({
  accessToken: accessToken,
  filename: filename,
  fileSize: fileSize,
  readableStream: readableStream
}, (bytesUploaded) => {
  console.log(bytesUploaded)
}, true, (err, results) => {
  if (err) console.log('Something went wrong when uploading to write stream', err)
  else console.log('Upload completed', results)
})

// Start the upload by piping a readstream
readstream.pipe(writestream)

Changelog