@agoric/internal 0.3.3-other-dev-8f8782b.0 → 0.3.3-other-dev-fbe72e7.0.fbe72e7

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.
Files changed (131) hide show
  1. package/README.md +7 -2
  2. package/exported.js +2 -0
  3. package/package.json +41 -19
  4. package/src/action-types.d.ts +51 -5
  5. package/src/action-types.d.ts.map +1 -1
  6. package/src/action-types.js +74 -15
  7. package/src/batched-deliver.d.ts +9 -6
  8. package/src/batched-deliver.d.ts.map +1 -1
  9. package/src/batched-deliver.js +9 -3
  10. package/src/callback.d.ts +24 -17
  11. package/src/callback.d.ts.map +1 -1
  12. package/src/callback.js +55 -61
  13. package/src/chain-storage-paths.d.ts +2 -3
  14. package/src/chain-storage-paths.d.ts.map +1 -1
  15. package/src/chain-storage-paths.js +2 -3
  16. package/src/chain-utils.d.ts +27 -0
  17. package/src/chain-utils.d.ts.map +1 -0
  18. package/src/chain-utils.js +62 -0
  19. package/src/cli-utils.d.ts +2 -0
  20. package/src/cli-utils.d.ts.map +1 -0
  21. package/src/cli-utils.js +21 -0
  22. package/src/config.d.ts +22 -12
  23. package/src/config.d.ts.map +1 -1
  24. package/src/config.js +23 -10
  25. package/src/debug.d.ts +1 -1
  26. package/src/errors.d.ts +2 -0
  27. package/src/errors.d.ts.map +1 -0
  28. package/src/errors.js +16 -0
  29. package/src/hex.d.ts +15 -0
  30. package/src/hex.d.ts.map +1 -0
  31. package/src/hex.js +105 -0
  32. package/src/index.d.ts +10 -1
  33. package/src/index.js +13 -2
  34. package/src/install-ses-debug.d.ts +2 -0
  35. package/src/install-ses-debug.d.ts.map +1 -0
  36. package/src/install-ses-debug.js +6 -0
  37. package/src/js-utils.d.ts +40 -0
  38. package/src/js-utils.d.ts.map +1 -0
  39. package/src/js-utils.js +237 -0
  40. package/src/lib-chainStorage.d.ts +59 -67
  41. package/src/lib-chainStorage.d.ts.map +1 -1
  42. package/src/lib-chainStorage.js +95 -92
  43. package/src/lib-nodejs/ava-unhandled-rejection.d.ts +13 -0
  44. package/src/lib-nodejs/ava-unhandled-rejection.d.ts.map +1 -0
  45. package/src/lib-nodejs/ava-unhandled-rejection.js +66 -0
  46. package/src/lib-nodejs/engine-gc.d.ts +3 -0
  47. package/src/lib-nodejs/engine-gc.d.ts.map +1 -0
  48. package/src/lib-nodejs/engine-gc.js +22 -0
  49. package/src/lib-nodejs/gc-and-finalize.d.ts +2 -0
  50. package/src/lib-nodejs/gc-and-finalize.d.ts.map +1 -0
  51. package/src/lib-nodejs/gc-and-finalize.js +91 -0
  52. package/src/lib-nodejs/spawnSubprocessWorker.d.ts +15 -0
  53. package/src/lib-nodejs/spawnSubprocessWorker.d.ts.map +1 -0
  54. package/src/lib-nodejs/spawnSubprocessWorker.js +89 -0
  55. package/src/lib-nodejs/waitUntilQuiescent.d.ts +2 -0
  56. package/src/lib-nodejs/waitUntilQuiescent.d.ts.map +1 -0
  57. package/src/lib-nodejs/waitUntilQuiescent.js +18 -0
  58. package/src/lib-nodejs/worker-protocol.d.ts +4 -0
  59. package/src/lib-nodejs/worker-protocol.d.ts.map +1 -0
  60. package/src/lib-nodejs/worker-protocol.js +54 -0
  61. package/src/magic-cookie-test-only.js +2 -2
  62. package/src/marshal.d.ts +33 -0
  63. package/src/marshal.d.ts.map +1 -0
  64. package/src/marshal.js +156 -0
  65. package/src/method-tools.d.ts +1 -0
  66. package/src/method-tools.d.ts.map +1 -1
  67. package/src/method-tools.js +33 -62
  68. package/src/metrics.d.ts +183 -0
  69. package/src/metrics.d.ts.map +1 -0
  70. package/src/metrics.js +476 -0
  71. package/src/module-utils.d.ts +2 -0
  72. package/src/module-utils.d.ts.map +1 -0
  73. package/src/module-utils.js +27 -0
  74. package/src/natural-sort.d.ts +2 -0
  75. package/src/natural-sort.d.ts.map +1 -0
  76. package/src/natural-sort.js +48 -0
  77. package/src/netstring.d.ts +24 -0
  78. package/src/netstring.d.ts.map +1 -0
  79. package/src/netstring.js +125 -0
  80. package/src/node/buffer-line-transform.d.ts +20 -16
  81. package/src/node/buffer-line-transform.d.ts.map +1 -1
  82. package/src/node/buffer-line-transform.js +12 -9
  83. package/src/node/createBundles.d.ts.map +1 -1
  84. package/src/node/createBundles.js +12 -3
  85. package/src/node/fs-stream.d.ts +1 -1
  86. package/src/node/fs-stream.d.ts.map +1 -1
  87. package/src/node/fs-stream.js +48 -37
  88. package/src/node/shutdown.d.ts.map +1 -1
  89. package/src/node/shutdown.js +0 -1
  90. package/src/priority-senders.d.ts +2 -1
  91. package/src/priority-senders.d.ts.map +1 -1
  92. package/src/priority-senders.js +10 -4
  93. package/src/queue.d.ts +1 -1
  94. package/src/queue.d.ts.map +1 -1
  95. package/src/queue.js +7 -8
  96. package/src/scratch.d.ts +1 -1
  97. package/src/scratch.d.ts.map +1 -1
  98. package/src/ses-utils.d.ts +68 -0
  99. package/src/ses-utils.d.ts.map +1 -0
  100. package/src/ses-utils.js +422 -0
  101. package/src/storage-test-utils.d.ts +49 -84
  102. package/src/storage-test-utils.d.ts.map +1 -1
  103. package/src/storage-test-utils.js +234 -116
  104. package/src/tagged.d.ts +152 -0
  105. package/src/testing-utils.d.ts +2 -0
  106. package/src/testing-utils.d.ts.map +1 -1
  107. package/src/testing-utils.js +44 -5
  108. package/src/tmpDir.d.ts +2 -0
  109. package/src/tmpDir.d.ts.map +1 -0
  110. package/src/tmpDir.js +17 -0
  111. package/src/tokens.d.ts +34 -0
  112. package/src/tokens.d.ts.map +1 -0
  113. package/src/tokens.js +35 -0
  114. package/src/typeCheck.d.ts +9 -0
  115. package/src/typeCheck.d.ts.map +1 -0
  116. package/src/typeCheck.js +23 -0
  117. package/src/typeGuards.d.ts +17 -0
  118. package/src/typeGuards.d.ts.map +1 -1
  119. package/src/typeGuards.js +20 -0
  120. package/src/types-index.d.ts +1 -0
  121. package/src/types-index.js +2 -0
  122. package/src/types.d.ts +83 -18
  123. package/src/types.d.ts.map +1 -0
  124. package/src/types.ts +129 -0
  125. package/src/upgrade-api.d.ts +14 -4
  126. package/src/upgrade-api.d.ts.map +1 -1
  127. package/src/upgrade-api.js +50 -18
  128. package/CHANGELOG.md +0 -106
  129. package/src/utils.d.ts +0 -67
  130. package/src/utils.d.ts.map +0 -1
  131. package/src/utils.js +0 -451
