Skip to content

Commit

Permalink
fix: add getBootstrap method to handler object
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelfig committed Sep 22, 2020
1 parent b3e1e61 commit bb1f525
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 42 deletions.
47 changes: 14 additions & 33 deletions packages/cosmic-swingset/lib/ag-solo/vats/captp.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,28 @@
// in its own makeHardener, etc.
import { makeCapTP } from '@agoric/captp/lib/captp';
import { E } from '@agoric/eventual-send';
import { makePromiseKit } from '@agoric/promise-kit';

export const getCapTPHandler = (
send,
getAdminAndConnectionFacets,
getLocalBootstrap,
fallback = undefined,
) => {
const chans = new Map();
const doCall = (obj, method, ...args) => {
if (obj) {
return E(obj)
[method](...args)
.catch(_ => {});
}
return undefined;
};
const doFallback = (method, ...args) =>
E(fallback)
[method](...args)
.catch(_ => {});
const handler = harden({
onOpen(obj, meta) {
const { channelHandle, origin = 'unknown' } = meta || {};
console.debug(`Starting CapTP`, meta);
const sendObj = o => {
send(o, [channelHandle]);
};
const adminFacetPK = makePromiseKit();
const connectionFacetPK = makePromiseKit();
let booted = false;
const { dispatch, abort, getBootstrap } = makeCapTP(
const { dispatch, abort, getBootstrap: getRemoteBootstrap } = makeCapTP(
origin,
sendObj,
async () => {
if (!booted) {
booted = true;
const admconnP = getAdminAndConnectionFacets(meta, getBootstrap());
adminFacetPK.resolve(E.G(admconnP).adminFacet);
connectionFacetPK.resolve(E.G(admconnP).connectionFacet);
}
return connectionFacetPK.promise;
},
async () => getLocalBootstrap(getRemoteBootstrap(), meta),
{
onReject(err) {
// Be quieter for sanity's sake.
Expand All @@ -50,30 +34,27 @@ export const getCapTPHandler = (
chans.set(channelHandle, {
dispatch,
abort,
adminFacet: adminFacetPK.promise,
});
doCall(fallback, 'onOpen', obj, meta);
doFallback('onOpen', obj, meta);
},
onClose(obj, meta) {
console.debug(`Finishing CapTP`, meta);
const chan = chans.get(meta.channelHandle);
if (chan) {
const { abort, adminFacet } = chan;
doCall(adminFacet, 'onClose');
const { abort } = chan;
abort();
}
chans.delete(meta.channelHandle);
doCall(fallback, 'onClose', obj, meta);
doFallback('onClose', obj, meta);
},
onError(obj, meta) {
console.debug(`Error in CapTP`, meta, obj.error);
const chan = chans.get(meta.channelHandle);
if (chan) {
const { abort, adminFacet } = chan;
doCall(adminFacet, 'onError', obj.error);
const { abort } = chan;
abort(obj.error);
}
doCall(fallback, 'onError', obj, meta);
doFallback('onError', obj, meta);
},
async onMessage(obj, meta) {
console.debug('processing inbound', obj);
Expand All @@ -84,9 +65,9 @@ export const getCapTPHandler = (
return true;
}
}
const done = await doCall(fallback, 'onMessage', obj, meta);
const done = await doFallback('onMessage', obj, meta);
if (!done) {
console.error(`Could not find CapTP handler ${obj.type}`, meta);
console.error(`Could not find handler ${obj.type}`, meta);
}
return done;
},
Expand Down
13 changes: 5 additions & 8 deletions packages/cosmic-swingset/lib/ag-solo/vats/vat-http.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,10 @@ export function buildRootObject(vatPowers) {
.catch(_ => undefined);
const commandHandler = getCapTPHandler(
send,
(meta, otherSide) =>
(otherSide, meta) =>
E(handler)
.open(meta, otherSide)
.catch(e => {
console.error('Loading CapTP', e);
return {};
}),
.getBootstrap(otherSide, meta)
.catch(_e => undefined),
fallback,
);
let reg = registeredURLHandlers.get(url);
Expand All @@ -79,9 +76,9 @@ export function buildRootObject(vatPowers) {

// Assign the captp handler.
const captpHandler = harden({
open() {
getBootstrap(_otherSide, _meta) {
// Harden only our exported objects, and fetch them afresh each time.
return harden({ connectionFacet: exportedToCapTP });
return harden(exportedToCapTP);
},
});
registerURLHandler(captpHandler, '/private/captp');
Expand Down
2 changes: 1 addition & 1 deletion packages/dapp-svelte-wallet/api/src/wallet.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export function buildRootObject(_vatPowers) {
function getBridgeURLHandler() {
return harden({
// Use CapTP to interact with this object.
async open(meta, otherSide) {
async getBootstrap(otherSide, meta) {
const dappOrigin = meta.origin;
const suggestedDappPetname = meta.dappOrigin || meta.origin;

Expand Down

0 comments on commit bb1f525

Please sign in to comment.