diff --git a/src/util.ts b/src/util.ts index af260cd..e751481 100644 --- a/src/util.ts +++ b/src/util.ts @@ -3,6 +3,8 @@ import stringify from "json-stringify-deterministic"; import type { RPCRequest, RPCResponse } from "@lumeweb/relay-types"; // @ts-ignore import crypto from "hypercore-crypto"; +// @ts-ignore +import sodium from "sodium-universal"; import b4a from "b4a"; export function isPromise(obj: Promise) { @@ -91,3 +93,15 @@ export function validateTimestampedResponse( ): boolean { return validateResponse(relay, response, true); } + +export function hashQuery(query: RPCRequest): string { + const clonedQuery: RPCRequest = { + module: query.module, + method: query.method, + data: query.data, + }; + const queryHash = Buffer.allocUnsafe(32); + sodium.crypto_generichash(queryHash, Buffer.from(stringify(clonedQuery))); + + return queryHash.toString("hex"); +}