diff --git a/packages/zoe/src/zoeService/instanceAdminStorage.js b/packages/zoe/src/zoeService/instanceAdminStorage.js index 3b3ce0433ec..d7fbd7e1664 100644 --- a/packages/zoe/src/zoeService/instanceAdminStorage.js +++ b/packages/zoe/src/zoeService/instanceAdminStorage.js @@ -1,5 +1,6 @@ // @ts-check +import { E } from '@agoric/eventual-send'; import { makeWeakStore } from '@agoric/store'; /** @@ -10,9 +11,10 @@ export const makeInstanceAdminStorage = () => { const instanceToInstanceAdmin = makeWeakStore('instance'); /** @type {GetPublicFacet} */ - const getPublicFacet = async instance => { - return instanceToInstanceAdmin.get(instance).getPublicFacet(); - }; + const getPublicFacet = async instanceP => + E.when(instanceP, instance => + instanceToInstanceAdmin.get(instance).getPublicFacet(), + ); /** @type {GetBrands} */ const getBrands = async instance => diff --git a/packages/zoe/src/zoeService/types.js b/packages/zoe/src/zoeService/types.js index 83fcccf9b68..120860f9831 100644 --- a/packages/zoe/src/zoeService/types.js +++ b/packages/zoe/src/zoeService/types.js @@ -66,7 +66,7 @@ /** * @callback GetPublicFacet - * @param {Instance} instance + * @param {ERef} instanceP * @returns {Promise} */ diff --git a/packages/zoe/test/unitTests/test-zoe.js b/packages/zoe/test/unitTests/test-zoe.js index a10670eaebd..ab98339e37d 100644 --- a/packages/zoe/test/unitTests/test-zoe.js +++ b/packages/zoe/test/unitTests/test-zoe.js @@ -195,6 +195,26 @@ test(`E(zoe).getPublicFacet`, async t => { t.is(await E(zoe).getPublicFacet(instance), publicFacet); }); +test(`E(zoe).getPublicFacet promise for instance`, async t => { + const { zoe } = setup(); + const contractPath = `${dirname}/../../src/contracts/automaticRefund`; + const bundle = await bundleSource(contractPath); + const installationP = E(zoe).install(bundle); + // Note that E.get does not currently pipeline + const { publicFacet: publicFacetP, instance: instanceP } = E.get( + E(zoe).startInstance(installationP), + ); + const pfp = E(zoe).getPublicFacet(instanceP); + const offersCountP = E(publicFacetP).getOffersCount(); + const [offersCount, publicFacet, pf] = await Promise.all([ + offersCountP, + publicFacetP, + pfp, + ]); + t.is(offersCount, 0n); + t.is(pf, publicFacet); +}); + test(`E(zoe).getPublicFacet - no instance`, async t => { const { zoe } = setup(); // @ts-ignore deliberate invalid arguments for testing