@@ -0,0 +1,125 @@
1
+ /* eslint-env node */
2
+ import { Fail } from '@endo/errors';
3
+
4
+ // adapted from 'netstring-stream', https://github.com/tlivings/netstring-stream/
5
+ import { Transform } from 'stream';
6
+
7
+ const COLON = 58;
8
+ const COMMA = 44;
9
+
10
+ /**
11
+ * @param {Buffer} data
12
+ * @returns {Buffer} netstring-wrapped
13
+ */
14
+ export function encode(data) {
15
+ const prefix = Buffer.from(`${data.length}:`);
16
+ const suffix = Buffer.from(',');
17
+ return Buffer.concat([prefix, data, suffix]);
18
+ }
19
+
20
+ // input is a sequence of strings, output is a byte pipe
21
+ export function netstringEncoderStream() {
22
+ /**
23
+ * @param {Buffer} chunk
24
+ * @param {BufferEncoding} encoding
25
+ * @param {any} callback
26
+ * @this {{ push: (b: Buffer) => void }}
27
+ */
28
+ function transform(chunk, encoding, callback) {
29
+ if (!Buffer.isBuffer(chunk)) {
30
+ throw Error('stream requires Buffers');
31
+ }
32
+ let err;
33
+ try {
34
+ this.push(encode(chunk));
35
+ } catch (e) {
36
+ err = e;
37
+ }
38
+ callback(err);
39
+ }
40
+ // (maybe empty) Buffer in, Buffer out. We use writableObjectMode to
41
+ // indicate that empty input buffers are important
42
+ return new Transform({ transform, writableObjectMode: true });
43
+ }
44
+
45
+ /**
46
+ * @param {Buffer} data containing zero or more netstrings and maybe some
47
+ * leftover bytes
48
+ * @param {number} [optMaxChunkSize]
49
+ * @returns {{ leftover: Buffer; payloads: Buffer[] }} zero or more decoded
50
+ * Buffers, one per netstring,
51
+ */
52
+ export function decode(data, optMaxChunkSize) {
53
+ // TODO: it would be more efficient to accumulate pending data in an array,
54
+ // rather than doing a concat each time
55
+ let start = 0;
56
+ const payloads = [];
57
+
58
+ for (;;) {
59
+ const colon = data.indexOf(COLON, start);
60
+ if (colon === -1) {
61
+ break; // still waiting for `${LENGTH}:`
62
+ }
63
+ const sizeString = data.toString('utf-8', start, colon);
64
+ const size = parseInt(sizeString, 10);
65
+ if (!(size > -1)) {
66
+ // reject NaN, all negative numbers
67
+ Fail`unparsable size ${sizeString}, should be integer`;
68
+ }
69
+ if (optMaxChunkSize) {
70
+ size <= optMaxChunkSize ||
71
+ Fail`size ${size} exceeds limit of ${optMaxChunkSize}`;
72
+ }
73
+ if (data.length < colon + 1 + size + 1) {
74
+ break; // still waiting for `${DATA}.`
75
+ }
76
+ data[colon + 1 + size] === COMMA ||
77
+ Fail`malformed netstring: not terminated by comma`;
78
+ payloads.push(data.subarray(colon + 1, colon + 1 + size));
79
+ start = colon + 1 + size + 1;
80
+ }
81
+
82
+ const leftover = data.subarray(start);
83
+ return { leftover, payloads };
84
+ }
85
+
86
+ /**
87
+ * @param {number} [optMaxChunkSize]
88
+ * @returns {Transform}
89
+ */
90
+ // input is a byte pipe, output is a sequence of Buffers
91
+ export function netstringDecoderStream(optMaxChunkSize) {
92
+ /** @type {Buffer<ArrayBufferLike>} */
93
+ let buffered = Buffer.from('');
94
+ /**
95
+ * @param {Buffer} chunk
96
+ * @param {BufferEncoding} encoding
97
+ * @param {any} callback
98
+ * @this {{ push: (b: Buffer) => void }}
99
+ */
100
+ function transform(chunk, encoding, callback) {
101
+ if (!Buffer.isBuffer(chunk)) {
102
+ throw Error('stream requires Buffers');
103
+ }
104
+ buffered = Buffer.concat([buffered, chunk]);
105
+ let err;
106
+ try {
107
+ const { leftover, payloads } = decode(buffered, optMaxChunkSize);
108
+ buffered = leftover;
109
+ for (let i = 0; i < payloads.length; i += 1) {
110
+ this.push(payloads[i]);
111
+ }
112
+ } catch (e) {
113
+ err = e;
114
+ }
115
+ // we buffer all data internally, to accommodate netstrings larger than
116
+ // Transform's default buffer size, and callback() indicates that we've
117
+ // consumed the input
118
+ callback(err);
119
+ }
120
+
121
+ // Buffer in, Buffer out, except that each output Buffer is precious, even
122
+ // empty ones, and without readableObjectMode the Stream will discard empty
123
+ // buffers
124
+ return new Transform({ transform, readableObjectMode: true });
125
+ }
@@ -1,41 +1,45 @@
1
- /// <reference types="node" />
2
1
  /**
3
2
  * @typedef {object} BufferLineTransformOptions
4
- * @property {Buffer | string | number} [break] line break matcher for Buffer.indexOf() (default: 10)
5
- * @property {BufferEncoding} [breakEncoding] if break is a string, the encoding to use
3
+ * @property {Buffer | string | number} [break] line break matcher for
4
+ * Buffer.indexOf() (default: 10)
5
+ * @property {BufferEncoding} [breakEncoding] if break is a string, the encoding
6
+ * to use
6
7
  */
