From 2883e44f01176e470331b442f74014f163a0a635 Mon Sep 17 00:00:00 2001 From: Dmitry Zakharov Date: Thu, 22 Aug 2024 13:04:20 +0400 Subject: [PATCH 1/2] Replace QueryHelpers with rescript-rest --- .../dynamic/codegen/package.json.hbs | 3 +- .../templates/static/codegen/rescript.json | 3 +- .../src/eventFetching/hyperfuel/HyperFuel.res | 23 +-- .../hyperfuel/HyperFuelJsonApi.res | 85 +++-------- .../src/eventFetching/hypersync/HyperSync.res | 133 +++++++++--------- .../hypersync/HyperSyncJsonApi.res | 45 +++--- .../eventFetching/hypersync/QueryHelpers.res | 43 ------ .../src/ink/components/CustomHooks.res | 37 ++--- .../erc20_multichain_factory/package.json | 2 +- scenarios/test_codegen/package.json | 2 +- scenarios/test_codegen/pnpm-lock.yaml | 41 +++++- 11 files changed, 185 insertions(+), 232 deletions(-) delete mode 100644 codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/QueryHelpers.res diff --git a/codegenerator/cli/templates/dynamic/codegen/package.json.hbs b/codegenerator/cli/templates/dynamic/codegen/package.json.hbs index c21e10158..971f4a165 100644 --- a/codegenerator/cli/templates/dynamic/codegen/package.json.hbs +++ b/codegenerator/cli/templates/dynamic/codegen/package.json.hbs @@ -43,7 +43,8 @@ "rescript": "11.1.0", "rescript-envsafe": "4.2.0", "rescript-express": "0.4.1", - "rescript-schema": "8.0.0", + "rescript-schema": "8.0.3", + "rescript-rest": "0.7.0", "root": "{{relative_path_to_root_from_generated}}", "viem": "1.16.6", "yargs": "17.7.2" diff --git a/codegenerator/cli/templates/static/codegen/rescript.json b/codegenerator/cli/templates/static/codegen/rescript.json index f47d7e8dd..27a1bb080 100644 --- a/codegenerator/cli/templates/static/codegen/rescript.json +++ b/codegenerator/cli/templates/static/codegen/rescript.json @@ -31,7 +31,8 @@ "rescript-schema", "rescript-express", "@glennsl/rescript-fetch", - "@rescript/react" + "@rescript/react", + "rescript-rest" ], "bsc-flags": ["-open RescriptSchema"] } diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res index 2458de3f4..1f09e44dc 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res @@ -1,3 +1,4 @@ +open Belt //Manage clients in cache so we don't need to reinstantiate each time //Ideally client should be passed in as a param to the functions but //we are still sharing the same signature with eth archive query builder @@ -310,17 +311,17 @@ module HeightQuery = { //Retry if the heigth is 0 (expect height to be greater) while height.contents <= 0 { - let res = await HyperFuelJsonApi.getArchiveHeight(~serverUrl) - Logging.debug({"msg": "querying height", "response": res}) - switch res { - | Ok({height: newHeight}) => height := newHeight - | Error(e) => - logger->Logging.childWarn({ - "message": `Failed to get height from endpoint. Retrying in ${retryIntervalMillis.contents->Belt.Int.toString}ms...`, - "error": e, - }) - await Time.resolvePromiseAfterDelay(~delayMilliseconds=retryIntervalMillis.contents) - retryIntervalMillis := retryIntervalMillis.contents * backOffMultiplicative + try { + height := await HyperSyncJsonApi.getArchiveHeight->Rest.fetch(serverUrl, ()) + } catch { + | e => { + logger->Logging.childWarn({ + "message": `Failed to get height from endpoint. Retrying in ${retryIntervalMillis.contents->Int.toString}ms...`, + "error": e, + }) + await Time.resolvePromiseAfterDelay(~delayMilliseconds=retryIntervalMillis.contents) + retryIntervalMillis := retryIntervalMillis.contents * backOffMultiplicative + } } } diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res index d950f16e6..ce84e915f 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res @@ -248,67 +248,26 @@ module ResponseTypes = { type heightResponse = {height: int} } -module Query = { - exception FailedToFetch(exn) - exception FailedToParseJson(exn) +let executeHyperSyncQuery = Rest.route(() => { + path: "/query", + method: Post, + variables: s => s.body(S.unknown->(Utils.magic: S.t => S.t)), + responses: [ + s => { + s.status(#200) + s.data(S.unknown->(Utils.magic: S.t => S.t)) + }, + ], +}) - type queryError = FailedToFetch(exn) | FailedToParseJson(exn) | Other(exn) - - let executeFetchRequest = async ( - ~endpoint, - ~method: Fetch.method, - ~rawBody: option=?, - (), - ): result<'b, queryError> => { - try { - open Fetch - - let body = - rawBody->Belt.Option.map(body => - body->Js.Json.stringifyAny->Belt.Option.getExn->Body.string - ) - - let res = await fetch( - endpoint, - { - method, - headers: Headers.fromObject({"Content-type": "application/json"}), - ?body, - }, - )->Promise.catch(e => Promise.reject(FailedToFetch(e))) - - let data = - await res - ->Response.json - ->Promise.catch(e => { - Js.log("unable to decode") - Js.log(e) - Promise.reject(FailedToParseJson(e)) - }) - - Ok(data->Utils.magic) - } catch { - | FailedToFetch(exn) => Error(FailedToFetch(exn)) - | FailedToParseJson(exn) => Error(FailedToParseJson(exn)) - | exn => Error(Other(exn)) - } - } -} -let executeHyperSyncQuery = (~serverUrl, ~postQueryBody: QueryTypes.postQueryBody): promise< - result, -> => { - Logging.debug({"msg": "Executing HyperSync query", "body": postQueryBody}) - Query.executeFetchRequest( - ~endpoint=serverUrl ++ "/query", - ~method=#POST, - ~rawBody=postQueryBody, - (), - ) -} - -type heightResponse = {height: int} - -let getArchiveHeight = async (~serverUrl): result => { - let res = await Query.executeFetchRequest(~endpoint=serverUrl ++ "/height", ~method=#GET, ()) - res -} +let getArchiveHeight = Rest.route(() => { + path: "/height", + method: Get, + variables: _ => (), + responses: [ + s => { + s.status(#200) + s.field("height", S.int) + }, + ], +}) diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res index f04b926a8..b69e28ef3 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res @@ -215,16 +215,17 @@ module HeightQuery = { //Retry if the heigth is 0 (expect height to be greater) while height.contents <= 0 { - let res = await HyperSyncJsonApi.getArchiveHeight(~serverUrl) - switch res { - | Ok(h) => height := h - | Error(e) => - logger->Logging.childWarn({ - "message": `Failed to get height from endpoint. Retrying in ${retryIntervalMillis.contents->Int.toString}ms...`, - "error": e, - }) - await Time.resolvePromiseAfterDelay(~delayMilliseconds=retryIntervalMillis.contents) - retryIntervalMillis := retryIntervalMillis.contents * backOffMultiplicative + try { + height := await HyperSyncJsonApi.getArchiveHeight->Rest.fetch(serverUrl, ()) + } catch { + | e => { + logger->Logging.childWarn({ + "message": `Failed to get height from endpoint. Retrying in ${retryIntervalMillis.contents->Int.toString}ms...`, + "error": e, + }) + await Time.resolvePromiseAfterDelay(~delayMilliseconds=retryIntervalMillis.contents) + retryIntervalMillis := retryIntervalMillis.contents * backOffMultiplicative + } } } @@ -256,50 +257,46 @@ module BlockData = { includeAllBlocks: true, } - let convertResponse = ( - res: result, - ): queryResponse> => { - switch res { - | Error(e) => Error(QueryError(e)) - | Ok(successRes) => - successRes.data - ->Array.flatMap(item => { - item.blocks->Option.mapWithDefault([], blocks => { - blocks->Array.map( - block => { - switch block { - | {number: blockNumber, timestamp, hash: blockHash} => - let blockTimestamp = timestamp->BigInt.toInt->Option.getExn - Ok( - ( - { - blockTimestamp, - blockNumber, - blockHash, - }: ReorgDetection.blockData - ), - ) - | _ => - let missingParams = - [ - block.number->Utils.Option.mapNone("block.number"), - block.timestamp->Utils.Option.mapNone("block.timestamp"), - block.hash->Utils.Option.mapNone("block.hash"), - ]->Array.keepMap(p => p) - - Error( - UnexpectedMissingParams({ - queryName: "query block data HyperSync", - missingParams, - }), - ) - } - }, - ) - }) + let convertResponse = (res: HyperSyncJsonApi.ResponseTypes.queryResponse): queryResponse< + array, + > => { + res.data + ->Array.flatMap(item => { + item.blocks->Option.mapWithDefault([], blocks => { + blocks->Array.map( + block => { + switch block { + | {number: blockNumber, timestamp, hash: blockHash} => + let blockTimestamp = timestamp->BigInt.toInt->Option.getExn + Ok( + ( + { + blockTimestamp, + blockNumber, + blockHash, + }: ReorgDetection.blockData + ), + ) + | _ => + let missingParams = + [ + block.number->Utils.Option.mapNone("block.number"), + block.timestamp->Utils.Option.mapNone("block.timestamp"), + block.hash->Utils.Option.mapNone("block.hash"), + ]->Array.keepMap(p => p) + + Error( + UnexpectedMissingParams({ + queryName: "query block data HyperSync", + missingParams, + }), + ) + } + }, + ) }) - ->Utils.Array.transposeResults - } + }) + ->Utils.Array.transposeResults } let rec queryBlockData = async (~serverUrl, ~blockNumber, ~logger): queryResponse< @@ -307,25 +304,31 @@ module BlockData = { > => { let body = makeRequestBody(~blockNumber) - let executeQuery = () => HyperSyncJsonApi.executeHyperSyncQuery(~postQueryBody=body, ~serverUrl) + let executeQuery = () => HyperSyncJsonApi.executeHyperSyncQuery->Rest.fetch(serverUrl, body) let logger = Logging.createChildFrom( ~logger, ~params={"logType": "hypersync get blockhash query", "blockNumber": blockNumber}, ) - let res = await executeQuery->Time.retryAsyncWithExponentialBackOff(~logger=Some(logger)) + let maybeSuccessfulRes = switch await executeQuery->Time.retryAsyncWithExponentialBackOff( + ~logger=Some(logger), + ) { + | exception _ => None + | res if res.nextBlock <= blockNumber => None + | res => Some(res) + } - // If the block is not found, retry the query. This can occur since replicas of hypersync might not hack caught up yet - if res->Result.mapWithDefault(0, res => res.nextBlock) <= blockNumber { - let logger = Logging.createChild(~params={"url": serverUrl}) - logger->Logging.childWarn( - `Block #${blockNumber->Int.toString} not found in hypersync. HyperSync runs multiple instances of hypersync and it is possible that they drift independently slightly from the head. Retrying query in 100ms.`, - ) - await Time.resolvePromiseAfterDelay(~delayMilliseconds=100) - await queryBlockData(~serverUrl, ~blockNumber, ~logger) - } else { - res->convertResponse->Result.map(res => res->Array.get(0)) + switch maybeSuccessfulRes { + | None => { + let logger = Logging.createChild(~params={"url": serverUrl}) + logger->Logging.childWarn( + `Block #${blockNumber->Int.toString} not found in hypersync. HyperSync runs multiple instances of hypersync and it is possible that they drift independently slightly from the head. Retrying query in 100ms.`, + ) + await Time.resolvePromiseAfterDelay(~delayMilliseconds=100) + await queryBlockData(~serverUrl, ~blockNumber, ~logger) + } + | Some(res) => res->convertResponse->Result.map(res => res->Array.get(0)) } } diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSyncJsonApi.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSyncJsonApi.res index f13253a37..470816810 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSyncJsonApi.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSyncJsonApi.res @@ -357,25 +357,26 @@ module ResponseTypes = { }) } -let executeHyperSyncQuery = (~serverUrl, ~postQueryBody: QueryTypes.postQueryBody): promise< - result, -> => { - QueryHelpers.executeFetchRequest( - ~endpoint=serverUrl ++ "/query", - ~method=#POST, - ~bodyAndSchema=(postQueryBody, QueryTypes.postQueryBodySchema), - ~responseSchema=ResponseTypes.queryResponseSchema, - ) -} - -let getArchiveHeight = { - let responseSchema = S.object(s => s.field("height", S.int)) - - async (~serverUrl): result => { - await QueryHelpers.executeFetchRequest( - ~endpoint=serverUrl ++ "/height", - ~method=#GET, - ~responseSchema, - ) - } -} +let executeHyperSyncQuery = Rest.route(() => { + path: "/query", + method: Post, + variables: s => s.body(QueryTypes.postQueryBodySchema), + responses: [ + s => { + s.status(#200) + s.data(ResponseTypes.queryResponseSchema) + }, + ], +}) + +let getArchiveHeight = Rest.route(() => { + path: "/height", + method: Get, + variables: _ => (), + responses: [ + s => { + s.status(#200) + s.field("height", S.int) + }, + ], +}) diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/QueryHelpers.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/QueryHelpers.res deleted file mode 100644 index 8a14bdc3a..000000000 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/QueryHelpers.res +++ /dev/null @@ -1,43 +0,0 @@ -exception FailedToFetch(exn) -exception FailedToParseJson(exn) - -type queryError = - | Deserialize(Js.Json.t, S.error) - | FailedToFetch(exn) - | FailedToParseJson(exn) - | Other(exn) - -let executeFetchRequest = async ( - ~endpoint, - ~method: Fetch.method, - ~bodyAndSchema: option<('body, S.t<'body>)>=?, - ~responseSchema: S.t<'data>, -): result<'data, queryError> => { - try { - open Fetch - - let body = bodyAndSchema->Belt.Option.map(((body, schema)) => { - switch body->S.serializeToJsonStringWith(schema) { - | Ok(jsonString) => jsonString->Body.string - | Error(error) => error->S.Error.raise - } - }) - - let res = - await fetch( - endpoint, - {method, headers: Headers.fromObject({"Content-type": "application/json"}), ?body}, - )->Promise.catch(e => Promise.reject(FailedToFetch(e))) - - let data = await res->Response.json->Promise.catch(e => Promise.reject(FailedToParseJson(e))) - - switch data->S.parseWith(responseSchema) { - | Ok(_) as ok => ok - | Error(e) => Error(Deserialize(data, e)) - } - } catch { - | FailedToFetch(exn) => Error(FailedToFetch(exn)) - | FailedToParseJson(exn) => Error(FailedToParseJson(exn)) - | exn => Error(Other(exn)) - } -} diff --git a/codegenerator/cli/templates/static/codegen/src/ink/components/CustomHooks.res b/codegenerator/cli/templates/static/codegen/src/ink/components/CustomHooks.res index 1b796ef84..0d95f202b 100644 --- a/codegenerator/cli/templates/static/codegen/src/ink/components/CustomHooks.res +++ b/codegenerator/cli/templates/static/codegen/src/ink/components/CustomHooks.res @@ -79,20 +79,25 @@ module InitApi = { let responseSchema = S.object(s => s.field("messages", S.array(messageSchema))) - let serverUrl = "https://envio.dev/api" - let endpoint = serverUrl ++ "/hyperindex/init" + let envioApiClient = Rest.client(~baseUrl="https://envio.dev/api") + + let getMessages = Rest.route(() => { + path: "/hyperindex/init", + method: Post, + variables: s => s.body(bodySchema), + responses: [ + s => { + s.status(#200) + s.data(responseSchema) + }, + ], + }) let getMessages = (~config) => { let envioVersion = PersistedState.getPersistedState()->Result.mapWithDefault(None, p => Some(p.envioVersion)) let body = makeBody(~envioVersion, ~envioApiToken=Env.envioApiToken, ~config) - - QueryHelpers.executeFetchRequest( - ~endpoint, - ~method=#POST, - ~bodyAndSchema=(body, bodySchema), - ~responseSchema, - ) + envioApiClient.call(getMessages, body) } } @@ -102,14 +107,12 @@ let useMessages = (~config) => { let (request, setRequest) = React.useState(_ => Loading) React.useEffect0(() => { InitApi.getMessages(~config) - ->Promise.thenResolve(res => - switch res { - | Ok(data) => setRequest(_ => Data(data)) - | Error(e) => - Logging.error({"msg": "Failed to load messages from envio server", "err": e}) - setRequest(_ => Err(e)) - } - ) + ->Promise.thenResolve(data => setRequest(_ => Data(data))) + ->Promise.catch(e => { + Logging.error({"msg": "Failed to load messages from envio server", "err": e}) + setRequest(_ => Err(e)) + Promise.resolve() + }) ->ignore None }) diff --git a/scenarios/erc20_multichain_factory/package.json b/scenarios/erc20_multichain_factory/package.json index 908068de2..71b7ce322 100644 --- a/scenarios/erc20_multichain_factory/package.json +++ b/scenarios/erc20_multichain_factory/package.json @@ -17,7 +17,7 @@ "helpers": "../helpers", "mocha": "10.2.0", "rescript": "11.1.0", - "rescript-schema": "8.0.0" + "rescript-schema": "8.0.3" }, "optionalDependencies": { "generated": "./generated" diff --git a/scenarios/test_codegen/package.json b/scenarios/test_codegen/package.json index 86793815b..8de392862 100644 --- a/scenarios/test_codegen/package.json +++ b/scenarios/test_codegen/package.json @@ -46,7 +46,7 @@ "nyc": "^15.1.0", "rescript": "11.1.0", "rescript-express": "0.4.1", - "rescript-schema": "8.0.0", + "rescript-schema": "8.0.3", "sinon": "^15.0.4", "ts-node": "^10.9.1" }, diff --git a/scenarios/test_codegen/pnpm-lock.yaml b/scenarios/test_codegen/pnpm-lock.yaml index 1a8458290..571feb6bc 100644 --- a/scenarios/test_codegen/pnpm-lock.yaml +++ b/scenarios/test_codegen/pnpm-lock.yaml @@ -86,8 +86,8 @@ importers: specifier: 0.4.1 version: 0.4.1(express@4.19.2) rescript-schema: - specifier: 8.0.0 - version: 8.0.0(rescript@11.1.0) + specifier: 8.0.3 + version: 8.0.3(rescript@11.1.0) sinon: specifier: ^15.0.4 version: 15.2.0 @@ -192,13 +192,16 @@ importers: version: 11.1.0 rescript-envsafe: specifier: 4.2.0 - version: 4.2.0(rescript-schema@8.0.0(rescript@11.1.0))(rescript@11.1.0) + version: 4.2.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0) rescript-express: specifier: 0.4.1 version: 0.4.1(express@4.19.2) + rescript-rest: + specifier: 0.7.0 + version: 0.7.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0) rescript-schema: - specifier: 8.0.0 - version: 8.0.0(rescript@11.1.0) + specifier: 8.0.3 + version: 8.0.3(rescript@11.1.0) root: specifier: ../. version: link:.. @@ -2961,11 +2964,26 @@ packages: rescript-nodejs@16.0.0: resolution: {integrity: sha512-1/SJmjH06xdeq1IFIIcKV6QKnidrav/gIc0Rw4GCUD0ceYPPZ5wDB51UFyk98in5N4gv8X/bTg6dVBMyRsC9tw==} + rescript-rest@0.7.0: + resolution: {integrity: sha512-z7+8aAETSwe2q512c64FkccshOHf70KQhrTHaoGvF58o5f1RIAk1y8LxkUw+xh2tdpz6cKNz5hYqhX+eMBfVkw==} + peerDependencies: + fastify: 4.x + rescript: 11.x + rescript-schema: 7.x || 8.x + peerDependenciesMeta: + fastify: + optional: true + rescript-schema@8.0.0: resolution: {integrity: sha512-+i/us90Q73HeRZ9Y6BXfogb0BXpfwDmmFhHI+dZkvnzGOLMQEx3kowXv78LfP2ujpedwpN85/aqEPXRb+eBtog==} peerDependencies: rescript: 11.x + rescript-schema@8.0.3: + resolution: {integrity: sha512-x9HBvhFvcmsxXL2KjAsWCZDi9awIVPGvMwwWbRV+CYJb3ZHlkNF4bcnMTLAsOCJ5NYa2zrQldYxqqJ/WPA3bXw==} + peerDependencies: + rescript: 11.x + rescript@11.1.0: resolution: {integrity: sha512-9la2Dv+ACylQ77I8s4spPu1JnLZXbH5WgxcLHLLUBWgFFSiv0wXqgzWztrBIZqwFgVX5BYcwldUqUVcEzdCyHg==} engines: {node: '>=10'} @@ -7285,10 +7303,10 @@ snapshots: requires-port@1.0.0: {} - rescript-envsafe@4.2.0(rescript-schema@8.0.0(rescript@11.1.0))(rescript@11.1.0): + rescript-envsafe@4.2.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0): dependencies: rescript: 11.1.0 - rescript-schema: 8.0.0(rescript@11.1.0) + rescript-schema: 8.0.3(rescript@11.1.0) rescript-express@0.4.1(express@4.19.2): dependencies: @@ -7296,10 +7314,19 @@ snapshots: rescript-nodejs@16.0.0: {} + rescript-rest@0.7.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0): + dependencies: + rescript: 11.1.0 + rescript-schema: 8.0.3(rescript@11.1.0) + rescript-schema@8.0.0(rescript@11.1.0): dependencies: rescript: 11.1.0 + rescript-schema@8.0.3(rescript@11.1.0): + dependencies: + rescript: 11.1.0 + rescript@11.1.0: {} resolve-cwd@3.0.0: From a90d6c76eb4ac831e90ed248317e6b281d2b8a8f Mon Sep 17 00:00:00 2001 From: Dmitry Zakharov Date: Mon, 26 Aug 2024 22:58:58 +0400 Subject: [PATCH 2/2] Update HyperSync clients --- .../dynamic/codegen/package.json.hbs | 2 +- .../src/eventFetching/hyperfuel/HyperFuel.res | 226 +++++++++--------- .../eventFetching/hyperfuel/HyperFuel.resi | 3 +- .../hyperfuel/HyperFuelJsonApi.res | 2 +- .../src/eventFetching/hypersync/HyperSync.res | 35 +-- .../eventFetching/hypersync/HyperSync.resi | 2 +- scenarios/test_codegen/pnpm-lock.yaml | 154 +++++++++--- 7 files changed, 239 insertions(+), 185 deletions(-) diff --git a/codegenerator/cli/templates/dynamic/codegen/package.json.hbs b/codegenerator/cli/templates/dynamic/codegen/package.json.hbs index 971f4a165..062f7f416 100644 --- a/codegenerator/cli/templates/dynamic/codegen/package.json.hbs +++ b/codegenerator/cli/templates/dynamic/codegen/package.json.hbs @@ -44,7 +44,7 @@ "rescript-envsafe": "4.2.0", "rescript-express": "0.4.1", "rescript-schema": "8.0.3", - "rescript-rest": "0.7.0", + "rescript-rest": "0.8.0", "root": "{{relative_path_to_root_from_generated}}", "viem": "1.16.6", "yargs": "17.7.2" diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res index 1f09e44dc..3c6f14b95 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.res @@ -61,34 +61,20 @@ type missingParams = { queryName: string, missingParams: array, } -type queryError = - UnexpectedMissingParams(missingParams) | QueryError(HyperFuelJsonApi.Query.queryError) +type queryError = UnexpectedMissingParams(missingParams) | QueryError(exn) exception UnexpectedMissingParamsExn(missingParams) let queryErrorToMsq = (e: queryError): string => { - let getMsgFromExn = (exn: exn) => - exn - ->Js.Exn.asJsExn - ->Belt.Option.flatMap(exn => exn->Js.Exn.message) - ->Belt.Option.getWithDefault("No message on exception") switch e { | UnexpectedMissingParams({queryName, missingParams}) => `${queryName} query failed due to unexpected missing params on response: ${missingParams->Js.Array2.joinWith(", ")}` - | QueryError(e) => - switch e { - | FailedToFetch(e) => - let msg = e->getMsgFromExn - - `Failed during fetch query: ${msg}` - | FailedToParseJson(e) => - let msg = e->getMsgFromExn - `Failed during parse of json: ${msg}` - | Other(e) => - let msg = e->getMsgFromExn - `Failed for unknown reason during query: ${msg}` - } + | QueryError(exn) => + exn + ->Js.Exn.asJsExn + ->Option.flatMap(exn => exn->Js.Exn.message) + ->Option.getWithDefault("No message on exception") } } @@ -218,9 +204,12 @@ module LogsQuery = { let executeQuery = () => hyperFuelClient->HyperFuelClient.getSelectedData(query) - let res = await executeQuery->Time.retryAsyncWithExponentialBackOff(~logger=Some(logger)) - - res->convertResponse + try { + let res = await executeQuery->Time.retryAsyncWithExponentialBackOff(~logger=Some(logger)) + res->convertResponse + } catch { + | exn => Error(QueryError(exn)) + } } } @@ -238,55 +227,51 @@ module BlockTimestampQuery = { // includeAllBlocks: true, } - let convertResponse = ( - res: result, - ): queryResponse => { - switch res { - | Error(e) => Error(QueryError(e)) - | Ok(successRes) => - let {nextBlock, archiveHeight, data} = successRes - - data - ->Belt.Array.flatMap(item => { - item.blocks->Belt.Option.mapWithDefault([], blocks => { - blocks->Belt.Array.map( - block => { - switch (block.height, block.time) { - | (Some(blockNumber), Some(blockTimestamp)) => - let timestamp = blockTimestamp - Ok( - ( - { - timestamp, - blockNumber, - }: blockNumberAndTimestamp - ), - ) - | _ => - let missingParams = - [ - block.height->Utils.Option.mapNone("block.height"), - block.time->Utils.Option.mapNone("block.time"), - ]->Belt.Array.keepMap(p => p) - - Error( - UnexpectedMissingParams({ - queryName: "queryBlockTimestampsPage HyperSync", - missingParams, - }), - ) - } - }, - ) - }) - }) - ->Utils.Array.transposeResults - ->Belt.Result.map((items): blockTimestampPage => { - nextBlock, - archiveHeight, - items, + let convertResponse = (res: HyperFuelJsonApi.ResponseTypes.queryResponse): queryResponse< + blockTimestampPage, + > => { + let {nextBlock, archiveHeight, data} = res + + data + ->Belt.Array.flatMap(item => { + item.blocks->Belt.Option.mapWithDefault([], blocks => { + blocks->Belt.Array.map( + block => { + switch (block.height, block.time) { + | (Some(blockNumber), Some(blockTimestamp)) => + let timestamp = blockTimestamp + Ok( + ( + { + timestamp, + blockNumber, + }: blockNumberAndTimestamp + ), + ) + | _ => + let missingParams = + [ + block.height->Utils.Option.mapNone("block.height"), + block.time->Utils.Option.mapNone("block.time"), + ]->Belt.Array.keepMap(p => p) + + Error( + UnexpectedMissingParams({ + queryName: "queryBlockTimestampsPage HyperSync", + missingParams, + }), + ) + } + }, + ) }) - } + }) + ->Utils.Array.transposeResults + ->Belt.Result.map((items): blockTimestampPage => { + nextBlock, + archiveHeight, + items, + }) } let queryBlockTimestampsPage = async (~serverUrl, ~fromBlock, ~toBlock): queryResponse< @@ -294,9 +279,12 @@ module BlockTimestampQuery = { > => { let body = makeRequestBody(~fromBlock, ~toBlockInclusive=toBlock) - let res = await HyperFuelJsonApi.executeHyperSyncQuery(~postQueryBody=body, ~serverUrl) - - res->convertResponse + try { + let res = await HyperFuelJsonApi.executeHyperSyncQuery->Rest.fetch(serverUrl, body) + res->convertResponse + } catch { + | exn => Error(QueryError(exn)) + } } } @@ -355,47 +343,43 @@ module BlockHashes = { // includeAllBlocks: true, } - let convertResponse = ( - res: result, - ): queryResponse> => { - switch res { - | Error(e) => Error(QueryError(e)) - | Ok(successRes) => - successRes.data - ->Belt.Array.flatMap(item => { - item.blocks->Belt.Option.mapWithDefault([], blocks => { - blocks->Belt.Array.map( - block => { - switch (block.height, block.id) { - | (Some(blockNumber), Some(hash)) => - Ok( - ( - { - blockNumber, - hash, - }: blockNumberAndHash - ), - ) - | _ => - let missingParams = - [ - block.height->Utils.Option.mapNone("block.height"), - block.id->Utils.Option.mapNone("block.id"), - ]->Belt.Array.keepMap(p => p) - - Error( - UnexpectedMissingParams({ - queryName: "query block hash HyperSync", - missingParams, - }), - ) - } - }, - ) - }) + let convertResponse = (res: HyperFuelJsonApi.ResponseTypes.queryResponse): queryResponse< + array, + > => { + res.data + ->Belt.Array.flatMap(item => { + item.blocks->Belt.Option.mapWithDefault([], blocks => { + blocks->Belt.Array.map( + block => { + switch (block.height, block.id) { + | (Some(blockNumber), Some(hash)) => + Ok( + ( + { + blockNumber, + hash, + }: blockNumberAndHash + ), + ) + | _ => + let missingParams = + [ + block.height->Utils.Option.mapNone("block.height"), + block.id->Utils.Option.mapNone("block.id"), + ]->Belt.Array.keepMap(p => p) + + Error( + UnexpectedMissingParams({ + queryName: "query block hash HyperSync", + missingParams, + }), + ) + } + }, + ) }) - ->Utils.Array.transposeResults - } + }) + ->Utils.Array.transposeResults } let queryBlockHash = async (~serverUrl, ~blockNumber): queryResponse< @@ -403,15 +387,19 @@ module BlockHashes = { > => { let body = makeRequestBody(~blockNumber) - let executeQuery = () => HyperFuelJsonApi.executeHyperSyncQuery(~postQueryBody=body, ~serverUrl) - let logger = Logging.createChild( ~params={"type": "hypersync get blockhash query", "blockNumber": blockNumber}, ) - let res = await executeQuery->Time.retryAsyncWithExponentialBackOff(~logger=Some(logger)) - - res->convertResponse + try { + let res = await Time.retryAsyncWithExponentialBackOff( + () => HyperFuelJsonApi.executeHyperSyncQuery->Rest.fetch(serverUrl, body), + ~logger=Some(logger), + ) + res->convertResponse + } catch { + | exn => Error(QueryError(exn)) + } } let queryBlockHashes = async (~serverUrl, ~blockNumbers) => { diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.resi b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.resi index dcc85ba27..6ba292a7f 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.resi +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuel.resi @@ -42,8 +42,7 @@ type missingParams = { queryName: string, missingParams: array, } -type queryError = - UnexpectedMissingParams(missingParams) | QueryError(HyperFuelJsonApi.Query.queryError) +type queryError = UnexpectedMissingParams(missingParams) | QueryError(exn) exception UnexpectedMissingParamsExn(missingParams) diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res index ce84e915f..9b5c0be34 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hyperfuel/HyperFuelJsonApi.res @@ -251,7 +251,7 @@ module ResponseTypes = { let executeHyperSyncQuery = Rest.route(() => { path: "/query", method: Post, - variables: s => s.body(S.unknown->(Utils.magic: S.t => S.t)), + variables: s => s.body(S.unknown->(Utils.magic: S.t => S.t)), responses: [ s => { s.status(#200) diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res index b69e28ef3..61f960bd9 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.res @@ -19,7 +19,7 @@ type missingParams = { queryName: string, missingParams: array, } -type queryError = UnexpectedMissingParams(missingParams) | QueryError(QueryHelpers.queryError) +type queryError = UnexpectedMissingParams(missingParams) exception HyperSyncQueryError(queryError) @@ -30,32 +30,10 @@ let queryErrorToExn = queryError => { exception UnexpectedMissingParamsExn(missingParams) let queryErrorToMsq = (e: queryError): string => { - let getMsgFromExn = (exn: exn) => - exn - ->Js.Exn.asJsExn - ->Option.flatMap(exn => exn->Js.Exn.message) - ->Option.getWithDefault("No message on exception") switch e { | UnexpectedMissingParams({queryName, missingParams}) => `${queryName} query failed due to unexpected missing params on response: ${missingParams->Js.Array2.joinWith(", ")}` - | QueryError(e) => - switch e { - | Deserialize(data, e) => - `Failed to deserialize response at ${e.path->S.Path.toString}: ${e->S.Error.reason} - JSON data: - ${data->Js.Json.stringify}` - | FailedToFetch(e) => - let msg = e->getMsgFromExn - - `Failed during fetch query: ${msg}` - | FailedToParseJson(e) => - let msg = e->getMsgFromExn - `Failed during parse of json: ${msg}` - | Other(e) => - let msg = e->getMsgFromExn - `Failed for unknown reason during query: ${msg}` - } } } @@ -122,7 +100,11 @@ module LogsQuery = { [ getMissingFields(Types.Log.fieldNames, event.log, ~prefix="log"), getMissingFields(Types.Block.nonOptionalFieldNames, event.block, ~prefix="block"), - getMissingFields(Types.Transaction.nonOptionalFieldNames, event.transaction, ~prefix="transaction"), + getMissingFields( + Types.Transaction.nonOptionalFieldNames, + event.transaction, + ~prefix="transaction", + ), ]->Array.concatMany if missingParams->Array.length > 0 { @@ -304,14 +286,13 @@ module BlockData = { > => { let body = makeRequestBody(~blockNumber) - let executeQuery = () => HyperSyncJsonApi.executeHyperSyncQuery->Rest.fetch(serverUrl, body) - let logger = Logging.createChildFrom( ~logger, ~params={"logType": "hypersync get blockhash query", "blockNumber": blockNumber}, ) - let maybeSuccessfulRes = switch await executeQuery->Time.retryAsyncWithExponentialBackOff( + let maybeSuccessfulRes = switch await Time.retryAsyncWithExponentialBackOff( + () => HyperSyncJsonApi.executeHyperSyncQuery->Rest.fetch(serverUrl, body), ~logger=Some(logger), ) { | exception _ => None diff --git a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.resi b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.resi index 6135705dd..9b677b240 100644 --- a/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.resi +++ b/codegenerator/cli/templates/static/codegen/src/eventFetching/hypersync/HyperSync.resi @@ -19,7 +19,7 @@ type missingParams = { missingParams: array, } -type queryError = UnexpectedMissingParams(missingParams) | QueryError(QueryHelpers.queryError) +type queryError = UnexpectedMissingParams(missingParams) exception UnexpectedMissingParamsExn(missingParams) diff --git a/scenarios/test_codegen/pnpm-lock.yaml b/scenarios/test_codegen/pnpm-lock.yaml index 571feb6bc..7e1fff3b7 100644 --- a/scenarios/test_codegen/pnpm-lock.yaml +++ b/scenarios/test_codegen/pnpm-lock.yaml @@ -131,8 +131,8 @@ importers: specifier: 1.4.0 version: 1.4.0 '@envio-dev/hypersync-client': - specifier: 0.5.0 - version: 0.5.0 + specifier: 0.6.2 + version: 0.6.2 '@glennsl/rescript-fetch': specifier: 0.2.0 version: 0.2.0 @@ -197,8 +197,8 @@ importers: specifier: 0.4.1 version: 0.4.1(express@4.19.2) rescript-rest: - specifier: 0.7.0 - version: 0.7.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0) + specifier: 0.8.0 + version: 0.8.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0) rescript-schema: specifier: 8.0.3 version: 8.0.3(rescript@11.1.0) @@ -412,44 +412,44 @@ packages: resolution: {integrity: sha512-eCSBUTgl8KbPyxky8cecDRLCYu2C1oFV4AZ72bEsI+TxXEvaljaL2kgttfzfu7gW+M89eCz55s49uF2t+YMTWA==} engines: {node: '>=10'} - '@envio-dev/hypersync-client-darwin-arm64@0.5.0': - resolution: {integrity: sha512-gPL3MFjev2MfMU3Qg77+g3HNipaeEVY1AakW55jjsU8shnVRcFEfykT3AuBK5KO8aFT+itUR5yTZMqaKAY+VRg==} + '@envio-dev/hypersync-client-darwin-arm64@0.6.2': + resolution: {integrity: sha512-dDIuQqEgARR1JYodbGkmck1i9qbYEidc4Kw4DOrRKQ0uZFwflI4o8wm3P+G/ofc1iXwp4pm7jqNUGzZDpK9pqA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@envio-dev/hypersync-client-darwin-x64@0.5.0': - resolution: {integrity: sha512-GuM+UODTThVbmRU/XywMCG549wJogDPah94DCiIHKe4Bw6LqWfdEKVXY4kdnerZ8l+7HoewJh+EAlCHAR8+fIQ==} + '@envio-dev/hypersync-client-darwin-x64@0.6.2': + resolution: {integrity: sha512-NGlgkmosAzlZ1EuQ5/djkg6sQI/dgVX+XGOLI6Zden0ca2zr/ByBRA7yCKxpwZHYynFN2FoMsMGSRY8jj6XQWw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@envio-dev/hypersync-client-linux-arm64-gnu@0.5.0': - resolution: {integrity: sha512-/5HwFJQlYiie62QpP7BUDEGEFHptTOBXq3F0NpLAlbR+TeeK3BXfZEHAR4qpzmJYWJQ21+f0YfuPFzig5ybyfA==} + '@envio-dev/hypersync-client-linux-arm64-gnu@0.6.2': + resolution: {integrity: sha512-p2LQSaOSgjVvvFHOGHnPHTnsDHCWNEG78J29guZyqWojmaxTaR4eGyFEknla7eO0w58EIUGEBTF0+EJ7duMimg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@envio-dev/hypersync-client-linux-x64-gnu@0.5.0': - resolution: {integrity: sha512-heQPhCzQy3sDgDEguglGKMt6qmg3YbVjEC2SCsAxOV7YTCMmIF6QocIq+N5t3fikDIp1nfH0oGEdlmswnNQ4CQ==} + '@envio-dev/hypersync-client-linux-x64-gnu@0.6.2': + resolution: {integrity: sha512-/kIL9Q0e5hM0g6cvdCHL93LMu+OCnwQAGKQHCj2TKKUjVpWFNb0Ki5PMgJhQ8mimEBFsJAnErVK+HrugLTlaVQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@envio-dev/hypersync-client-linux-x64-musl@0.5.0': - resolution: {integrity: sha512-eTbj91QaqRQXP0hKx0drs9RZFfAdhYurF79sLXp9TLQWBWnnqPF9R+0Fl6WDjVHvUhsvqYqYratNXx5rxuthPg==} + '@envio-dev/hypersync-client-linux-x64-musl@0.6.2': + resolution: {integrity: sha512-4r5hA/zyxUjWBDYYeXLCl5pBfSI9njEIPuLMFXajjVcAvSXRtBhmgVwa3JrjjCxZ8aLfqk9vvPkb/KgYfrbXXw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@envio-dev/hypersync-client-win32-x64-msvc@0.5.0': - resolution: {integrity: sha512-rNpt57uYAabned7k+yhvwg5F+xNti65og1u+60H2Q/MqfARppA7A2ntHTCgI865H1fN+/HXEywwtjwLOkX4J2g==} + '@envio-dev/hypersync-client-win32-x64-msvc@0.6.2': + resolution: {integrity: sha512-VgsSwmDAgvpgo9QsIiwIp9IN+h3g0U/7zrCrvNAMj+lsMHJPZ7L0cfN58dQUr84wL8domJGJrnMKUtu/Yf49ow==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@envio-dev/hypersync-client@0.5.0': - resolution: {integrity: sha512-BfYqU2LVTF2A8NdYmu7dedrmk8rC9rEnYCK53zVgmntbFrhEqWv5npl3P6U0IWPeYAt/0woC0jHO8pKpUsjvyQ==} + '@envio-dev/hypersync-client@0.6.2': + resolution: {integrity: sha512-wgp0UmblW8yn/q5NMkVYPFDvOmgHWPTibl/QJYyYK2KXqAMHssUjP07ayduiZCexQOZ94Agpv4SvmYxQNjGBIA==} engines: {node: '>= 10'} '@ethersproject/abi@5.7.0': @@ -2647,6 +2647,80 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + npm@10.8.2: + resolution: {integrity: sha512-x/AIjFIKRllrhcb48dqUNAAZl0ig9+qMuN91RpZo3Cb2+zuibfh+KISl6+kVVyktDz230JKc208UkQwwMqyB+w==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - cli-columns + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmhook + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - normalize-package-data + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which + - write-file-atomic + nwsapi@2.2.10: resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} @@ -2964,8 +3038,8 @@ packages: rescript-nodejs@16.0.0: resolution: {integrity: sha512-1/SJmjH06xdeq1IFIIcKV6QKnidrav/gIc0Rw4GCUD0ceYPPZ5wDB51UFyk98in5N4gv8X/bTg6dVBMyRsC9tw==} - rescript-rest@0.7.0: - resolution: {integrity: sha512-z7+8aAETSwe2q512c64FkccshOHf70KQhrTHaoGvF58o5f1RIAk1y8LxkUw+xh2tdpz6cKNz5hYqhX+eMBfVkw==} + rescript-rest@0.8.0: + resolution: {integrity: sha512-q63cpk3oGsVh3tQ2ia35mXHWLtelhXjEaqftmtftOr2pOdl2ZKeGxeUcC2BTvnmoHcKrFuWXlhnejENMDW681Q==} peerDependencies: fastify: 4.x rescript: 11.x @@ -3617,6 +3691,11 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yarn@1.22.22: + resolution: {integrity: sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==} + engines: {node: '>=4.0.0'} + hasBin: true + yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -3881,32 +3960,35 @@ snapshots: dependencies: '@elastic/ecs-helpers': 1.1.0 - '@envio-dev/hypersync-client-darwin-arm64@0.5.0': + '@envio-dev/hypersync-client-darwin-arm64@0.6.2': optional: true - '@envio-dev/hypersync-client-darwin-x64@0.5.0': + '@envio-dev/hypersync-client-darwin-x64@0.6.2': optional: true - '@envio-dev/hypersync-client-linux-arm64-gnu@0.5.0': + '@envio-dev/hypersync-client-linux-arm64-gnu@0.6.2': optional: true - '@envio-dev/hypersync-client-linux-x64-gnu@0.5.0': + '@envio-dev/hypersync-client-linux-x64-gnu@0.6.2': optional: true - '@envio-dev/hypersync-client-linux-x64-musl@0.5.0': + '@envio-dev/hypersync-client-linux-x64-musl@0.6.2': optional: true - '@envio-dev/hypersync-client-win32-x64-msvc@0.5.0': + '@envio-dev/hypersync-client-win32-x64-msvc@0.6.2': optional: true - '@envio-dev/hypersync-client@0.5.0': + '@envio-dev/hypersync-client@0.6.2': + dependencies: + npm: 10.8.2 + yarn: 1.22.22 optionalDependencies: - '@envio-dev/hypersync-client-darwin-arm64': 0.5.0 - '@envio-dev/hypersync-client-darwin-x64': 0.5.0 - '@envio-dev/hypersync-client-linux-arm64-gnu': 0.5.0 - '@envio-dev/hypersync-client-linux-x64-gnu': 0.5.0 - '@envio-dev/hypersync-client-linux-x64-musl': 0.5.0 - '@envio-dev/hypersync-client-win32-x64-msvc': 0.5.0 + '@envio-dev/hypersync-client-darwin-arm64': 0.6.2 + '@envio-dev/hypersync-client-darwin-x64': 0.6.2 + '@envio-dev/hypersync-client-linux-arm64-gnu': 0.6.2 + '@envio-dev/hypersync-client-linux-x64-gnu': 0.6.2 + '@envio-dev/hypersync-client-linux-x64-musl': 0.6.2 + '@envio-dev/hypersync-client-win32-x64-msvc': 0.6.2 '@ethersproject/abi@5.7.0': dependencies: @@ -6974,6 +7056,8 @@ snapshots: dependencies: path-key: 3.1.1 + npm@10.8.2: {} + nwsapi@2.2.10: {} nyc@15.1.0: @@ -7314,7 +7398,7 @@ snapshots: rescript-nodejs@16.0.0: {} - rescript-rest@0.7.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0): + rescript-rest@0.8.0(rescript-schema@8.0.3(rescript@11.1.0))(rescript@11.1.0): dependencies: rescript: 11.1.0 rescript-schema: 8.0.3(rescript@11.1.0) @@ -7950,6 +8034,8 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yarn@1.22.22: {} + yn@3.1.1: {} yocto-queue@0.1.0: {}