UNPKG

@agoric/zoe

Version:

Zoe: the Smart Contract Framework for Offer Enforcement

38 lines (32 loc) 1.18 kB
// @jessie-check import { X, Fail, q, makeError, annotateError } from '@endo/errors'; import { E } from '@endo/eventual-send'; export const makeInvitationQueryFns = invitationIssuer => { /** @type {import('./types.ts').GetInvitationDetails} */ const getInvitationDetails = async invitationP => { const onRejected = reason => { const err = makeError( X`A Zoe invitation is required, not ${invitationP}`, ); annotateError(err, X`Due to ${reason}`); throw err; }; const invAmount = await E(invitationIssuer) .getAmountOf(invitationP) .catch(onRejected); (Array.isArray(invAmount.value) && invAmount.value.length === 1) || Fail`Expected exactly 1 invitation, not ${q(invAmount.value.length)}`; return invAmount.value[0]; }; /** @type {import('./types.ts').GetInstance} */ const getInstance = invitation => E.get(getInvitationDetails(invitation)).instance; /** @type {import('./types.ts').GetInstallation} */ const getInstallation = invitation => E.get(getInvitationDetails(invitation)).installation; return harden({ getInstance, getInstallation, getInvitationDetails, }); };