function ChildAPI(info) {
      var _this3 = this;

      this.model = info.model;
      this.parent = info.parent;
      this.parentOrigin = info.parentOrigin;
      this.child = info.child;

      {
        log('Child: Registering API');
        log('Child: Awaiting messages...');
      }

      this.child.addEventListener('message', function (e) {
        if (!sanitize(e, _this3.parentOrigin)) return;

        {
          log('Child: Received request', e.data);
        }

        var _e$data = e.data,
            property = _e$data.property,
            uid = _e$data.uid,
            data = _e$data.data;

        if (e.data.postmate === 'call') {
          if (property in _this3.model && typeof _this3.model[property] === 'function') {
            _this3.model[property](data);
          }

          return;
        } // Reply to Parent


        resolveValue(_this3.model, property).then(function (value) {
          return e.source.postMessage({
            property: property,
            postmate: 'reply',
            type: messageType,
            uid: uid,
            value: value
          }, e.origin);
        });
      });
    }
Composes an API to be used by the child
@param {Object} info Information on the consumer