@shareandcharge/ocn-notary
v1.0.0
Published
Library for signing requests and verifying signatures on the Open Charging Network
Downloads
189
Readme
OCN Notary JavaScript Package
This readme contains specific information pertaining to the JavaScript package of the Open Charging Network Notary, including: how to test, build, publish, install and use.
This package is written in TypeScript to provide type definitions for developers.
Install
npm install @shareandcharge/ocn-notary
Usage
Signing a request:
First, create a request object containing the headers, url-encoded parameters and body of the OCPI request.
const Notary = require("@sharecharge/ocn-notary")
const request = {
headers: {
"X-Correlation-ID": "123"
...
},
body: {
"id": "LOC1",
...
}
}
Next, instantiate an empty notary object and sign the request with your Ethereum private key.
const notary = new Notary()
await notary.sign(request, privateKey)
The OCN-Signature
is a base64-encoded, JSON serialized string of the Notary. Retrieving it is possible with the Notary's serialize
method.
const ocnSignature = notary.serialize()
console.log(ocnSignature)
// eyJmaWVsZHMiOlsiJFsnaGVhZGVycyddWyd4LWNvcnJlbGF0aW9uLWlkJ10iLCIkWydoZWFkZXJzJ11bJ...
This string should be appended to your headers with the key OCN-Signature
before sending a request to the Open
Charging Network.
Verifying a request:
In order to verify the request, first deserialize the OCN-Signature
header received from a counterparty.
const notary = Notary.deserialize(ocnSignature)
Then, call the verify method on the notary object with the headers, url-encoded parameters and body of the request received (see above for how this looks like).
const isValid = notary.verify(request)
console.log(isValid)
// true
Modifying a request:
It might be the case that an OCN node needs to modify a request before forwarding it to the recipient, such as in
the case where the sender has specified a response_url
. In order to do this, we can stash the values that will be
changed:
const notary = Notary.deserialize(ocnSignature)
notary.stash({
"$['body']['response_url']": "https://amazing.msp.org/commands/START_SESSION/42"
})
It is important to sign the new request afterwards:
await notary.sign(modifiedRequest, someOtherPrivateKey)
And finally, include the signature in the forwarded request by serializing the notary object:
headers["OCN-Signature"] = notary.serialize()