all files / src/ notaryUtils.js

100% Statements 17/17
100% Branches 4/4
100% Functions 4/4
100% Lines 17/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                                                                         
'use strict'
 
const co = require('co')
const request = require('superagent')
const uuid = require('node-uuid').v4
 
/**
 * @returns {String} New case ID
 */
function createCaseId () {
  return uuid()
}
 
/**
 * @param {Object} params
 * @param {URI} params.notary
 * @param {Condition} params.receiptCondition
 * @param {Transfer[]} params.transfers
 * @param {String} params.expiresAt
 * @param {String} params.caseId
 * @returns {Promise<URI>} Case ID
 */
function setupCase (params) {
  return co(function * () {
    const uniqueID = params.caseId || uuid()
    if (uniqueID.length > 40) {
      throw new Error('caseId length is limited to 40 characters')
    }
    const caseId = params.notary + '/cases/' + uniqueID
    yield request
      .put(caseId)
      .send({
        id: caseId,
        state: 'proposed',
        execution_condition: params.receiptCondition,
        expires_at: params.expiresAt,
        notaries: [params.notary],
        notification_targets: params.transfers.map(transferToFulfillmentURI)
      })
    return caseId
  })
}
 
/**
 * @param {Transfer} transfer
 * @returns {URI}
 */
function transferToFulfillmentURI (transfer) {
  return transfer.id + '/fulfillment'
}
 
exports.setupCase = setupCase
exports.createCaseId = createCaseId