Marvin Live developer guide - resolver plugins
Marvin Live resolver plugins load molecules into the editor by fetching the source for a given corporate or database ID. These plugins are NodeJS modules, stored in a folder set by Marvin Live’s configuration file.
Prerequisites
-
an instance of Marvin Live available for development purposes, i.e.: the ability to stop and start it, to try different configuration options
-
familiarity with JavaScript, NodeJS and its module system
-
good understanding of Promises
NodeJS introduction material: https://www.youtube.com/watch?v=_l96hPlqzcI (78m), https://www.youtube.com/watch?v=hKQr2DGJjUQ (19m), https://www.youtube.com/watch?v=cJVXP1bU68Y (48m)
NodeJS module description: http://nodejs.org/api/modules.html
Promise introduction: http://www.html5rocks.com/en/tutorials/es6/promises/#toc-async, https://github.com/kriskowal/q#readme
Resolver plugins
This plugin type is intended to fetch the MRV or SDF formatted chemical structure corresponding to a company specific ID or an alias, by making asynchronous network requests to RESTful JSON services.
Life-cycle
Marvin Live scans the services directory to find the resolver plugins and generates a GUI element where chemists can type IDs. There may be only 1 resolver plugin active in a meeting room.
Specification
Resolver plugins are NodeJS modules , denoted by their filename: *.resolve.js and their location in the services directory as configured during installation.
A resolver plugin exports the following required properties:
Name |
Type |
Description |
resolve |
function |
The main function of the plugin, called when the chemist types an ID. The function should resolve the given ID or alias to a chemical structure and must return a Promise of the results. The results are broadcasted by the application. Arguments:
Return value: Promise The fulfillment value of the promise must be a chemical structure in SDF or MRV format. A rejected promise will display an error to the chemist. |
name |
string |
Unique identifier of the plugin, used by Marvin Live for identification and internal communication. If multiple plugins use the same identifier, the last one to be loaded overrides the others. |
label |
string |
Human readable name of the plugin, used by Marvin Live to display GUI elements related to this plugin. |
domains |
array of strings |
List of domains where this plugin may be used, when authentication is enabled in Marvin Live. Use * to allow any domain. If no authentication is setup, this option has no effect. To query the configured domains, send a GET request to /domains or open /domains in your browser. |
Examples
You can find a brief selection of plugins in this archive for: custom dictionaries in Name to Structure and Compound Registration.