7
8
  export default class BufferLineTransform extends Transform {
8
9
  /**
9
- * The BufferLineTransform is reading String or Buffer content from a Readable stream
10
- * and writing each line as a Buffer in object mode
10
+ * The BufferLineTransform is reading String or Buffer content from a Readable
11
+ * stream and writing each line as a Buffer in object mode
11
12
  *
12
- * @param {import('node:stream').TransformOptions & BufferLineTransformOptions} [options]
13
+ * @param {import('node:stream').TransformOptions &
14
+ * BufferLineTransformOptions} [options]
13
15
  */
14
- constructor(options?: (import("stream").TransformOptions & BufferLineTransformOptions) | undefined);
15
- _breakValue: string | number | Buffer;
16
+ constructor(options?: import("node:stream").TransformOptions & BufferLineTransformOptions);
17
+ _breakValue: string | number | Buffer<ArrayBufferLike>;
16
18
  _breakEncoding: BufferEncoding | undefined;
17
19
  _breakLength: number;
18
- /** @type {Array<Buffer>} */
19
- _chunks: Array<Buffer>;
20
+ /** @type {Buffer[]} */
21
+ _chunks: Buffer[];
20
22
  /**
21
- * @override
22
23
  * @param {any} chunk
23
24
  * @param {BufferEncoding | 'buffer'} encoding
24
25
  * @param {import('node:stream').TransformCallback} cb
26
+ * @override
25
27
  */
26
- override _transform(chunk: any, encoding: BufferEncoding | 'buffer', cb: import('node:stream').TransformCallback): void;
28
+ override _transform(chunk: any, encoding: BufferEncoding | "buffer", cb: import("node:stream").TransformCallback): void;
27
29
  /** @param {Buffer} line */
28
30
  _writeItem(line: Buffer): void;
29
31
  }
