@agoric/solo 0.10.3-dev-b8d6697.0 → 0.10.4-calypso-dev-84eb287.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/package.json +35 -30
- package/public/main.js +1 -2
- package/src/add-chain.js +1 -1
- package/src/captp.js +9 -3
- package/src/chain-cosmos-sdk.js +22 -18
- package/src/entrypoint.js +1 -1
- package/src/init-basedir.js +2 -3
- package/src/pipe-entrypoint.js +12 -5
- package/src/pipe.js +2 -2
- package/src/start.js +14 -5
- package/src/vat-http.js +3 -3
- package/src/web.js +14 -5
- package/test/captp-fixture.js +1 -1
- package/test/{test-home.js → home.test.js} +18 -5
- /package/{jsconfig.json → tsconfig.json} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [0.10.3](https://github.com/Agoric/agoric-sdk/compare/@agoric/solo@0.10.2...@agoric/solo@0.10.3) (2023-06-09)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @agoric/solo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
### [0.10.2](https://github.com/Agoric/agoric-sdk/compare/@agoric/solo@0.10.1...@agoric/solo@0.10.2) (2023-06-02)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @agoric/solo
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/solo",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4-calypso-dev-84eb287.0+84eb287",
|
|
4
4
|
"description": "Agoric's Solo vat runner",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,34 +15,33 @@
|
|
|
15
15
|
"test:xs": "exit 0",
|
|
16
16
|
"lint-fix": "yarn lint:eslint --fix",
|
|
17
17
|
"lint": "run-s --continue-on-error lint:*",
|
|
18
|
-
"lint:types": "tsc
|
|
18
|
+
"lint:types": "tsc",
|
|
19
19
|
"lint:eslint": "eslint ."
|
|
20
20
|
},
|
|
21
21
|
"keywords": [],
|
|
22
22
|
"author": "Agoric",
|
|
23
23
|
"license": "Apache-2.0",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agoric/access-token": "0.4.22-dev-
|
|
26
|
-
"@agoric/assert": "0.6.1-dev-
|
|
27
|
-
"@agoric/cache": "0.3.3-dev-
|
|
28
|
-
"@agoric/cosmic-swingset": "0.41.
|
|
29
|
-
"@agoric/internal": "0.3.3-dev-
|
|
30
|
-
"@agoric/notifier": "0.6.3-dev-
|
|
31
|
-
"@agoric/spawner": "0.6.9-dev-
|
|
32
|
-
"@agoric/store": "0.9.3-dev-
|
|
33
|
-
"@agoric/swing-store": "0.9.2-dev-
|
|
34
|
-
"@agoric/swingset-vat": "0.32.3-dev-
|
|
35
|
-
"@agoric/telemetry": "0.6.3-dev-
|
|
36
|
-
"@agoric/time": "0.3.3-dev-
|
|
37
|
-
"@agoric/vats": "0.15.
|
|
38
|
-
"@agoric/wallet": "0.18.
|
|
39
|
-
"@endo/captp": "^
|
|
40
|
-
"@endo/eventual-send": "^
|
|
41
|
-
"@endo/import-bundle": "^
|
|
42
|
-
"@endo/init": "^
|
|
43
|
-
"@endo/marshal": "^
|
|
44
|
-
"@endo/promise-kit": "^
|
|
45
|
-
"agoric": "0.21.1-dev-b8d6697.0+b8d6697",
|
|
25
|
+
"@agoric/access-token": "0.4.22-calypso-dev-84eb287.0+84eb287",
|
|
26
|
+
"@agoric/assert": "0.6.1-calypso-dev-84eb287.0+84eb287",
|
|
27
|
+
"@agoric/cache": "0.3.3-calypso-dev-84eb287.0+84eb287",
|
|
28
|
+
"@agoric/cosmic-swingset": "0.41.4-calypso-dev-84eb287.0+84eb287",
|
|
29
|
+
"@agoric/internal": "0.3.3-calypso-dev-84eb287.0+84eb287",
|
|
30
|
+
"@agoric/notifier": "0.6.3-calypso-dev-84eb287.0+84eb287",
|
|
31
|
+
"@agoric/spawner": "0.6.9-calypso-dev-84eb287.0+84eb287",
|
|
32
|
+
"@agoric/store": "0.9.3-calypso-dev-84eb287.0+84eb287",
|
|
33
|
+
"@agoric/swing-store": "0.9.2-calypso-dev-84eb287.0+84eb287",
|
|
34
|
+
"@agoric/swingset-vat": "0.32.3-calypso-dev-84eb287.0+84eb287",
|
|
35
|
+
"@agoric/telemetry": "0.6.3-calypso-dev-84eb287.0+84eb287",
|
|
36
|
+
"@agoric/time": "0.3.3-calypso-dev-84eb287.0+84eb287",
|
|
37
|
+
"@agoric/vats": "0.15.2-calypso-dev-84eb287.0+84eb287",
|
|
38
|
+
"@agoric/wallet": "0.18.4-calypso-dev-84eb287.0+84eb287",
|
|
39
|
+
"@endo/captp": "^4.2.0",
|
|
40
|
+
"@endo/eventual-send": "^1.2.2",
|
|
41
|
+
"@endo/import-bundle": "^1.1.2",
|
|
42
|
+
"@endo/init": "^1.1.2",
|
|
43
|
+
"@endo/marshal": "^1.5.0",
|
|
44
|
+
"@endo/promise-kit": "^1.1.2",
|
|
46
45
|
"anylogger": "^0.21.0",
|
|
47
46
|
"deterministic-json": "^1.0.5",
|
|
48
47
|
"esm": "agoric-labs/esm#Agoric-built",
|
|
@@ -50,30 +49,36 @@
|
|
|
50
49
|
"http-proxy-middleware": "^2.0.6",
|
|
51
50
|
"import-meta-resolve": "^2.2.1",
|
|
52
51
|
"minimist": "^1.2.0",
|
|
53
|
-
"morgan": "^1.
|
|
52
|
+
"morgan": "^1.10.0",
|
|
54
53
|
"node-fetch": "^2.6.0",
|
|
55
54
|
"temp": "^0.9.1",
|
|
56
55
|
"tmp": "^0.2.1",
|
|
57
56
|
"ws": "^7.2.0"
|
|
58
57
|
},
|
|
59
58
|
"devDependencies": {
|
|
60
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
61
|
-
"@endo/bundle-source": "^2.
|
|
59
|
+
"@agoric/ertp": "0.16.3-calypso-dev-84eb287.0+84eb287",
|
|
60
|
+
"@endo/bundle-source": "^3.2.3",
|
|
62
61
|
"ava": "^5.3.0",
|
|
63
|
-
"c8": "^
|
|
62
|
+
"c8": "^9.1.0"
|
|
64
63
|
},
|
|
65
64
|
"publishConfig": {
|
|
66
65
|
"access": "public"
|
|
67
66
|
},
|
|
68
67
|
"engines": {
|
|
69
|
-
"node": "
|
|
68
|
+
"node": "^18.12 || ^20.9"
|
|
70
69
|
},
|
|
71
70
|
"ava": {
|
|
72
71
|
"files": [
|
|
73
|
-
"test
|
|
72
|
+
"test/**/*.test.*"
|
|
73
|
+
],
|
|
74
|
+
"require": [
|
|
75
|
+
"@endo/init/debug.js"
|
|
74
76
|
],
|
|
75
77
|
"timeout": "20m",
|
|
76
78
|
"workerThreads": false
|
|
77
79
|
},
|
|
78
|
-
"
|
|
80
|
+
"typeCoverage": {
|
|
81
|
+
"atLeast": 73.11
|
|
82
|
+
},
|
|
83
|
+
"gitHead": "84eb287915c8255d68e845a9b6e10c790f0d54cb"
|
|
79
84
|
}
|
package/public/main.js
CHANGED
|
@@ -237,7 +237,6 @@ function run() {
|
|
|
237
237
|
}
|
|
238
238
|
call({ type: 'getHighestHistory' })
|
|
239
239
|
.then(res => {
|
|
240
|
-
// eslint-disable-next-line no-use-before-define
|
|
241
240
|
setNextHistNum(res.highestHistory + 1);
|
|
242
241
|
// console.debug(`nextHistNum is now ${nextHistNum}`, res);
|
|
243
242
|
})
|
|
@@ -265,7 +264,7 @@ function run() {
|
|
|
265
264
|
commands[commands.length - 1] = inp.value;
|
|
266
265
|
commands[commands.length] = '';
|
|
267
266
|
inp.value = '';
|
|
268
|
-
call({ type: 'doEval', number, body: command });
|
|
267
|
+
void call({ type: 'doEval', number, body: command });
|
|
269
268
|
}
|
|
270
269
|
|
|
271
270
|
function inputKeyup(ev) {
|
package/src/add-chain.js
CHANGED
|
@@ -13,7 +13,7 @@ const DEFAULT_CHAIN_CONFIG = 'https://testnet.agoric.com/network-config';
|
|
|
13
13
|
/**
|
|
14
14
|
* @param {string} basedir
|
|
15
15
|
* @param {string} [chainConfig]
|
|
16
|
-
* @param {boolean} [force
|
|
16
|
+
* @param {boolean} [force]
|
|
17
17
|
*/
|
|
18
18
|
async function addChain(basedir, chainConfig, force = false) {
|
|
19
19
|
let actualConfig = chainConfig;
|
package/src/captp.js
CHANGED
|
@@ -42,7 +42,9 @@ export const getCapTPHandler = (send, getLocalBootstrap, fallback) => {
|
|
|
42
42
|
dispatch,
|
|
43
43
|
abort,
|
|
44
44
|
});
|
|
45
|
-
doFallback('onOpen', obj, meta)
|
|
45
|
+
doFallback('onOpen', obj, meta).catch(e => {
|
|
46
|
+
console.error(`Error in fallback onOpen`, e);
|
|
47
|
+
});
|
|
46
48
|
},
|
|
47
49
|
onClose(obj, meta) {
|
|
48
50
|
console.debug(`Finishing CapTP`, meta);
|
|
@@ -52,7 +54,9 @@ export const getCapTPHandler = (send, getLocalBootstrap, fallback) => {
|
|
|
52
54
|
abort();
|
|
53
55
|
}
|
|
54
56
|
chans.delete(meta.channelHandle);
|
|
55
|
-
doFallback('onClose', obj, meta)
|
|
57
|
+
doFallback('onClose', obj, meta).catch(e => {
|
|
58
|
+
console.error(`Error in fallback onClose`, e);
|
|
59
|
+
});
|
|
56
60
|
},
|
|
57
61
|
onError(obj, meta) {
|
|
58
62
|
console.debug(`Error in CapTP`, meta, obj.error);
|
|
@@ -61,7 +65,9 @@ export const getCapTPHandler = (send, getLocalBootstrap, fallback) => {
|
|
|
61
65
|
const { abort } = chan;
|
|
62
66
|
abort(obj.error);
|
|
63
67
|
}
|
|
64
|
-
doFallback('onError', obj, meta)
|
|
68
|
+
doFallback('onError', obj, meta).catch(e => {
|
|
69
|
+
console.error(`Error in fallback onError`, e);
|
|
70
|
+
});
|
|
65
71
|
},
|
|
66
72
|
async onMessage(obj, meta) {
|
|
67
73
|
console.debug('processing inbound', obj);
|
package/src/chain-cosmos-sdk.js
CHANGED
|
@@ -160,7 +160,7 @@ export async function connectToChain(
|
|
|
160
160
|
);
|
|
161
161
|
|
|
162
162
|
// The helper address may not have a token balance, and instead uses a
|
|
163
|
-
// separate fee account, set up with something like:
|
|
163
|
+
// separate fee granter account, set up with something like:
|
|
164
164
|
//
|
|
165
165
|
// agd tx feegrant grant --period=5 --period-limit=200000uist \
|
|
166
166
|
// $(cat cosmos-fee-account) $(cat ag-cosmos-helper-address)
|
|
@@ -172,7 +172,7 @@ export async function connectToChain(
|
|
|
172
172
|
let lastGoodRpcHrefIndex = 0;
|
|
173
173
|
async function retryRpcHref(tryOnce) {
|
|
174
174
|
let rpcHrefIndex = lastGoodRpcHrefIndex;
|
|
175
|
-
|
|
175
|
+
|
|
176
176
|
for await (const _ of forever) {
|
|
177
177
|
const thisRpcHref = rpcHrefs[rpcHrefIndex];
|
|
178
178
|
|
|
@@ -257,7 +257,7 @@ export async function connectToChain(
|
|
|
257
257
|
*/
|
|
258
258
|
const getMailboxNotifier = () => {
|
|
259
259
|
const { notifier, updater } = makeNotifierKit();
|
|
260
|
-
retryRpcHref(async rpcHref => {
|
|
260
|
+
void retryRpcHref(async rpcHref => {
|
|
261
261
|
// Every time we enter this function, we are establishing a
|
|
262
262
|
// new websocket to a potentially different RPC server.
|
|
263
263
|
//
|
|
@@ -485,7 +485,7 @@ export async function connectToChain(
|
|
|
485
485
|
|
|
486
486
|
waitForTxHash = subscribeAndWaitForTxHash;
|
|
487
487
|
if (postponedTxHash) {
|
|
488
|
-
subscribeAndWaitForTxHash(postponedTxHash);
|
|
488
|
+
void subscribeAndWaitForTxHash(postponedTxHash);
|
|
489
489
|
}
|
|
490
490
|
|
|
491
491
|
subscribeToStorage(`mailbox.${clientAddr}`, (err, storageValue) => {
|
|
@@ -652,7 +652,7 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
|
|
|
652
652
|
|
|
653
653
|
// Use the feeAccount for any fees.
|
|
654
654
|
if (feeAccountAddr) {
|
|
655
|
-
txArgs.push(`--fee-
|
|
655
|
+
txArgs.push(`--fee-granter=${feeAccountAddr}`);
|
|
656
656
|
}
|
|
657
657
|
|
|
658
658
|
// We just try a single delivery per block.
|
|
@@ -691,15 +691,20 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
|
|
|
691
691
|
// Wait for the transaction to be included in a block.
|
|
692
692
|
const txHash = out.txhash;
|
|
693
693
|
|
|
694
|
-
waitForTxHash(txHash)
|
|
695
|
-
|
|
696
|
-
|
|
694
|
+
waitForTxHash(txHash)
|
|
695
|
+
.then(txResult => {
|
|
696
|
+
// The result had an error code (not 0 or undefined for success).
|
|
697
|
+
if (txResult.code) {
|
|
698
|
+
// eslint-disable-next-line no-use-before-define
|
|
699
|
+
failedSend(
|
|
700
|
+
assert.error(`Error in tx processing: ${txResult.log}`),
|
|
701
|
+
);
|
|
702
|
+
}
|
|
703
|
+
})
|
|
704
|
+
.catch(err =>
|
|
697
705
|
// eslint-disable-next-line no-use-before-define
|
|
698
|
-
failedSend(
|
|
699
|
-
|
|
700
|
-
);
|
|
701
|
-
}
|
|
702
|
-
});
|
|
706
|
+
failedSend(assert.error(`Error in tx processing: ${err}`)),
|
|
707
|
+
);
|
|
703
708
|
|
|
704
709
|
// We submitted the transaction to the mempool successfully.
|
|
705
710
|
// Preemptively increment our sequence number to avoid needing to
|
|
@@ -721,9 +726,8 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
|
|
|
721
726
|
* @param {bigint} [lastMailboxUpdate]
|
|
722
727
|
*/
|
|
723
728
|
const recurseEachMailboxUpdate = async (lastMailboxUpdate = undefined) => {
|
|
724
|
-
const { updateCount, value: mailbox } =
|
|
725
|
-
lastMailboxUpdate
|
|
726
|
-
);
|
|
729
|
+
const { updateCount, value: mailbox } =
|
|
730
|
+
await mbNotifier.getUpdateSince(lastMailboxUpdate);
|
|
727
731
|
updateCount || Fail`${GCI} unexpectedly finished!`;
|
|
728
732
|
if (mailbox) {
|
|
729
733
|
const { outbox, ack } = mailbox;
|
|
@@ -777,11 +781,11 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
|
|
|
777
781
|
updateCount || Fail`Sending unexpectedly finished!`;
|
|
778
782
|
|
|
779
783
|
await sendFromMessagePool().then(successfulSend, failedSend);
|
|
780
|
-
recurseEachSend(updateCount);
|
|
784
|
+
void recurseEachSend(updateCount);
|
|
781
785
|
};
|
|
782
786
|
|
|
783
787
|
// Begin the sender when we get the first (empty) mailbox update.
|
|
784
|
-
mbNotifier.getUpdateSince().then(() => recurseEachSend());
|
|
788
|
+
void mbNotifier.getUpdateSince().then(() => recurseEachSend());
|
|
785
789
|
|
|
786
790
|
async function deliver(newMessages, acknum) {
|
|
787
791
|
let doSend = false;
|
package/src/entrypoint.js
CHANGED
|
@@ -7,7 +7,7 @@ import 'esm';
|
|
|
7
7
|
|
|
8
8
|
// we need to enable Math.random as a workaround for 'brace-expansion' module
|
|
9
9
|
// (dep chain: temp->glob->minimatch->brace-expansion)
|
|
10
|
-
import '@endo/init';
|
|
10
|
+
import '@endo/init/legacy.js';
|
|
11
11
|
|
|
12
12
|
import process from 'process';
|
|
13
13
|
import path from 'path';
|
package/src/init-basedir.js
CHANGED
|
@@ -12,8 +12,7 @@ const console = anylogger('ag-solo:init');
|
|
|
12
12
|
|
|
13
13
|
const DEFAULT_WALLET = '@agoric/wallet';
|
|
14
14
|
|
|
15
|
-
const
|
|
16
|
-
const dirname = path.dirname(filename);
|
|
15
|
+
const dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* @param {string} basedir
|
|
@@ -55,7 +54,7 @@ export default function initBasedir(
|
|
|
55
54
|
`${JSON.stringify(connections)}\n`,
|
|
56
55
|
);
|
|
57
56
|
const dstHtmldir = path.join(basedir, 'html');
|
|
58
|
-
fs.mkdirSync(dstHtmldir);
|
|
57
|
+
fs.mkdirSync(dstHtmldir, { recursive: true });
|
|
59
58
|
|
|
60
59
|
// Save the configuration options.
|
|
61
60
|
fs.writeFileSync(path.join(basedir, 'options.json'), JSON.stringify(options));
|
package/src/pipe-entrypoint.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* global process */
|
|
2
2
|
// @ts-check
|
|
3
3
|
import '@endo/init/pre-bundle-source.js';
|
|
4
|
-
import '@endo/init';
|
|
4
|
+
import '@endo/init/unsafe-fast.js';
|
|
5
5
|
|
|
6
6
|
import { parse, stringify } from '@endo/marshal';
|
|
7
7
|
import { makePromiseKit } from '@endo/promise-kit';
|
|
@@ -29,6 +29,7 @@ const main = async () => {
|
|
|
29
29
|
mutex.resolve(undefined);
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
+
/** @type {any} */
|
|
32
33
|
const as = parse(`${msg}`);
|
|
33
34
|
deliverator(...as).then(() => send('go'));
|
|
34
35
|
});
|
|
@@ -59,7 +60,13 @@ const main = async () => {
|
|
|
59
60
|
send('go');
|
|
60
61
|
};
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
process.exitCode = 1;
|
|
64
|
+
main().then(
|
|
65
|
+
() => {
|
|
66
|
+
process.exitCode = 0;
|
|
67
|
+
},
|
|
68
|
+
err => {
|
|
69
|
+
console.error('Failed with', err);
|
|
70
|
+
process.exit(process.exitCode || 1);
|
|
71
|
+
},
|
|
72
|
+
);
|
package/src/pipe.js
CHANGED
|
@@ -7,8 +7,7 @@ import { parse, stringify } from '@endo/marshal';
|
|
|
7
7
|
|
|
8
8
|
import { makeShutdown } from '@agoric/internal/src/node/shutdown.js';
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
const dirname = path.dirname(filename);
|
|
10
|
+
const dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
12
11
|
|
|
13
12
|
export const connectToPipe = async ({ method, args, deliverInboundToMbx }) => {
|
|
14
13
|
// console.log('connectToPipe', method, args);
|
|
@@ -31,6 +30,7 @@ export const connectToPipe = async ({ method, args, deliverInboundToMbx }) => {
|
|
|
31
30
|
return;
|
|
32
31
|
}
|
|
33
32
|
// console.log('pipe.js', msg);
|
|
33
|
+
/** @type {any} */
|
|
34
34
|
const as = parse(`${msg}`);
|
|
35
35
|
deliverInboundToMbx(...as).then(() => cp.send('go'));
|
|
36
36
|
});
|
package/src/start.js
CHANGED
|
@@ -371,10 +371,13 @@ const deployWallet = async ({ agWallet, deploys, hostport }) => {
|
|
|
371
371
|
|
|
372
372
|
// Use the same verbosity as our caller did for us.
|
|
373
373
|
let verbosity;
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
374
|
+
const DEBUG_LIST = (process.env.DEBUG || '').split(',');
|
|
375
|
+
if (
|
|
376
|
+
DEBUG_LIST.find(selector => ['agoric:debug', 'agoric'].includes(selector))
|
|
377
|
+
) {
|
|
377
378
|
verbosity = ['-vv'];
|
|
379
|
+
} else if (DEBUG_LIST.includes('agoric:info') || process.env.DEBUG === '') {
|
|
380
|
+
verbosity = [];
|
|
378
381
|
} else {
|
|
379
382
|
verbosity = ['-v'];
|
|
380
383
|
}
|
|
@@ -471,7 +474,7 @@ const start = async (basedir, argv) => {
|
|
|
471
474
|
|
|
472
475
|
// Start timer here!
|
|
473
476
|
startTimer(800);
|
|
474
|
-
resetOutdatedState();
|
|
477
|
+
await resetOutdatedState();
|
|
475
478
|
|
|
476
479
|
// Remove wallet traces.
|
|
477
480
|
await unlink('html/wallet').catch(_ => {});
|
|
@@ -485,8 +488,14 @@ const start = async (basedir, argv) => {
|
|
|
485
488
|
const { 'agoric-wallet': { htmlBasedir = 'ui/build', deploy = [] } = {} } =
|
|
486
489
|
JSON.parse(fs.readFileSync(pjs, 'utf-8'));
|
|
487
490
|
|
|
491
|
+
const htmlBasePath = String(htmlBasedir).replace(
|
|
492
|
+
/^\.\.\/\.\.\/node_modules\//,
|
|
493
|
+
'',
|
|
494
|
+
);
|
|
495
|
+
|
|
488
496
|
const agWallet = path.dirname(pjs);
|
|
489
|
-
const
|
|
497
|
+
const agWalletHtmlUrl = await importMetaResolve(htmlBasePath, packageUrl);
|
|
498
|
+
const agWalletHtml = new URL(agWalletHtmlUrl).pathname;
|
|
490
499
|
|
|
491
500
|
let hostport;
|
|
492
501
|
await Promise.all(
|
package/src/vat-http.js
CHANGED
|
@@ -106,8 +106,8 @@ export function buildRootObject(vatPowers) {
|
|
|
106
106
|
setCommandDevice(d) {
|
|
107
107
|
commandDevice = d;
|
|
108
108
|
|
|
109
|
-
const replHandler = getReplHandler(replObjects, send
|
|
110
|
-
registerURLHandler(replHandler, '/private/repl');
|
|
109
|
+
const replHandler = getReplHandler(replObjects, send);
|
|
110
|
+
void registerURLHandler(replHandler, '/private/repl');
|
|
111
111
|
|
|
112
112
|
// Assign the captp handler.
|
|
113
113
|
const captpHandler = Far('captpHandler', {
|
|
@@ -126,7 +126,7 @@ export function buildRootObject(vatPowers) {
|
|
|
126
126
|
return harden(exported);
|
|
127
127
|
},
|
|
128
128
|
});
|
|
129
|
-
registerURLHandler(captpHandler, '/private/captp');
|
|
129
|
+
void registerURLHandler(captpHandler, '/private/captp');
|
|
130
130
|
},
|
|
131
131
|
|
|
132
132
|
registerURLHandler,
|
package/src/web.js
CHANGED
|
@@ -9,6 +9,7 @@ import { createProxyMiddleware } from 'http-proxy-middleware';
|
|
|
9
9
|
import WebSocket from 'ws';
|
|
10
10
|
import anylogger from 'anylogger';
|
|
11
11
|
import morgan from 'morgan';
|
|
12
|
+
import { format as urlFormat } from 'url';
|
|
12
13
|
|
|
13
14
|
import { getAccessToken } from '@agoric/access-token';
|
|
14
15
|
|
|
@@ -148,21 +149,29 @@ export async function makeHTTPListener(
|
|
|
148
149
|
const htmldir = path.join(basedir, 'html');
|
|
149
150
|
log(`Serving static files from ${htmldir}`);
|
|
150
151
|
app.use(express.static(htmldir));
|
|
151
|
-
|
|
152
|
+
const soloHtmlDir = new URL('../public', import.meta.url).pathname;
|
|
153
|
+
app.use(express.static(soloHtmlDir));
|
|
152
154
|
|
|
153
155
|
if (walletHtmlDir && !bridgeTarget) {
|
|
154
|
-
//
|
|
156
|
+
// Guide all callers to /wallet/bridge.html
|
|
155
157
|
if (existsSync(path.join(walletHtmlDir, 'bridge.html'))) {
|
|
156
|
-
console.log('redirecting wallet bridge');
|
|
158
|
+
console.log('redirecting /wallet-bridge.html to /wallet/bridge.html');
|
|
157
159
|
app.get('/wallet-bridge.html', (req, res) =>
|
|
158
|
-
res.redirect(
|
|
160
|
+
res.redirect(
|
|
161
|
+
urlFormat({ pathname: '/wallet/bridge.html', query: req.query }),
|
|
162
|
+
),
|
|
163
|
+
);
|
|
164
|
+
} else {
|
|
165
|
+
console.log('serving /wallet/bridge.html from solo wallet-bridge.html');
|
|
166
|
+
app.get('/wallet/bridge.html', (_, res) =>
|
|
167
|
+
res.sendFile(path.resolve(soloHtmlDir, 'wallet-bridge.html')),
|
|
159
168
|
);
|
|
160
169
|
}
|
|
161
170
|
|
|
162
171
|
// Serve the wallet directory.
|
|
163
172
|
app.use('/wallet', express.static(walletHtmlDir));
|
|
164
173
|
|
|
165
|
-
// Default GETs to /wallet/index.html for history routing.
|
|
174
|
+
// Default non-bridge GETs to /wallet/index.html for history routing.
|
|
166
175
|
app.get('/wallet/*', (_, res) =>
|
|
167
176
|
res.sendFile(path.resolve(walletHtmlDir, 'index.html')),
|
|
168
177
|
);
|
package/test/captp-fixture.js
CHANGED
|
@@ -108,7 +108,7 @@ export async function makeFixture(PORT, noisy = false) {
|
|
|
108
108
|
// We only reject if the child exits before CapTP is established.
|
|
109
109
|
reject(Error(`CapTP fixture exited with ${code}`));
|
|
110
110
|
});
|
|
111
|
-
tryConnect(resolve, reject);
|
|
111
|
+
void tryConnect(resolve, reject);
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -5,7 +5,6 @@ import { test } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js';
|
|
|
5
5
|
import bundleSourceAmbient from '@endo/bundle-source';
|
|
6
6
|
import { AmountMath } from '@agoric/ertp';
|
|
7
7
|
import { TimeMath } from '@agoric/time';
|
|
8
|
-
import { Stable } from '@agoric/vats/src/tokens.js';
|
|
9
8
|
import { Far } from '@endo/marshal';
|
|
10
9
|
import { resolve as importMetaResolve } from 'import-meta-resolve';
|
|
11
10
|
|
|
@@ -13,6 +12,21 @@ import { makeFixture, E } from './captp-fixture.js';
|
|
|
13
12
|
|
|
14
13
|
const SOLO_PORT = 7999;
|
|
15
14
|
|
|
15
|
+
// XXX test depends on this exact value from the Inter Protocol economy,
|
|
16
|
+
// by way of agoric-cli (which this test covertly depends upon)
|
|
17
|
+
export const Stable = harden(
|
|
18
|
+
/** @type {const } */ ({
|
|
19
|
+
symbol: 'IST',
|
|
20
|
+
denom: 'uist',
|
|
21
|
+
proposedName: 'Agoric stable token',
|
|
22
|
+
assetKind: 'nat',
|
|
23
|
+
displayInfo: {
|
|
24
|
+
decimalPlaces: 6,
|
|
25
|
+
assetKind: 'nat',
|
|
26
|
+
},
|
|
27
|
+
}),
|
|
28
|
+
);
|
|
29
|
+
|
|
16
30
|
//#region setup (ambient authority is confined to this region)
|
|
17
31
|
test.before('setup', async t => {
|
|
18
32
|
const loadBundle = async specifier => {
|
|
@@ -81,9 +95,8 @@ test.serial('home.wallet - receive zoe invite', async t => {
|
|
|
81
95
|
'@agoric/zoe/src/contracts/automaticRefund.js',
|
|
82
96
|
);
|
|
83
97
|
const installationHandle = await E(zoe).install(bundle);
|
|
84
|
-
const { creatorInvitation: invite } =
|
|
85
|
-
installationHandle
|
|
86
|
-
);
|
|
98
|
+
const { creatorInvitation: invite } =
|
|
99
|
+
await E(zoe).startInstance(installationHandle);
|
|
87
100
|
|
|
88
101
|
// Check that the wallet knows about the Zoe invite issuer and starts out
|
|
89
102
|
// with a default Zoe invite issuer purse.
|
|
@@ -141,7 +154,7 @@ test.serial('home.localTimerService makeNotifier', async t => {
|
|
|
141
154
|
const notifier = E(localTimerService).makeNotifier(1n, 1n);
|
|
142
155
|
const update1 = await E(notifier).getUpdateSince();
|
|
143
156
|
const firstUpdate = update1.updateCount;
|
|
144
|
-
t.
|
|
157
|
+
t.true(firstUpdate > 0);
|
|
145
158
|
const update2 = await E(notifier).getUpdateSince(update1.updateCount);
|
|
146
159
|
t.truthy(BigInt(update2.updateCount) > BigInt(firstUpdate));
|
|
147
160
|
|
|
File without changes
|