@aztec/foundation 0.76.1 → 0.76.3
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/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/json-rpc/client/fetch.d.ts +6 -0
- package/dest/json-rpc/client/fetch.d.ts.map +1 -1
- package/dest/json-rpc/client/fetch.js +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +2 -2
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +1 -1
- 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 +64 -0
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +7 -6
- 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 +98 -0
- package/dest/queue/index.d.ts +1 -0
- package/dest/queue/index.d.ts.map +1 -1
- package/dest/queue/index.js +2 -1
- package/package.json +5 -3
- package/src/config/env_var.ts +6 -5
- package/src/json-rpc/client/fetch.ts +9 -0
- package/src/json-rpc/client/safe_json_rpc_client.ts +2 -2
- package/src/json-rpc/client/undici.ts +75 -0
- package/src/log/pino-logger.ts +6 -5
- package/src/queue/batch_queue.ts +120 -0
- package/src/queue/index.ts +1 -0
package/dest/config/env_var.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type EnvVar = 'ACVM_BINARY_PATH' | 'ACVM_WORKING_DIRECTORY' | 'GOVERNANCE_CONTRACT_ADDRESS' | 'API_KEY' | 'API_PREFIX' | 'ARCHIVER_MAX_LOGS' | 'ARCHIVER_POLLING_INTERVAL_MS' | 'ARCHIVER_URL' | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS' | 'ARCHIVER_BATCH_SIZE' | 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER' | 'AZTEC_NODE_URL' | 'AZTEC_PORT' | 'BB_BINARY_PATH' | 'BB_SKIP_CLEANUP' | 'BB_WORKING_DIRECTORY' | 'BOOTSTRAP_NODES' | 'BLOB_SINK_PORT' | 'BLOB_SINK_URL' | 'BOT_DA_GAS_LIMIT' | 'BOT_FEE_PAYMENT_METHOD' | 'BOT_FLUSH_SETUP_TRANSACTIONS' | 'BOT_FOLLOW_CHAIN' | 'BOT_L2_GAS_LIMIT' | 'BOT_MAX_PENDING_TXS' | 'BOT_NO_START' | 'BOT_NO_WAIT_FOR_TRANSFERS' | 'BOT_PRIVATE_KEY' | 'BOT_PRIVATE_TRANSFERS_PER_TX' | 'BOT_PUBLIC_TRANSFERS_PER_TX' | 'BOT_PXE_URL' | 'BOT_RECIPIENT_ENCRYPTION_SECRET' | 'BOT_SKIP_PUBLIC_SIMULATION' | 'BOT_TOKEN_CONTRACT' | 'BOT_TOKEN_SALT' | 'BOT_TX_INTERVAL_SECONDS' | 'BOT_TX_MINED_WAIT_SECONDS' | 'BOT_MAX_CONSECUTIVE_ERRORS' | 'BOT_STOP_WHEN_UNHEALTHY' | 'COINBASE' | 'DATA_DIRECTORY' | 'DATA_STORE_MAP_SIZE_KB' | 'DEBUG' | 'DEBUG_P2P_DISABLE_MESSAGE_VALIDATION' | 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY' | 'DEPLOY_AZTEC_CONTRACTS_SALT' | 'DEPLOY_AZTEC_CONTRACTS' | 'ENFORCE_FEES' | 'ETHEREUM_HOST' | 'FEE_JUICE_CONTRACT_ADDRESS' | 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS' | 'FEE_RECIPIENT' | 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS' | 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS' | 'INBOX_CONTRACT_ADDRESS' | 'L1_CHAIN_ID' | 'L1_CONSENSUS_HOST_URL' | 'L1_CONSENSUS_HOST_API_KEY' | 'L1_CONSENSUS_HOST_API_KEY_HEADER' | 'L1_PRIVATE_KEY' | 'L2_QUEUE_SIZE' | 'LOG_ELAPSED_TIME' | 'LOG_JSON' | 'LOG_MULTILINE' | 'LOG_LEVEL' | 'MNEMONIC' | 'NETWORK_NAME' | 'NETWORK' | 'NO_PXE' | 'COIN_ISSUER_CONTRACT_ADDRESS' | '
|
|
1
|
+
export type EnvVar = 'ACVM_BINARY_PATH' | 'ACVM_WORKING_DIRECTORY' | 'GOVERNANCE_CONTRACT_ADDRESS' | 'API_KEY' | 'API_PREFIX' | 'ARCHIVER_MAX_LOGS' | 'ARCHIVER_POLLING_INTERVAL_MS' | 'ARCHIVER_URL' | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS' | 'ARCHIVER_BATCH_SIZE' | 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER' | 'AZTEC_NODE_URL' | 'AZTEC_PORT' | 'BB_BINARY_PATH' | 'BB_SKIP_CLEANUP' | 'BB_WORKING_DIRECTORY' | 'BOOTSTRAP_NODES' | 'BLOB_SINK_PORT' | 'BLOB_SINK_URL' | 'BOT_DA_GAS_LIMIT' | 'BOT_FEE_PAYMENT_METHOD' | 'BOT_FLUSH_SETUP_TRANSACTIONS' | 'BOT_FOLLOW_CHAIN' | 'BOT_L2_GAS_LIMIT' | 'BOT_MAX_PENDING_TXS' | 'BOT_NO_START' | 'BOT_NO_WAIT_FOR_TRANSFERS' | 'BOT_PRIVATE_KEY' | 'BOT_PRIVATE_TRANSFERS_PER_TX' | 'BOT_PUBLIC_TRANSFERS_PER_TX' | 'BOT_PXE_URL' | 'BOT_RECIPIENT_ENCRYPTION_SECRET' | 'BOT_SKIP_PUBLIC_SIMULATION' | 'BOT_TOKEN_CONTRACT' | 'BOT_TOKEN_SALT' | 'BOT_TX_INTERVAL_SECONDS' | 'BOT_TX_MINED_WAIT_SECONDS' | 'BOT_MAX_CONSECUTIVE_ERRORS' | 'BOT_STOP_WHEN_UNHEALTHY' | 'COINBASE' | 'DATA_DIRECTORY' | 'DATA_STORE_MAP_SIZE_KB' | 'DEBUG' | 'DEBUG_P2P_DISABLE_MESSAGE_VALIDATION' | 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY' | 'DEPLOY_AZTEC_CONTRACTS_SALT' | 'DEPLOY_AZTEC_CONTRACTS' | 'ENFORCE_FEES' | 'ETHEREUM_HOST' | 'FEE_JUICE_CONTRACT_ADDRESS' | 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS' | 'FEE_RECIPIENT' | 'FORCE_COLOR' | 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS' | 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS' | 'INBOX_CONTRACT_ADDRESS' | 'L1_CHAIN_ID' | 'L1_CONSENSUS_HOST_URL' | 'L1_CONSENSUS_HOST_API_KEY' | 'L1_CONSENSUS_HOST_API_KEY_HEADER' | 'L1_PRIVATE_KEY' | 'L2_QUEUE_SIZE' | 'LOG_ELAPSED_TIME' | 'LOG_JSON' | 'LOG_MULTILINE' | 'LOG_LEVEL' | 'MNEMONIC' | 'NETWORK_NAME' | 'NETWORK' | 'NO_PXE' | 'COIN_ISSUER_CONTRACT_ADDRESS' | 'USE_GCLOUD_LOGGING' | 'USE_GCLOUD_METRICS' | 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT' | 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' | 'OTEL_EXPORTER_OTLP_LOGS_ENDPOINT' | 'OTEL_SERVICE_NAME' | 'OTEL_COLLECT_INTERVAL_MS' | 'OTEL_EXCLUDE_METRICS' | 'OTEL_EXPORT_TIMEOUT_MS' | 'OUTBOX_CONTRACT_ADDRESS' | 'P2P_BLOCK_CHECK_INTERVAL_MS' | 'P2P_BLOCK_REQUEST_BATCH_SIZE' | 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK' | 'P2P_ENABLED' | 'P2P_GOSSIPSUB_D' | 'P2P_GOSSIPSUB_DHI' | 'P2P_GOSSIPSUB_DLO' | 'P2P_GOSSIPSUB_DLAZY' | 'P2P_GOSSIPSUB_FLOOD_PUBLISH' | 'P2P_GOSSIPSUB_INTERVAL_MS' | 'P2P_GOSSIPSUB_MCACHE_GOSSIP' | 'P2P_GOSSIPSUB_MCACHE_LENGTH' | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY' | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT' | 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT' | 'P2P_L2_QUEUE_SIZE' | 'P2P_MAX_PEERS' | 'P2P_PEER_CHECK_INTERVAL_MS' | 'P2P_PEER_PENALTY_VALUES' | 'P2P_QUERY_FOR_IP' | 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS' | 'P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS' | 'P2P_SEVERE_PEER_PENALTY_BLOCK_LENGTH' | 'P2P_TCP_LISTEN_ADDR' | 'P2P_TCP_ANNOUNCE_ADDR' | 'P2P_TX_POOL_KEEP_PROVEN_FOR' | 'P2P_ATTESTATION_POOL_KEEP_FOR' | 'P2P_TX_PROTOCOL' | 'P2P_UDP_ANNOUNCE_ADDR' | 'P2P_UDP_LISTEN_ADDR' | 'P2P_ARCHIVED_TX_LIMIT' | 'PEER_ID_PRIVATE_KEY' | 'PROOF_VERIFIER_L1_START_BLOCK' | 'PROOF_VERIFIER_POLL_INTERVAL_MS' | 'PROVER_AGENT_ENABLED' | 'PROVER_AGENT_CONCURRENCY' | 'PROVER_AGENT_COUNT' | 'PROVER_AGENT_PROOF_TYPES' | 'PROVER_AGENT_POLL_INTERVAL_MS' | 'PROVER_BROKER_HOST' | 'PROVER_BROKER_ENABLED' | 'PROVER_BROKER_JOB_TIMEOUT_MS' | 'PROVER_BROKER_POLL_INTERVAL_MS' | 'PROVER_BROKER_JOB_MAX_RETRIES' | 'PROVER_BROKER_BATCH_INTERVAL_MS' | 'PROVER_BROKER_BATCH_SIZE' | 'PROVER_COORDINATION_NODE_URL' | 'PROVER_DISABLED' | 'PROVER_FAILED_PROOF_STORE' | 'PROVER_ID' | 'PROVER_JOB_POLL_INTERVAL_MS' | 'PROVER_JOB_TIMEOUT_MS' | 'PROVER_NODE_POLLING_INTERVAL_MS' | 'PROVER_NODE_MAX_PENDING_JOBS' | 'PROVER_NODE_MAX_PARALLEL_BLOCKS_PER_EPOCH' | 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS' | 'PROVER_NODE_TX_GATHERING_INTERVAL_MS' | 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS' | 'PROVER_PUBLISH_RETRY_INTERVAL_MS' | 'PROVER_PUBLISHER_PRIVATE_KEY' | 'PROVER_REAL_PROOFS' | 'PROVER_REQUIRED_CONFIRMATIONS' | 'PROVER_TEST_DELAY_MS' | 'PXE_L2_STARTING_BLOCK' | 'PXE_PROVER_ENABLED' | 'PROVER_TARGET_ESCROW_AMOUNT' | 'PROVER_MINIMUM_ESCROW_AMOUNT' | 'REGISTRY_CONTRACT_ADDRESS' | 'ROLLUP_CONTRACT_ADDRESS' | 'SEQ_ALLOWED_SETUP_FN' | 'SEQ_MAX_BLOCK_SIZE_IN_BYTES' | 'SEQ_MAX_TX_PER_BLOCK' | 'SEQ_MIN_TX_PER_BLOCK' | 'SEQ_MAX_DA_BLOCK_GAS' | 'SEQ_MAX_L2_BLOCK_GAS' | 'SEQ_PUBLISH_RETRY_INTERVAL_MS' | 'SEQ_PUBLISHER_PRIVATE_KEY' | 'SEQ_REQUIRED_CONFIRMATIONS' | 'SEQ_TX_POLLING_INTERVAL_MS' | 'SEQ_ENFORCE_TIME_TABLE' | 'SEQ_MAX_L1_TX_INCLUSION_TIME_INTO_SLOT' | 'SLASH_FACTORY_CONTRACT_ADDRESS' | 'STAKING_ASSET_CONTRACT_ADDRESS' | 'REWARD_DISTRIBUTOR_CONTRACT_ADDRESS' | 'TELEMETRY' | 'TEST_ACCOUNTS' | 'TX_GOSSIP_VERSION' | 'TXE_PORT' | 'VALIDATOR_ATTESTATIONS_POLLING_INTERVAL_MS' | 'VALIDATOR_DISABLED' | 'VALIDATOR_PRIVATE_KEY' | 'VALIDATOR_REEXECUTE' | 'VERSION' | 'WS_BLOCK_CHECK_INTERVAL_MS' | 'WS_PROVEN_BLOCKS_ONLY' | 'WS_BLOCK_REQUEST_BATCH_SIZE' | 'VERIFIER_VIEM_POLLING_INTERVAL_MS' | 'L1_READER_VIEM_POLLING_INTERVAL_MS' | 'PROVER_VIEM_POLLING_INTERVAL_MS' | 'SEQ_VIEM_POLLING_INTERVAL_MS' | 'WS_DB_MAP_SIZE_KB' | 'WS_DATA_DIRECTORY' | 'WS_NUM_HISTORIC_BLOCKS' | 'ETHEREUM_SLOT_DURATION' | 'AZTEC_SLOT_DURATION' | 'AZTEC_EPOCH_DURATION' | 'AZTEC_TARGET_COMMITTEE_SIZE' | 'AZTEC_PROOF_SUBMISSION_WINDOW' | 'AZTEC_MINIMUM_STAKE' | 'AZTEC_SLASHING_QUORUM' | 'AZTEC_SLASHING_ROUND_SIZE' | 'AZTEC_GOVERNANCE_PROPOSER_QUORUM' | 'AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE' | 'L1_GAS_LIMIT_BUFFER_PERCENTAGE' | 'L1_GAS_LIMIT_BUFFER_FIXED' | 'L1_GAS_PRICE_MIN' | 'L1_GAS_PRICE_MAX' | 'L1_BLOB_FEE_PER_GAS_MAX' | 'L1_PRIORITY_FEE_BUMP_PERCENTAGE' | 'L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE' | 'L1_FIXED_PRIORITY_FEE_PER_GAS' | 'L1_TX_MONITOR_MAX_ATTEMPTS' | 'L1_TX_MONITOR_CHECK_INTERVAL_MS' | 'L1_TX_MONITOR_STALL_TIME_MS' | 'L1_TX_MONITOR_TX_TIMEOUT_MS' | 'L1_TX_PROPAGATION_MAX_QUERY_ATTEMPTS' | 'FAUCET_MNEMONIC_ACCOUNT_INDEX' | 'FAUCET_ETH_AMOUNT' | 'FAUCET_INTERVAL_MS' | 'FAUCET_L1_ASSETS' | 'K8S_POD_NAME' | 'K8S_POD_UID' | 'K8S_NAMESPACE_NAME' | 'CUSTOM_FORWARDER_CONTRACT_ADDRESS';
|
|
2
2
|
//# sourceMappingURL=env_var.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env_var.d.ts","sourceRoot":"","sources":["../../src/config/env_var.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,kBAAkB,GAClB,wBAAwB,GACxB,6BAA6B,GAC7B,SAAS,GACT,YAAY,GACZ,mBAAmB,GACnB,8BAA8B,GAC9B,cAAc,GACd,mCAAmC,GACnC,qBAAqB,GACrB,oCAAoC,GACpC,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,GACjB,sBAAsB,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,wBAAwB,GACxB,8BAA8B,GAC9B,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,cAAc,GACd,2BAA2B,GAC3B,iBAAiB,GACjB,8BAA8B,GAC9B,6BAA6B,GAC7B,aAAa,GACb,iCAAiC,GACjC,4BAA4B,GAC5B,oBAAoB,GACpB,gBAAgB,GAChB,yBAAyB,GACzB,2BAA2B,GAC3B,4BAA4B,GAC5B,yBAAyB,GACzB,UAAU,GACV,gBAAgB,GAChB,wBAAwB,GACxB,OAAO,GACP,sCAAsC,GACtC,sCAAsC,GACtC,6BAA6B,GAC7B,wBAAwB,GACxB,cAAc,GACd,eAAe,GACf,4BAA4B,GAC5B,mCAAmC,GACnC,eAAe,GACf,sCAAsC,GACtC,qCAAqC,GACrC,wBAAwB,GACxB,aAAa,GACb,uBAAuB,GACvB,2BAA2B,GAC3B,kCAAkC,GAClC,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,UAAU,GACV,eAAe,GACf,WAAW,GACX,UAAU,GACV,cAAc,GACd,SAAS,GACT,QAAQ,GACR,8BAA8B,GAC9B,
|
|
1
|
+
{"version":3,"file":"env_var.d.ts","sourceRoot":"","sources":["../../src/config/env_var.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { type Logger } from '../../log/index.js';
|
|
2
|
+
export type JsonRpcFetch = (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string>, noRetry?: boolean) => Promise<{
|
|
3
|
+
response: any;
|
|
4
|
+
headers: {
|
|
5
|
+
get: (header: string) => string | null | undefined;
|
|
6
|
+
};
|
|
7
|
+
}>;
|
|
2
8
|
/**
|
|
3
9
|
* A normal fetch function that does not retry.
|
|
4
10
|
* Alternatives are a fetch function with retries, or a mocked fetch.
|
|
@@ -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;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,eAAe,EAAE,OAAO,EACxB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACzC,OAAO,UAAQ,GACd,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,CA0C7F;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,YAAY,CAiBvG"}
|
|
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,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,eAAe,EAAE,OAAO,EACxB,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;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,eAAe,EAAE,OAAO,EACxB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACzC,OAAO,UAAQ,GACd,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,CA0C7F;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,YAAY,CAiBvG"}
|
|
@@ -69,4 +69,4 @@ export function makeFetch(retries, defaultNoRetry, log) {
|
|
|
69
69
|
return await retry(() => defaultFetch(host, rpcMethod, body, useApiEndpoints, extraHeaders, noRetry ?? defaultNoRetry), `JsonRpcClient request ${rpcMethod} to ${host}`, makeBackoff(retries), log, false);
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvY2xpZW50L2ZldGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBV3JEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxJQUFZLEVBQ1osU0FBaUIsRUFDakIsSUFBUyxFQUNULGVBQXdCLEVBQ3hCLGVBQXVDLEVBQUUsRUFDekMsT0FBTyxHQUFHLEtBQUs7SUFFZixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksSUFBYyxDQUFDO0lBQ25CLElBQUksQ0FBQztRQUNILElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLFNBQVMsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDekIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsWUFBWSxFQUFFO2FBQ2pFLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDdkIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsWUFBWSxFQUFFO2FBQ2pFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sWUFBWSxHQUFHLDRCQUE0QixJQUFJLGdCQUFnQixTQUFTLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxDQUFDO1FBQ0gsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxZQUFZLEdBQUcsU0FBUyxJQUFJLENBQUMsTUFBTSxnQkFBZ0IsSUFBSSxPQUFPLFNBQVMsS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9HLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUFpQixFQUFFLGNBQXVCLEVBQUUsR0FBWTtJQUNoRixPQUFPLEtBQUssRUFDVixJQUFZLEVBQ1osU0FBaUIsRUFDakIsSUFBUyxFQUNULGVBQXdCLEVBQ3hCLGVBQXVDLEVBQUUsRUFDekMsT0FBaUIsRUFDakIsRUFBRTtRQUNGLE9BQU8sTUFBTSxLQUFLLENBQ2hCLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFDbkcseUJBQXlCLFNBQVMsT0FBTyxJQUFJLEVBQUUsRUFDL0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUNwQixHQUFHLEVBQ0gsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type Logger } from '../../log/pino-logger.js';
|
|
2
2
|
import { type ApiSchemaFor } from '../../schemas/api.js';
|
|
3
|
-
import {
|
|
3
|
+
import { type JsonRpcFetch } from './fetch.js';
|
|
4
4
|
export type SafeJsonRpcClientOptions = {
|
|
5
5
|
useApiEndpoints?: boolean;
|
|
6
6
|
namespaceMethods?: string | false;
|
|
7
|
-
fetch?:
|
|
7
|
+
fetch?: JsonRpcFetch;
|
|
8
8
|
log?: Logger;
|
|
9
9
|
onResponse?: (res: {
|
|
10
10
|
response: any;
|
|
@@ -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;AACrE,OAAO,EAAkB,KAAK,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,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;AACrE,OAAO,EAAkB,KAAK,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,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;AAEF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EACtD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,MAAM,GAAE,wBAA6B,GACpC,CAAC,CAoCH"}
|
|
@@ -43,4 +43,4 @@ export function createSafeJsonRpcClient(host, schema, config = {}) {
|
|
|
43
43
|
}
|
|
44
44
|
return proxy;
|
|
45
45
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9qc29uX3JwY19jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvY2xpZW50L3NhZmVfanNvbl9ycGNfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUIsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JFLE9BQU8sRUFBcUMsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUYsT0FBTyxFQUFxQixZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFhN0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVksRUFDWixNQUF1QixFQUN2QixTQUFtQyxFQUFFO0lBRXJDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDO0lBQzNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsTUFBTSxFQUFFLGVBQWUsR0FBRyxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXJFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxVQUFrQixFQUFFLE1BQWEsRUFBZ0IsRUFBRTtRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFVBQVUsbUJBQW1CLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNuRixNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUUxRCxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMvRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBQ0QsMkdBQTJHO1FBQzNHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckUsT0FBTztRQUNULENBQUM7UUFDRCxPQUFRLE1BQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRixDQUFDLENBQUM7SUFFRixNQUFNLEtBQUssR0FBUSxFQUFFLENBQUM7SUFDdEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDekMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE9BQU8sS0FBVSxDQUFDO0FBQ3BCLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undici.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/undici.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAKhD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,wBAAgB,eAAe,CAAC,MAAM,QAAc,GAAG,YAAY,CA+DlE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Agent } from 'undici';
|
|
2
|
+
import { createLogger } from '../../log/pino-logger.js';
|
|
3
|
+
import { NoRetryError } from '../../retry/index.js';
|
|
4
|
+
import { jsonStringify } from '../convert.js';
|
|
5
|
+
const log = createLogger('json-rpc:json_rpc_client:undici');
|
|
6
|
+
export { Agent };
|
|
7
|
+
export function makeUndiciFetch(client = new Agent()) {
|
|
8
|
+
return async (host, rpcMethod, body, useApiEndpoints, extraHeaders = {}, noRetry = false) => {
|
|
9
|
+
log.trace(`JsonRpcClient.fetch: ${host} ${rpcMethod}`, { host, rpcMethod, body });
|
|
10
|
+
let resp;
|
|
11
|
+
try {
|
|
12
|
+
resp = await client.request({
|
|
13
|
+
method: 'POST',
|
|
14
|
+
origin: new URL(host),
|
|
15
|
+
path: useApiEndpoints ? rpcMethod : '/',
|
|
16
|
+
body: jsonStringify(body),
|
|
17
|
+
headers: {
|
|
18
|
+
...extraHeaders,
|
|
19
|
+
'content-type': 'application/json',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
const errorMessage = `Error fetching from host ${host} with method ${rpcMethod}: ${String(err)}`;
|
|
25
|
+
throw new Error(errorMessage);
|
|
26
|
+
}
|
|
27
|
+
let responseJson;
|
|
28
|
+
const responseOk = resp.statusCode >= 200 && resp.statusCode <= 299;
|
|
29
|
+
try {
|
|
30
|
+
responseJson = await resp.body.json();
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (!responseOk) {
|
|
34
|
+
throw new Error('HTTP ' + resp.statusCode);
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`Failed to parse body as JSON: ${await resp.body.text()}`);
|
|
37
|
+
}
|
|
38
|
+
if (!responseOk) {
|
|
39
|
+
const errorMessage = `Error ${resp.statusCode} response from server ${host} on ${rpcMethod}: ${responseJson.error.message}`;
|
|
40
|
+
if (noRetry || (resp.statusCode >= 400 && resp.statusCode < 500)) {
|
|
41
|
+
throw new NoRetryError(errorMessage);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error(errorMessage);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const headers = new Headers();
|
|
48
|
+
for (const [key, value] of Object.entries(resp.headers)) {
|
|
49
|
+
if (typeof value === 'string') {
|
|
50
|
+
headers.append(key, value);
|
|
51
|
+
}
|
|
52
|
+
else if (Array.isArray(value)) {
|
|
53
|
+
for (const v of value) {
|
|
54
|
+
headers.append(key, v);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
response: responseJson,
|
|
60
|
+
headers,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kaWNpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2pzb24tcnBjL2NsaWVudC91bmRpY2kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBbUIsTUFBTSxRQUFRLENBQUM7QUFFaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzlDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUVqQixNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtJQUNsRCxPQUFPLEtBQUssRUFDVixJQUFZLEVBQ1osU0FBaUIsRUFDakIsSUFBUyxFQUNULGVBQXdCLEVBQ3hCLGVBQXVDLEVBQUUsRUFDekMsT0FBTyxHQUFHLEtBQUssRUFDZixFQUFFO1FBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksSUFBcUMsQ0FBQztRQUMxQyxJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFTO2dCQUNsQyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0JBQ3ZDLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN6QixPQUFPLEVBQUU7b0JBQ1AsR0FBRyxZQUFZO29CQUNmLGNBQWMsRUFBRSxrQkFBa0I7aUJBQ25DO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLFlBQVksR0FBRyw0QkFBNEIsSUFBSSxnQkFBZ0IsU0FBUyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pHLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksWUFBaUIsQ0FBQztRQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztRQUNwRSxJQUFJLENBQUM7WUFDSCxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLFlBQVksR0FBRyxTQUFTLElBQUksQ0FBQyxVQUFVLHlCQUF5QixJQUFJLE9BQU8sU0FBUyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUgsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFlBQVk7WUFDdEIsT0FBTztTQUNSLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pino-logger.d.ts","sourceRoot":"","sources":["../../src/log/pino-logger.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOvC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,GAAG,MAAM,CAyCpE;AAID,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;AAGjD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D;AAQD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAGjD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,QAK3D;AA0BD,eAAO,MAAM,MAAM;;;;;CAGlB,CAAC;
|
|
1
|
+
{"version":3,"file":"pino-logger.d.ts","sourceRoot":"","sources":["../../src/log/pino-logger.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOvC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,GAAG,MAAM,CAyCpE;AAID,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;AAGjD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D;AAQD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAGjD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,QAK3D;AA0BD,eAAO,MAAM,MAAM;;;;;CAGlB,CAAC;AAMF,eAAO,MAAM,cAAc;;;;;;;;;;CAU1B,CAAC;AAiEF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAE7D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAe5D;AAED,oDAAoD;AACpD,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG;KAAG,CAAC,IAAI,QAAQ,GAAG,KAAK;CAAE,GAAG;IAA4B,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG;IAClG,KAAK,EAAE,QAAQ,CAAC;IAChB,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
package/dest/log/pino-logger.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createColors } from 'colorette';
|
|
1
|
+
import { createColors, isColorSupported } from 'colorette';
|
|
2
2
|
import isNode from 'detect-node';
|
|
3
3
|
import { pino, symbols } from 'pino';
|
|
4
4
|
import { inspect } from 'util';
|
|
@@ -70,20 +70,21 @@ const [logLevel, logFilters] = parseEnv(process.env.LOG_LEVEL, defaultLogLevel);
|
|
|
70
70
|
// Define custom logging levels for pino.
|
|
71
71
|
const customLevels = { verbose: 25 };
|
|
72
72
|
// Global pino options, tweaked for google cloud if running there.
|
|
73
|
-
const
|
|
73
|
+
const useGcloudLogging = parseBooleanEnv(process.env['USE_GCLOUD_LOGGING']);
|
|
74
74
|
const pinoOpts = {
|
|
75
75
|
customLevels,
|
|
76
76
|
messageKey: 'msg',
|
|
77
77
|
useOnlyCustomLevels: false,
|
|
78
78
|
level: logLevel,
|
|
79
|
-
...(
|
|
79
|
+
...(useGcloudLogging ? GoogleCloudLoggerConfig : {}),
|
|
80
80
|
};
|
|
81
81
|
export const levels = {
|
|
82
82
|
labels: { ...pino.levels.labels, ...Object.fromEntries(Object.entries(customLevels).map(e => e.reverse())) },
|
|
83
83
|
values: { ...pino.levels.values, ...customLevels },
|
|
84
84
|
};
|
|
85
85
|
// Transport options for pretty logging to stderr via pino-pretty.
|
|
86
|
-
const
|
|
86
|
+
const colorEnv = process.env['FORCE_COLOR'];
|
|
87
|
+
const useColor = colorEnv === undefined ? isColorSupported : parseBooleanEnv(colorEnv);
|
|
87
88
|
const { bold, reset } = createColors({ useColor });
|
|
88
89
|
export const pinoPrettyOpts = {
|
|
89
90
|
destination: 2,
|
|
@@ -114,7 +115,7 @@ const stdioTransport = {
|
|
|
114
115
|
// this transport configured. Note that the target is defined as the export in the telemetry-client,
|
|
115
116
|
// since pino will load this transport separately on a worker thread, to minimize disruption to the main loop.
|
|
116
117
|
const otlpEndpoint = process.env['OTEL_EXPORTER_OTLP_LOGS_ENDPOINT'];
|
|
117
|
-
const otlpEnabled = !!otlpEndpoint && !
|
|
118
|
+
const otlpEnabled = !!otlpEndpoint && !useGcloudLogging;
|
|
118
119
|
const otelOpts = { levels };
|
|
119
120
|
const otelTransport = {
|
|
120
121
|
target: '@aztec/telemetry-client/otel-pino-stream',
|
|
@@ -185,4 +186,4 @@ export function registerLoggingStream(stream) {
|
|
|
185
186
|
function formatErr(msg, err) {
|
|
186
187
|
return err ? `${msg}: ${inspect(err)}` : msg;
|
|
187
188
|
}
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluby1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nL3Bpbm8tbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJcEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjLEVBQUUsVUFBVSxHQUFHLEVBQUU7SUFDMUQsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuRyx3REFBd0Q7SUFDeEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRXpELHNGQUFz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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A queue that groups items into batches based on a group key.
|
|
3
|
+
*
|
|
4
|
+
* The batching algorithm is greedy, meaning that as long as consecutive items have the same group key then they will
|
|
5
|
+
* be batvched together. As soon as an item with a different group key is encountered, the old batch is flushed to the
|
|
6
|
+
* queue and a new batch is started.
|
|
7
|
+
*
|
|
8
|
+
* A batch can also be flushed to the queue if:
|
|
9
|
+
* - it reaches the selected batch size limit
|
|
10
|
+
* - or the batch duration limit is hit (in milliseconds)
|
|
11
|
+
*
|
|
12
|
+
* This ensures that batches don't grow too big and that they are flushed at a minimum rate of 1 batch every interval.
|
|
13
|
+
*
|
|
14
|
+
* The consumer side of this queue will process batches as quickly as possible.
|
|
15
|
+
*/
|
|
16
|
+
export declare class BatchQueue<T, K extends string | number> {
|
|
17
|
+
private processBatch;
|
|
18
|
+
private maxBatchSize;
|
|
19
|
+
private maxBatchDuration;
|
|
20
|
+
private log;
|
|
21
|
+
private container;
|
|
22
|
+
private currentBatch?;
|
|
23
|
+
private runningPromise?;
|
|
24
|
+
constructor(processBatch: (items: Array<T>, key: K) => void | Promise<void>, maxBatchSize: number, maxBatchDuration: number, log?: import("../log/pino-logger.js").Logger);
|
|
25
|
+
/**
|
|
26
|
+
* Put an item in the queue. It will be routed based on the given key
|
|
27
|
+
* @param item - The item to add
|
|
28
|
+
* @param key - The group key for this item
|
|
29
|
+
* @returns A promise that resolves or rejects when the batch this item is part of is processed
|
|
30
|
+
*/
|
|
31
|
+
put(item: T, key: K): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Immediately flushes the current batch, starting a new one
|
|
34
|
+
*/
|
|
35
|
+
flushCurrentBatch: () => void;
|
|
36
|
+
/**
|
|
37
|
+
* Starts the queue.
|
|
38
|
+
*/
|
|
39
|
+
start(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Stops the queue. Any items in the queue will continue to be processed but new items won't be accepted anymore
|
|
42
|
+
* @returns A promise that resolves when the queue is drained completely
|
|
43
|
+
*/
|
|
44
|
+
stop(): Promise<void>;
|
|
45
|
+
private execProcessor;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=batch_queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch_queue.d.ts","sourceRoot":"","sources":["../../src/queue/batch_queue.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM;IAMhD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,GAAG;IARb,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAG7B,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC/D,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,GAAG,yCAAyC;IAGtD;;;;;OAKG;IACI,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B1C;;OAEG;IACI,iBAAiB,QAAO,IAAI,CAOjC;IAEF;;OAEG;IACI,KAAK;IAQZ;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,OAAO,CAAC,aAAa,CAOnB;CACH"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createLogger } from '../log/pino-logger.js';
|
|
2
|
+
import { promiseWithResolvers } from '../promise/utils.js';
|
|
3
|
+
import { FifoMemoryQueue } from './fifo_memory_queue.js';
|
|
4
|
+
/**
|
|
5
|
+
* A queue that groups items into batches based on a group key.
|
|
6
|
+
*
|
|
7
|
+
* The batching algorithm is greedy, meaning that as long as consecutive items have the same group key then they will
|
|
8
|
+
* be batvched together. As soon as an item with a different group key is encountered, the old batch is flushed to the
|
|
9
|
+
* queue and a new batch is started.
|
|
10
|
+
*
|
|
11
|
+
* A batch can also be flushed to the queue if:
|
|
12
|
+
* - it reaches the selected batch size limit
|
|
13
|
+
* - or the batch duration limit is hit (in milliseconds)
|
|
14
|
+
*
|
|
15
|
+
* This ensures that batches don't grow too big and that they are flushed at a minimum rate of 1 batch every interval.
|
|
16
|
+
*
|
|
17
|
+
* The consumer side of this queue will process batches as quickly as possible.
|
|
18
|
+
*/
|
|
19
|
+
export class BatchQueue {
|
|
20
|
+
constructor(processBatch, maxBatchSize, maxBatchDuration, log = createLogger('foundation:batch_queue')) {
|
|
21
|
+
this.processBatch = processBatch;
|
|
22
|
+
this.maxBatchSize = maxBatchSize;
|
|
23
|
+
this.maxBatchDuration = maxBatchDuration;
|
|
24
|
+
this.log = log;
|
|
25
|
+
this.container = new FifoMemoryQueue();
|
|
26
|
+
/**
|
|
27
|
+
* Immediately flushes the current batch, starting a new one
|
|
28
|
+
*/
|
|
29
|
+
this.flushCurrentBatch = () => {
|
|
30
|
+
if (this.currentBatch) {
|
|
31
|
+
this.log.trace('Flushing batch', { size: this.currentBatch.items.length, key: this.currentBatch.key });
|
|
32
|
+
clearTimeout(this.currentBatch.enqueueTimeout);
|
|
33
|
+
this.container.put(this.currentBatch);
|
|
34
|
+
this.currentBatch = undefined;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
this.execProcessor = async (batch) => {
|
|
38
|
+
try {
|
|
39
|
+
await this.processBatch(batch.items, batch.key);
|
|
40
|
+
batch.deferred.resolve();
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
batch.deferred.reject(err);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Put an item in the queue. It will be routed based on the given key
|
|
49
|
+
* @param item - The item to add
|
|
50
|
+
* @param key - The group key for this item
|
|
51
|
+
* @returns A promise that resolves or rejects when the batch this item is part of is processed
|
|
52
|
+
*/
|
|
53
|
+
put(item, key) {
|
|
54
|
+
if (!this.runningPromise) {
|
|
55
|
+
return Promise.reject(new Error('BatchQueue is not started'));
|
|
56
|
+
}
|
|
57
|
+
let currentBatch = this.currentBatch;
|
|
58
|
+
if (!currentBatch || currentBatch.key !== key || currentBatch.items.length >= this.maxBatchSize) {
|
|
59
|
+
this.flushCurrentBatch();
|
|
60
|
+
this.log.trace('Creating new batch', { key });
|
|
61
|
+
currentBatch = {
|
|
62
|
+
items: [],
|
|
63
|
+
key,
|
|
64
|
+
deferred: promiseWithResolvers(),
|
|
65
|
+
enqueueTimeout: setTimeout(this.flushCurrentBatch, this.maxBatchDuration),
|
|
66
|
+
};
|
|
67
|
+
this.currentBatch = currentBatch;
|
|
68
|
+
}
|
|
69
|
+
currentBatch.items.push(item);
|
|
70
|
+
if (currentBatch.items.length >= this.maxBatchSize) {
|
|
71
|
+
this.flushCurrentBatch();
|
|
72
|
+
}
|
|
73
|
+
return currentBatch.deferred.promise;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Starts the queue.
|
|
77
|
+
*/
|
|
78
|
+
start() {
|
|
79
|
+
if (this.runningPromise) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.runningPromise = this.container.process(this.execProcessor);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Stops the queue. Any items in the queue will continue to be processed but new items won't be accepted anymore
|
|
86
|
+
* @returns A promise that resolves when the queue is drained completely
|
|
87
|
+
*/
|
|
88
|
+
stop() {
|
|
89
|
+
const runningPromise = this.runningPromise;
|
|
90
|
+
this.runningPromise = undefined;
|
|
91
|
+
if (!runningPromise) {
|
|
92
|
+
return Promise.resolve();
|
|
93
|
+
}
|
|
94
|
+
this.container.end();
|
|
95
|
+
return runningPromise;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVldWUvYmF0Y2hfcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBNkIsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTekQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUtyQixZQUNVLFlBQStELEVBQy9ELFlBQW9CLEVBQ3BCLGdCQUF3QixFQUN4QixNQUFNLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQztRQUg1QyxpQkFBWSxHQUFaLFlBQVksQ0FBbUQ7UUFDL0QsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQXlDO1FBUjlDLGNBQVMsR0FBRyxJQUFJLGVBQWUsRUFBZSxDQUFDO1FBNkN2RDs7V0FFRztRQUNJLHNCQUFpQixHQUFHLEdBQVMsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZHLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFD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
|
package/dest/queue/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dest/queue/index.js
CHANGED
|
@@ -3,4 +3,5 @@ export * from './priority_memory_queue.js';
|
|
|
3
3
|
export * from './serial_queue.js';
|
|
4
4
|
export * from './bounded_serial_queue.js';
|
|
5
5
|
export * from './semaphore.js';
|
|
6
|
-
|
|
6
|
+
export * from './batch_queue.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVldWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/foundation",
|
|
3
|
-
"version": "0.76.
|
|
3
|
+
"version": "0.76.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dest/index.js",
|
|
6
6
|
"types": "./dest/index.d.ts",
|
|
@@ -24,8 +24,9 @@
|
|
|
24
24
|
"./fs": "./dest/fs/index.js",
|
|
25
25
|
"./buffer": "./dest/buffer/index.js",
|
|
26
26
|
"./json-rpc": "./dest/json-rpc/index.js",
|
|
27
|
-
"./json-rpc/server": "./dest/json-rpc/server/index.js",
|
|
28
27
|
"./json-rpc/client": "./dest/json-rpc/client/index.js",
|
|
28
|
+
"./json-rpc/server": "./dest/json-rpc/server/index.js",
|
|
29
|
+
"./json-rpc/undici": "./dest/json-rpc/client/undici.js",
|
|
29
30
|
"./json-rpc/test": "./dest/json-rpc/test/index.js",
|
|
30
31
|
"./iterable": "./dest/iterable/index.js",
|
|
31
32
|
"./log": "./dest/log/index.js",
|
|
@@ -103,7 +104,7 @@
|
|
|
103
104
|
]
|
|
104
105
|
},
|
|
105
106
|
"dependencies": {
|
|
106
|
-
"@aztec/bb.js": "0.76.
|
|
107
|
+
"@aztec/bb.js": "0.76.3",
|
|
107
108
|
"@koa/cors": "^5.0.0",
|
|
108
109
|
"@noble/curves": "^1.2.0",
|
|
109
110
|
"bn.js": "^5.2.1",
|
|
@@ -126,6 +127,7 @@
|
|
|
126
127
|
"pino": "^9.5.0",
|
|
127
128
|
"pino-pretty": "^13.0.0",
|
|
128
129
|
"sha3": "^2.1.4",
|
|
130
|
+
"undici": "^7.3.0",
|
|
129
131
|
"zod": "^3.23.8"
|
|
130
132
|
},
|
|
131
133
|
"devDependencies": {
|
package/src/config/env_var.ts
CHANGED
|
@@ -51,6 +51,7 @@ export type EnvVar =
|
|
|
51
51
|
| 'FEE_JUICE_CONTRACT_ADDRESS'
|
|
52
52
|
| 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS'
|
|
53
53
|
| 'FEE_RECIPIENT'
|
|
54
|
+
| 'FORCE_COLOR'
|
|
54
55
|
| 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS'
|
|
55
56
|
| 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS'
|
|
56
57
|
| 'INBOX_CONTRACT_ADDRESS'
|
|
@@ -69,7 +70,8 @@ export type EnvVar =
|
|
|
69
70
|
| 'NETWORK'
|
|
70
71
|
| 'NO_PXE'
|
|
71
72
|
| 'COIN_ISSUER_CONTRACT_ADDRESS'
|
|
72
|
-
| '
|
|
73
|
+
| 'USE_GCLOUD_LOGGING'
|
|
74
|
+
| 'USE_GCLOUD_METRICS'
|
|
73
75
|
| 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT'
|
|
74
76
|
| 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'
|
|
75
77
|
| 'OTEL_EXPORTER_OTLP_LOGS_ENDPOINT'
|
|
@@ -122,6 +124,8 @@ export type EnvVar =
|
|
|
122
124
|
| 'PROVER_BROKER_JOB_TIMEOUT_MS'
|
|
123
125
|
| 'PROVER_BROKER_POLL_INTERVAL_MS'
|
|
124
126
|
| 'PROVER_BROKER_JOB_MAX_RETRIES'
|
|
127
|
+
| 'PROVER_BROKER_BATCH_INTERVAL_MS'
|
|
128
|
+
| 'PROVER_BROKER_BATCH_SIZE'
|
|
125
129
|
| 'PROVER_COORDINATION_NODE_URL'
|
|
126
130
|
| 'PROVER_DISABLED'
|
|
127
131
|
| 'PROVER_FAILED_PROOF_STORE'
|
|
@@ -141,9 +145,6 @@ export type EnvVar =
|
|
|
141
145
|
| 'PROVER_TEST_DELAY_MS'
|
|
142
146
|
| 'PXE_L2_STARTING_BLOCK'
|
|
143
147
|
| 'PXE_PROVER_ENABLED'
|
|
144
|
-
| 'QUOTE_PROVIDER_BASIS_POINT_FEE'
|
|
145
|
-
| 'QUOTE_PROVIDER_BOND_AMOUNT'
|
|
146
|
-
| 'QUOTE_PROVIDER_URL'
|
|
147
148
|
| 'PROVER_TARGET_ESCROW_AMOUNT'
|
|
148
149
|
| 'PROVER_MINIMUM_ESCROW_AMOUNT'
|
|
149
150
|
| 'REGISTRY_CONTRACT_ADDRESS'
|
|
@@ -186,7 +187,7 @@ export type EnvVar =
|
|
|
186
187
|
| 'AZTEC_SLOT_DURATION'
|
|
187
188
|
| 'AZTEC_EPOCH_DURATION'
|
|
188
189
|
| 'AZTEC_TARGET_COMMITTEE_SIZE'
|
|
189
|
-
| '
|
|
190
|
+
| 'AZTEC_PROOF_SUBMISSION_WINDOW'
|
|
190
191
|
| 'AZTEC_MINIMUM_STAKE'
|
|
191
192
|
| 'AZTEC_SLASHING_QUORUM'
|
|
192
193
|
| 'AZTEC_SLASHING_ROUND_SIZE'
|
|
@@ -6,6 +6,15 @@ import { jsonStringify } from '../convert.js';
|
|
|
6
6
|
|
|
7
7
|
const log = createLogger('json-rpc:json_rpc_client');
|
|
8
8
|
|
|
9
|
+
export type JsonRpcFetch = (
|
|
10
|
+
host: string,
|
|
11
|
+
rpcMethod: string,
|
|
12
|
+
body: any,
|
|
13
|
+
useApiEndpoints: boolean,
|
|
14
|
+
extraHeaders?: Record<string, string>,
|
|
15
|
+
noRetry?: boolean,
|
|
16
|
+
) => Promise<{ response: any; headers: { get: (header: string) => string | null | undefined } }>;
|
|
17
|
+
|
|
9
18
|
/**
|
|
10
19
|
* A normal fetch function that does not retry.
|
|
11
20
|
* Alternatives are a fetch function with retries, or a mocked fetch.
|
|
@@ -2,12 +2,12 @@ import { format } from 'util';
|
|
|
2
2
|
|
|
3
3
|
import { type Logger, createLogger } from '../../log/pino-logger.js';
|
|
4
4
|
import { type ApiSchema, type ApiSchemaFor, schemaHasMethod } from '../../schemas/api.js';
|
|
5
|
-
import { defaultFetch } from './fetch.js';
|
|
5
|
+
import { type JsonRpcFetch, defaultFetch } from './fetch.js';
|
|
6
6
|
|
|
7
7
|
export type SafeJsonRpcClientOptions = {
|
|
8
8
|
useApiEndpoints?: boolean;
|
|
9
9
|
namespaceMethods?: string | false;
|
|
10
|
-
fetch?:
|
|
10
|
+
fetch?: JsonRpcFetch;
|
|
11
11
|
log?: Logger;
|
|
12
12
|
onResponse?: (res: {
|
|
13
13
|
response: any;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Agent, type Dispatcher } from 'undici';
|
|
2
|
+
|
|
3
|
+
import { createLogger } from '../../log/pino-logger.js';
|
|
4
|
+
import { NoRetryError } from '../../retry/index.js';
|
|
5
|
+
import { jsonStringify } from '../convert.js';
|
|
6
|
+
import { type JsonRpcFetch } from './fetch.js';
|
|
7
|
+
|
|
8
|
+
const log = createLogger('json-rpc:json_rpc_client:undici');
|
|
9
|
+
|
|
10
|
+
export { Agent };
|
|
11
|
+
|
|
12
|
+
export function makeUndiciFetch(client = new Agent()): JsonRpcFetch {
|
|
13
|
+
return async (
|
|
14
|
+
host: string,
|
|
15
|
+
rpcMethod: string,
|
|
16
|
+
body: any,
|
|
17
|
+
useApiEndpoints: boolean,
|
|
18
|
+
extraHeaders: Record<string, string> = {},
|
|
19
|
+
noRetry = false,
|
|
20
|
+
) => {
|
|
21
|
+
log.trace(`JsonRpcClient.fetch: ${host} ${rpcMethod}`, { host, rpcMethod, body });
|
|
22
|
+
let resp: Dispatcher.ResponseData<string>;
|
|
23
|
+
try {
|
|
24
|
+
resp = await client.request<string>({
|
|
25
|
+
method: 'POST',
|
|
26
|
+
origin: new URL(host),
|
|
27
|
+
path: useApiEndpoints ? rpcMethod : '/',
|
|
28
|
+
body: jsonStringify(body),
|
|
29
|
+
headers: {
|
|
30
|
+
...extraHeaders,
|
|
31
|
+
'content-type': 'application/json',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
} catch (err) {
|
|
35
|
+
const errorMessage = `Error fetching from host ${host} with method ${rpcMethod}: ${String(err)}`;
|
|
36
|
+
throw new Error(errorMessage);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let responseJson: any;
|
|
40
|
+
const responseOk = resp.statusCode >= 200 && resp.statusCode <= 299;
|
|
41
|
+
try {
|
|
42
|
+
responseJson = await resp.body.json();
|
|
43
|
+
} catch (err) {
|
|
44
|
+
if (!responseOk) {
|
|
45
|
+
throw new Error('HTTP ' + resp.statusCode);
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`Failed to parse body as JSON: ${await resp.body.text()}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!responseOk) {
|
|
51
|
+
const errorMessage = `Error ${resp.statusCode} response from server ${host} on ${rpcMethod}: ${responseJson.error.message}`;
|
|
52
|
+
if (noRetry || (resp.statusCode >= 400 && resp.statusCode < 500)) {
|
|
53
|
+
throw new NoRetryError(errorMessage);
|
|
54
|
+
} else {
|
|
55
|
+
throw new Error(errorMessage);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const headers = new Headers();
|
|
60
|
+
for (const [key, value] of Object.entries(resp.headers)) {
|
|
61
|
+
if (typeof value === 'string') {
|
|
62
|
+
headers.append(key, value);
|
|
63
|
+
} else if (Array.isArray(value)) {
|
|
64
|
+
for (const v of value) {
|
|
65
|
+
headers.append(key, v);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
response: responseJson,
|
|
72
|
+
headers,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
}
|
package/src/log/pino-logger.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createColors } from 'colorette';
|
|
1
|
+
import { createColors, isColorSupported } from 'colorette';
|
|
2
2
|
import isNode from 'detect-node';
|
|
3
3
|
import { pino, symbols } from 'pino';
|
|
4
4
|
import { type Writable } from 'stream';
|
|
@@ -98,13 +98,13 @@ const [logLevel, logFilters] = parseEnv(process.env.LOG_LEVEL, defaultLogLevel);
|
|
|
98
98
|
const customLevels = { verbose: 25 };
|
|
99
99
|
|
|
100
100
|
// Global pino options, tweaked for google cloud if running there.
|
|
101
|
-
const
|
|
101
|
+
const useGcloudLogging = parseBooleanEnv(process.env['USE_GCLOUD_LOGGING' satisfies EnvVar]);
|
|
102
102
|
const pinoOpts: pino.LoggerOptions<keyof typeof customLevels> = {
|
|
103
103
|
customLevels,
|
|
104
104
|
messageKey: 'msg',
|
|
105
105
|
useOnlyCustomLevels: false,
|
|
106
106
|
level: logLevel,
|
|
107
|
-
...(
|
|
107
|
+
...(useGcloudLogging ? GoogleCloudLoggerConfig : {}),
|
|
108
108
|
};
|
|
109
109
|
|
|
110
110
|
export const levels = {
|
|
@@ -113,7 +113,8 @@ export const levels = {
|
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
// Transport options for pretty logging to stderr via pino-pretty.
|
|
116
|
-
const
|
|
116
|
+
const colorEnv = process.env['FORCE_COLOR' satisfies EnvVar];
|
|
117
|
+
const useColor = colorEnv === undefined ? isColorSupported : parseBooleanEnv(colorEnv);
|
|
117
118
|
const { bold, reset } = createColors({ useColor });
|
|
118
119
|
export const pinoPrettyOpts = {
|
|
119
120
|
destination: 2,
|
|
@@ -147,7 +148,7 @@ const stdioTransport: pino.TransportTargetOptions = {
|
|
|
147
148
|
// this transport configured. Note that the target is defined as the export in the telemetry-client,
|
|
148
149
|
// since pino will load this transport separately on a worker thread, to minimize disruption to the main loop.
|
|
149
150
|
const otlpEndpoint = process.env['OTEL_EXPORTER_OTLP_LOGS_ENDPOINT' satisfies EnvVar];
|
|
150
|
-
const otlpEnabled = !!otlpEndpoint && !
|
|
151
|
+
const otlpEnabled = !!otlpEndpoint && !useGcloudLogging;
|
|
151
152
|
const otelOpts = { levels };
|
|
152
153
|
const otelTransport: pino.TransportTargetOptions = {
|
|
153
154
|
target: '@aztec/telemetry-client/otel-pino-stream',
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { createLogger } from '../log/pino-logger.js';
|
|
2
|
+
import { type PromiseWithResolvers, promiseWithResolvers } from '../promise/utils.js';
|
|
3
|
+
import { FifoMemoryQueue } from './fifo_memory_queue.js';
|
|
4
|
+
|
|
5
|
+
type Batch<T, K> = {
|
|
6
|
+
items: Array<T>;
|
|
7
|
+
key: K;
|
|
8
|
+
deferred: PromiseWithResolvers<void>;
|
|
9
|
+
enqueueTimeout: ReturnType<typeof setTimeout>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A queue that groups items into batches based on a group key.
|
|
14
|
+
*
|
|
15
|
+
* The batching algorithm is greedy, meaning that as long as consecutive items have the same group key then they will
|
|
16
|
+
* be batvched together. As soon as an item with a different group key is encountered, the old batch is flushed to the
|
|
17
|
+
* queue and a new batch is started.
|
|
18
|
+
*
|
|
19
|
+
* A batch can also be flushed to the queue if:
|
|
20
|
+
* - it reaches the selected batch size limit
|
|
21
|
+
* - or the batch duration limit is hit (in milliseconds)
|
|
22
|
+
*
|
|
23
|
+
* This ensures that batches don't grow too big and that they are flushed at a minimum rate of 1 batch every interval.
|
|
24
|
+
*
|
|
25
|
+
* The consumer side of this queue will process batches as quickly as possible.
|
|
26
|
+
*/
|
|
27
|
+
export class BatchQueue<T, K extends string | number> {
|
|
28
|
+
private container = new FifoMemoryQueue<Batch<T, K>>();
|
|
29
|
+
private currentBatch?: Batch<T, K>;
|
|
30
|
+
private runningPromise?: Promise<void>;
|
|
31
|
+
|
|
32
|
+
constructor(
|
|
33
|
+
private processBatch: (items: Array<T>, key: K) => void | Promise<void>,
|
|
34
|
+
private maxBatchSize: number,
|
|
35
|
+
private maxBatchDuration: number,
|
|
36
|
+
private log = createLogger('foundation:batch_queue'),
|
|
37
|
+
) {}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Put an item in the queue. It will be routed based on the given key
|
|
41
|
+
* @param item - The item to add
|
|
42
|
+
* @param key - The group key for this item
|
|
43
|
+
* @returns A promise that resolves or rejects when the batch this item is part of is processed
|
|
44
|
+
*/
|
|
45
|
+
public put(item: T, key: K): Promise<void> {
|
|
46
|
+
if (!this.runningPromise) {
|
|
47
|
+
return Promise.reject(new Error('BatchQueue is not started'));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let currentBatch = this.currentBatch;
|
|
51
|
+
if (!currentBatch || currentBatch.key !== key || currentBatch.items.length >= this.maxBatchSize) {
|
|
52
|
+
this.flushCurrentBatch();
|
|
53
|
+
|
|
54
|
+
this.log.trace('Creating new batch', { key });
|
|
55
|
+
currentBatch = {
|
|
56
|
+
items: [],
|
|
57
|
+
key,
|
|
58
|
+
deferred: promiseWithResolvers(),
|
|
59
|
+
enqueueTimeout: setTimeout(this.flushCurrentBatch, this.maxBatchDuration),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
this.currentBatch = currentBatch;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
currentBatch.items.push(item);
|
|
66
|
+
if (currentBatch.items.length >= this.maxBatchSize) {
|
|
67
|
+
this.flushCurrentBatch();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return currentBatch.deferred.promise;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Immediately flushes the current batch, starting a new one
|
|
75
|
+
*/
|
|
76
|
+
public flushCurrentBatch = (): void => {
|
|
77
|
+
if (this.currentBatch) {
|
|
78
|
+
this.log.trace('Flushing batch', { size: this.currentBatch.items.length, key: this.currentBatch.key });
|
|
79
|
+
clearTimeout(this.currentBatch.enqueueTimeout);
|
|
80
|
+
this.container.put(this.currentBatch);
|
|
81
|
+
this.currentBatch = undefined;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Starts the queue.
|
|
87
|
+
*/
|
|
88
|
+
public start() {
|
|
89
|
+
if (this.runningPromise) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
this.runningPromise = this.container.process(this.execProcessor);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Stops the queue. Any items in the queue will continue to be processed but new items won't be accepted anymore
|
|
98
|
+
* @returns A promise that resolves when the queue is drained completely
|
|
99
|
+
*/
|
|
100
|
+
public stop(): Promise<void> {
|
|
101
|
+
const runningPromise = this.runningPromise;
|
|
102
|
+
this.runningPromise = undefined;
|
|
103
|
+
|
|
104
|
+
if (!runningPromise) {
|
|
105
|
+
return Promise.resolve();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
this.container.end();
|
|
109
|
+
return runningPromise;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private execProcessor = async (batch: Batch<T, K>): Promise<void> => {
|
|
113
|
+
try {
|
|
114
|
+
await this.processBatch(batch.items, batch.key);
|
|
115
|
+
batch.deferred.resolve();
|
|
116
|
+
} catch (err) {
|
|
117
|
+
batch.deferred.reject(err);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
package/src/queue/index.ts
CHANGED