30
32
  export type BufferLineTransformOptions = {
31
33
  /**
32
- * line break matcher for Buffer.indexOf() (default: 10)
34
+ * line break matcher for
35
+ * Buffer.indexOf() (default: 10)
33
36
  */
34
- break?: string | number | Buffer | undefined;
37
+ break?: string | number | Buffer<ArrayBufferLike> | undefined;
35
38
  /**
36
- * if break is a string, the encoding to use
39
+ * if break is a string, the encoding
40
+ * to use
37
41
  */
38
42
  breakEncoding?: BufferEncoding | undefined;
39
43
  };
40
- import { Transform } from "stream";
44
+ import { Transform } from 'node:stream';
41
45
  //# sourceMappingURL=buffer-line-transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buffer-line-transform.d.ts","sourceRoot":"","sources":["buffer-line-transform.js"],"names":[],"mappings":";AAKA;;;;GAIG;AAEH;IACE;;;;;OAKG;IACH,oGAuBC;IAhBC,sCAAmC;IACnC,2CAAmC;IAWnC,qBAA+B;IAE/B,4BAA4B;IAC5B,SADW,MAAM,MAAM,CAAC,CACP;IAGnB;;;;;OAKG;IACH,2BAJW,GAAG,YACH,cAAc,GAAG,QAAQ,MACzB,OAAO,aAAa,EAAE,iBAAiB,QAgDjD;IAeD,2BAA2B;IAC3B,iBADY,MAAM,QAOjB;CACF"}
