diff --git a/packages/cache-service/package.json b/packages/cache-service/package.json index 78f0621fe..78bc8f2d0 100644 --- a/packages/cache-service/package.json +++ b/packages/cache-service/package.json @@ -33,7 +33,6 @@ "@nestjs/schedule": "^2.1.0", "@redstone-finance/protocol": "^0.3.6", "@redstone-finance/sdk": "^0.3.6", - "@redstone-finance/streamr-proxy": "^0.3.6", "@redstone-finance/utils": "^0.3.6", "arweave": "^1.12.2", "cache-manager": "^5.1.4", @@ -43,15 +42,18 @@ "ethers": "^5.7.2", "mongoose": "^7.6.3", "nestjs-pino": "^3.1.1", + "pako": "^2.1.0", "pino-http": "^8.2.1", "reflect-metadata": "^0.1.13", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "streamr-client": "^8.5.5" }, "devDependencies": { "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", "@types/express": "^4.17.14", + "@types/pako": "^2.0.3", "@types/supertest": "^2.0.12", "graphql": "^16.8.1", "graphql-request": "^5.2.0", diff --git a/packages/cache-service/src/broadcasters/streamr-broadcaster.ts b/packages/cache-service/src/broadcasters/streamr-broadcaster.ts index 1ce08df4f..2e0c99641 100644 --- a/packages/cache-service/src/broadcasters/streamr-broadcaster.ts +++ b/packages/cache-service/src/broadcasters/streamr-broadcaster.ts @@ -6,7 +6,7 @@ import { compressMsg, doesStreamExist, getStreamIdForNodeByEvmAddress, -} from "@redstone-finance/streamr-proxy"; +} from "../common/streamr"; import { Wallet, providers, utils } from "ethers"; import { CachedDataPackage } from "../data-packages/data-packages.model"; import { DataPackagesBroadcaster } from "./data-packages-broadcaster"; diff --git a/packages/cache-service/src/common/streamr.ts b/packages/cache-service/src/common/streamr.ts new file mode 100644 index 000000000..1a190a14f --- /dev/null +++ b/packages/cache-service/src/common/streamr.ts @@ -0,0 +1,35 @@ +import * as pako from "pako"; +import { StreamrClient } from "streamr-client"; + +export { StreamrClient, Subscription, StreamPermission } from "streamr-client"; + +export const getStreamIdForNodeByEvmAddress = (evmAddress: string) => + `${evmAddress}/redstone-oracle-node/data-packages`; + +export const doesStreamExist = async ( + streamr: StreamrClient, + streamId: string +): Promise => { + try { + await streamr.getStream(streamId); + return true; + } catch (error) { + if ((error as Error).toString().includes("NOT_FOUND")) { + return false; + } else { + throw error; + } + } +}; + +export const compressMsg = (data: unknown) => { + const dataStringified = JSON.stringify(data); + return pako.deflate(dataStringified); +}; + +export const decompressMsg = (msg: Uint8Array): T => { + const stringifiedData = pako.inflate(msg, { + to: "string", + }); + return JSON.parse(stringifiedData) as T; +}; diff --git a/packages/cache-service/src/streamr-listener/streamr-listener.service.ts b/packages/cache-service/src/streamr-listener/streamr-listener.service.ts index dc4d87697..f08b5d895 100644 --- a/packages/cache-service/src/streamr-listener/streamr-listener.service.ts +++ b/packages/cache-service/src/streamr-listener/streamr-listener.service.ts @@ -8,7 +8,7 @@ import { getStreamIdForNodeByEvmAddress, StreamrClient, Subscription, -} from "@redstone-finance/streamr-proxy"; +} from "../common/streamr"; import { DataPackagesService } from "../data-packages/data-packages.service"; import { ReceivedDataPackage } from "../data-packages/data-packages.interface"; import { RedstoneOraclesState } from "@redstone-finance/oracles-smartweave-contracts"; diff --git a/packages/cache-service/test/e2e/streamr-listener.spec.ts b/packages/cache-service/test/e2e/streamr-listener.spec.ts index 4d50cfab7..76095b641 100644 --- a/packages/cache-service/test/e2e/streamr-listener.spec.ts +++ b/packages/cache-service/test/e2e/streamr-listener.spec.ts @@ -1,4 +1,4 @@ -import { compressMsg } from "@redstone-finance/streamr-proxy"; +import { compressMsg } from "../../src/common/streamr"; import { consts } from "@redstone-finance/protocol"; import "../common/set-test-envs"; import { @@ -25,9 +25,9 @@ jest.mock("@redstone-finance/sdk", () => ({ })); // eslint-disable-next-line @typescript-eslint/no-unsafe-return -jest.mock("@redstone-finance/streamr-proxy", () => ({ +jest.mock("../../src/common/streamr", () => ({ __esModule: true, - ...jest.requireActual("@redstone-finance/streamr-proxy"), + ...jest.requireActual("../../src/common/streamr"), StreamrClient: jest.fn().mockImplementation(() => ({ subscribe(_streamId: string, callback: (msg: Uint8Array) => void) { callback(compressMsg(getMockDataPackages())); diff --git a/packages/cache-service/test/streamr.test.ts b/packages/cache-service/test/streamr.test.ts new file mode 100644 index 000000000..ddc4efad1 --- /dev/null +++ b/packages/cache-service/test/streamr.test.ts @@ -0,0 +1,8 @@ +import { getStreamIdForNodeByEvmAddress } from "../src/common/streamr"; + +describe("Stremr proxy tests", () => { + test("Should properly get stream id by node evm address", () => { + const streamId = getStreamIdForNodeByEvmAddress("0x1234"); + expect(streamId).toBe("0x1234/redstone-oracle-node/data-packages"); + }); +}); diff --git a/packages/cache-service/tsconfig.build.json b/packages/cache-service/tsconfig.build.json index e24182538..03d54a5a8 100644 --- a/packages/cache-service/tsconfig.build.json +++ b/packages/cache-service/tsconfig.build.json @@ -15,9 +15,6 @@ { "path": "../sdk/tsconfig.build.json" }, - { - "path": "../streamr-proxy/tsconfig.build.json" - }, { "path": "../utils/tsconfig.build.json" } diff --git a/packages/cache-service/tsconfig.json b/packages/cache-service/tsconfig.json index f02d91b1a..ea9163546 100644 --- a/packages/cache-service/tsconfig.json +++ b/packages/cache-service/tsconfig.json @@ -10,9 +10,6 @@ { "path": "../sdk/tsconfig.build.json" }, - { - "path": "../streamr-proxy/tsconfig.build.json" - }, { "path": "../utils/tsconfig.build.json" } diff --git a/yarn.lock b/yarn.lock index 52536ee31..dc8b63f7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6020,9 +6020,9 @@ __metadata: "@nestjs/testing": "npm:^9.0.0" "@redstone-finance/protocol": "npm:^0.3.6" "@redstone-finance/sdk": "npm:^0.3.6" - "@redstone-finance/streamr-proxy": "npm:^0.3.6" "@redstone-finance/utils": "npm:^0.3.6" "@types/express": "npm:^4.17.14" + "@types/pako": "npm:^2.0.3" "@types/supertest": "npm:^2.0.12" arweave: "npm:^1.12.2" cache-manager: "npm:^5.1.4" @@ -6035,11 +6035,13 @@ __metadata: mongodb-memory-server: "npm:^8.9.5" mongoose: "npm:^7.6.3" nestjs-pino: "npm:^3.1.1" + pako: "npm:^2.1.0" pino-http: "npm:^8.2.1" prompts: "npm:^2.4.2" reflect-metadata: "npm:^0.1.13" rxjs: "npm:^7.2.0" source-map-support: "npm:^0.5.20" + streamr-client: "npm:^8.5.5" supertest: "npm:^6.2.3" ts-loader: "npm:^9.2.3" tsconfig-paths: "npm:4.0.0" @@ -6542,16 +6544,6 @@ __metadata: languageName: unknown linkType: soft -"@redstone-finance/streamr-proxy@npm:^0.3.6, @redstone-finance/streamr-proxy@workspace:packages/streamr-proxy": - version: 0.0.0-use.local - resolution: "@redstone-finance/streamr-proxy@workspace:packages/streamr-proxy" - dependencies: - "@types/pako": "npm:^2.0.0" - pako: "npm:^2.1.0" - streamr-client: "npm:^8.5.5" - languageName: unknown - linkType: soft - "@redstone-finance/ton-connector@npm:^0.3.6, @redstone-finance/ton-connector@workspace:packages/ton-connector": version: 0.0.0-use.local resolution: "@redstone-finance/ton-connector@workspace:packages/ton-connector" @@ -8960,7 +8952,7 @@ __metadata: languageName: node linkType: hard -"@types/pako@npm:^2.0.0": +"@types/pako@npm:^2.0.3": version: 2.0.3 resolution: "@types/pako@npm:2.0.3" checksum: 45119ac3c4e8a77317c35493327039b74e333562f06ce038048228918d8ddfaa7958125aab960d1565b3861046022754c414dba1eecb210c44a32c415956bee2