} paymentP
* @param {Purse | Petname=} depositTo
*/
- const addPayment = async (payment, depositTo = undefined) => {
- // We don't even create the record until we get an alleged brand.
+ const addPayment = async (paymentP, depositTo = undefined) => {
+ // We don't even create the record until we resolve the payment.
+ const payment = await paymentP;
const brand = await E(payment).getAllegedBrand();
const depositedPK = makePromiseKit();
diff --git a/packages/dapp-svelte-wallet/api/src/observable.js b/packages/dapp-svelte-wallet/api/src/observable.js
index 6f6152dd5c6..e49ed9ea633 100644
--- a/packages/dapp-svelte-wallet/api/src/observable.js
+++ b/packages/dapp-svelte-wallet/api/src/observable.js
@@ -12,7 +12,7 @@ export default function makeObservablePurse(E, purse, onFulfilled) {
.then(depositOnlyFacet => {
return {
receive(...args) {
- E(depositOnlyFacet)
+ return E(depositOnlyFacet)
.receive(...args)
.then(result => {
onFulfilled();
diff --git a/packages/dapp-svelte-wallet/api/src/wallet.js b/packages/dapp-svelte-wallet/api/src/wallet.js
index 16e4907f538..8da2fb47fca 100644
--- a/packages/dapp-svelte-wallet/api/src/wallet.js
+++ b/packages/dapp-svelte-wallet/api/src/wallet.js
@@ -99,9 +99,41 @@ export function buildRootObject(_vatPowers) {
};
}
case 'walletAddOffer': {
+ let handled = false;
+ const actions = harden({
+ result(offer, outcome) {
+ E(http).send(
+ {
+ type: 'walletOfferResult',
+ data: {
+ id: offer.id,
+ outcomeDetails: offer.outcomeDetails,
+ outcome: `${outcome}`,
+ },
+ },
+ [meta.channelHandle],
+ );
+ },
+ handled(offer) {
+ if (handled) {
+ return;
+ }
+ handled = true;
+ E(http).send(
+ {
+ type: 'walletOfferHandled',
+ data: offer.id,
+ },
+ [meta.channelHandle],
+ );
+ },
+ });
return {
type: 'walletOfferAdded',
- data: await wallet.addOffer(data, { ...meta, dappOrigin }),
+ data: await wallet.addOffer(
+ { ...data, actions },
+ { ...meta, dappOrigin },
+ ),
};
}
case 'walletDeclineOffer': {
@@ -217,16 +249,22 @@ export function buildRootObject(_vatPowers) {
dappOrigin,
);
- const notYetEnabled = () =>
- E(otherSide)
- .needDappApproval(dappOrigin, suggestedDappPetname)
- .catch(_ => {});
- const approve = () =>
- wallet.waitForDappApproval(
+ const approve = async () => {
+ let needApproval = false;
+ await wallet.waitForDappApproval(
suggestedDappPetname,
dappOrigin,
- notYetEnabled,
+ () => {
+ needApproval = true;
+ E(otherSide)
+ .needDappApproval(dappOrigin, suggestedDappPetname)
+ .catch(_ => {});
+ },
);
+ if (needApproval) {
+ E(otherSide).dappApproved(dappOrigin);
+ }
+ };
return harden({
async getPurseNotifier() {
@@ -297,27 +335,42 @@ export function buildRootObject(_vatPowers) {
const {
type,
dappOrigin = meta.origin,
- suggestedDappPetname = obj.dappOrigin || meta.origin,
+ suggestedDappPetname = (meta.query &&
+ meta.query.suggestedDappPetname) ||
+ obj.dappOrigin ||
+ meta.origin,
} = obj;
// When we haven't been enabled, tell our caller.
- const notYetEnabled = () =>
+ let needApproval = false;
+ await wallet.waitForDappApproval(
+ suggestedDappPetname,
+ dappOrigin,
+ () => {
+ needApproval = true;
+ E(http).send(
+ {
+ type: 'walletNeedDappApproval',
+ data: {
+ dappOrigin,
+ suggestedDappPetname,
+ },
+ },
+ [meta.channelHandle],
+ );
+ },
+ );
+ if (needApproval) {
E(http).send(
{
- type: 'walletNeedDappApproval',
+ type: 'walletHaveDappApproval',
data: {
dappOrigin,
- suggestedDappPetname,
},
},
[meta.channelHandle],
);
-
- await wallet.waitForDappApproval(
- suggestedDappPetname,
- dappOrigin,
- notYetEnabled,
- );
+ }
switch (type) {
case 'walletGetPurses':
diff --git a/packages/dapp-svelte-wallet/ui/src/Amount.svelte b/packages/dapp-svelte-wallet/ui/src/Amount.svelte
index 1c3117df08f..95cc31e2328 100644
--- a/packages/dapp-svelte-wallet/ui/src/Amount.svelte
+++ b/packages/dapp-svelte-wallet/ui/src/Amount.svelte
@@ -27,9 +27,9 @@
{#if brand.petname === 'zoe invite'}
- {#each value as { instanceHandle: { petname }, inviteDesc }}
+ {#each value as { instance: { petname }, description }}
- inviteDesc: {inviteDesc}
+ description: {description}
{/each}
{:else}
{value.map(v => JSON.stringify(v)).join(', ')}
diff --git a/packages/dapp-svelte-wallet/ui/src/Transaction.svelte b/packages/dapp-svelte-wallet/ui/src/Transaction.svelte
index 2d2bc98e4aa..15b993e6caf 100644
--- a/packages/dapp-svelte-wallet/ui/src/Transaction.svelte
+++ b/packages/dapp-svelte-wallet/ui/src/Transaction.svelte
@@ -17,7 +17,11 @@
if (!obj) {
return;
}
- let { outcome } = obj;
+ let { outcomeDetails, outcome } = obj;
+ if (outcomeDetails) {
+ // They have opted-in to handling the outcome.
+ return;
+ }
if (typeof outcome !== 'string') {
outcome = 'Offer was accepted.';
}