OfferSpec: {
    id: OfferId;
    invitationSpec: invitations;
    offerArgs?: any;
    proposal: Proposal;
    saveResult?: ResultPlan;
}

If saveResult is provided, the result of the invocation will be saved to the specified location. Otherwise it will be published directly to vstorage (or 'UNPUBLISHED' if it cannot be).