2021-01-05 15:38:38 +02:00
import { Path } from './types' ;
/ * *
2023-11-05 19:56:30 +02:00
* This module provides access to the Joplin data API : https : //joplinapp.org/help/api/references/rest_api
2021-01-05 15:38:38 +02:00
* This is the main way to retrieve data , such as notes , notebooks , tags , etc .
* or to update them or delete them .
*
* This is also what you would use to search notes , via the ` search ` endpoint .
*
* [ View the demo plugin ] ( https : //github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/simple)
*
* In general you would use the methods in this class as if you were using a REST API . There are four methods that map to GET , POST , PUT and DELETE calls .
* And each method takes these parameters :
*
2024-02-26 12:16:23 +02:00
* * ` path ` : This is an array that represents the path to the resource in the form ` ["resourceName", "resourceId", "resourceLink"] ` ( eg . [ "tags" , ":id" , "notes" ] ) . The "resources" segment is the name of the resources you want to access ( eg . "notes" , "folders" , etc . ) . If not followed by anything , it will refer to all the resources in that collection . The optional "resourceId" points to a particular resources within the collection . Finally , an optional "link" can be present , which links the resource to a collection of resources . This can be used in the API for example to retrieve all the notes associated with a tag .
2021-01-05 15:38:38 +02:00
* * ` query ` : ( Optional ) The query parameters . In a URL , this is the part after the question mark "?" . In this case , it should be an object with key / value pairs .
* * ` data ` : ( Optional ) Applies to PUT and POST calls only . The request body contains the data you want to create or modify , for example the content of a note or folder .
* * ` files ` : ( Optional ) Used to create new resources and associate them with files .
*
2023-11-05 19:56:30 +02:00
* Please refer to the [ Joplin API documentation ] ( https : //joplinapp.org/help/api/references/rest_api) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
2021-01-05 15:38:38 +02:00
*
* For example :
*
* ` ` ` typescript
* // Get a note ID, title and body
* const noteId = 'some_note_id' ;
* const note = await joplin . data . get ( [ 'notes' , noteId ] , { fields : [ 'id' , 'title' , 'body' ] } ) ;
*
* // Get all folders
* const folders = await joplin . data . get ( [ 'folders' ] ) ;
*
* // Set the note body
* await joplin . data . put ( [ 'notes' , noteId ] , null , { body : "New note body" } ) ;
*
* // Create a new note under one of the folders
* await joplin . data . post ( [ 'notes' ] , null , { body : "my new note" , title : "some title" , parent_id : folders [ 0 ] . id } ) ;
* ` ` `
* /
export default class JoplinData {
private api_ ;
private pathSegmentRegex_ ;
private serializeApiBody ;
private pathToString ;
get ( path : Path , query? : any ) : Promise < any > ;
post ( path : Path , query? : any , body? : any , files? : any [ ] ) : Promise < any > ;
put ( path : Path , query? : any , body? : any , files? : any [ ] ) : Promise < any > ;
delete ( path : Path , query? : any ) : Promise < any > ;
}