@aztec/foundation 0.0.0-test.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/README.md +1 -0
- package/dest/array/array.d.ts +71 -0
- package/dest/array/array.d.ts.map +1 -0
- package/dest/array/array.js +100 -0
- package/dest/array/index.d.ts +2 -0
- package/dest/array/index.d.ts.map +1 -0
- package/dest/array/index.js +1 -0
- package/dest/async-map/index.d.ts +13 -0
- package/dest/async-map/index.d.ts.map +1 -0
- package/dest/async-map/index.js +17 -0
- package/dest/async-pool/index.d.ts +3 -0
- package/dest/async-pool/index.d.ts.map +1 -0
- package/dest/async-pool/index.js +47 -0
- package/dest/bigint-buffer/index.d.ts +42 -0
- package/dest/bigint-buffer/index.d.ts.map +1 -0
- package/dest/bigint-buffer/index.js +76 -0
- package/dest/buffer/buffer32.d.ts +91 -0
- package/dest/buffer/buffer32.d.ts.map +1 -0
- package/dest/buffer/buffer32.js +115 -0
- package/dest/buffer/index.d.ts +2 -0
- package/dest/buffer/index.d.ts.map +1 -0
- package/dest/buffer/index.js +1 -0
- package/dest/collection/array.d.ts +101 -0
- package/dest/collection/array.d.ts.map +1 -0
- package/dest/collection/array.js +164 -0
- package/dest/collection/index.d.ts +3 -0
- package/dest/collection/index.d.ts.map +1 -0
- package/dest/collection/index.js +2 -0
- package/dest/collection/object.d.ts +14 -0
- package/dest/collection/object.d.ts.map +1 -0
- package/dest/collection/object.js +32 -0
- package/dest/committable/committable.d.ts +28 -0
- package/dest/committable/committable.d.ts.map +1 -0
- package/dest/committable/committable.js +36 -0
- package/dest/committable/index.d.ts +2 -0
- package/dest/committable/index.d.ts.map +1 -0
- package/dest/committable/index.js +1 -0
- package/dest/config/env_var.d.ts +2 -0
- package/dest/config/env_var.d.ts.map +1 -0
- package/dest/config/env_var.js +1 -0
- package/dest/config/index.d.ts +66 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +125 -0
- package/dest/crypto/aes128/index.d.ts +34 -0
- package/dest/crypto/aes128/index.d.ts.map +1 -0
- package/dest/crypto/aes128/index.js +49 -0
- package/dest/crypto/ecdsa/index.d.ts +39 -0
- package/dest/crypto/ecdsa/index.d.ts.map +1 -0
- package/dest/crypto/ecdsa/index.js +88 -0
- package/dest/crypto/ecdsa/signature.d.ts +71 -0
- package/dest/crypto/ecdsa/signature.d.ts.map +1 -0
- package/dest/crypto/ecdsa/signature.js +92 -0
- package/dest/crypto/grumpkin/index.d.ts +47 -0
- package/dest/crypto/grumpkin/index.d.ts.map +1 -0
- package/dest/crypto/grumpkin/index.js +154 -0
- package/dest/crypto/index.d.ts +15 -0
- package/dest/crypto/index.d.ts.map +1 -0
- package/dest/crypto/index.js +14 -0
- package/dest/crypto/keccak/index.d.ts +28 -0
- package/dest/crypto/keccak/index.d.ts.map +1 -0
- package/dest/crypto/keccak/index.js +248 -0
- package/dest/crypto/keys/index.d.ts +5 -0
- package/dest/crypto/keys/index.d.ts.map +1 -0
- package/dest/crypto/keys/index.js +7 -0
- package/dest/crypto/pedersen/index.d.ts +2 -0
- package/dest/crypto/pedersen/index.d.ts.map +1 -0
- package/dest/crypto/pedersen/index.js +1 -0
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts +13 -0
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.elliptic.js +582 -0
- package/dest/crypto/pedersen/pedersen.noble.d.ts +11 -0
- package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.noble.js +558 -0
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +21 -0
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.wasm.js +41 -0
- package/dest/crypto/poseidon/index.d.ts +26 -0
- package/dest/crypto/poseidon/index.d.ts.map +1 -0
- package/dest/crypto/poseidon/index.js +58 -0
- package/dest/crypto/random/index.d.ts +25 -0
- package/dest/crypto/random/index.d.ts.map +1 -0
- package/dest/crypto/random/index.js +70 -0
- package/dest/crypto/random/randomness_singleton.d.ts +25 -0
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -0
- package/dest/crypto/random/randomness_singleton.js +55 -0
- package/dest/crypto/schnorr/index.d.ts +30 -0
- package/dest/crypto/schnorr/index.d.ts.map +1 -0
- package/dest/crypto/schnorr/index.js +68 -0
- package/dest/crypto/schnorr/signature.d.ts +70 -0
- package/dest/crypto/schnorr/signature.d.ts.map +1 -0
- package/dest/crypto/schnorr/signature.js +93 -0
- package/dest/crypto/secp256k1/index.d.ts +32 -0
- package/dest/crypto/secp256k1/index.d.ts.map +1 -0
- package/dest/crypto/secp256k1/index.js +116 -0
- package/dest/crypto/secp256k1-signer/index.d.ts +3 -0
- package/dest/crypto/secp256k1-signer/index.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/index.js +2 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +24 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.js +30 -0
- package/dest/crypto/secp256k1-signer/utils.d.ts +40 -0
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/utils.js +84 -0
- package/dest/crypto/serialize.d.ts +53 -0
- package/dest/crypto/serialize.d.ts.map +1 -0
- package/dest/crypto/serialize.js +68 -0
- package/dest/crypto/sha256/index.d.ts +20 -0
- package/dest/crypto/sha256/index.d.ts.map +1 -0
- package/dest/crypto/sha256/index.js +166 -0
- package/dest/crypto/sha512/index.d.ts +11 -0
- package/dest/crypto/sha512/index.d.ts.map +1 -0
- package/dest/crypto/sha512/index.js +12 -0
- package/dest/crypto/signature/index.d.ts +19 -0
- package/dest/crypto/signature/index.d.ts.map +1 -0
- package/dest/crypto/signature/index.js +3 -0
- package/dest/crypto/sync/index.d.ts +3 -0
- package/dest/crypto/sync/index.d.ts.map +1 -0
- package/dest/crypto/sync/index.js +4 -0
- package/dest/crypto/sync/pedersen/index.d.ts +21 -0
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -0
- package/dest/crypto/sync/pedersen/index.js +38 -0
- package/dest/crypto/sync/poseidon/index.d.ts +26 -0
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -0
- package/dest/crypto/sync/poseidon/index.js +53 -0
- package/dest/decorators/index.d.ts +2 -0
- package/dest/decorators/index.d.ts.map +1 -0
- package/dest/decorators/index.js +1 -0
- package/dest/decorators/memoize.d.ts +2 -0
- package/dest/decorators/memoize.d.ts.map +1 -0
- package/dest/decorators/memoize.js +11 -0
- package/dest/error/index.d.ts +21 -0
- package/dest/error/index.d.ts.map +1 -0
- package/dest/error/index.js +17 -0
- package/dest/eth-address/index.d.ts +134 -0
- package/dest/eth-address/index.d.ts.map +1 -0
- package/dest/eth-address/index.js +198 -0
- package/dest/eth-signature/eth_signature.d.ts +62 -0
- package/dest/eth-signature/eth_signature.d.ts.map +1 -0
- package/dest/eth-signature/eth_signature.js +91 -0
- package/dest/eth-signature/index.d.ts +2 -0
- package/dest/eth-signature/index.d.ts.map +1 -0
- package/dest/eth-signature/index.js +1 -0
- package/dest/fields/coordinate.d.ts +68 -0
- package/dest/fields/coordinate.d.ts.map +1 -0
- package/dest/fields/coordinate.js +96 -0
- package/dest/fields/fields.d.ts +176 -0
- package/dest/fields/fields.d.ts.map +1 -0
- package/dest/fields/fields.js +383 -0
- package/dest/fields/index.d.ts +4 -0
- package/dest/fields/index.d.ts.map +1 -0
- package/dest/fields/index.js +3 -0
- package/dest/fields/point.d.ts +175 -0
- package/dest/fields/point.d.ts.map +1 -0
- package/dest/fields/point.js +260 -0
- package/dest/fs/index.d.ts +2 -0
- package/dest/fs/index.d.ts.map +1 -0
- package/dest/fs/index.js +1 -0
- package/dest/fs/run_in_dir.d.ts +2 -0
- package/dest/fs/run_in_dir.d.ts.map +1 -0
- package/dest/fs/run_in_dir.js +31 -0
- package/dest/index.d.ts +31 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +31 -0
- package/dest/iterable/all.d.ts +9 -0
- package/dest/iterable/all.d.ts.map +1 -0
- package/dest/iterable/all.js +18 -0
- package/dest/iterable/filter.d.ts +10 -0
- package/dest/iterable/filter.d.ts.map +1 -0
- package/dest/iterable/filter.js +48 -0
- package/dest/iterable/index.d.ts +8 -0
- package/dest/iterable/index.d.ts.map +1 -0
- package/dest/iterable/index.js +7 -0
- package/dest/iterable/isAsyncIt.d.ts +7 -0
- package/dest/iterable/isAsyncIt.d.ts.map +1 -0
- package/dest/iterable/isAsyncIt.js +7 -0
- package/dest/iterable/map.d.ts +12 -0
- package/dest/iterable/map.d.ts.map +1 -0
- package/dest/iterable/map.js +36 -0
- package/dest/iterable/peek.d.ts +19 -0
- package/dest/iterable/peek.d.ts.map +1 -0
- package/dest/iterable/peek.js +33 -0
- package/dest/iterable/sort.d.ts +14 -0
- package/dest/iterable/sort.d.ts.map +1 -0
- package/dest/iterable/sort.js +15 -0
- package/dest/iterable/take.d.ts +10 -0
- package/dest/iterable/take.d.ts.map +1 -0
- package/dest/iterable/take.js +32 -0
- package/dest/iterable/toArray.d.ts +2 -0
- package/dest/iterable/toArray.d.ts.map +1 -0
- package/dest/iterable/toArray.js +7 -0
- package/dest/jest/setup.js +7 -0
- package/dest/json-rpc/client/fetch.d.ts +32 -0
- package/dest/json-rpc/client/fetch.d.ts.map +1 -0
- package/dest/json-rpc/client/fetch.js +77 -0
- package/dest/json-rpc/client/index.d.ts +3 -0
- package/dest/json-rpc/client/index.d.ts.map +1 -0
- package/dest/json-rpc/client/index.js +2 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +26 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
- package/dest/json-rpc/client/safe_json_rpc_client.js +57 -0
- package/dest/json-rpc/client/undici.d.ts +5 -0
- package/dest/json-rpc/client/undici.d.ts.map +1 -0
- package/dest/json-rpc/client/undici.js +63 -0
- package/dest/json-rpc/convert.d.ts +27 -0
- package/dest/json-rpc/convert.d.ts.map +1 -0
- package/dest/json-rpc/convert.js +48 -0
- package/dest/json-rpc/fixtures/class_a.d.ts +11 -0
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/class_a.js +20 -0
- package/dest/json-rpc/fixtures/class_b.d.ts +11 -0
- package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/class_b.js +20 -0
- package/dest/json-rpc/fixtures/test_state.d.ts +89 -0
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/test_state.js +131 -0
- package/dest/json-rpc/index.d.ts +2 -0
- package/dest/json-rpc/index.d.ts.map +1 -0
- package/dest/json-rpc/index.js +1 -0
- package/dest/json-rpc/js_utils.d.ts +13 -0
- package/dest/json-rpc/js_utils.d.ts.map +1 -0
- package/dest/json-rpc/js_utils.js +16 -0
- package/dest/json-rpc/server/index.d.ts +2 -0
- package/dest/json-rpc/server/index.d.ts.map +1 -0
- package/dest/json-rpc/server/index.js +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +140 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.js +346 -0
- package/dest/json-rpc/server/telemetry.d.ts +2 -0
- package/dest/json-rpc/server/telemetry.d.ts.map +1 -0
- package/dest/json-rpc/server/telemetry.js +0 -0
- package/dest/json-rpc/test/index.d.ts +2 -0
- package/dest/json-rpc/test/index.d.ts.map +1 -0
- package/dest/json-rpc/test/index.js +1 -0
- package/dest/json-rpc/test/integration.d.ts +15 -0
- package/dest/json-rpc/test/integration.d.ts.map +1 -0
- package/dest/json-rpc/test/integration.js +21 -0
- package/dest/log/console.d.ts +11 -0
- package/dest/log/console.d.ts.map +1 -0
- package/dest/log/console.js +36 -0
- package/dest/log/debug.d.ts +56 -0
- package/dest/log/debug.d.ts.map +1 -0
- package/dest/log/debug.js +75 -0
- package/dest/log/gcloud-logger-config.d.ts +14 -0
- package/dest/log/gcloud-logger-config.d.ts.map +1 -0
- package/dest/log/gcloud-logger-config.js +66 -0
- package/dest/log/index.d.ts +7 -0
- package/dest/log/index.d.ts.map +1 -0
- package/dest/log/index.js +6 -0
- package/dest/log/libp2p_logger.d.ts +7 -0
- package/dest/log/libp2p_logger.d.ts.map +1 -0
- package/dest/log/libp2p_logger.js +55 -0
- package/dest/log/log-filters.d.ts +7 -0
- package/dest/log/log-filters.d.ts.map +1 -0
- package/dest/log/log-filters.js +59 -0
- package/dest/log/log-levels.d.ts +3 -0
- package/dest/log/log-levels.d.ts.map +1 -0
- package/dest/log/log-levels.js +10 -0
- package/dest/log/log_fn.d.ts +7 -0
- package/dest/log/log_fn.d.ts.map +1 -0
- package/dest/log/log_fn.js +1 -0
- package/dest/log/log_history.d.ts +31 -0
- package/dest/log/log_history.d.ts.map +1 -0
- package/dest/log/log_history.js +38 -0
- package/dest/log/pino-logger.d.ts +57 -0
- package/dest/log/pino-logger.d.ts.map +1 -0
- package/dest/log/pino-logger.js +207 -0
- package/dest/message/index.d.ts +32 -0
- package/dest/message/index.d.ts.map +1 -0
- package/dest/message/index.js +27 -0
- package/dest/mutex/index.d.ts +53 -0
- package/dest/mutex/index.d.ts.map +1 -0
- package/dest/mutex/index.js +78 -0
- package/dest/mutex/mutex_database.d.ts +10 -0
- package/dest/mutex/mutex_database.d.ts.map +1 -0
- package/dest/mutex/mutex_database.js +4 -0
- package/dest/noir/index.d.ts +2 -0
- package/dest/noir/index.d.ts.map +1 -0
- package/dest/noir/index.js +1 -0
- package/dest/noir/noir_package_config.d.ts +129 -0
- package/dest/noir/noir_package_config.d.ts.map +1 -0
- package/dest/noir/noir_package_config.js +36 -0
- package/dest/promise/index.d.ts +3 -0
- package/dest/promise/index.d.ts.map +1 -0
- package/dest/promise/index.js +2 -0
- package/dest/promise/running-promise.d.ts +47 -0
- package/dest/promise/running-promise.d.ts.map +1 -0
- package/dest/promise/running-promise.js +110 -0
- package/dest/promise/utils.d.ts +12 -0
- package/dest/promise/utils.d.ts.map +1 -0
- package/dest/promise/utils.js +20 -0
- package/dest/queue/base_memory_queue.d.ts +65 -0
- package/dest/queue/base_memory_queue.d.ts.map +1 -0
- package/dest/queue/base_memory_queue.js +116 -0
- package/dest/queue/batch_queue.d.ts +47 -0
- package/dest/queue/batch_queue.d.ts.map +1 -0
- package/dest/queue/batch_queue.js +105 -0
- package/dest/queue/bounded_serial_queue.d.ts +56 -0
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -0
- package/dest/queue/bounded_serial_queue.js +84 -0
- package/dest/queue/fifo_memory_queue.d.ts +21 -0
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -0
- package/dest/queue/fifo_memory_queue.js +29 -0
- package/dest/queue/index.d.ts +7 -0
- package/dest/queue/index.d.ts.map +1 -0
- package/dest/queue/index.js +6 -0
- package/dest/queue/priority_memory_queue.d.ts +13 -0
- package/dest/queue/priority_memory_queue.d.ts.map +1 -0
- package/dest/queue/priority_memory_queue.js +16 -0
- package/dest/queue/priority_queue.d.ts +14 -0
- package/dest/queue/priority_queue.d.ts.map +1 -0
- package/dest/queue/priority_queue.js +29 -0
- package/dest/queue/semaphore.d.ts +23 -0
- package/dest/queue/semaphore.d.ts.map +1 -0
- package/dest/queue/semaphore.js +26 -0
- package/dest/queue/serial_queue.d.ts +49 -0
- package/dest/queue/serial_queue.d.ts.map +1 -0
- package/dest/queue/serial_queue.js +72 -0
- package/dest/retry/index.d.ts +44 -0
- package/dest/retry/index.d.ts.map +1 -0
- package/dest/retry/index.js +93 -0
- package/dest/running-promise/index.d.ts +2 -0
- package/dest/running-promise/index.d.ts.map +1 -0
- package/dest/running-promise/index.js +1 -0
- package/dest/schemas/api.d.ts +21 -0
- package/dest/schemas/api.d.ts.map +1 -0
- package/dest/schemas/api.js +3 -0
- package/dest/schemas/index.d.ts +6 -0
- package/dest/schemas/index.d.ts.map +1 -0
- package/dest/schemas/index.js +5 -0
- package/dest/schemas/parse.d.ts +9 -0
- package/dest/schemas/parse.d.ts.map +1 -0
- package/dest/schemas/parse.js +22 -0
- package/dest/schemas/schemas.d.ts +45 -0
- package/dest/schemas/schemas.d.ts.map +1 -0
- package/dest/schemas/schemas.js +38 -0
- package/dest/schemas/types.d.ts +3 -0
- package/dest/schemas/types.d.ts.map +1 -0
- package/dest/schemas/types.js +1 -0
- package/dest/schemas/utils.d.ts +53 -0
- package/dest/schemas/utils.d.ts.map +1 -0
- package/dest/schemas/utils.js +60 -0
- package/dest/serialize/buffer_reader.d.ts +239 -0
- package/dest/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/serialize/buffer_reader.js +290 -0
- package/dest/serialize/field_reader.d.ts +112 -0
- package/dest/serialize/field_reader.d.ts.map +1 -0
- package/dest/serialize/field_reader.js +147 -0
- package/dest/serialize/free_funcs.d.ts +105 -0
- package/dest/serialize/free_funcs.d.ts.map +1 -0
- package/dest/serialize/free_funcs.js +189 -0
- package/dest/serialize/index.d.ts +7 -0
- package/dest/serialize/index.d.ts.map +1 -0
- package/dest/serialize/index.js +6 -0
- package/dest/serialize/serialize.d.ts +182 -0
- package/dest/serialize/serialize.d.ts.map +1 -0
- package/dest/serialize/serialize.js +248 -0
- package/dest/serialize/type_registry.d.ts +23 -0
- package/dest/serialize/type_registry.d.ts.map +1 -0
- package/dest/serialize/type_registry.js +61 -0
- package/dest/serialize/types.d.ts +33 -0
- package/dest/serialize/types.d.ts.map +1 -0
- package/dest/serialize/types.js +21 -0
- package/dest/sleep/index.d.ts +51 -0
- package/dest/sleep/index.d.ts.map +1 -0
- package/dest/sleep/index.js +67 -0
- package/dest/string/index.d.ts +11 -0
- package/dest/string/index.d.ts.map +1 -0
- package/dest/string/index.js +24 -0
- package/dest/testing/files/index.d.ts +20 -0
- package/dest/testing/files/index.d.ts.map +1 -0
- package/dest/testing/files/index.js +58 -0
- package/dest/testing/index.d.ts +4 -0
- package/dest/testing/index.d.ts.map +1 -0
- package/dest/testing/index.js +3 -0
- package/dest/testing/port_allocator.d.ts +10 -0
- package/dest/testing/port_allocator.d.ts.map +1 -0
- package/dest/testing/port_allocator.js +29 -0
- package/dest/testing/snapshot_serializer.d.ts +5 -0
- package/dest/testing/snapshot_serializer.d.ts.map +1 -0
- package/dest/testing/snapshot_serializer.js +32 -0
- package/dest/testing/test_data.d.ts +7 -0
- package/dest/testing/test_data.d.ts.map +1 -0
- package/dest/testing/test_data.js +29 -0
- package/dest/timer/date.d.ts +13 -0
- package/dest/timer/date.d.ts.map +1 -0
- package/dest/timer/date.js +24 -0
- package/dest/timer/elapsed.d.ts +13 -0
- package/dest/timer/elapsed.d.ts.map +1 -0
- package/dest/timer/elapsed.js +25 -0
- package/dest/timer/index.d.ts +5 -0
- package/dest/timer/index.d.ts.map +1 -0
- package/dest/timer/index.js +4 -0
- package/dest/timer/timeout.d.ts +41 -0
- package/dest/timer/timeout.d.ts.map +1 -0
- package/dest/timer/timeout.js +66 -0
- package/dest/timer/timer.d.ts +37 -0
- package/dest/timer/timer.d.ts.map +1 -0
- package/dest/timer/timer.js +40 -0
- package/dest/transport/browser/index.d.ts +5 -0
- package/dest/transport/browser/index.d.ts.map +1 -0
- package/dest/transport/browser/index.js +4 -0
- package/dest/transport/browser/message_port_socket.d.ts +37 -0
- package/dest/transport/browser/message_port_socket.d.ts.map +1 -0
- package/dest/transport/browser/message_port_socket.js +42 -0
- package/dest/transport/browser/shared_worker_connector.d.ts +19 -0
- package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -0
- package/dest/transport/browser/shared_worker_connector.js +19 -0
- package/dest/transport/browser/shared_worker_listener.d.ts +38 -0
- package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -0
- package/dest/transport/browser/shared_worker_listener.js +33 -0
- package/dest/transport/browser/worker_connector.d.ts +26 -0
- package/dest/transport/browser/worker_connector.d.ts.map +1 -0
- package/dest/transport/browser/worker_connector.js +30 -0
- package/dest/transport/browser/worker_listener.d.ts +39 -0
- package/dest/transport/browser/worker_listener.d.ts.map +1 -0
- package/dest/transport/browser/worker_listener.js +35 -0
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +25 -0
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -0
- package/dest/transport/dispatch/create_dispatch_fn.js +17 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +102 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
- package/dest/transport/dispatch/create_dispatch_proxy.js +59 -0
- package/dest/transport/dispatch/messages.d.ts +52 -0
- package/dest/transport/dispatch/messages.d.ts.map +1 -0
- package/dest/transport/dispatch/messages.js +13 -0
- package/dest/transport/index.d.ts +12 -0
- package/dest/transport/index.d.ts.map +1 -0
- package/dest/transport/index.js +11 -0
- package/dest/transport/interface/connector.d.ts +8 -0
- package/dest/transport/interface/connector.d.ts.map +1 -0
- package/dest/transport/interface/connector.js +3 -0
- package/dest/transport/interface/listener.d.ts +13 -0
- package/dest/transport/interface/listener.d.ts.map +1 -0
- package/dest/transport/interface/listener.js +4 -0
- package/dest/transport/interface/socket.d.ts +13 -0
- package/dest/transport/interface/socket.d.ts.map +1 -0
- package/dest/transport/interface/socket.js +7 -0
- package/dest/transport/interface/transferable.d.ts +68 -0
- package/dest/transport/interface/transferable.d.ts.map +1 -0
- package/dest/transport/interface/transferable.js +63 -0
- package/dest/transport/node/index.d.ts +3 -0
- package/dest/transport/node/index.d.ts.map +1 -0
- package/dest/transport/node/index.js +2 -0
- package/dest/transport/node/node_connector.d.ts +28 -0
- package/dest/transport/node/node_connector.d.ts.map +1 -0
- package/dest/transport/node/node_connector.js +26 -0
- package/dest/transport/node/node_connector_socket.d.ts +42 -0
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
- package/dest/transport/node/node_connector_socket.js +44 -0
- package/dest/transport/node/node_listener.d.ts +26 -0
- package/dest/transport/node/node_listener.d.ts.map +1 -0
- package/dest/transport/node/node_listener.js +26 -0
- package/dest/transport/node/node_listener_socket.d.ts +37 -0
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
- package/dest/transport/node/node_listener_socket.js +40 -0
- package/dest/transport/transport_client.d.ts +61 -0
- package/dest/transport/transport_client.d.ts.map +1 -0
- package/dest/transport/transport_client.js +96 -0
- package/dest/transport/transport_server.d.ts +56 -0
- package/dest/transport/transport_server.d.ts.map +1 -0
- package/dest/transport/transport_server.js +114 -0
- package/dest/trees/hasher.d.ts +39 -0
- package/dest/trees/hasher.d.ts.map +1 -0
- package/dest/trees/hasher.js +5 -0
- package/dest/trees/index.d.ts +11 -0
- package/dest/trees/index.d.ts.map +1 -0
- package/dest/trees/index.js +10 -0
- package/dest/trees/indexed_merkle_tree.d.ts +13 -0
- package/dest/trees/indexed_merkle_tree.d.ts.map +1 -0
- package/dest/trees/indexed_merkle_tree.js +27 -0
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +23 -0
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/indexed_merkle_tree_calculator.js +83 -0
- package/dest/trees/indexed_tree_leaf.d.ts +57 -0
- package/dest/trees/indexed_tree_leaf.d.ts.map +1 -0
- package/dest/trees/indexed_tree_leaf.js +5 -0
- package/dest/trees/membership_witness.d.ts +62 -0
- package/dest/trees/membership_witness.d.ts.map +1 -0
- package/dest/trees/membership_witness.js +70 -0
- package/dest/trees/merkle_tree.d.ts +18 -0
- package/dest/trees/merkle_tree.d.ts.map +1 -0
- package/dest/trees/merkle_tree.js +58 -0
- package/dest/trees/merkle_tree_calculator.d.ts +16 -0
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/merkle_tree_calculator.js +61 -0
- package/dest/trees/sibling_path.d.ts +132 -0
- package/dest/trees/sibling_path.d.ts.map +1 -0
- package/dest/trees/sibling_path.js +144 -0
- package/dest/trees/unbalanced_merkle_tree.d.ts +17 -0
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree.js +100 -0
- package/dest/trees/unbalanced_tree_store.d.ts +19 -0
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -0
- package/dest/trees/unbalanced_tree_store.js +94 -0
- package/dest/types/index.d.ts +19 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +3 -0
- package/dest/url/index.d.ts +9 -0
- package/dest/url/index.d.ts.map +1 -0
- package/dest/url/index.js +62 -0
- package/dest/validation/index.d.ts +9 -0
- package/dest/validation/index.d.ts.map +1 -0
- package/dest/validation/index.js +15 -0
- package/dest/wasm/empty_wasi_sdk.d.ts +130 -0
- package/dest/wasm/empty_wasi_sdk.d.ts.map +1 -0
- package/dest/wasm/empty_wasi_sdk.js +148 -0
- package/dest/wasm/index.d.ts +2 -0
- package/dest/wasm/index.d.ts.map +1 -0
- package/dest/wasm/index.js +1 -0
- package/dest/wasm/wasm_module.d.ts +136 -0
- package/dest/wasm/wasm_module.d.ts.map +1 -0
- package/dest/wasm/wasm_module.js +196 -0
- package/dest/worker/browser/index.d.ts +3 -0
- package/dest/worker/browser/index.d.ts.map +1 -0
- package/dest/worker/browser/index.js +2 -0
- package/dest/worker/browser/start_web_module.d.ts +7 -0
- package/dest/worker/browser/start_web_module.d.ts.map +1 -0
- package/dest/worker/browser/start_web_module.js +27 -0
- package/dest/worker/browser/web_data_store.d.ts +24 -0
- package/dest/worker/browser/web_data_store.d.ts.map +1 -0
- package/dest/worker/browser/web_data_store.js +29 -0
- package/dest/worker/browser/web_worker.d.ts +10 -0
- package/dest/worker/browser/web_worker.d.ts.map +1 -0
- package/dest/worker/browser/web_worker.js +25 -0
- package/dest/worker/data_store.d.ts +21 -0
- package/dest/worker/data_store.d.ts.map +1 -0
- package/dest/worker/data_store.js +3 -0
- package/dest/worker/index.d.ts +3 -0
- package/dest/worker/index.d.ts.map +1 -0
- package/dest/worker/index.js +1 -0
- package/dest/worker/node/index.d.ts +3 -0
- package/dest/worker/node/index.d.ts.map +1 -0
- package/dest/worker/node/index.js +2 -0
- package/dest/worker/node/node_data_store.d.ts +13 -0
- package/dest/worker/node/node_data_store.d.ts.map +1 -0
- package/dest/worker/node/node_data_store.js +20 -0
- package/dest/worker/node/node_worker.d.ts +6 -0
- package/dest/worker/node/node_worker.d.ts.map +1 -0
- package/dest/worker/node/node_worker.js +22 -0
- package/dest/worker/node/start_node_module.d.ts +7 -0
- package/dest/worker/node/start_node_module.d.ts.map +1 -0
- package/dest/worker/node/start_node_module.js +31 -0
- package/dest/worker/wasm_worker.d.ts +9 -0
- package/dest/worker/wasm_worker.d.ts.map +1 -0
- package/dest/worker/wasm_worker.js +3 -0
- package/dest/worker/worker_pool.d.ts +40 -0
- package/dest/worker/worker_pool.d.ts.map +1 -0
- package/dest/worker/worker_pool.js +51 -0
- package/package.json +176 -0
- package/src/array/array.ts +150 -0
- package/src/array/index.ts +1 -0
- package/src/async-map/index.ts +18 -0
- package/src/async-pool/index.ts +50 -0
- package/src/bigint-buffer/index.ts +87 -0
- package/src/buffer/buffer32.ts +144 -0
- package/src/buffer/index.ts +1 -0
- package/src/collection/array.ts +203 -0
- package/src/collection/index.ts +2 -0
- package/src/collection/object.ts +52 -0
- package/src/committable/committable.ts +46 -0
- package/src/committable/index.ts +1 -0
- package/src/config/env_var.ts +207 -0
- package/src/config/index.ts +167 -0
- package/src/crypto/aes128/index.ts +59 -0
- package/src/crypto/ecdsa/index.ts +70 -0
- package/src/crypto/ecdsa/signature.ts +100 -0
- package/src/crypto/grumpkin/index.ts +97 -0
- package/src/crypto/index.ts +14 -0
- package/src/crypto/keccak/index.ts +283 -0
- package/src/crypto/keys/index.ts +10 -0
- package/src/crypto/pedersen/index.ts +1 -0
- package/src/crypto/pedersen/pedersen.elliptic.ts +584 -0
- package/src/crypto/pedersen/pedersen.noble.ts +573 -0
- package/src/crypto/pedersen/pedersen.wasm.ts +48 -0
- package/src/crypto/poseidon/index.ts +77 -0
- package/src/crypto/random/index.ts +85 -0
- package/src/crypto/random/randomness_singleton.ts +62 -0
- package/src/crypto/schnorr/index.ts +55 -0
- package/src/crypto/schnorr/signature.ts +116 -0
- package/src/crypto/secp256k1/index.ts +57 -0
- package/src/crypto/secp256k1-signer/index.ts +2 -0
- package/src/crypto/secp256k1-signer/secp256k1_signer.ts +38 -0
- package/src/crypto/secp256k1-signer/utils.ts +99 -0
- package/src/crypto/serialize.ts +85 -0
- package/src/crypto/sha256/index.ts +147 -0
- package/src/crypto/sha512/index.ts +16 -0
- package/src/crypto/signature/index.ts +17 -0
- package/src/crypto/sync/index.ts +6 -0
- package/src/crypto/sync/pedersen/index.ts +45 -0
- package/src/crypto/sync/poseidon/index.ts +76 -0
- package/src/decorators/index.ts +1 -0
- package/src/decorators/memoize.ts +11 -0
- package/src/error/index.ts +22 -0
- package/src/eth-address/index.ts +241 -0
- package/src/eth-signature/eth_signature.ts +128 -0
- package/src/eth-signature/index.ts +1 -0
- package/src/fields/coordinate.ts +104 -0
- package/src/fields/fields.ts +505 -0
- package/src/fields/index.ts +3 -0
- package/src/fields/point.ts +300 -0
- package/src/fs/index.ts +1 -0
- package/src/fs/run_in_dir.ts +33 -0
- package/src/index.ts +31 -0
- package/src/iterable/all.ts +32 -0
- package/src/iterable/filter.ts +77 -0
- package/src/iterable/index.ts +7 -0
- package/src/iterable/isAsyncIt.ts +8 -0
- package/src/iterable/map.ts +66 -0
- package/src/iterable/peek.ts +58 -0
- package/src/iterable/sort.ts +39 -0
- package/src/iterable/take.ts +54 -0
- package/src/iterable/toArray.ts +9 -0
- package/src/jest/setup.mjs +9 -0
- package/src/json-rpc/README.md +55 -0
- package/src/json-rpc/client/fetch.ts +103 -0
- package/src/json-rpc/client/index.ts +2 -0
- package/src/json-rpc/client/safe_json_rpc_client.ts +67 -0
- package/src/json-rpc/client/undici.ts +75 -0
- package/src/json-rpc/convert.ts +61 -0
- package/src/json-rpc/fixtures/class_a.ts +15 -0
- package/src/json-rpc/fixtures/class_b.ts +15 -0
- package/src/json-rpc/fixtures/test_state.ts +143 -0
- package/src/json-rpc/index.ts +1 -0
- package/src/json-rpc/js_utils.ts +21 -0
- package/src/json-rpc/server/index.ts +1 -0
- package/src/json-rpc/server/safe_json_rpc_server.ts +376 -0
- package/src/json-rpc/server/telemetry.ts +0 -0
- package/src/json-rpc/test/index.ts +1 -0
- package/src/json-rpc/test/integration.ts +35 -0
- package/src/log/console.ts +39 -0
- package/src/log/debug.ts +104 -0
- package/src/log/gcloud-logger-config.ts +71 -0
- package/src/log/index.ts +6 -0
- package/src/log/libp2p_logger.ts +67 -0
- package/src/log/log-filters.ts +63 -0
- package/src/log/log-levels.ts +3 -0
- package/src/log/log_fn.ts +5 -0
- package/src/log/log_history.ts +44 -0
- package/src/log/pino-logger.ts +243 -0
- package/src/message/index.ts +43 -0
- package/src/mutex/index.ts +84 -0
- package/src/mutex/mutex_database.ts +12 -0
- package/src/noir/index.ts +1 -0
- package/src/noir/noir_package_config.ts +54 -0
- package/src/promise/index.ts +2 -0
- package/src/promise/running-promise.ts +125 -0
- package/src/promise/utils.ts +29 -0
- package/src/queue/base_memory_queue.ts +138 -0
- package/src/queue/batch_queue.ts +120 -0
- package/src/queue/bounded_serial_queue.ts +100 -0
- package/src/queue/fifo_memory_queue.ts +39 -0
- package/src/queue/index.ts +6 -0
- package/src/queue/priority_memory_queue.ts +20 -0
- package/src/queue/priority_queue.ts +34 -0
- package/src/queue/semaphore.ts +33 -0
- package/src/queue/serial_queue.ts +86 -0
- package/src/retry/index.ts +100 -0
- package/src/running-promise/index.ts +1 -0
- package/src/schemas/api.ts +47 -0
- package/src/schemas/index.ts +5 -0
- package/src/schemas/parse.ts +29 -0
- package/src/schemas/schemas.ts +64 -0
- package/src/schemas/types.ts +3 -0
- package/src/schemas/utils.ts +112 -0
- package/src/serialize/buffer_reader.ts +383 -0
- package/src/serialize/field_reader.ts +184 -0
- package/src/serialize/free_funcs.ts +204 -0
- package/src/serialize/index.ts +6 -0
- package/src/serialize/serialize.ts +336 -0
- package/src/serialize/type_registry.ts +75 -0
- package/src/serialize/types.ts +40 -0
- package/src/sleep/index.ts +75 -0
- package/src/string/index.ts +31 -0
- package/src/testing/files/index.ts +69 -0
- package/src/testing/index.ts +3 -0
- package/src/testing/port_allocator.ts +31 -0
- package/src/testing/snapshot_serializer.ts +33 -0
- package/src/testing/test_data.ts +36 -0
- package/src/timer/date.ts +24 -0
- package/src/timer/elapsed.ts +23 -0
- package/src/timer/index.ts +4 -0
- package/src/timer/timeout.ts +70 -0
- package/src/timer/timer.ts +48 -0
- package/src/transport/browser/index.ts +4 -0
- package/src/transport/browser/message_port_socket.ts +48 -0
- package/src/transport/browser/shared_worker_connector.ts +21 -0
- package/src/transport/browser/shared_worker_listener.ts +53 -0
- package/src/transport/browser/worker_connector.ts +30 -0
- package/src/transport/browser/worker_listener.ts +54 -0
- package/src/transport/dispatch/create_dispatch_fn.ts +35 -0
- package/src/transport/dispatch/create_dispatch_proxy.ts +141 -0
- package/src/transport/dispatch/messages.ts +58 -0
- package/src/transport/index.ts +11 -0
- package/src/transport/interface/connector.ts +9 -0
- package/src/transport/interface/listener.ts +16 -0
- package/src/transport/interface/socket.ts +15 -0
- package/src/transport/interface/transferable.ts +125 -0
- package/src/transport/node/index.ts +2 -0
- package/src/transport/node/node_connector.ts +30 -0
- package/src/transport/node/node_connector_socket.ts +52 -0
- package/src/transport/node/node_listener.ts +34 -0
- package/src/transport/node/node_listener_socket.ts +48 -0
- package/src/transport/transport_client.ts +131 -0
- package/src/transport/transport_server.ts +108 -0
- package/src/trees/hasher.ts +39 -0
- package/src/trees/index.ts +10 -0
- package/src/trees/indexed_merkle_tree.ts +36 -0
- package/src/trees/indexed_merkle_tree_calculator.ts +94 -0
- package/src/trees/indexed_tree_leaf.ts +56 -0
- package/src/trees/membership_witness.ts +99 -0
- package/src/trees/merkle_tree.ts +72 -0
- package/src/trees/merkle_tree_calculator.ts +67 -0
- package/src/trees/sibling_path.ts +183 -0
- package/src/trees/unbalanced_merkle_tree.ts +103 -0
- package/src/trees/unbalanced_tree_store.ts +102 -0
- package/src/types/index.ts +25 -0
- package/src/url/index.ts +73 -0
- package/src/validation/index.ts +18 -0
- package/src/wasm/README.md +6 -0
- package/src/wasm/empty_wasi_sdk.ts +166 -0
- package/src/wasm/fixtures/gcd.wasm +0 -0
- package/src/wasm/fixtures/gcd.wat +27 -0
- package/src/wasm/index.ts +1 -0
- package/src/wasm/wasm_module.ts +260 -0
- package/src/worker/browser/index.ts +2 -0
- package/src/worker/browser/start_web_module.ts +24 -0
- package/src/worker/browser/web_data_store.ts +38 -0
- package/src/worker/browser/web_worker.ts +25 -0
- package/src/worker/data_store.ts +19 -0
- package/src/worker/index.ts +2 -0
- package/src/worker/node/index.ts +2 -0
- package/src/worker/node/node_data_store.ts +27 -0
- package/src/worker/node/node_worker.ts +23 -0
- package/src/worker/node/start_node_module.ts +30 -0
- package/src/worker/wasm_worker.ts +7 -0
- package/src/worker/worker_pool.ts +73 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { optional, schemas } from '../../schemas/index.js';
|
|
3
|
+
import { sleep } from '../../sleep/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Contrived example for JSON RPC tests.
|
|
6
|
+
*/ export class TestNote {
|
|
7
|
+
data;
|
|
8
|
+
constructor(data){
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
static get schema() {
|
|
12
|
+
return z.object({
|
|
13
|
+
data: z.string()
|
|
14
|
+
}).transform(({ data })=>new TestNote(data));
|
|
15
|
+
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
return {
|
|
18
|
+
data: this.data
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a string representation of this class.
|
|
23
|
+
* @returns The string representation.
|
|
24
|
+
*/ toString() {
|
|
25
|
+
return this.data;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a string representation of this class.
|
|
29
|
+
* @param data - The data.
|
|
30
|
+
* @returns The string representation.
|
|
31
|
+
*/ static fromString(data) {
|
|
32
|
+
return new TestNote(data);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Represents a simple state management for TestNote instances.
|
|
37
|
+
* Provides functionality to get a note by index and add notes asynchronously.
|
|
38
|
+
* Primarily used for testing JSON RPC-related functionalities.
|
|
39
|
+
*/ export class TestState {
|
|
40
|
+
notes;
|
|
41
|
+
constructor(notes){
|
|
42
|
+
this.notes = notes;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Retrieve the TestNote instance at the specified index from the notes array.
|
|
46
|
+
* This method allows getting a desired TestNote from the collection of notes
|
|
47
|
+
* maintained by the TestState instance using the provided index value.
|
|
48
|
+
*
|
|
49
|
+
* @param index - The index of the TestNote to be retrieved from the notes array.
|
|
50
|
+
* @returns The TestNote instance corresponding to the given index.
|
|
51
|
+
*/ async getNote(index) {
|
|
52
|
+
await sleep(0.1);
|
|
53
|
+
return this.notes[index];
|
|
54
|
+
}
|
|
55
|
+
fail() {
|
|
56
|
+
throw new Error('Test state failed');
|
|
57
|
+
}
|
|
58
|
+
async count() {
|
|
59
|
+
await sleep(0.1);
|
|
60
|
+
return this.notes.length;
|
|
61
|
+
}
|
|
62
|
+
async getNotes(limit) {
|
|
63
|
+
await sleep(0.1);
|
|
64
|
+
return limit ? this.notes.slice(0, limit) : this.notes;
|
|
65
|
+
}
|
|
66
|
+
async getNotes2(limit) {
|
|
67
|
+
await sleep(0.1);
|
|
68
|
+
return limit ? this.notes.slice(0, Number(limit)) : this.notes;
|
|
69
|
+
}
|
|
70
|
+
async getNotes3(limit = 1) {
|
|
71
|
+
await sleep(0.1);
|
|
72
|
+
return limit ? this.notes.slice(0, Number(limit)) : this.notes;
|
|
73
|
+
}
|
|
74
|
+
async clear() {
|
|
75
|
+
await sleep(0.1);
|
|
76
|
+
this.notes = [];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Add an array of TestNote instances to the current TestState's notes.
|
|
80
|
+
* This function simulates asynchronous behavior by waiting for a duration
|
|
81
|
+
* equal to the number of notes being added. It then returns the updated
|
|
82
|
+
* list of TestNote instances in the TestState.
|
|
83
|
+
*
|
|
84
|
+
* @param notes - An array of TestNote instances to be added.
|
|
85
|
+
* @returns A Promise that resolves to an array of TestNote instances, including the newly added notes.
|
|
86
|
+
*/ async addNotes(notes) {
|
|
87
|
+
for (const note of notes){
|
|
88
|
+
this.notes.push(note);
|
|
89
|
+
}
|
|
90
|
+
await sleep(notes.length);
|
|
91
|
+
return this.notes;
|
|
92
|
+
}
|
|
93
|
+
async forceClear() {
|
|
94
|
+
await sleep(0.1);
|
|
95
|
+
this.notes = [];
|
|
96
|
+
}
|
|
97
|
+
async getStatus() {
|
|
98
|
+
await sleep(0.1);
|
|
99
|
+
return {
|
|
100
|
+
status: 'ok',
|
|
101
|
+
count: BigInt(this.notes.length)
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async getTuple() {
|
|
105
|
+
await sleep(0.1);
|
|
106
|
+
return [
|
|
107
|
+
'a',
|
|
108
|
+
undefined,
|
|
109
|
+
1
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export const TestStateSchema = {
|
|
114
|
+
getNote: z.function().args(z.number()).returns(TestNote.schema.optional()),
|
|
115
|
+
getNotes: z.function().args(optional(schemas.Integer)).returns(z.array(TestNote.schema)),
|
|
116
|
+
getNotes2: z.function().args(optional(schemas.BigInt)).returns(z.array(TestNote.schema)),
|
|
117
|
+
getNotes3: z.function().args(optional(schemas.Integer)).returns(z.array(TestNote.schema)),
|
|
118
|
+
clear: z.function().returns(z.void()),
|
|
119
|
+
addNotes: z.function().args(z.array(TestNote.schema)).returns(z.array(TestNote.schema)),
|
|
120
|
+
fail: z.function().returns(z.void()),
|
|
121
|
+
count: z.function().returns(z.number()),
|
|
122
|
+
getStatus: z.function().returns(z.object({
|
|
123
|
+
status: z.string(),
|
|
124
|
+
count: schemas.BigInt
|
|
125
|
+
})),
|
|
126
|
+
getTuple: z.function().returns(z.tuple([
|
|
127
|
+
z.string(),
|
|
128
|
+
optional(z.string()),
|
|
129
|
+
z.number()
|
|
130
|
+
]))
|
|
131
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/json-rpc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { jsonStringify, jsonParseWithSchema, jsonParseWithSchemaSync, tryJsonStringify } from './convert.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Does this own the property?
|
|
3
|
+
* @param obj - An object.
|
|
4
|
+
* @param method - A property name.
|
|
5
|
+
*/
|
|
6
|
+
export declare const hasOwnProperty: (obj: any, propertyName: string) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Helper function to assert a condition is truthy
|
|
9
|
+
* @param x - A boolean condition to assert.
|
|
10
|
+
* @param err - Error message to throw if x isn't met.
|
|
11
|
+
*/
|
|
12
|
+
export declare function assert(x: any, err: string): asserts x;
|
|
13
|
+
//# sourceMappingURL=js_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js_utils.d.ts","sourceRoot":"","sources":["../../src/json-rpc/js_utils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAS,GAAG,gBAAgB,MAAM,YACJ,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAIrD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Make sure this property was not inherited
|
|
2
|
+
// TODO(palla): Delete this file
|
|
3
|
+
/**
|
|
4
|
+
* Does this own the property?
|
|
5
|
+
* @param obj - An object.
|
|
6
|
+
* @param method - A property name.
|
|
7
|
+
*/ export const hasOwnProperty = (obj, propertyName)=>Object.prototype.hasOwnProperty.call(obj, propertyName);
|
|
8
|
+
/**
|
|
9
|
+
* Helper function to assert a condition is truthy
|
|
10
|
+
* @param x - A boolean condition to assert.
|
|
11
|
+
* @param err - Error message to throw if x isn't met.
|
|
12
|
+
*/ export function assert(x, err) {
|
|
13
|
+
if (!x) {
|
|
14
|
+
throw new Error(err);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './safe_json_rpc_server.js';
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import { type default as Application } from 'koa';
|
|
4
|
+
import Router from 'koa-router';
|
|
5
|
+
import { type Logger } from '../../log/index.js';
|
|
6
|
+
import { type ApiSchemaFor } from '../../schemas/index.js';
|
|
7
|
+
export type DiagnosticsData = {
|
|
8
|
+
id: number | string | null;
|
|
9
|
+
method: string;
|
|
10
|
+
params: any[];
|
|
11
|
+
headers: http.IncomingHttpHeaders;
|
|
12
|
+
};
|
|
13
|
+
export type DiagnosticsMiddleware = (ctx: DiagnosticsData, next: () => Promise<void>) => Promise<void>;
|
|
14
|
+
export declare class SafeJsonRpcServer {
|
|
15
|
+
/** The proxy object to delegate requests to. */
|
|
16
|
+
private readonly proxy;
|
|
17
|
+
/**
|
|
18
|
+
* Return an HTTP 200 status code on errors, but include an error object
|
|
19
|
+
* as per the JSON RPC spec
|
|
20
|
+
*/
|
|
21
|
+
private http200OnError;
|
|
22
|
+
/** Health check function */
|
|
23
|
+
private readonly healthCheck;
|
|
24
|
+
/** Additional middlewares */
|
|
25
|
+
private extraMiddlewares;
|
|
26
|
+
/** Logger */
|
|
27
|
+
private log;
|
|
28
|
+
/**
|
|
29
|
+
* The HTTP server accepting remote requests.
|
|
30
|
+
* This member field is initialized when the server is started.
|
|
31
|
+
*/
|
|
32
|
+
private httpServer?;
|
|
33
|
+
constructor(
|
|
34
|
+
/** The proxy object to delegate requests to. */
|
|
35
|
+
proxy: Proxy,
|
|
36
|
+
/**
|
|
37
|
+
* Return an HTTP 200 status code on errors, but include an error object
|
|
38
|
+
* as per the JSON RPC spec
|
|
39
|
+
*/
|
|
40
|
+
http200OnError?: boolean,
|
|
41
|
+
/** Health check function */
|
|
42
|
+
healthCheck?: StatusCheckFn,
|
|
43
|
+
/** Additional middlewares */
|
|
44
|
+
extraMiddlewares?: Application.Middleware[],
|
|
45
|
+
/** Logger */
|
|
46
|
+
log?: Logger);
|
|
47
|
+
isHealthy(): boolean | Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Get an express app object.
|
|
50
|
+
* @param prefix - Our server prefix.
|
|
51
|
+
* @returns The app object.
|
|
52
|
+
*/
|
|
53
|
+
getApp(prefix?: string): Application<Application.DefaultState, Application.DefaultContext>;
|
|
54
|
+
/**
|
|
55
|
+
* Get a router object wrapping our RPC class.
|
|
56
|
+
* @param prefix - The server prefix.
|
|
57
|
+
* @returns The router object.
|
|
58
|
+
*/
|
|
59
|
+
private getRouter;
|
|
60
|
+
/**
|
|
61
|
+
* Start this server with koa.
|
|
62
|
+
* @param port - Port number.
|
|
63
|
+
* @param prefix - Prefix string.
|
|
64
|
+
*/
|
|
65
|
+
start(port: number, prefix?: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Stops the HTTP server
|
|
68
|
+
*/
|
|
69
|
+
stop(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Explicitly calls an RPC method.
|
|
72
|
+
* @param methodName - The RPC method.
|
|
73
|
+
* @param jsonParams - The RPC parameters.
|
|
74
|
+
* @returns The remote result.
|
|
75
|
+
*/
|
|
76
|
+
call(methodName: string, jsonParams?: any[]): Promise<any>;
|
|
77
|
+
}
|
|
78
|
+
export type StatusCheckFn = () => boolean | Promise<boolean>;
|
|
79
|
+
interface Proxy {
|
|
80
|
+
hasMethod(methodName: string): boolean;
|
|
81
|
+
call(methodName: string, jsonParams?: any[]): Promise<any>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Forwards calls to a handler. Relies on a schema definition to validate and convert inputs
|
|
85
|
+
* before forwarding calls, and then converts outputs into JSON using default conversions.
|
|
86
|
+
*/
|
|
87
|
+
export declare class SafeJsonProxy<T extends object = any> implements Proxy {
|
|
88
|
+
private handler;
|
|
89
|
+
private log;
|
|
90
|
+
private schema;
|
|
91
|
+
constructor(handler: T, schema: ApiSchemaFor<T>);
|
|
92
|
+
/**
|
|
93
|
+
* Call an RPC method.
|
|
94
|
+
* @param methodName - The RPC method.
|
|
95
|
+
* @param jsonParams - The RPC parameters.
|
|
96
|
+
* @returns The remote result.
|
|
97
|
+
*/
|
|
98
|
+
call(methodName: string, jsonParams?: any[]): Promise<any>;
|
|
99
|
+
hasMethod(methodName: string): boolean;
|
|
100
|
+
}
|
|
101
|
+
export type NamespacedApiHandlers = Record<string, ApiHandler>;
|
|
102
|
+
export type ApiHandler<T extends object = any> = [T, ApiSchemaFor<T>, StatusCheckFn?];
|
|
103
|
+
export declare function makeHandler<T extends object>(handler: T, schema: ApiSchemaFor<T>): ApiHandler<T>;
|
|
104
|
+
export type SafeJsonRpcServerOptions = {
|
|
105
|
+
http200OnError: boolean;
|
|
106
|
+
healthCheck?: StatusCheckFn;
|
|
107
|
+
log?: Logger;
|
|
108
|
+
middlewares?: Application.Middleware[];
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Creates a single SafeJsonRpcServer from multiple handlers.
|
|
112
|
+
* @param servers - List of handlers to be combined.
|
|
113
|
+
* @returns A single JsonRpcServer with namespaced methods.
|
|
114
|
+
*/
|
|
115
|
+
export declare function createNamespacedSafeJsonRpcServer(handlers: NamespacedApiHandlers, options?: Partial<Omit<SafeJsonRpcServerOptions, 'healthcheck'>>): SafeJsonRpcServer;
|
|
116
|
+
export declare function createSafeJsonRpcServer<T extends object = any>(handler: T, schema: ApiSchemaFor<T>, options?: Partial<SafeJsonRpcServerOptions>): SafeJsonRpcServer;
|
|
117
|
+
/**
|
|
118
|
+
* Creates a router for handling a plain status request that will return 200 status when running.
|
|
119
|
+
* @param getCurrentStatus - List of health check functions to run.
|
|
120
|
+
* @param apiPrefix - The prefix to use for all api requests
|
|
121
|
+
* @returns - The router for handling status requests.
|
|
122
|
+
*/
|
|
123
|
+
export declare function createStatusRouter(getCurrentStatus: StatusCheckFn, apiPrefix?: string): Router<any, {}>;
|
|
124
|
+
/**
|
|
125
|
+
* Wraps a JsonRpcServer in a nodejs http server and starts it.
|
|
126
|
+
* Installs a status router that calls to the isHealthy method to the server.
|
|
127
|
+
* Returns once starts listening unless noWait is set.
|
|
128
|
+
* @returns A running http server.
|
|
129
|
+
*/
|
|
130
|
+
export declare function startHttpRpcServer(rpcServer: Pick<SafeJsonRpcServer, 'getApp' | 'isHealthy'>, options?: {
|
|
131
|
+
host?: string;
|
|
132
|
+
port?: number | string;
|
|
133
|
+
apiPrefix?: string;
|
|
134
|
+
timeoutMs?: number;
|
|
135
|
+
noWait?: boolean;
|
|
136
|
+
}): Promise<http.Server & {
|
|
137
|
+
port: number;
|
|
138
|
+
}>;
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=safe_json_rpc_server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe_json_rpc_server.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/server/safe_json_rpc_server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import cors from '@koa/cors';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import { default as Koa } from 'koa';
|
|
4
|
+
import bodyParser from 'koa-bodyparser';
|
|
5
|
+
import compress from 'koa-compress';
|
|
6
|
+
import Router from 'koa-router';
|
|
7
|
+
import { format, inspect } from 'util';
|
|
8
|
+
import { ZodError } from 'zod';
|
|
9
|
+
import { createLogger } from '../../log/index.js';
|
|
10
|
+
import { promiseWithResolvers } from '../../promise/utils.js';
|
|
11
|
+
import { parseWithOptionals, schemaHasMethod } from '../../schemas/index.js';
|
|
12
|
+
import { jsonStringify } from '../convert.js';
|
|
13
|
+
import { assert } from '../js_utils.js';
|
|
14
|
+
export class SafeJsonRpcServer {
|
|
15
|
+
proxy;
|
|
16
|
+
http200OnError;
|
|
17
|
+
healthCheck;
|
|
18
|
+
extraMiddlewares;
|
|
19
|
+
log;
|
|
20
|
+
/**
|
|
21
|
+
* The HTTP server accepting remote requests.
|
|
22
|
+
* This member field is initialized when the server is started.
|
|
23
|
+
*/ httpServer;
|
|
24
|
+
constructor(/** The proxy object to delegate requests to. */ proxy, /**
|
|
25
|
+
* Return an HTTP 200 status code on errors, but include an error object
|
|
26
|
+
* as per the JSON RPC spec
|
|
27
|
+
*/ http200OnError = false, /** Health check function */ healthCheck = ()=>true, /** Additional middlewares */ extraMiddlewares = [], /** Logger */ log = createLogger('json-rpc:server')){
|
|
28
|
+
this.proxy = proxy;
|
|
29
|
+
this.http200OnError = http200OnError;
|
|
30
|
+
this.healthCheck = healthCheck;
|
|
31
|
+
this.extraMiddlewares = extraMiddlewares;
|
|
32
|
+
this.log = log;
|
|
33
|
+
}
|
|
34
|
+
isHealthy() {
|
|
35
|
+
return this.healthCheck();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get an express app object.
|
|
39
|
+
* @param prefix - Our server prefix.
|
|
40
|
+
* @returns The app object.
|
|
41
|
+
*/ getApp(prefix = '') {
|
|
42
|
+
const router = this.getRouter(prefix);
|
|
43
|
+
const exceptionHandler = async (ctx, next)=>{
|
|
44
|
+
try {
|
|
45
|
+
await next();
|
|
46
|
+
} catch (err) {
|
|
47
|
+
const method = ctx.request.body?.method ?? 'unknown';
|
|
48
|
+
this.log.warn(`Error in JSON RPC server call ${method}: ${inspect(err)}`);
|
|
49
|
+
if (err instanceof SyntaxError) {
|
|
50
|
+
ctx.status = 400;
|
|
51
|
+
ctx.body = {
|
|
52
|
+
jsonrpc: '2.0',
|
|
53
|
+
id: null,
|
|
54
|
+
error: {
|
|
55
|
+
code: -32700,
|
|
56
|
+
message: `Parse error: ${err.message}`
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
} else if (err instanceof ZodError) {
|
|
60
|
+
const message = err.issues.map((e)=>`${e.message} (${e.path.join('.')})`).join('. ') || 'Validation error';
|
|
61
|
+
ctx.status = 400;
|
|
62
|
+
ctx.body = {
|
|
63
|
+
jsonrpc: '2.0',
|
|
64
|
+
id: null,
|
|
65
|
+
error: {
|
|
66
|
+
code: -32701,
|
|
67
|
+
message
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
} else if (this.http200OnError) {
|
|
71
|
+
ctx.body = {
|
|
72
|
+
jsonrpc: '2.0',
|
|
73
|
+
id: null,
|
|
74
|
+
error: {
|
|
75
|
+
code: err.code || -32600,
|
|
76
|
+
data: err.data,
|
|
77
|
+
message: err.message
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
} else {
|
|
81
|
+
ctx.status = 500;
|
|
82
|
+
ctx.body = {
|
|
83
|
+
jsonrpc: '2.0',
|
|
84
|
+
id: null,
|
|
85
|
+
error: {
|
|
86
|
+
code: -32600,
|
|
87
|
+
message: err.message ?? 'Internal error'
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const jsonResponse = async (ctx, next)=>{
|
|
94
|
+
try {
|
|
95
|
+
await next();
|
|
96
|
+
if (ctx.body && typeof ctx.body === 'object') {
|
|
97
|
+
ctx.body = jsonStringify(ctx.body);
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
ctx.status = 500;
|
|
101
|
+
ctx.body = {
|
|
102
|
+
jsonrpc: '2.0',
|
|
103
|
+
error: {
|
|
104
|
+
code: -32700,
|
|
105
|
+
message: `Unable to serialize response: ${err.message}`
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const app = new Koa();
|
|
111
|
+
app.on('error', (error)=>{
|
|
112
|
+
this.log.error(`Error on API handler: ${error}`);
|
|
113
|
+
});
|
|
114
|
+
app.use(compress({
|
|
115
|
+
br: false
|
|
116
|
+
}));
|
|
117
|
+
app.use(jsonResponse);
|
|
118
|
+
for (const middleware of this.extraMiddlewares){
|
|
119
|
+
app.use(middleware);
|
|
120
|
+
}
|
|
121
|
+
app.use(exceptionHandler);
|
|
122
|
+
app.use(bodyParser({
|
|
123
|
+
jsonLimit: '50mb',
|
|
124
|
+
enableTypes: [
|
|
125
|
+
'json'
|
|
126
|
+
],
|
|
127
|
+
detectJSON: ()=>true
|
|
128
|
+
}));
|
|
129
|
+
app.use(cors());
|
|
130
|
+
app.use(router.routes());
|
|
131
|
+
app.use(router.allowedMethods());
|
|
132
|
+
return app;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get a router object wrapping our RPC class.
|
|
136
|
+
* @param prefix - The server prefix.
|
|
137
|
+
* @returns The router object.
|
|
138
|
+
*/ getRouter(prefix) {
|
|
139
|
+
const router = new Router({
|
|
140
|
+
prefix
|
|
141
|
+
});
|
|
142
|
+
// "JSON RPC mode" where a single endpoint is used and the method is given in the request body
|
|
143
|
+
router.post('/', async (ctx)=>{
|
|
144
|
+
const { params = [], jsonrpc, id, method } = ctx.request.body;
|
|
145
|
+
// Fail if not a registered function in the proxy
|
|
146
|
+
if (typeof method !== 'string' || method === 'constructor' || !this.proxy.hasMethod(method)) {
|
|
147
|
+
ctx.status = 400;
|
|
148
|
+
const code = -32601;
|
|
149
|
+
const message = `Method not found: ${method}`;
|
|
150
|
+
ctx.body = {
|
|
151
|
+
jsonrpc,
|
|
152
|
+
id,
|
|
153
|
+
error: {
|
|
154
|
+
code,
|
|
155
|
+
message
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
} else {
|
|
159
|
+
ctx.status = 200;
|
|
160
|
+
const result = await this.proxy.call(method, params);
|
|
161
|
+
ctx.body = {
|
|
162
|
+
jsonrpc,
|
|
163
|
+
id,
|
|
164
|
+
result
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
return router;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Start this server with koa.
|
|
172
|
+
* @param port - Port number.
|
|
173
|
+
* @param prefix - Prefix string.
|
|
174
|
+
*/ start(port, prefix = '') {
|
|
175
|
+
if (this.httpServer) {
|
|
176
|
+
throw new Error('Server is already listening');
|
|
177
|
+
}
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
179
|
+
this.httpServer = http.createServer(this.getApp(prefix).callback());
|
|
180
|
+
this.httpServer.listen(port);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Stops the HTTP server
|
|
184
|
+
*/ stop() {
|
|
185
|
+
if (!this.httpServer) {
|
|
186
|
+
return Promise.resolve();
|
|
187
|
+
}
|
|
188
|
+
const { promise, resolve, reject } = promiseWithResolvers();
|
|
189
|
+
this.httpServer.close((err)=>{
|
|
190
|
+
if (err) {
|
|
191
|
+
reject(err);
|
|
192
|
+
} else {
|
|
193
|
+
resolve();
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
return promise;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Explicitly calls an RPC method.
|
|
200
|
+
* @param methodName - The RPC method.
|
|
201
|
+
* @param jsonParams - The RPC parameters.
|
|
202
|
+
* @returns The remote result.
|
|
203
|
+
*/ async call(methodName, jsonParams = []) {
|
|
204
|
+
return await this.proxy.call(methodName, jsonParams);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Forwards calls to a handler. Relies on a schema definition to validate and convert inputs
|
|
209
|
+
* before forwarding calls, and then converts outputs into JSON using default conversions.
|
|
210
|
+
*/ export class SafeJsonProxy {
|
|
211
|
+
handler;
|
|
212
|
+
log;
|
|
213
|
+
schema;
|
|
214
|
+
constructor(handler, schema){
|
|
215
|
+
this.handler = handler;
|
|
216
|
+
this.log = createLogger('json-rpc:proxy');
|
|
217
|
+
this.schema = schema;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Call an RPC method.
|
|
221
|
+
* @param methodName - The RPC method.
|
|
222
|
+
* @param jsonParams - The RPC parameters.
|
|
223
|
+
* @returns The remote result.
|
|
224
|
+
*/ async call(methodName, jsonParams = []) {
|
|
225
|
+
this.log.debug(format(`request`, methodName, jsonParams));
|
|
226
|
+
assert(Array.isArray(jsonParams), `Params to ${methodName} is not an array: ${jsonParams}`);
|
|
227
|
+
assert(schemaHasMethod(this.schema, methodName), `Method ${methodName} not found in schema`);
|
|
228
|
+
const method = this.handler[methodName];
|
|
229
|
+
assert(typeof method === 'function', `Method ${methodName} is not a function`);
|
|
230
|
+
const args = await parseWithOptionals(jsonParams, this.schema[methodName].parameters());
|
|
231
|
+
const ret = await method.apply(this.handler, args);
|
|
232
|
+
this.log.debug(format('response', methodName, ret));
|
|
233
|
+
return ret;
|
|
234
|
+
}
|
|
235
|
+
hasMethod(methodName) {
|
|
236
|
+
return schemaHasMethod(this.schema, methodName) && typeof this.handler[methodName] === 'function';
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
class NamespacedSafeJsonProxy {
|
|
240
|
+
proxies = {};
|
|
241
|
+
constructor(handlers){
|
|
242
|
+
for (const [namespace, [handler, schema]] of Object.entries(handlers)){
|
|
243
|
+
this.proxies[namespace] = new SafeJsonProxy(handler, schema);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
call(namespacedMethodName, jsonParams = []) {
|
|
247
|
+
const [namespace, methodName] = namespacedMethodName.split('_', 2);
|
|
248
|
+
assert(namespace && methodName, `Invalid namespaced method name: ${namespacedMethodName}`);
|
|
249
|
+
const handler = this.proxies[namespace];
|
|
250
|
+
assert(handler, `Namespace not found: ${namespace}`);
|
|
251
|
+
return handler.call(methodName, jsonParams);
|
|
252
|
+
}
|
|
253
|
+
hasMethod(namespacedMethodName) {
|
|
254
|
+
const [namespace, methodName] = namespacedMethodName.split('_', 2);
|
|
255
|
+
const handler = this.proxies[namespace];
|
|
256
|
+
return handler?.hasMethod(methodName);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
export function makeHandler(handler, schema) {
|
|
260
|
+
return [
|
|
261
|
+
handler,
|
|
262
|
+
schema
|
|
263
|
+
];
|
|
264
|
+
}
|
|
265
|
+
function makeAggregateHealthcheck(namedHandlers, log) {
|
|
266
|
+
return async ()=>{
|
|
267
|
+
try {
|
|
268
|
+
const results = await Promise.all(Object.entries(namedHandlers).map(([name, [, , healthCheck]])=>[
|
|
269
|
+
name,
|
|
270
|
+
healthCheck ? healthCheck() : true
|
|
271
|
+
]));
|
|
272
|
+
const failed = results.filter(([_, result])=>!result);
|
|
273
|
+
if (failed.length > 0) {
|
|
274
|
+
log?.warn(`Health check failed for ${failed.map(([name])=>name).join(', ')}`);
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
} catch (err) {
|
|
279
|
+
log?.error(`Error during health check`, err);
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Creates a single SafeJsonRpcServer from multiple handlers.
|
|
286
|
+
* @param servers - List of handlers to be combined.
|
|
287
|
+
* @returns A single JsonRpcServer with namespaced methods.
|
|
288
|
+
*/ export function createNamespacedSafeJsonRpcServer(handlers, options = {
|
|
289
|
+
log: createLogger('json-rpc:server')
|
|
290
|
+
}) {
|
|
291
|
+
const { middlewares, http200OnError, log } = options;
|
|
292
|
+
const proxy = new NamespacedSafeJsonProxy(handlers);
|
|
293
|
+
const healthCheck = makeAggregateHealthcheck(handlers, log);
|
|
294
|
+
return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, middlewares, log);
|
|
295
|
+
}
|
|
296
|
+
export function createSafeJsonRpcServer(handler, schema, options = {}) {
|
|
297
|
+
const { http200OnError, log, healthCheck, middlewares: extraMiddlewares } = options;
|
|
298
|
+
const proxy = new SafeJsonProxy(handler, schema);
|
|
299
|
+
return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, extraMiddlewares, log);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Creates a router for handling a plain status request that will return 200 status when running.
|
|
303
|
+
* @param getCurrentStatus - List of health check functions to run.
|
|
304
|
+
* @param apiPrefix - The prefix to use for all api requests
|
|
305
|
+
* @returns - The router for handling status requests.
|
|
306
|
+
*/ export function createStatusRouter(getCurrentStatus, apiPrefix = '') {
|
|
307
|
+
const router = new Router({
|
|
308
|
+
prefix: `${apiPrefix}`
|
|
309
|
+
});
|
|
310
|
+
router.get('/status', async (ctx)=>{
|
|
311
|
+
let ok;
|
|
312
|
+
try {
|
|
313
|
+
ok = await getCurrentStatus() === true;
|
|
314
|
+
} catch (err) {
|
|
315
|
+
ok = false;
|
|
316
|
+
}
|
|
317
|
+
ctx.status = ok ? 200 : 500;
|
|
318
|
+
});
|
|
319
|
+
return router;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Wraps a JsonRpcServer in a nodejs http server and starts it.
|
|
323
|
+
* Installs a status router that calls to the isHealthy method to the server.
|
|
324
|
+
* Returns once starts listening unless noWait is set.
|
|
325
|
+
* @returns A running http server.
|
|
326
|
+
*/ export async function startHttpRpcServer(rpcServer, options = {}) {
|
|
327
|
+
const app = rpcServer.getApp(options.apiPrefix);
|
|
328
|
+
const statusRouter = createStatusRouter(rpcServer.isHealthy.bind(rpcServer), options.apiPrefix);
|
|
329
|
+
app.use(statusRouter.routes()).use(statusRouter.allowedMethods());
|
|
330
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
331
|
+
const httpServer = http.createServer(app.callback());
|
|
332
|
+
if (options.timeoutMs) {
|
|
333
|
+
httpServer.timeout = options.timeoutMs;
|
|
334
|
+
}
|
|
335
|
+
const { promise, resolve } = promiseWithResolvers();
|
|
336
|
+
const listenPort = options.port ? typeof options.port === 'string' ? parseInt(options.port) : options.port : 0;
|
|
337
|
+
httpServer.listen(listenPort, options.host, ()=>resolve());
|
|
338
|
+
// Wait until listen callback is called
|
|
339
|
+
if (!options.noWait) {
|
|
340
|
+
await promise;
|
|
341
|
+
}
|
|
342
|
+
const port = httpServer.address().port;
|
|
343
|
+
return Object.assign(httpServer, {
|
|
344
|
+
port
|
|
345
|
+
});
|
|
346
|
+
}
|