chainscript
Version:
Client for chainscript.io
207 lines (149 loc) • 4.93 kB
Markdown
# API
Interact with the [chainscript.io](http://chainscript.io) API using Javascript.
## Install
To install and save in your current project, use:
```bash
$ npm install --save chainscript
```
## Basic usage
### Creating a new script
```js
var Chainscript = require('chainscript');
// You pass the initial script
new Chainscript({body: {content: {name: 'My Document'}}})
// Add a snapshot command
.snapshot()
// Add a notarize command
.notarize()
// Add a send mail command
.email('test@email.address')
// Run the script (returns a promise)
.run()
.then(function(cs) {
console.log(cs.toJSON());
})
.catch(function(err) {
console.error(err.message);
});
```
### Working with a previously snapshotted script
```js
var Chainscript = require('chainscript');
Chainscript.load('chainscript:document:3940c155-d17d-421a-b34e-8bf5a458299e')
.then(function(cs) {
console.log(cs.toJSON());
// You can add commands to the loaded script and run the script
return cs
.email('test@email.address')
.run();
}).then(function(cs) {
// New script executed with added commands
console.log(cs.toJSON());
})
.catch(function(err) {
console.error(err.message);
});
```
## Reference
### Chainscript
#### new Chainscript(script, immutable = false)
Creates a new Chainscript from a JSON object.
If `immutable` is `true`, **THE INSTANCE IS IMMUTABLE**. It is never modified
after initialization. Adding commands to a script returns a new instance.
#### Chainscript.load(uuid, immutable = false)
Loads an existing script. Returns a promise that resolves with an instance of
`Chainscript`.
#### Chainscript#get(path)
Returns the value at specified path, or `undefined` if the path doesn't exist.
Ex:
```js
var value = new Chainscript({body: {content: {name: 'My Document'}}})
.get('body.content.name'));
console.log(value); // My Document
```
#### Chainscript#set(path, value)
Sets the value of a key at the specified path. Returns a new instance of
`Chainscript` if immutable, otherwise returns the instance.
#### Chainscript#snapshot()
Adds a `snapshot` command to a script. Returns a new instance of `Chainscript`
if immutable, otherwise returns the instance.
#### Chainscript#update(updates)
Adds an `update` command to a script. Returns a new instance of `Chainscript`
if immutable, otherwise returns the instance.
#### Chainscript#notarize()
Adds a `notarize` command to a script. Returns a new instance of `Chainscript`
if immutable, otherwise returns the instance.
#### Chainscript#email(to, [subject])
Adds a `send_email` command to a script. Returns a new instance of `Chainscript`
if immutable, otherwise returns the instance.
#### Chainscript#change(fn)
Adds an `update` command to a script that applies granular updates to the
content. Returns a new instance of `Chainscript` if immutable, otherwise
returns the instance.
Ex:
```js
new Chainscript({body: {content: {name: 'My Document', val: true}}})
.change(function(content) {
delete content.val;
content.name += ' V2';
content.meta = {
author: 'Stephan Florquin',
time: Date.now()
};
})
.run()
.then(function(cs) {
console.log(cs.get('body.content'));
})
.catch(function(err) {
console.error(err.message);
});
```
#### Chainscript#delta(content)
Adds an `update` command to a script that applies the necessary changes to
update the current content to the given content. Returns a new instance of
`Chainscript` if immutable, otherwise returns the instance.
Ex:
```js
var content = {
name: 'My Document'
};
var cs = new Chainscript({body: {content: content}});
content.name = 'My Document V2';
content.meta = {
author: 'Stephan Florquin',
time: Date.now()
};
cs.delta(content).run().then(function() {
console.log(cs.get('body.content'));
});
```
#### Chainscript#sign(wif)
Adds a sign_content command to the script. The private key must be in WIF
format. Returns a new instance of `Chainscript` if immutable, otherwise
returns the instance.
#### Chainscript#toJSON()
Returns the script as a JSON object.
#### Chainscript#run()
Runs the Chainscript. Returns a promise that resolves with a new instance of
`Chainscript` if immutable, otherwise with the instance.
#### Chainscript#clone()
Clones Chainscript. Returns a new instance of `Chainscript`.
#### Mutable extensions
This only applies when `immutable` is `false` (the default value).
You may change the script directly via `Chainscript#script`. If you change the
body content directly, an update command will be issued if needed **before
other commands** when you call `run`.
```js
var cs = new Chainscript({body: {content: {name: 'My Document'}}});
cs.script.body.content.name += ' V2';
cs.script.body.content.meta = {
author: 'Stephan Florquin',
time: Date.now()
};
script
.run()
.then(function() {
console.log(script.toJSON());
});
```