@aztec/foundation 0.0.1-commit.3fd054f6 → 0.0.1-commit.431c48d
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/dest/bigint-buffer/index.d.ts +1 -1
- package/dest/bigint-buffer/index.d.ts.map +1 -1
- package/dest/bigint-buffer/index.js +6 -1
- package/dest/branded-types/block_number.d.ts +3 -3
- package/dest/branded-types/block_number.d.ts.map +1 -1
- package/dest/branded-types/block_number.js +15 -4
- package/dest/branded-types/buffer32_hash.d.ts +27 -0
- package/dest/branded-types/buffer32_hash.d.ts.map +1 -0
- package/dest/branded-types/buffer32_hash.js +12 -0
- package/dest/branded-types/checkpoint_number.d.ts +9 -3
- package/dest/branded-types/checkpoint_number.d.ts.map +1 -1
- package/dest/branded-types/checkpoint_number.js +11 -0
- package/dest/branded-types/epoch.d.ts +2 -2
- package/dest/branded-types/epoch.d.ts.map +1 -1
- package/dest/branded-types/index.d.ts +2 -1
- package/dest/branded-types/index.d.ts.map +1 -1
- package/dest/branded-types/index.js +1 -0
- package/dest/branded-types/index_within_checkpoint.d.ts +2 -2
- package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -1
- package/dest/branded-types/slot.d.ts +2 -2
- package/dest/branded-types/slot.d.ts.map +1 -1
- package/dest/buffer/buffer16.d.ts +3 -1
- package/dest/buffer/buffer16.d.ts.map +1 -1
- package/dest/buffer/buffer32.d.ts +28 -61
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +29 -63
- package/dest/collection/array.d.ts +11 -1
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +33 -0
- package/dest/collection/index.d.ts +3 -1
- package/dest/collection/index.d.ts.map +1 -1
- package/dest/collection/index.js +2 -0
- package/dest/collection/lru_map.d.ts +41 -0
- package/dest/collection/lru_map.d.ts.map +1 -0
- package/dest/collection/lru_map.js +119 -0
- package/dest/collection/lru_set.d.ts +35 -0
- package/dest/collection/lru_set.d.ts.map +1 -0
- package/dest/collection/lru_set.js +95 -0
- package/dest/committable/committable.js +1 -1
- package/dest/config/env_var.d.ts +2 -2
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/config/index.d.ts +67 -37
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +72 -71
- package/dest/config/network_config.d.ts +11 -55
- package/dest/config/network_config.d.ts.map +1 -1
- package/dest/config/network_name.d.ts +2 -2
- package/dest/config/network_name.d.ts.map +1 -1
- package/dest/config/network_name.js +1 -3
- package/dest/config/secret_value.d.ts +2 -2
- package/dest/config/secret_value.d.ts.map +1 -1
- package/dest/crypto/aes128/index.d.ts +2 -1
- package/dest/crypto/aes128/index.d.ts.map +1 -1
- package/dest/crypto/aes128/index.js +11 -2
- package/dest/crypto/bls/bn254_keystore.d.ts +10 -177
- package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -1
- package/dest/crypto/bls/bn254_keystore.js +22 -34
- package/dest/crypto/poseidon/index.d.ts +1 -1
- package/dest/crypto/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/poseidon/index.js +40 -33
- package/dest/crypto/schnorr/index.d.ts +8 -7
- package/dest/crypto/schnorr/index.d.ts.map +1 -1
- package/dest/crypto/schnorr/index.js +6 -6
- package/dest/crypto/schnorr/signature.d.ts +9 -29
- package/dest/crypto/schnorr/signature.d.ts.map +1 -1
- package/dest/crypto/schnorr/signature.js +20 -36
- package/dest/curves/bls12/field.d.ts +3 -3
- package/dest/curves/bls12/field.d.ts.map +1 -1
- package/dest/curves/bls12/field.js +0 -5
- package/dest/curves/bls12/point.d.ts +2 -2
- package/dest/curves/bls12/point.d.ts.map +1 -1
- package/dest/curves/bn254/field.d.ts +23 -19
- package/dest/curves/bn254/field.d.ts.map +1 -1
- package/dest/curves/bn254/field.js +23 -17
- package/dest/curves/grumpkin/point.d.ts +14 -28
- package/dest/curves/grumpkin/point.d.ts.map +1 -1
- package/dest/curves/grumpkin/point.js +29 -43
- package/dest/eth-address/index.d.ts +2 -2
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-address/index.js +0 -3
- package/dest/eth-signature/eth_signature.d.ts +2 -2
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/fifo_set/fifo_set.d.ts +15 -0
- package/dest/fifo_set/fifo_set.d.ts.map +1 -0
- package/dest/fifo_set/fifo_set.js +39 -0
- package/dest/fifo_set/index.d.ts +2 -0
- package/dest/fifo_set/index.d.ts.map +1 -0
- package/dest/fifo_set/index.js +1 -0
- package/dest/iterable/first.d.ts +8 -0
- package/dest/iterable/first.d.ts.map +1 -0
- package/dest/iterable/first.js +11 -0
- package/dest/iterable/index.d.ts +2 -1
- package/dest/iterable/index.d.ts.map +1 -1
- package/dest/iterable/index.js +1 -0
- package/dest/json-rpc/client/fetch.d.ts +8 -3
- package/dest/json-rpc/client/fetch.d.ts.map +1 -1
- package/dest/json-rpc/client/fetch.js +11 -7
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +2 -2
- package/dest/json-rpc/client/undici.d.ts +14 -3
- package/dest/json-rpc/client/undici.d.ts.map +1 -1
- package/dest/json-rpc/client/undici.js +47 -14
- package/dest/json-rpc/fixtures/test_state.d.ts +4 -8
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/test_state.js +57 -17
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +49 -11
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +159 -40
- package/dest/log/aws-logger-config.d.ts +8 -0
- package/dest/log/aws-logger-config.d.ts.map +1 -0
- package/dest/log/aws-logger-config.js +55 -0
- package/dest/log/pino-logger.d.ts +1 -1
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +29 -8
- package/dest/noir/noir_package_config.d.ts +19 -104
- package/dest/noir/noir_package_config.d.ts.map +1 -1
- package/dest/noir/noir_package_config.js +1 -1
- package/dest/promise/running-promise.d.ts +8 -2
- package/dest/promise/running-promise.d.ts.map +1 -1
- package/dest/promise/running-promise.js +17 -5
- package/dest/promise/utils.d.ts +14 -1
- package/dest/promise/utils.d.ts.map +1 -1
- package/dest/promise/utils.js +20 -0
- package/dest/queue/batch_queue.d.ts +1 -1
- package/dest/queue/batch_queue.d.ts.map +1 -1
- package/dest/queue/batch_queue.js +1 -0
- package/dest/retry/index.d.ts +31 -3
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/retry/index.js +44 -2
- package/dest/schemas/api.d.ts +12 -10
- package/dest/schemas/api.d.ts.map +1 -1
- package/dest/schemas/api.js +7 -1
- package/dest/schemas/parse.d.ts +4 -4
- package/dest/schemas/parse.d.ts.map +1 -1
- package/dest/schemas/parse.js +6 -5
- package/dest/schemas/schemas.d.ts +15 -15
- package/dest/schemas/types.d.ts +3 -3
- package/dest/schemas/types.d.ts.map +1 -1
- package/dest/schemas/utils.d.ts +7 -11
- package/dest/schemas/utils.d.ts.map +1 -1
- package/dest/schemas/utils.js +2 -18
- package/dest/serialize/buffer_reader.d.ts +1 -1
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +5 -0
- package/dest/serialize/buffer_sink.d.ts +134 -0
- package/dest/serialize/buffer_sink.d.ts.map +1 -0
- package/dest/serialize/buffer_sink.js +297 -0
- package/dest/serialize/index.d.ts +2 -1
- package/dest/serialize/index.d.ts.map +1 -1
- package/dest/serialize/index.js +1 -0
- package/dest/serialize/serialize.d.ts +1 -32
- package/dest/serialize/serialize.d.ts.map +1 -1
- package/dest/serialize/serialize.js +0 -21
- package/dest/string/index.js +1 -1
- package/dest/testing/files/index.d.ts +2 -3
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/testing/files/index.js +1 -2
- package/dest/timer/index.d.ts +2 -2
- package/dest/timer/index.d.ts.map +1 -1
- package/dest/timer/index.js +1 -1
- package/dest/timer/timeout.d.ts +3 -1
- package/dest/timer/timeout.d.ts.map +1 -1
- package/dest/timer/timeout.js +26 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +11 -2
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -1
- package/dest/transport/index.d.ts +1 -2
- package/dest/transport/index.d.ts.map +1 -1
- package/dest/transport/index.js +0 -1
- package/dest/trees/balanced_merkle_tree_root.d.ts +2 -3
- package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -1
- package/dest/trees/balanced_merkle_tree_root.js +2 -3
- package/dest/trees/hasher.d.ts +3 -2
- package/dest/trees/hasher.d.ts.map +1 -1
- package/dest/trees/hasher.js +5 -5
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.js +5 -1
- package/dest/trees/membership_witness.d.ts +2 -6
- package/dest/trees/membership_witness.d.ts.map +1 -1
- package/dest/trees/membership_witness.js +0 -9
- package/dest/trees/merkle_tree_calculator.d.ts +4 -2
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.js +1 -5
- package/dest/trees/sibling_path.d.ts +13 -14
- package/dest/trees/sibling_path.d.ts.map +1 -1
- package/dest/trees/sibling_path.js +23 -28
- package/dest/trees/unbalanced_merkle_tree_root.d.ts +2 -3
- package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -1
- package/dest/trees/unbalanced_merkle_tree_root.js +2 -3
- package/dest/types/index.d.ts +23 -1
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +15 -0
- package/package.json +5 -4
- package/src/bigint-buffer/index.ts +6 -1
- package/src/branded-types/block_number.ts +20 -2
- package/src/branded-types/buffer32_hash.ts +38 -0
- package/src/branded-types/checkpoint_number.ts +16 -1
- package/src/branded-types/epoch.ts +1 -1
- package/src/branded-types/index.ts +1 -0
- package/src/branded-types/index_within_checkpoint.ts +1 -1
- package/src/branded-types/slot.ts +1 -1
- package/src/buffer/buffer16.ts +3 -0
- package/src/buffer/buffer32.ts +39 -68
- package/src/collection/array.ts +34 -0
- package/src/collection/index.ts +2 -0
- package/src/collection/lru_map.ts +143 -0
- package/src/collection/lru_set.ts +115 -0
- package/src/committable/committable.ts +1 -1
- package/src/config/env_var.ts +52 -24
- package/src/config/index.ts +143 -122
- package/src/config/network_name.ts +2 -5
- package/src/config/secret_value.ts +1 -1
- package/src/crypto/aes128/index.ts +11 -2
- package/src/crypto/bls/bn254_keystore.ts +33 -43
- package/src/crypto/poseidon/index.ts +42 -34
- package/src/crypto/schnorr/index.ts +9 -8
- package/src/crypto/schnorr/signature.ts +17 -46
- package/src/curves/bls12/field.ts +0 -7
- package/src/curves/bn254/field.ts +35 -34
- package/src/curves/grumpkin/point.ts +23 -40
- package/src/eth-address/index.ts +0 -4
- package/src/fifo_set/fifo_set.ts +52 -0
- package/src/fifo_set/index.ts +1 -0
- package/src/iterable/first.ts +14 -0
- package/src/iterable/index.ts +1 -0
- package/src/json-rpc/client/fetch.ts +19 -5
- package/src/json-rpc/client/safe_json_rpc_client.ts +2 -2
- package/src/json-rpc/client/undici.ts +54 -12
- package/src/json-rpc/fixtures/test_state.ts +10 -10
- package/src/json-rpc/server/safe_json_rpc_server.ts +204 -47
- package/src/log/aws-logger-config.ts +32 -0
- package/src/log/pino-logger.ts +33 -6
- package/src/noir/noir_package_config.ts +32 -20
- package/src/promise/running-promise.ts +20 -7
- package/src/promise/utils.ts +31 -0
- package/src/queue/batch_queue.ts +1 -0
- package/src/retry/index.ts +66 -4
- package/src/schemas/api.ts +25 -25
- package/src/schemas/parse.ts +9 -6
- package/src/schemas/schemas.ts +4 -4
- package/src/schemas/types.ts +2 -2
- package/src/schemas/utils.ts +4 -38
- package/src/serialize/buffer_reader.ts +5 -0
- package/src/serialize/buffer_sink.ts +350 -0
- package/src/serialize/index.ts +1 -0
- package/src/serialize/serialize.ts +0 -50
- package/src/string/index.ts +1 -1
- package/src/testing/files/index.ts +1 -2
- package/src/timer/index.ts +1 -1
- package/src/timer/timeout.ts +31 -0
- package/src/transport/dispatch/create_dispatch_proxy.ts +11 -1
- package/src/transport/index.ts +0 -1
- package/src/trees/balanced_merkle_tree_root.ts +2 -5
- package/src/trees/hasher.ts +6 -3
- package/src/trees/indexed_merkle_tree_calculator.ts +5 -1
- package/src/trees/membership_witness.ts +0 -8
- package/src/trees/merkle_tree_calculator.ts +4 -10
- package/src/trees/sibling_path.ts +24 -30
- package/src/trees/unbalanced_merkle_tree_root.ts +2 -5
- package/src/types/index.ts +47 -0
- package/dest/crypto/serialize.d.ts +0 -51
- package/dest/crypto/serialize.d.ts.map +0 -1
- package/dest/crypto/serialize.js +0 -68
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +0 -25
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +0 -1
- package/dest/transport/dispatch/create_dispatch_fn.js +0 -17
- package/src/crypto/serialize.ts +0 -85
- package/src/transport/dispatch/create_dispatch_fn.ts +0 -35
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { toBigIntBE } from '../../bigint-buffer/index.js';
|
|
2
|
-
import { poseidon2Hash } from '../../crypto/poseidon/index.js';
|
|
3
2
|
import { randomBoolean } from '../../crypto/random/index.js';
|
|
4
3
|
import { hexSchemaFor } from '../../schemas/utils.js';
|
|
5
4
|
import { BufferReader, FieldReader, serializeToBuffer } from '../../serialize/index.js';
|
|
@@ -13,23 +12,22 @@ import { Fr } from '../bn254/field.js';
|
|
|
13
12
|
*/ export class Point {
|
|
14
13
|
x;
|
|
15
14
|
y;
|
|
16
|
-
|
|
17
|
-
static ZERO = new Point(Fr.ZERO, Fr.ZERO, false);
|
|
15
|
+
static INFINITY = new Point(Fr.ZERO, Fr.ZERO);
|
|
18
16
|
static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * 2;
|
|
19
17
|
static COMPRESSED_SIZE_IN_BYTES = Fr.SIZE_IN_BYTES;
|
|
20
18
|
/** Used to differentiate this class from AztecAddress */ kind;
|
|
19
|
+
/** Whether the point is at infinity */ isInfinite;
|
|
21
20
|
constructor(/**
|
|
22
21
|
* The point's x coordinate
|
|
23
22
|
*/ x, /**
|
|
24
23
|
* The point's y coordinate
|
|
25
|
-
*/ y
|
|
26
|
-
* Whether the point is at infinity
|
|
27
|
-
*/ isInfinite){
|
|
24
|
+
*/ y){
|
|
28
25
|
this.x = x;
|
|
29
26
|
this.y = y;
|
|
30
|
-
this.isInfinite = isInfinite;
|
|
31
27
|
this.kind = 'point';
|
|
32
|
-
|
|
28
|
+
// TODO(#7386): check if on curve
|
|
29
|
+
// NOTE: now there is no isInfinite in the struct, empty == inf, so an empty class would pass an on-curve check. This may be fine depending on the usage.
|
|
30
|
+
this.isInfinite = x.isZero() && y.isZero();
|
|
33
31
|
}
|
|
34
32
|
toJSON() {
|
|
35
33
|
return this.toString();
|
|
@@ -52,10 +50,10 @@ import { Fr } from '../bn254/field.js';
|
|
|
52
50
|
if (obj instanceof Buffer || Buffer.isBuffer(obj)) {
|
|
53
51
|
return Point.fromBuffer(obj);
|
|
54
52
|
}
|
|
55
|
-
return new
|
|
53
|
+
return new this(Fr.fromPlainObject(obj.x), Fr.fromPlainObject(obj.y));
|
|
56
54
|
}
|
|
57
55
|
/**
|
|
58
|
-
* Generate a random Point instance.
|
|
56
|
+
* Generate a random Point instance that is on the curve.
|
|
59
57
|
*
|
|
60
58
|
* @returns A randomly generated Point instance.
|
|
61
59
|
*/ static async random() {
|
|
@@ -78,7 +76,7 @@ import { Fr } from '../bn254/field.js';
|
|
|
78
76
|
* @returns A Point instance.
|
|
79
77
|
*/ static fromBuffer(buffer) {
|
|
80
78
|
const reader = BufferReader.asReader(buffer);
|
|
81
|
-
return new this(Fr.fromBuffer(reader), Fr.fromBuffer(reader)
|
|
79
|
+
return new this(Fr.fromBuffer(reader), Fr.fromBuffer(reader));
|
|
82
80
|
}
|
|
83
81
|
/**
|
|
84
82
|
* Create a Point instance from a compressed buffer.
|
|
@@ -109,13 +107,16 @@ import { Fr } from '../bn254/field.js';
|
|
|
109
107
|
*/ toFields() {
|
|
110
108
|
return [
|
|
111
109
|
this.x,
|
|
112
|
-
this.y
|
|
113
|
-
new Fr(this.isInfinite)
|
|
110
|
+
this.y
|
|
114
111
|
];
|
|
115
112
|
}
|
|
116
113
|
static fromFields(fields) {
|
|
117
114
|
const reader = FieldReader.asReader(fields);
|
|
118
|
-
|
|
115
|
+
const [x, y] = [
|
|
116
|
+
reader.readField(),
|
|
117
|
+
reader.readField()
|
|
118
|
+
];
|
|
119
|
+
return new this(x, y);
|
|
119
120
|
}
|
|
120
121
|
/**
|
|
121
122
|
* Uses the x coordinate and isPositive flag (+/-) to reconstruct the point.
|
|
@@ -135,10 +136,11 @@ import { Fr } from '../bn254/field.js';
|
|
|
135
136
|
// Choose the positive or negative root based on isPositive
|
|
136
137
|
const finalY = sign ? new Fr(yPositiveBigInt) : new Fr(yNegativeBigInt);
|
|
137
138
|
// Create and return the new Point
|
|
138
|
-
return new this(x, finalY
|
|
139
|
+
return new this(x, finalY);
|
|
139
140
|
}
|
|
140
141
|
/**
|
|
141
|
-
* @
|
|
142
|
+
* @param x - The x coordinate of the point
|
|
143
|
+
* @returns y^2 such that y^2 = x^3 - 17
|
|
142
144
|
*/ static YFromX(x) {
|
|
143
145
|
// Calculate y^2 = x^3 - 17 (i.e. the Grumpkin curve equation)
|
|
144
146
|
const ySquared = x.square().mul(x).sub(new Fr(17));
|
|
@@ -162,23 +164,14 @@ import { Fr } from '../bn254/field.js';
|
|
|
162
164
|
*/ toBigInts() {
|
|
163
165
|
return {
|
|
164
166
|
x: this.x.toBigInt(),
|
|
165
|
-
y: this.y.toBigInt()
|
|
166
|
-
isInfinite: this.isInfinite ? 1n : 0n
|
|
167
|
+
y: this.y.toBigInt()
|
|
167
168
|
};
|
|
168
169
|
}
|
|
169
170
|
/**
|
|
170
171
|
* Converts the Point instance to a Buffer representation of the coordinates.
|
|
171
172
|
* @returns A Buffer representation of the Point instance.
|
|
172
|
-
* @dev Note that toBuffer does not include the isInfinite flag
|
|
173
|
-
* This is because currently when we work with point as bytes we don't want to populate the extra bytes for
|
|
174
|
-
* isInfinite flag because:
|
|
175
|
-
* 1. Our Grumpkin BB API currently does not handle point at infinity,
|
|
176
|
-
* 2. we use toBuffer when serializing notes and events and there we only work with public keys and point at infinity
|
|
177
|
-
* is not considered a valid public key and the extra byte would raise DA cost.
|
|
173
|
+
* @dev Note that toBuffer does not include the isInfinite flag. The point at infinity is serialized as (0, 0).
|
|
178
174
|
*/ toBuffer() {
|
|
179
|
-
if (this.isInfinite) {
|
|
180
|
-
throw new Error('Cannot serialize infinite point with isInfinite flag');
|
|
181
|
-
}
|
|
182
175
|
const buf = serializeToBuffer([
|
|
183
176
|
this.x,
|
|
184
177
|
this.y
|
|
@@ -224,13 +217,12 @@ import { Fr } from '../bn254/field.js';
|
|
|
224
217
|
return `${str.slice(0, 10)}...${str.slice(-4)}`;
|
|
225
218
|
}
|
|
226
219
|
toNoirStruct() {
|
|
227
|
-
|
|
220
|
+
return {
|
|
228
221
|
x: this.x,
|
|
229
|
-
y: this.y
|
|
230
|
-
is_infinite: this.isInfinite
|
|
222
|
+
y: this.y
|
|
231
223
|
};
|
|
232
|
-
|
|
233
|
-
// Used for IvpkM
|
|
224
|
+
}
|
|
225
|
+
// Used for IvpkM. TODO(#8124): Consider removing this method.
|
|
234
226
|
toWrappedNoirStruct() {
|
|
235
227
|
return {
|
|
236
228
|
inner: this.toNoirStruct()
|
|
@@ -248,18 +240,12 @@ import { Fr } from '../bn254/field.js';
|
|
|
248
240
|
isZero() {
|
|
249
241
|
return this.x.isZero() && this.y.isZero();
|
|
250
242
|
}
|
|
251
|
-
hash() {
|
|
252
|
-
return poseidon2Hash(this.toFields());
|
|
253
|
-
}
|
|
254
243
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
isOnGrumpkin() {
|
|
261
|
-
// TODO: Check this against how bb handles curve check and infinity point check
|
|
262
|
-
if (this.inf) {
|
|
244
|
+
* @param x - The x coordinate of the point
|
|
245
|
+
* @param y - The y coordinate of the point
|
|
246
|
+
* @returns Whether the point exists on Grumpkin
|
|
247
|
+
*/ isOnCurve() {
|
|
248
|
+
if (this.isInfinite) {
|
|
263
249
|
return true;
|
|
264
250
|
}
|
|
265
251
|
// The Grumpkin equation is y^2 = x^3 - 17. We could use `YFromX` and then compare to `this.y`, but this would
|
|
@@ -137,7 +137,7 @@ export declare class EthAddress {
|
|
|
137
137
|
/** Converts a number into an address. Useful for testing. */
|
|
138
138
|
static fromNumber(num: bigint | number): EthAddress;
|
|
139
139
|
toJSON(): `0x${string}`;
|
|
140
|
-
static get schema(): import("zod").ZodType<EthAddress,
|
|
140
|
+
static get schema(): import("zod").ZodType<EthAddress, string, import("zod/v4/core").$ZodTypeInternals<EthAddress, string>>;
|
|
141
141
|
static areEqual(a: EthAddress | string, b: EthAddress | string): boolean;
|
|
142
142
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldGgtYWRkcmVzcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xFOzs7OztHQUtHO0FBQ0gscUJBQWEsVUFBVTtJQU1ULE9BQU8sQ0FBQyxNQUFNO0lBTDFCLGdEQUFnRDtJQUNoRCxPQUFjLGFBQWEsU0FBTTtJQUNqQywwRUFBMEU7SUFDMUUsT0FBYyxJQUFJLGFBQTBEO0lBRTVFLFlBQW9CLE1BQU0sRUFBRSxNQUFNLEVBSWpDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE9BQWMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLGNBS3ZDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE9BQWMsZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQVFsRDtJQUVEOzs7Ozs7T0FNRztJQUNILE9BQWMsTUFBTSxlQUVuQjtJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsT0FBYyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sV0FVdEM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sWUFFWjtJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFjLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLFdBY2pEO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsT0FBYyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLENBa0I5RDtJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxXQUU1QjtJQUVEOzs7Ozs7T0FNRztJQUNJLFFBQVEsa0JBRWQ7SUFFRCxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FFZjtJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQixrQkFFdEI7SUFFRDs7O09BR0c7SUFDSSxRQUFRLDRCQUVkO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSx3QkFJaEI7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxPQUViO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxVQUFVLENBRW5DO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxjQUczQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FHM0Q7SUFFRCw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxVQUFVLENBSWxEO0lBRUQsTUFBTSxrQkFFTDtJQUVELE1BQU0sS0FBSyxNQUFNLDJHQUdoQjtJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxNQUFNLFdBSTdEO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eth-address/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAI/B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eth-address/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAI/B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGlE;;;;;GAKG;AACH,qBAAa,UAAU;IAMT,OAAO,CAAC,MAAM;IAL1B,gDAAgD;IAChD,OAAc,aAAa,SAAM;IACjC,0EAA0E;IAC1E,OAAc,IAAI,aAA0D;IAE5E,YAAoB,MAAM,EAAE,MAAM,EAIjC;IAED;;;;;;;OAOG;IACH,OAAc,UAAU,CAAC,OAAO,EAAE,MAAM,cAKvC;IAED;;;;;;;OAOG;IACH,OAAc,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,CAQlD;IAED;;;;;;OAMG;IACH,OAAc,MAAM,eAEnB;IAED;;;;;;;;OAQG;IACH,OAAc,SAAS,CAAC,OAAO,EAAE,MAAM,WAUtC;IAED;;;;;OAKG;IACI,MAAM,YAEZ;IAED;;;;;;;OAOG;IACH,OAAc,oBAAoB,CAAC,OAAO,EAAE,MAAM,WAcjD;IAED;;;;;;;;;OASG;IACH,OAAc,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAkB9D;IAED;;;;;;OAMG;IACI,MAAM,CAAC,GAAG,EAAE,UAAU,WAE5B;IAED;;;;;;OAMG;IACI,QAAQ,kBAEd;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,WAEf;IAED;;;;;;OAMG;IACI,gBAAgB,kBAEtB;IAED;;;OAGG;IACI,QAAQ,4BAEd;IAED;;;;;;OAMG;IACI,UAAU,wBAIhB;IAED;;;;OAIG;IACI,OAAO,OAEb;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,UAAU,CAEnC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,cAG3C;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAG3D;IAED,6DAA6D;IAC7D,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAIlD;IAED,MAAM,kBAEL;IAED,MAAM,KAAK,MAAM,2GAGhB;IAED,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,WAI7D;CACF"}
|
|
@@ -5,7 +5,6 @@ import { randomBytes } from '../crypto/random/index.js';
|
|
|
5
5
|
import { Fr } from '../curves/bn254/index.js';
|
|
6
6
|
import { hexSchemaFor } from '../schemas/utils.js';
|
|
7
7
|
import { BufferReader, FieldReader } from '../serialize/index.js';
|
|
8
|
-
import { TypeRegistry } from '../serialize/type_registry.js';
|
|
9
8
|
import { bufferToHex } from '../string/index.js';
|
|
10
9
|
_computedKey = inspect.custom;
|
|
11
10
|
/**
|
|
@@ -223,5 +222,3 @@ _computedKey = inspect.custom;
|
|
|
223
222
|
return addrA.equals(addrB);
|
|
224
223
|
}
|
|
225
224
|
}
|
|
226
|
-
// For deserializing JSON.
|
|
227
|
-
TypeRegistry.register('EthAddress', EthAddress);
|
|
@@ -60,6 +60,6 @@ export declare class Signature {
|
|
|
60
60
|
*/
|
|
61
61
|
toViemTransactionSignature(): ViemTransactionSignature;
|
|
62
62
|
toJSON(): `0x${string}`;
|
|
63
|
-
static get schema(): z.
|
|
63
|
+
static get schema(): z.ZodPipe<z.ZodString & z.ZodType<`0x${string}`, string, z.core.$ZodTypeInternals<`0x${string}`, string>>, z.ZodTransform<Signature, `0x${string}`>>;
|
|
64
64
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX3NpZ25hdHVyZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V0aC1zaWduYXR1cmUvZXRoX3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBS3hCOztHQUVHO0FBQ0gsTUFBTSxNQUFNLGFBQWEsR0FBRztJQUMxQixDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ1gsQ0FBQztBQUVGLE1BQU0sTUFBTSx3QkFBd0IsR0FBRztJQUNyQyxDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUNqQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNoQixDQUFDO0FBRUY7O0dBRUc7QUFDSCxxQkFBYSxTQUFTO0lBT2xCLG1DQUFtQzthQUNuQixDQUFDLEVBQUUsUUFBUTtJQUMzQixtQ0FBbUM7YUFDbkIsQ0FBQyxFQUFFLFFBQVE7SUFDM0IsbUNBQW1DO2FBQ25CLENBQUMsRUFBRSxNQUFNO0lBVjNCLE9BQU8sQ0FBQyxJQUFJLENBQXFCO0lBRWpDLFNBQWdCLEtBQUssRUFBRSxPQUFPLENBQUM7SUFFL0I7SUFDRSxtQ0FBbUM7SUFDbkIsQ0FBQyxFQUFFLFFBQVE7SUFDM0IsbUNBQW1DO0lBQ25CLENBQUMsRUFBRSxRQUFRO0lBQzNCLG1DQUFtQztJQUNuQixDQUFDLEVBQUUsTUFBTSxFQUcxQjtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsU0FBUyxDQVF2RDtJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUVoRDtJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FRL0M7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLGFBQWEsR0FBRyxTQUFTLENBRXREO0lBRUQsTUFBTSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsRUFBRSx3QkFBd0IsR0FBRyxTQUFTLENBRTVFO0lBRUQsaUhBQWlIO0lBQ2pILE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxDQUt6QjtJQUVELE1BQU0sQ0FBQyxLQUFLLElBQUksU0FBUyxDQUV4QjtJQUVELE9BQU8sSUFBSSxPQUFPLENBRWpCO0lBRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUVoQztJQUVELFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQsT0FBTyxJQUFJLE1BQU0sQ0FRaEI7SUFFRCxRQUFRLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FFeEI7SUFFRDs7T0FFRztJQUNILGVBQWUsSUFBSSxhQUFhLENBTS9CO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEIsSUFBSSx3QkFBd0IsQ0FTckQ7SUFFRCxNQUFNLGtCQUVMO0lBRUQsTUFBTSxLQUFLLE1BQU0seUpBTWhCO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth_signature.d.ts","sourceRoot":"","sources":["../../src/eth-signature/eth_signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAOlB,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,MAAM;IAV3B,OAAO,CAAC,IAAI,CAAqB;IAEjC,SAAgB,KAAK,EAAE,OAAO,CAAC;IAE/B;IACE,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,MAAM,EAG1B;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQvD;IAED,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAEhD;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAQ/C;IAED,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAEtD;IAED,MAAM,CAAC,4BAA4B,CAAC,GAAG,EAAE,wBAAwB,GAAG,SAAS,CAE5E;IAED,iHAAiH;IACjH,MAAM,CAAC,MAAM,IAAI,SAAS,CAKzB;IAED,MAAM,CAAC,KAAK,IAAI,SAAS,CAExB;IAED,OAAO,IAAI,OAAO,CAEjB;IAED,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhC;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,OAAO,IAAI,MAAM,CAQhB;IAED,QAAQ,IAAI,KAAK,MAAM,EAAE,CAExB;IAED;;OAEG;IACH,eAAe,IAAI,aAAa,CAM/B;IAED;;OAEG;IACH,0BAA0B,IAAI,wBAAwB,CASrD;IAED,MAAM,kBAEL;IAED,MAAM,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"eth_signature.d.ts","sourceRoot":"","sources":["../../src/eth-signature/eth_signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAOlB,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,MAAM;IAV3B,OAAO,CAAC,IAAI,CAAqB;IAEjC,SAAgB,KAAK,EAAE,OAAO,CAAC;IAE/B;IACE,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,MAAM,EAG1B;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQvD;IAED,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAEhD;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAQ/C;IAED,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAEtD;IAED,MAAM,CAAC,4BAA4B,CAAC,GAAG,EAAE,wBAAwB,GAAG,SAAS,CAE5E;IAED,iHAAiH;IACjH,MAAM,CAAC,MAAM,IAAI,SAAS,CAKzB;IAED,MAAM,CAAC,KAAK,IAAI,SAAS,CAExB;IAED,OAAO,IAAI,OAAO,CAEjB;IAED,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhC;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,OAAO,IAAI,MAAM,CAQhB;IAED,QAAQ,IAAI,KAAK,MAAM,EAAE,CAExB;IAED;;OAEG;IACH,eAAe,IAAI,aAAa,CAM/B;IAED;;OAEG;IACH,0BAA0B,IAAI,wBAAwB,CASrD;IAED,MAAM,kBAEL;IAED,MAAM,KAAK,MAAM,yJAMhB;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** A Set capped to a fixed number of entries, evicting the oldest inserted value when full. */
|
|
2
|
+
export declare class FifoSet<T> extends Set<T> {
|
|
3
|
+
private _limit;
|
|
4
|
+
private constructor();
|
|
5
|
+
/** Creates a bounded set with a positive integer limit. */
|
|
6
|
+
static withLimit<T>(limit: number, values?: Iterable<T>): FifoSet<T>;
|
|
7
|
+
add(value: T): this;
|
|
8
|
+
/** Maximum number of entries retained by this set. */
|
|
9
|
+
get limit(): number;
|
|
10
|
+
/** Evicts oldest entries until the set is within its limit. */
|
|
11
|
+
compact(): void;
|
|
12
|
+
/** Adds a value only if it is absent, returning whether the set changed. */
|
|
13
|
+
addIfAbsent(value: T): boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlmb19zZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWZvX3NldC9maWZvX3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrRkFBK0Y7QUFDL0YscUJBQWEsT0FBTyxDQUFDLENBQUMsQ0FBRSxTQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBcUI7SUFFbkMsT0FBTyxlQUVOO0lBRUQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FVbkU7SUFFUSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBSTNCO0lBRUQsc0RBQXNEO0lBQ3RELElBQVcsS0FBSyxJQUFJLE1BQU0sQ0FFekI7SUFFRCwrREFBK0Q7SUFDeEQsT0FBTyxJQUFJLElBQUksQ0FRckI7SUFFRCw0RUFBNEU7SUFDckUsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsT0FBTyxDQU1wQztDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fifo_set.d.ts","sourceRoot":"","sources":["../../src/fifo_set/fifo_set.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,qBAAa,OAAO,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,eAEN;IAED,2DAA2D;IAC3D,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUnE;IAEQ,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAI3B;IAED,sDAAsD;IACtD,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,+DAA+D;IACxD,OAAO,IAAI,IAAI,CAQrB;IAED,4EAA4E;IACrE,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAMpC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** A Set capped to a fixed number of entries, evicting the oldest inserted value when full. */ export class FifoSet extends Set {
|
|
2
|
+
_limit;
|
|
3
|
+
constructor(values){
|
|
4
|
+
super(values);
|
|
5
|
+
}
|
|
6
|
+
/** Creates a bounded set with a positive integer limit. */ static withLimit(limit, values) {
|
|
7
|
+
if (!Number.isSafeInteger(limit) || limit <= 0) {
|
|
8
|
+
throw new TypeError(`FifoSet limit must be a positive safe integer: ${limit}`);
|
|
9
|
+
}
|
|
10
|
+
const set = new FifoSet(values);
|
|
11
|
+
set._limit = limit;
|
|
12
|
+
set.compact();
|
|
13
|
+
return set;
|
|
14
|
+
}
|
|
15
|
+
add(value) {
|
|
16
|
+
super.add(value);
|
|
17
|
+
this.compact();
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/** Maximum number of entries retained by this set. */ get limit() {
|
|
21
|
+
return this._limit ?? Infinity;
|
|
22
|
+
}
|
|
23
|
+
/** Evicts oldest entries until the set is within its limit. */ compact() {
|
|
24
|
+
while(this.size > this.limit){
|
|
25
|
+
const head = this.values().next();
|
|
26
|
+
if (head.done) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
this.delete(head.value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Adds a value only if it is absent, returning whether the set changed. */ addIfAbsent(value) {
|
|
33
|
+
if (this.has(value)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
this.add(value);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fifo_set/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './fifo_set.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the first entry of an iterable, or undefined if it yields none, closing the underlying
|
|
3
|
+
* iterator either way. Use this instead of calling `.next()` once and abandoning the iterator:
|
|
4
|
+
* an abandoned generator never runs its finally blocks, so any resource it holds is leaked — e.g.
|
|
5
|
+
* a kv-store iterator's LMDB cursor, where enough leaks deadlock the store.
|
|
6
|
+
*/
|
|
7
|
+
export declare function first<T>(iterator: Iterable<T> | AsyncIterableIterator<T> | AsyncIterable<T> | IterableIterator<T>): Promise<T | undefined>;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pdGVyYWJsZS9maXJzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILHdCQUFzQixLQUFLLENBQUMsQ0FBQyxFQUMzQixRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FDeEYsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FLeEIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first.d.ts","sourceRoot":"","sources":["../../src/iterable/first.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GACxF,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAKxB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the first entry of an iterable, or undefined if it yields none, closing the underlying
|
|
3
|
+
* iterator either way. Use this instead of calling `.next()` once and abandoning the iterator:
|
|
4
|
+
* an abandoned generator never runs its finally blocks, so any resource it holds is leaked — e.g.
|
|
5
|
+
* a kv-store iterator's LMDB cursor, where enough leaks deadlock the store.
|
|
6
|
+
*/ export async function first(iterator) {
|
|
7
|
+
for await (const i of iterator){
|
|
8
|
+
return i;
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
package/dest/iterable/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './filter.js';
|
|
|
3
3
|
export * from './sort.js';
|
|
4
4
|
export * from './take.js';
|
|
5
5
|
export * from './all.js';
|
|
6
|
+
export * from './first.js';
|
|
6
7
|
export * from './peek.js';
|
|
7
8
|
export * from './toArray.js';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pdGVyYWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/iterable/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/iterable/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
|
package/dest/iterable/index.js
CHANGED
|
@@ -5,6 +5,9 @@ export type JsonRpcFetch = (host: string, body: any, extraHeaders?: Record<strin
|
|
|
5
5
|
get: (header: string) => string | null | undefined;
|
|
6
6
|
};
|
|
7
7
|
}>;
|
|
8
|
+
export type JsonRpcFetchConfig = {
|
|
9
|
+
credentials?: RequestCredentials;
|
|
10
|
+
};
|
|
8
11
|
/**
|
|
9
12
|
* A normal fetch function that does not retry.
|
|
10
13
|
* Alternatives are a fetch function with retries, or a mocked fetch.
|
|
@@ -13,9 +16,10 @@ export type JsonRpcFetch = (host: string, body: any, extraHeaders?: Record<strin
|
|
|
13
16
|
* @param body - The RPC payload.
|
|
14
17
|
* @param noRetry - Whether to throw a `NoRetryError` in case the response is a 5xx error and the body contains an error
|
|
15
18
|
* message (see `retry` function for more details).
|
|
19
|
+
* @param config - Fetch transport configuration.
|
|
16
20
|
* @returns The parsed JSON response, or throws an error.
|
|
17
21
|
*/
|
|
18
|
-
export declare function defaultFetch(host: string, body: unknown, extraHeaders?: Record<string, string>, noRetry?: boolean): Promise<{
|
|
22
|
+
export declare function defaultFetch(host: string, body: unknown, extraHeaders?: Record<string, string>, noRetry?: boolean, config?: JsonRpcFetchConfig): Promise<{
|
|
19
23
|
response: any;
|
|
20
24
|
headers: {
|
|
21
25
|
get: (header: string) => string | null | undefined;
|
|
@@ -26,7 +30,8 @@ export declare function defaultFetch(host: string, body: unknown, extraHeaders?:
|
|
|
26
30
|
* @param retries - Sequence of intervals (in seconds) to retry.
|
|
27
31
|
* @param noRetry - Whether to stop retries on server errors.
|
|
28
32
|
* @param log - Optional logger for logging attempts.
|
|
33
|
+
* @param config - Fetch transport configuration.
|
|
29
34
|
* @returns A fetch function.
|
|
30
35
|
*/
|
|
31
|
-
export declare function makeFetch(retries: number[], defaultNoRetry: boolean, log?: Logger):
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
export declare function makeFetch(retries: number[], defaultNoRetry: boolean, log?: Logger, config?: JsonRpcFetchConfig): JsonRpcFetch;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9qc29uLXJwYy9jbGllbnQvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBTS9ELE1BQU0sTUFBTSxZQUFZLEdBQUcsQ0FDekIsSUFBSSxFQUFFLE1BQU0sRUFDWixJQUFJLEVBQUUsR0FBRyxFQUNULFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ3JDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sS0FDZCxPQUFPLENBQUM7SUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDO0lBQUMsT0FBTyxFQUFFO1FBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQTtLQUFFLENBQUE7Q0FBRSxDQUFDLENBQUM7QUFFakcsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLFdBQVcsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0NBQ2xDLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsd0JBQXNCLFlBQVksQ0FDaEMsSUFBSSxFQUFFLE1BQU0sRUFDWixJQUFJLEVBQUUsT0FBTyxFQUNiLFlBQVksR0FBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBTSxFQUN6QyxPQUFPLFVBQVEsRUFDZixNQUFNLEdBQUUsa0JBQXVCLEdBQzlCLE9BQU8sQ0FBQztJQUFFLFFBQVEsRUFBRSxHQUFHLENBQUM7SUFBQyxPQUFPLEVBQUU7UUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFBO0tBQUUsQ0FBQTtDQUFFLENBQUMsQ0FvQzdGO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFnQixTQUFTLENBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsY0FBYyxFQUFFLE9BQU8sRUFDdkIsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUNaLE1BQU0sR0FBRSxrQkFBdUIsR0FDOUIsWUFBWSxDQVVkIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAM/D,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,OAAO,CAAC,EAAE,OAAO,KACd,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC;AAEjG
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAM/D,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,OAAO,CAAC,EAAE,OAAO,KACd,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC;AAEjG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACzC,OAAO,UAAQ,EACf,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,CAAC,CAoC7F;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,OAAO,EACvB,GAAG,CAAC,EAAE,MAAM,EACZ,MAAM,GAAE,kBAAuB,GAC9B,YAAY,CAUd"}
|
|
@@ -11,8 +11,9 @@ const log = createLogger('json-rpc:json_rpc_client');
|
|
|
11
11
|
* @param body - The RPC payload.
|
|
12
12
|
* @param noRetry - Whether to throw a `NoRetryError` in case the response is a 5xx error and the body contains an error
|
|
13
13
|
* message (see `retry` function for more details).
|
|
14
|
+
* @param config - Fetch transport configuration.
|
|
14
15
|
* @returns The parsed JSON response, or throws an error.
|
|
15
|
-
*/ export async function defaultFetch(host, body, extraHeaders = {}, noRetry = false) {
|
|
16
|
+
*/ export async function defaultFetch(host, body, extraHeaders = {}, noRetry = false, config = {}) {
|
|
16
17
|
log.debug(format(`JsonRpcClient.fetch`, host, '->', body));
|
|
17
18
|
let resp;
|
|
18
19
|
try {
|
|
@@ -22,23 +23,25 @@ const log = createLogger('json-rpc:json_rpc_client');
|
|
|
22
23
|
headers: {
|
|
23
24
|
'content-type': 'application/json',
|
|
24
25
|
...extraHeaders
|
|
25
|
-
}
|
|
26
|
+
},
|
|
27
|
+
credentials: config.credentials
|
|
26
28
|
});
|
|
27
29
|
} catch (err) {
|
|
28
30
|
const errorMessage = `Error fetching from host ${host}: ${inspect(err)}`;
|
|
29
31
|
throw new Error(errorMessage);
|
|
30
32
|
}
|
|
31
33
|
let responseJson;
|
|
34
|
+
const responseText = await resp.text();
|
|
32
35
|
try {
|
|
33
|
-
responseJson =
|
|
36
|
+
responseJson = JSON.parse(responseText);
|
|
34
37
|
} catch {
|
|
35
38
|
if (!resp.ok) {
|
|
36
39
|
throw new Error(resp.statusText);
|
|
37
40
|
}
|
|
38
|
-
throw new Error(`Failed to parse body as JSON: ${
|
|
41
|
+
throw new Error(`Failed to parse body as JSON: ${responseText}`);
|
|
39
42
|
}
|
|
40
43
|
if (!resp.ok) {
|
|
41
|
-
const errorMessage = `Error ${resp.status} from server ${host}: ${responseJson
|
|
44
|
+
const errorMessage = `Error ${resp.status} from server ${host}: ${responseJson?.error?.message ?? JSON.stringify(responseJson)}`;
|
|
42
45
|
if (noRetry || resp.status >= 400 && resp.status < 500) {
|
|
43
46
|
throw new NoRetryError(errorMessage);
|
|
44
47
|
} else {
|
|
@@ -55,9 +58,10 @@ const log = createLogger('json-rpc:json_rpc_client');
|
|
|
55
58
|
* @param retries - Sequence of intervals (in seconds) to retry.
|
|
56
59
|
* @param noRetry - Whether to stop retries on server errors.
|
|
57
60
|
* @param log - Optional logger for logging attempts.
|
|
61
|
+
* @param config - Fetch transport configuration.
|
|
58
62
|
* @returns A fetch function.
|
|
59
|
-
*/ export function makeFetch(retries, defaultNoRetry, log) {
|
|
63
|
+
*/ export function makeFetch(retries, defaultNoRetry, log, config = {}) {
|
|
60
64
|
return async (host, body, extraHeaders = {}, noRetry)=>{
|
|
61
|
-
return await retry(()=>defaultFetch(host, body, extraHeaders, noRetry ?? defaultNoRetry), `JsonRpcClient request to ${host}`, makeBackoff(retries), log, false);
|
|
65
|
+
return await retry(()=>defaultFetch(host, body, extraHeaders, noRetry ?? defaultNoRetry, config), `JsonRpcClient request to ${host}`, makeBackoff(retries), log, false);
|
|
62
66
|
};
|
|
63
67
|
}
|
|
@@ -30,4 +30,4 @@ export declare function createSafeJsonRpcClient<T extends object>(host: string,
|
|
|
30
30
|
export declare function batch<T extends readonly unknown[]>(values: T): Promise<{
|
|
31
31
|
-readonly [P in keyof T]: Awaited<T[P]>;
|
|
32
32
|
}>;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9qc29uX3JwY19jbGllbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9qc29uLXJwYy9jbGllbnQvc2FmZV9qc29uX3JwY19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXJFLE9BQU8sRUFBa0IsS0FBSyxZQUFZLEVBQXdDLE1BQU0sc0JBQXNCLENBQUM7QUFFL0csT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFnQixNQUFNLFlBQVksQ0FBQztBQWE3RCxNQUFNLE1BQU0sd0JBQXdCLEdBQUc7SUFDckMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUNyQixHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDYixhQUFhLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdkIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQzVCLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQztRQUNkLE9BQU8sRUFBRTtZQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUE7U0FBRSxDQUFDO0tBQ2pFLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3JCLENBQUM7QUE2QkY7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLHVCQUF1QixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQ3RELElBQUksRUFBRSxNQUFNLEVBQ1osTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDdkIsTUFBTSxHQUFFLHdCQUE2QixHQUNwQyxDQUFDLENBb0xIO0FBRUQ7O0dBRUc7QUFDSCx3QkFBc0IsS0FBSyxDQUFDLENBQUMsU0FBUyxTQUFTLE9BQU8sRUFBRSxFQUN0RCxNQUFNLEVBQUUsQ0FBQyxHQUNSLE9BQU8sQ0FBQztJQUFFLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUFFLENBQUMsQ0F1QnREIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe_json_rpc_client.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/safe_json_rpc_client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAkB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"safe_json_rpc_client.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/safe_json_rpc_client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAkB,KAAK,YAAY,EAAwC,MAAM,sBAAsB,CAAC;AAE/G,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAC;AAa7D,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE;QACjB,QAAQ,EAAE,GAAG,CAAC;QACd,OAAO,EAAE;YAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;SAAE,CAAC;KACjE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB,CAAC;AA6BF;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EACtD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,MAAM,GAAE,wBAA6B,GACpC,CAAC,CAoLH;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EACtD,MAAM,EAAE,CAAC,GACR,OAAO,CAAC;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAuBtD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { format } from 'util';
|
|
2
2
|
import { createLogger } from '../../log/pino-logger.js';
|
|
3
3
|
import { promiseWithResolvers } from '../../promise/utils.js';
|
|
4
|
-
import { schemaHasMethod } from '../../schemas/api.js';
|
|
4
|
+
import { getSchemaReturnType, schemaHasMethod } from '../../schemas/api.js';
|
|
5
5
|
import { jsonStringify } from '../convert.js';
|
|
6
6
|
import { defaultFetch } from './fetch.js';
|
|
7
7
|
// batch window of 0 would capture all requests in the current sync iteration of the event loop
|
|
@@ -178,7 +178,7 @@ const clients = new Map();
|
|
|
178
178
|
].includes(response.result)) {
|
|
179
179
|
return;
|
|
180
180
|
}
|
|
181
|
-
return schema[methodName]
|
|
181
|
+
return getSchemaReturnType(schema[methodName]).parseAsync(response.result);
|
|
182
182
|
};
|
|
183
183
|
const clientId = nextClientId++;
|
|
184
184
|
const proxy = {
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
import { Agent } from 'undici';
|
|
1
|
+
import { Agent, type Dispatcher } from 'undici';
|
|
2
2
|
import type { JsonRpcFetch } from './fetch.js';
|
|
3
3
|
export { Agent };
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/** Asynchronous cookie storage. */
|
|
5
|
+
export interface CookieJar {
|
|
6
|
+
getCookieString(url: string): Promise<string>;
|
|
7
|
+
setCookie(cookie: string, url: string): Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates an Undici JSON-RPC transport.
|
|
11
|
+
* @param client - Dispatcher used to make requests.
|
|
12
|
+
* @param cookieJar - Optional application-owned cookie storage. Cookies are ignored when omitted.
|
|
13
|
+
* @returns A JSON-RPC fetch implementation.
|
|
14
|
+
*/
|
|
15
|
+
export declare function makeUndiciFetch(client?: Dispatcher, cookieJar?: CookieJar): JsonRpcFetch;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kaWNpLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvY2xpZW50L3VuZGljaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBS2hELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQVUvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFFakIsbUNBQW1DO0FBQ25DLE1BQU0sV0FBVyxTQUFTO0lBQ3hCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxRDtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxNQUFNLEdBQUUsVUFBd0IsRUFBRSxTQUFTLENBQUMsRUFBRSxTQUFTLEdBQUcsWUFBWSxDQWdHckcifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undici.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/undici.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"undici.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/undici.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAKhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,UAAwB,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,CAgGrG"}
|
|
@@ -9,29 +9,44 @@ const gunzip = promisify(gunzipCb);
|
|
|
9
9
|
const log = createLogger('json-rpc:json_rpc_client:undici');
|
|
10
10
|
/** Minimum request size in bytes to trigger compression. */ const COMPRESSION_THRESHOLD = 1024;
|
|
11
11
|
export { Agent };
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Creates an Undici JSON-RPC transport.
|
|
14
|
+
* @param client - Dispatcher used to make requests.
|
|
15
|
+
* @param cookieJar - Optional application-owned cookie storage. Cookies are ignored when omitted.
|
|
16
|
+
* @returns A JSON-RPC fetch implementation.
|
|
17
|
+
*/ export function makeUndiciFetch(client = new Agent(), cookieJar) {
|
|
13
18
|
return async (host, body, extraHeaders = {}, noRetry = false)=>{
|
|
14
19
|
log.trace(`JsonRpcClient.fetch: ${host}`, {
|
|
15
20
|
host,
|
|
16
21
|
body
|
|
17
22
|
});
|
|
23
|
+
const requestUrl = new URL(host);
|
|
24
|
+
requestUrl.hash = '';
|
|
18
25
|
let resp;
|
|
19
26
|
try {
|
|
27
|
+
const headers = new Headers();
|
|
28
|
+
for (const [name, value] of Object.entries(extraHeaders)){
|
|
29
|
+
headers.append(name, value);
|
|
30
|
+
}
|
|
31
|
+
const cookie = await cookieJar?.getCookieString(requestUrl.href);
|
|
32
|
+
if (cookie) {
|
|
33
|
+
headers.append('cookie', cookie);
|
|
34
|
+
}
|
|
20
35
|
const jsonBody = Buffer.from(jsonStringify(body));
|
|
21
36
|
const shouldCompress = jsonBody.length >= COMPRESSION_THRESHOLD;
|
|
37
|
+
headers.set('content-type', 'application/json');
|
|
38
|
+
if (shouldCompress) {
|
|
39
|
+
headers.set('content-encoding', 'gzip');
|
|
40
|
+
}
|
|
41
|
+
headers.set('accept-encoding', 'gzip');
|
|
42
|
+
const requestHeaders = [];
|
|
43
|
+
headers.forEach((value, name)=>requestHeaders.push(name, value));
|
|
22
44
|
resp = await client.request({
|
|
23
45
|
method: 'POST',
|
|
24
|
-
origin:
|
|
25
|
-
path:
|
|
46
|
+
origin: requestUrl.origin,
|
|
47
|
+
path: `${requestUrl.pathname}${requestUrl.search}`,
|
|
26
48
|
body: shouldCompress ? await gzip(jsonBody) : jsonBody,
|
|
27
|
-
headers:
|
|
28
|
-
...extraHeaders,
|
|
29
|
-
'content-type': 'application/json',
|
|
30
|
-
...shouldCompress && {
|
|
31
|
-
'content-encoding': 'gzip'
|
|
32
|
-
},
|
|
33
|
-
'accept-encoding': 'gzip'
|
|
34
|
-
}
|
|
49
|
+
headers: requestHeaders
|
|
35
50
|
});
|
|
36
51
|
} catch (err) {
|
|
37
52
|
const errorMessage = `Error fetching from host ${host}: ${String(err)}`;
|
|
@@ -40,18 +55,36 @@ export function makeUndiciFetch(client = new Agent()) {
|
|
|
40
55
|
let responseJson;
|
|
41
56
|
const responseOk = resp.statusCode >= 200 && resp.statusCode <= 299;
|
|
42
57
|
const contentEncoding = resp.headers['content-encoding'];
|
|
58
|
+
let responseText;
|
|
43
59
|
try {
|
|
44
60
|
if (contentEncoding === 'gzip') {
|
|
45
61
|
const jsonBuffer = await gunzip(await resp.body.arrayBuffer());
|
|
46
|
-
|
|
62
|
+
responseText = jsonBuffer.toString('utf-8');
|
|
47
63
|
} else {
|
|
48
|
-
|
|
64
|
+
responseText = await resp.body.text();
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
if (!responseOk) {
|
|
68
|
+
throw new Error('HTTP ' + resp.statusCode);
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`Failed to read response body. encoding: ${contentEncoding}, error: ${String(err)}`);
|
|
71
|
+
}
|
|
72
|
+
if (cookieJar) {
|
|
73
|
+
const setCookieHeaders = resp.headers['set-cookie'];
|
|
74
|
+
const cookies = typeof setCookieHeaders === 'string' ? [
|
|
75
|
+
setCookieHeaders
|
|
76
|
+
] : setCookieHeaders ?? [];
|
|
77
|
+
for (const cookie of cookies){
|
|
78
|
+
await cookieJar.setCookie(cookie, requestUrl.href);
|
|
49
79
|
}
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
responseJson = JSON.parse(responseText);
|
|
50
83
|
} catch {
|
|
51
84
|
if (!responseOk) {
|
|
52
85
|
throw new Error('HTTP ' + resp.statusCode);
|
|
53
86
|
}
|
|
54
|
-
throw new Error(`Failed to parse body as JSON. encoding: ${contentEncoding}, body: ${
|
|
87
|
+
throw new Error(`Failed to parse body as JSON. encoding: ${contentEncoding}, body: ${responseText}`);
|
|
55
88
|
}
|
|
56
89
|
if (!responseOk) {
|
|
57
90
|
const errorMessage = `Error ${resp.statusCode} response from server ${host}: ${responseJson}`;
|