Marvin Live developer guide - storage plugins
Marvin Live storage plugins automatically save snapshots to databases added in version 16.9.26. 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
 
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    
Storage plugins
This plugin type is intended to save important information from a discussion room, to a shared idea database.
Life-cycle
Marvin Live scans the services directory to find all storage plugins and loads them on start. There is 1 instance of a plugin per room.
    
        
Specification
Export plugins are NodeJS modules , denoted by their filename: *.storage.js and the location in the services directory as configured during installation.
An export plugin exports the following required properties:
| 
         Name  | 
                
         Type  | 
                
         Description  | 
        
| 
         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.  | 
        
| 
         insertSnapshot  | 
                
         function  | 
                
         The main function of the plugin, called when chemists save a snapshot, once for each snapshot. The function should have a void return type. Arguments: 
 Required: yes  | 
        
| 
         updateSnapshot  | 
                
         function  | 
                
         Called when chemists change the metadata of a snapshot, once for each change. The function should have a void return type. Arguments: 
 Required: no  | 
        
| 
         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.  | 
        
| 
         enablePrivateDataStorage  | 
                
         boolean  | 
                
         Configures the application to enable this plugin in rooms that are set to private. Private rooms are visible only to their owner and those invited. Required: no Default: false  | 
        
Snapshot data specification
Below is an example of a snapshot object, with inline description of the individual attributes.
{    //String, mrv source of the chemical structure    "structure": "<cml><MDocument>...</MDocument></cml>",    //String, base64 encoded PNG image at 500x400    "image": "data:image/png;base64,iVBORw0KG...5CYII=",    //String, display name of the author of this structure    "author": "Susan",    //Number, millisecond resolution UNIX timestamp of the authoring    //of this structure    "timestamp": 1436786661609,    //String, uploaded or drawn, indicates the source of this item    "type": "drawn",    //String, action item given when making this snapshot    "task": "check IP by Friday",    //Object, key-value data returned by real time plugins for "reports"    "data": {        //key: String, label of real time plugin        //value: Object, key-value pairs of data returned        "Calculated Properties": {         "Mass": 344.43,         "cLogP": 1.74        }    }}
Examples
You can find a brief selection of plugins in this archive for: Oracle, JChem Oracle Cartridge, Postgres, JChem Postgres Cartridge and MySQL.