1
+ {"version":3,"file":"buffer-line-transform.d.ts","sourceRoot":"","sources":["buffer-line-transform.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH;IACE;;;;;;OAMG;IACH,sBAHW,OAAO,aAAa,EAAE,gBAAgB,GAC5C,0BAA0B,EAyB9B;IAhBC,uDAAmC;IACnC,2CAAmC;IAWnC,qBAA+B;IAE/B,uBAAuB;IACvB,SADW,MAAM,EAAE,CACF;IAGnB;;;;;OAKG;IACH,2BALW,GAAG,YACH,cAAc,GAAG,QAAQ,MACzB,OAAO,aAAa,EAAE,iBAAiB,QAiDjD;IAeD,2BAA2B;IAC3B,iBADY,MAAM,QAOjB;CACF;;;;;;;;;;;;;0BAtHyB,aAAa"}
@@ -1,20 +1,23 @@
1
- /* global Buffer */
1
+ /* eslint-env node */
2
2
  /* eslint-disable no-underscore-dangle */
3
3
 
4
4
  import { Transform } from 'node:stream';
5
5
 
6
6
  /**
7
7
  * @typedef {object} BufferLineTransformOptions
8
- * @property {Buffer | string | number} [break] line break matcher for Buffer.indexOf() (default: 10)
9
- * @property {BufferEncoding} [breakEncoding] if break is a string, the encoding to use
8
+ * @property {Buffer | string | number} [break] line break matcher for
9
+ * Buffer.indexOf() (default: 10)
10
+ * @property {BufferEncoding} [breakEncoding] if break is a string, the encoding
11
+ * to use
10
12
  */
11
13
 
12
14
  export default class BufferLineTransform extends Transform {
13
15
  /**
14
- * The BufferLineTransform is reading String or Buffer content from a Readable stream
15
- * and writing each line as a Buffer in object mode
16
+ * The BufferLineTransform is reading String or Buffer content from a Readable
17
+ * stream and writing each line as a Buffer in object mode
16
18
  *
17
- * @param {import('node:stream').TransformOptions & BufferLineTransformOptions} [options]
19
+ * @param {import('node:stream').TransformOptions &
20
+ * BufferLineTransformOptions} [options]
18
21
  */
19
22
  constructor(options) {
20
23
  const {
@@ -37,15 +40,15 @@ export default class BufferLineTransform extends Transform {
37
40
  }
38
41
  this._breakLength = breakLength;
39
42
 
40
- /** @type {Array<Buffer>} */
43
+ /** @type {Buffer[]} */
41
44
  this._chunks = [];
42
45
  }
43
46
 
44
47
  /**
45
- * @override
46
48
  * @param {any} chunk
47
49
  * @param {BufferEncoding | 'buffer'} encoding
48
50
  * @param {import('node:stream').TransformCallback} cb
51
+ * @override
49
52
  */
50
53
  _transform(chunk, encoding, cb) {
51
54
  try {
@@ -96,8 +99,8 @@ export default class BufferLineTransform extends Transform {
96
99
  }
97
100
 
98
101
  /**
99
- * @override
100
102
  * @param {import('node:stream').TransformCallback} cb
103
+ * @override
101
104
  */
102
105
  _flush(cb) {
103
106
  if (this._chunks.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"createBundles.d.ts","sourceRoot":"","sources":["createBundles.js"],"names":[],"mappings":"AAUO,6EAyBN;AAEM,mFAMN;AAEM,iGAkCN"}
1
+ {"version":3,"file":"createBundles.d.ts","sourceRoot":"","sources":["createBundles.js"],"names":[],"mappings":"AAYO,6EAgCN;AAEM,mFAMN;AAEM,iGAkCN"}
@@ -1,10 +1,12 @@
1
+ /* eslint-env node */
1
2
  // Use modules not prefixed with `node:` since some deploy scripts may
2
3
  // still be running in esm emulation
3
4
  import path from 'path';
4
5
  import { spawnSync } from 'child_process';
5
6
  import { createRequire } from 'module';
6
7
 
7
- const { Fail, quote: q } = assert;
8
+ import { Fail, q } from '@endo/errors';
9
+
8
10
  const BUNDLE_SOURCE_PROGRAM = 'bundle-source';
9
11
  const req = createRequire(import.meta.url);
10
12
 
@@ -22,14 +24,21 @@ export const createBundlesFromAbsolute = async sourceBundles => {
22
24
  }
23
25
  const bundle = match[1];
24
26
 
25
- const args = cacheToArgs.get(cache) || ['--to', cache];
27
+ const args = cacheToArgs.get(cache) || ['--cache-js', cache];
28
+ args.push('--elide-comments');
26
29
  args.push(srcPath, bundle);
27
30
  cacheToArgs.set(cache, args);
28
31
  }
29
32
 
30
33
  for (const args of cacheToArgs.values()) {
31
34
  console.log(BUNDLE_SOURCE_PROGRAM, ...args);
32
- const { status } = spawnSync(prog, args, { stdio: 'inherit' });
35
+ const env = /** @type {NodeJS.ProcessEnv} */ (
36
+ /** @type {unknown} */ ({
37
+ __proto__: process.env,
38
+ LOCKDOWN_OVERRIDE_TAMING: 'severe',
39
+ })
40
+ );
41
+ const { status } = spawnSync(prog, args, { stdio: 'inherit', env });
33
42
  status === 0 ||
34
43
  Fail`${q(BUNDLE_SOURCE_PROGRAM)} failed with status ${q(status)}`;
35
44
  }
@@ -1,4 +1,4 @@
1
- export function fsStreamReady(stream: import("fs").ReadStream | import("fs").WriteStream): Promise<void>;
1
+ export function fsStreamReady(stream: import("fs").ReadStream | import("fs").WriteStream | import("net").Socket): Promise<void>;
2
2
  export function makeFsStreamWriter(filePath: string | undefined | null): Promise<{
3
3
  write: (data: any) => Promise<void>;
4
4
  flush: () => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"fs-stream.d.ts","sourceRoot":"","sources":["fs-stream.js"],"names":[],"mappings":"AAQO,sCAHI,OAAO,IAAI,EAAE,UAAU,GAAG,OAAO,IAAI,EAAE,WAAW,GAChD,QAAQ,IAAI,CAAC,CAgCtB;AAQG,6CADK,MAAM,GAAG,SAAS,GAAG,IAAI;;;;eA2DpC;6BA5Da,YAAY,QAAQ,WAAW,yBAAyB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"fs-stream.d.ts","sourceRoot":"","sources":["fs-stream.js"],"names":[],"mappings":"AAUO,sCALI,OAAO,IAAI,EAAE,UAAU,GAC3B,OAAO,IAAI,EAAE,WAAW,GACxB,OAAO,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgCtB;AAIG,6CADK,MAAM,GAAG,SAAS,GAAG,IAAI;;;;eAwEpC;6BAzEa,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC"}
@@ -1,9 +1,11 @@
1
- import { createWriteStream } from 'node:fs';
2
1
  import { open } from 'node:fs/promises';
3
- import { makeAggregateError } from '../utils.js';
2
+ import process from 'node:process';
3
+ import { promisify } from 'node:util';
4
4
 
5
5
  /**
6
- * @param {import("fs").ReadStream | import("fs").WriteStream} stream
6
+ * @param {import('fs').ReadStream
7
+ * | import('fs').WriteStream
8
+ * | import('net').Socket} stream
7
9
  * @returns {Promise<void>}
8
10
  */
9
11
  export const fsStreamReady = stream =>
@@ -19,13 +21,13 @@ export const fsStreamReady = stream =>
19
21
  }
20
22
 
21
23
  const onReady = () => {
22
- cleanup(); // eslint-disable-line no-use-before-define
24
+ cleanup();
23
25
  resolve();
24
26
  };
25
27
 
26
28
  /** @param {Error} err */
27
29
  const onError = err => {
28
- cleanup(); // eslint-disable-line no-use-before-define
30
+ cleanup();
29
31
  reject(err);
30
32
  };
31
33
 
@@ -38,10 +40,6 @@ export const fsStreamReady = stream =>
38
40
  stream.on('error', onError);
39
41
  });
40
42
 
41
- const noPath = /** @type {import('fs').PathLike} */ (
42
- /** @type {unknown} */ (undefined)
43
- );
44
-
45
43
  /** @typedef {NonNullable<Awaited<ReturnType<typeof makeFsStreamWriter>>>} FsStreamWriter */
46
44
  /** @param {string | undefined | null} filePath */
47
45
  export const makeFsStreamWriter = async filePath => {
@@ -49,45 +47,55 @@ export const makeFsStreamWriter = async filePath => {
49
47
  return undefined;
50
48
  }
51
49
 
52
- const handle = await open(filePath, 'a');
53
-
54
- const stream = createWriteStream(noPath, { fd: handle.fd });
50
+ const useStdout = filePath === '-';
51
+ const { handle, stream } = await (async () => {
52
+ if (useStdout) {
53
+ return { handle: undefined, stream: process.stdout };
54
+ }
55
+ const fh = await open(filePath, 'a');
56
+ return { handle: fh, stream: fh.createWriteStream({ flush: true }) };
57
+ })();
55
58
  await fsStreamReady(stream);
59
+ const writeAsync = promisify(stream.write.bind(stream));
60
+ const closeAsync =
61
+ useStdout || !(/** @type {any} */ (stream).close)
62
+ ? undefined
63
+ : promisify(
64
+ /** @type {import('fs').WriteStream} */ (stream).close.bind(stream),
65
+ );
56
66
 
57
67
  let flushed = Promise.resolve();
58
68
  let closed = false;
59
69
 
60
- const write = async data => {
61
- if (closed) {
62
- throw Error('Stream closed');
63
- }
64
-
65
- /** @type {Promise<void>} */
66
- const written = new Promise((resolve, reject) => {
67
- stream.write(data, err => {
68
- if (err) {
69
- reject(err);
70
- } else {
71
- resolve();
72
- }
73
- });
74
- });
70
+ const updateFlushed = p => {
75
71
  flushed = flushed.then(
76
- () => written,
77
- async err =>
78
- Promise.reject(
79
- written.then(
80
- () => err,
81
- writtenError => makeAggregateError([err, writtenError]),
82
- ),
72
+ () => p,
73
+ err =>
74
+ p.then(
75
+ () => Promise.reject(err),
76
+ pError =>
77
+ Promise.reject(
78
+ pError !== err ? AggregateError([err, pError]) : err,
79
+ ),
83
80
  ),
84
81
  );
85
- return written;
82
+ flushed.catch(() => {});
83
+ };
84
+
85
+ const write = async data => {
86
+ const written = closed
87
+ ? Promise.reject(Error('Stream closed'))
88
+ : writeAsync(data);
89
+ updateFlushed(written);
90
+ const waitForDrain = await written;
91
+ if (waitForDrain) {
92
+ await new Promise(resolve => stream.once('drain', resolve));
93
+ }
86
94
  };
87
95
 
88
96
  const flush = async () => {
89
97
  await flushed;
90
- await handle.sync().catch(err => {
98
+ await handle?.sync().catch(err => {
91
99
  if (err.code === 'EINVAL') {
92
100
  return;
93
101
  }
@@ -96,10 +104,13 @@ export const makeFsStreamWriter = async filePath => {
96
104
  };
97
105
 
98
106
  const close = async () => {
107
+ // TODO: Consider creating a single Error here to use a write rejection
99
108
  closed = true;
100
109
  await flush();
101
- stream.close();
110
+ await closeAsync?.();
102
111
  };
103
112
 
113
+ stream.on('error', err => updateFlushed(Promise.reject(err)));
114
+
104
115
  return harden({ write, flush, close });
105
116
  };
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["shutdown.js"],"names":[],"mappings":"AAKO;;EA+DN;AAGM,wDAON"}
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["shutdown.js"],"names":[],"mappings":"AAKO;;EA8DN;AAGM,wDAON"}
@@ -22,7 +22,6 @@ export const makeFreshShutdown = (verbose = true) => {
22
22
  process.off('SIGINT', shutdown);
23
23
  process.off('SIGTERM', shutdown);
24
24
  process.off('beforeExit', shutdown);
25
- // eslint-disable-next-line no-use-before-define
26
25
  process.off('uncaughtException', uncaughtShutdown);
27
26
  verbose && console.error(`Shutting down cleanly...`);
28
27
  const shutdowners = [...shutdownThunks.keys()];
@@ -13,7 +13,7 @@ export function makePrioritySendersManager(sendersNode: ERef<import("./lib-chain
13
13
  * @returns {Promise<void>}
14
14
  */
15
15
  remove: (rawNamespace: string, address: string) => Promise<void>;
16
- } & import("@endo/eventual-send").RemotableBrand<{}, {
16
+ } & import("@endo/pass-style").RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
17
17
  /**
18
18
  * @param {string} rawNamespace
19
19
  * @param {string} address
@@ -28,4 +28,5 @@ export function makePrioritySendersManager(sendersNode: ERef<import("./lib-chain
28
28
  remove: (rawNamespace: string, address: string) => Promise<void>;
29
29
  }>;
30
30
  export type PrioritySendersManager = ReturnType<typeof makePrioritySendersManager>;
31
+ import type { ERef } from '@endo/far';
31
32
  //# sourceMappingURL=priority-senders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"priority-senders.d.ts","sourceRoot":"","sources":["priority-senders.js"],"names":[],"mappings":"AAMA,4CAA4C;AAC5C,mDADuB,MAAM,KAAK,MAAM,CAMtC;AAQK;IAoCH;;;;OAIG;wBAHQ,MAAM,WACN,MAAM,KACJ,QAAQ,IAAI,CAAC;IAe1B;;;;OAIG;2BAHQ,MAAM,WACN,MAAM,KACJ,QAAQ,IAAI,CAAC;;IArB1B;;;;OAIG;wBAHQ,MAAM,WACN,MAAM,KACJ,QAAQ,IAAI,CAAC;IAe1B;;;;OAIG;2BAHQ,MAAM,WACN,MAAM,KACJ,QAAQ,IAAI,CAAC;GAuB7B;qCAGa,WAAW,iCAAiC,CAAC"}
1
+ {"version":3,"file":"priority-senders.d.ts","sourceRoot":"","sources":["priority-senders.js"],"names":[],"mappings":"AAQA,4CAA4C;AAC5C,uCADW,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAMtC;AAQK,wDAFI,KAAK,OAAO,uBAAuB,EAAE,WAAW,CAAC;IA0CxD;;;;OAIG;wBAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;IAe1B;;;;OAIG;2BAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;;IArB1B;;;;OAIG;wBAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;IAe1B;;;;OAIG;2BAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;GAuB7B;qCAGa,UAAU,CAAC,OAAO,0BAA0B,CAAC;0BA1GnC,WAAW"}
@@ -1,6 +1,8 @@
1
+ import { Fail, q } from '@endo/errors';
1
2
  import { E, Far } from '@endo/far';
2
3
 
3
- const { Fail, quote: q } = assert;
4
+ /** @import {ERef} from '@endo/far'; */
5
+ /** @import {StorageNode} from './lib-chainStorage.js'; */
4
6
 
5
7
  const PRIORITY_SENDERS_NAMESPACE_RE = /^[a-zA-Z0-9_-]{1,50}$/;
6
8
 
@@ -20,9 +22,13 @@ harden(normalizeSenderNamespace);
20
22
  */
21
23
  export const makePrioritySendersManager = sendersNode => {
22
24
  /**
23
- * address to tuple with storage node and set of namespaces that requested priority
25
+ * address to tuple with storage node and set of namespaces that requested
26
+ * priority
24
27
  *
25
- * @type {Map<string, readonly [node: StorageNode, namespaces: Set<string>]>}
28
+ * @type {Map<
29
+ * string,
30
+ * readonly [node: StorageNode, namespaces: Set<string>]
31
+ * >}
26
32
  */
27
33
  const addressRecords = new Map();
28
34
 
@@ -47,7 +53,7 @@ export const makePrioritySendersManager = sendersNode => {
47
53
  const node = await E(sendersNode).makeChildNode(address, {
48
54
  sequence: false,
49
55
  });
50
- /** @type {readonly [ node: StorageNode, namespaces: Set<string> ]} */
56
+ /** @type {readonly [node: StorageNode, namespaces: Set<string>]} */
51
57
  const r = [node, new Set()];
52
58
  addressRecords.set(address, r);
53
59
  return r;
package/src/queue.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export function makeWithQueue(): <T extends any[], R>(inner: (...args: T) => Promise<R>) => (...args: T) => Promise<R>;
1
+ export function makeWithQueue(): (inner: T) => (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
2
2
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["queue.js"],"names":[],"mappings":"AAQO,uHAiDN"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["queue.js"],"names":[],"mappings":"AAQO,kCA2BqB,OAFf,CAEoB,MAKH,GAAG,MAHlB,UAAU,CAAC,CAAC,CAGU,KAFpB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAkB/C"}
package/src/queue.js CHANGED
@@ -3,8 +3,8 @@
3
3
  import { makePromiseKit } from '@endo/promise-kit';
4
4
 
5
5
  /**
6
- * Return a function that can wrap an async or sync method, but
7
- * ensures only one of them (in order) is running at a time.
6
+ * Return a function that can wrap an async or sync method, but ensures only one
7
+ * of them (in order) is running at a time.
8
8
  */
9
9
  export const makeWithQueue = () => {
10
10
  const queue = [];
@@ -16,7 +16,7 @@ export const makeWithQueue = () => {
16
16
  }
17
17
  const [thunk, resolve, reject] = queue[0];
18
18
  // Run the thunk in a new turn.
19
- Promise.resolve()
19
+ void Promise.resolve()
20
20
  .then(thunk)
21
21
  // Resolve or reject our caller with the thunk's value.
22
22
  .then(resolve, reject)
@@ -30,14 +30,13 @@ export const makeWithQueue = () => {
30
30
  };
31
31
 
32
32
  /**
33
- * @template {any[]} T
34
- * @template R
35
- * @param {(...args: T) => Promise<R>} inner
33
+ * @template {(...args: any[]) => any} T
34
+ * @param {T} inner
36
35
  */
37
36
  return function withQueue(inner) {
38
37
  /**
39
- * @param {T} args
40
- * @returns {Promise<R>}
38
+ * @param {Parameters<T>} args
39
+ * @returns {Promise<Awaited<ReturnType<T>>>}
41
40
  */
42
41
  return function queueCall(...args) {
43
42
  // Curry the arguments into the inner function, and
package/src/scratch.d.ts CHANGED
@@ -6,7 +6,7 @@ export default function makeScratchPad(): {
6
6
  keys: () => Promise<any[]>;
7
7
  list: () => Promise<any[]>;
8
8
  set: (keyP: any, objP: any) => Promise<any>;
9
- } & import("@endo/eventual-send").RemotableBrand<{}, {
9
+ } & import("@endo/pass-style").RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
10
10
  delete: (keyP: any) => Promise<void>;
11
11
  get: (keyP: any) => Promise<any>;
12
12
  lookup: (...path: any[]) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"scratch.d.ts","sourceRoot":"","sources":["scratch.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgDC;yBACa,WAAW,qBAAqB,CAAC"}
1
+ {"version":3,"file":"scratch.d.ts","sourceRoot":"","sources":["scratch.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgDC;yBACa,UAAU,CAAC,OAAO,cAAc,CAAC"}
@@ -0,0 +1,68 @@
1
+ export function makeLimitedConsole(makeLogger: (level: string) => (...args: unknown[]) => void): LimitedConsole;
2
+ /**
3
+ * @template T
4
+ * @typedef {{ [KeyType in keyof T]: T[KeyType] } & {}} Simplify flatten the
5
+ * type output to improve type hints shown in editors
6
+ * https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts
7
+ */
8
+ /**
9
+ * @typedef {(...args: any[]) => any} Callable
10
+ */
11
+ /**
12
+ * @template {{}} T
13
+ * @typedef {{
14
+ * [K in keyof T]: T[K] extends Callable ? T[K] : DeeplyAwaited<T[K]>;
15
+ * }} DeeplyAwaitedObject
16
+ */
17
+ /**
18
+ * @template T
19
+ * @typedef {T extends PromiseLike<any>
20
+ * ? Awaited<T>
21
+ * : T extends {}
22
+ * ? Simplify<DeeplyAwaitedObject<T>>
23
+ * : Awaited<T>} DeeplyAwaited
24
+ */
25
+ /**
26
+ * A more constrained version of {deeplyFulfilled} for type safety until
27
+ * https://github.com/endojs/endo/issues/1257 Useful in starting contracts that
28
+ * need all terms to be fulfilled in order to be durable.
29
+ *
30
+ * @type {<T extends {}>(unfulfilledTerms: T) => Promise<DeeplyAwaited<T>>}
31
+ */
32
+ export const deeplyFulfilledObject: <T extends {}>(unfulfilledTerms: T) => Promise<DeeplyAwaited<T>>;
33
+ export function PromiseAllOrErrors<T>(items: readonly (T | PromiseLike<T>)[]): Promise<T[]>;
34
+ export function aggregateTryFinally<T>(trier: () => Promise<T>, finalizer: (error?: unknown) => Promise<unknown>): ReturnType<() => Promise<T>>;
35
+ export function withDeferredCleanup<T>(fn: (addCleanup: (fn: (err?: unknown) => Promise<void>) => void) => Promise<T>): ReturnType<(addCleanup: (fn: (err?: unknown) => Promise<void>) => void) => Promise<T>>;
36
+ export function assertAllDefined<T extends Record<string, unknown>>(obj: T): asserts obj is AllDefined<T>;
37
+ export function attenuate<T, P extends Permit<T>>(specimen: T, permit: P, transform?: <U, SubP extends Permit<U>>(attenuation: U, permit: SubP) => U): Attenuated<T, P>;
38
+ export const forever: AsyncIterable<undefined>;
39
+ export function whileTrue<T>(produce: () => T): AsyncIterable<Awaited<T>>;
40
+ export function untilTrue<T>(produce: () => T): AsyncIterable<Awaited<T>>;
41
+ /** @type {<X, Y>(xs: X[], ys: Y[]) => [X, Y][]} */
42
+ export const zip: <X, Y>(xs: X[], ys: Y[]) => [X, Y][];
43
+ /**
44
+ * @type {<T extends Record<string, ERef<any>>>(
45
+ * obj: T,
46
+ * ) => Promise<{ [K in keyof T]: Awaited<T[K]> }>}
47
+ */
48
+ export const allValues: <T extends Record<string, ERef<any>>>(obj: T) => Promise<{ [K in keyof T]: Awaited<T[K]>; }>;
49
+ export function synchronizedTee<T = unknown>(sourceStream: AsyncIterator<T, void, void>, readerCount: number): AsyncGenerator<T, void, void>[];
50
+ /**
51
+ * flatten the
52
+ * type output to improve type hints shown in editors
53
+ * https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts
54
+ */
55
+ export type Simplify<T> = { [KeyType in keyof T]: T[KeyType]; } & {};
56
+ export type Callable = (...args: any[]) => any;
57
+ export type DeeplyAwaitedObject<T extends {}> = { [K in keyof T]: T[K] extends Callable ? T[K] : DeeplyAwaited<T[K]>; };
58
+ export type DeeplyAwaited<T> = T extends PromiseLike<any> ? Awaited<T> : T extends {} ? Simplify<DeeplyAwaitedObject<T>> : Awaited<T>;
59
+ export type AllDefined<T extends Record<string, unknown>> = { [P in keyof T]: Exclude<T[P], undefined>; };
60
+ import { objectMap } from '@endo/common/object-map.js';
61
+ import { objectMetaMap } from '@endo/common/object-meta-map.js';
62
+ import { fromUniqueEntries } from '@endo/common/from-unique-entries.js';
63
+ import type { LimitedConsole } from './js-utils.js';
64
+ import type { Permit } from './types.js';
65
+ import type { Attenuated } from './types.js';
66
+ import type { ERef } from '@endo/far';
67
+ export { objectMap, objectMetaMap, fromUniqueEntries };
68
+ //# sourceMappingURL=ses-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ses-utils.d.ts","sourceRoot":"","sources":["ses-utils.js"],"names":[],"mappings":"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"}