2.0.5 • Published 3 years ago

adcharity-remarkable-api v2.0.5

Weekly downloads
26
License
ISC
Repository
-
Last release
3 years ago

remarkable-api

The unofficial reMarkable API for Node.js

version 2

Version 2 will introduce breaking changes to the API. It is currently a work in progress.

installation

npm install adcharity-remarkable-api

intializing a new device

After you install the remarkable-api module, you can create a new reMarkable device.

const Device = require("adcharity-remarkable-api")
const reMarkable = new Device()

registering a device

To use this module, you must retrieve a one-time code from the reMarkable dashboard. Confirming your one-time code will return a userToken that can be used to interact with the device. You should store this token somewhere safe, such as in an environmental variable.

const Device = require("adcharity-remarkable-api")
const reMarkable = new Device()

reMarkable.register("one-time code").then(code => {
  console.log(code)
})

setting user token

You can set the userToken of the device using the refresh method. This method will also reset storageHost and notificationsHost, which are required to upload documents and send messages to the reMarkable.

...
reMarkable.refresh(process.env.USER_TOKEN)
reMarkable.userToken = process.env.USER_TOKEN // will not work

items

items will return an array of all documents and collections (or folders) on your reMarkable.

...
(async () => {
  await reMarkable.refresh(process.env.USER_TOKEN);
  reMarkable.items().then(everything => {
    console.log(everything);
  });
})();

item

If you have an id for a particular document, you can fetch it with item. It will return a signle document or collection.

(async () => {
  await reMarkable.refresh(process.env.USER_TOKEN);
  reMarkable.item("4c8566a1-1d89-4e3d-80e6-5f6bb125c5a7").then(console.log);
})();

upload

upload takes the file path as a parameter. It is recommended to use __dirname. Uploading a document will return some very basic metadata, including the document id and visibleName.

(async () => {
  await reMarkable.refresh(process.env.USER_TOKEN);
  
  const document = await reMarkable.upload(path.join(__dirname, "./example.pdf"))

  if(document) {
    const item = await reMarkable.item(document.id)
  }
})();

item class

Unlike v1 of the reMarkable api, everything returned from items or item is encapsulated within an Item class. This class contains methods that will allow you to delete or modify a particular document.

original metadata

The metadata initially retrieved from reMarkable's cloud servers contains odd capitilizations and spelling errors. Some of the data is not completely necessary and pertains to the details of the request (and not the document itself).

{
  "ID": "ec53580c-3579-4fe7-a096-fd1de8011b70", // id
  "Version": 0, // version
  "Message": "", // removed
  "Success": false, // removed
  "BlobURLGet": "", // blob
  "BlobURLGetExpires": "0001-01-01T00:00:00Z", // blobExpiration
  "ModifiedClient": "0001-01-01T00:00:00Z", // lastModified
  "Type": "", // type
  "VissibleName": "", // visibleName
  "CurrentPage": 0, // currentPage
  "Bookmarked": false, // bookmarked
  "Parent": "" // parent
}

metadata

Metadata in an Item is non-standard; it does not follow other reMarkable apis. It has been modified to address spelling mistakes (such as VissibleName) and make the data more convenient for JavaScript programmers.

  • id: used to identify documents, can be stored and passed into item
  • type: DocumentType or CollectionType
  • blob: where the file is located
  • blobExpiration: when the blob will expire
  • lastModified: when the file was last edited
  • visibleName: file or directory visibleName
  • currentPage: opened page
  • bookmarked: starred or not
  • parent: parent directory

update

update allows you to change the metadata of a document. The only properties you can change are parent, bookmarked, and visibleName.

(async () => {
  await reMarkable.refresh(process.env.USER_TOKEN);
  const item = await reMarkable.item("4c8566a1-1d89-4e3d-80e6-5f6bb125c5a7");
  item.update({
    visibleName: "spanish-test"
  }).then(success => {
    // success = true or false
  })
})();

remove

remove deletes a document.

(async () => {
  await reMarkable.refresh(process.env.USER_TOKEN);
  const item = await reMarkable.item("4c8566a1-1d89-4e3d-80e6-5f6bb125c5a7");
  item.remove().then(success => {
    // success = true or false
  })
})();

resources & alternative apis

https://akeil.de/posts/remarkable-cloud-api/
https://github.com/Ogdentrod/reMarkable-typescript
https://github.com/splitbrain/ReMarkableAPI

2.0.3

3 years ago

2.0.2

3 years ago

2.0.5

3 years ago

2.0.4

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.0.0

4 years ago