diff --git a/jest.config.js b/jest.config.js index b45d38cb64..075d414d66 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,10 +6,13 @@ module.exports = { 'ts-jest', { tsconfig: 'tsconfig.test.json', + isolatedModules: true, }, ], }, - transformIgnorePatterns: ['/node_modules/(?!query-string/)'], + transformIgnorePatterns: [ + '/node_modules/(?!(query-string|@noble/hashes|@noble/curves|@streamr)/)', + ], testEnvironment: './test/test-utils/env', collectCoverage: true, coverageProvider: 'v8', diff --git a/package-lock.json b/package-lock.json index 4291c35ba1..521051b7d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@sentry/react": "^8.34.0", "@streamr/config": "^5.9.2", "@streamr/hub-contracts": "^1.1.2", - "@streamr/sdk": "^103.2.2", + "@streamr/sdk": "^103.3.0-experiment.0", "@streamr/streamr-icons": "^0.1.9", "@streamr/streamr-layout": "^2.5.3", "@tanstack/react-query": "^5.51.21", @@ -74,7 +74,7 @@ "rich-markdown-editor": "^11.21.3", "storybook": "^8.3.3", "stream-browserify": "^3.0.0", - "streamr-client-react": "^3.3.0", + "streamr-client-react": "^3.4.0", "stringify-object": "^5.0.0", "styled-components": "^5.3.10", "toasterhea": "^1.0.4", @@ -10030,24 +10030,24 @@ } }, "node_modules/@streamr/autocertifier-client": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/autocertifier-client/-/autocertifier-client-103.2.2.tgz", - "integrity": "sha512-YAzkRcf6X9JJ+W1S3b3RKEVk9BLHEQZxQosfvoDI6L26ZW5StpHY7QUpJ5FTYN9Cd6GulB7G4AkBkDYbTAPEbw==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/autocertifier-client/-/autocertifier-client-103.3.0-experiment.0.tgz", + "integrity": "sha512-27u1SOFFN/LMBIrktF/tA0VW2xkWpVEg4JI1OG1Y8dwb/bM/4H7MFcI/wX2CA54ILk7l/fUbQwRUp1yJSsL6Uw==", "license": "STREAMR NETWORK OPEN SOURCE LICENSE", "dependencies": { "@protobuf-ts/runtime-rpc": "^2.8.2", - "@streamr/utils": "103.2.2", + "@streamr/utils": "103.3.0-experiment.0", "eventemitter3": "^5.0.0", "node-forge": "^1.3.2" } }, "node_modules/@streamr/cdn-location": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/cdn-location/-/cdn-location-103.2.2.tgz", - "integrity": "sha512-drF3f81tLqxO8cxoCWVNHHTcYDnjgjjURpba1dVFrp7vKTDZZYE6+XLfPMfpGHeMBDocuH8fZ2mOnIRQOFzScw==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/cdn-location/-/cdn-location-103.3.0-experiment.0.tgz", + "integrity": "sha512-zLh17/Vxp9DmexSiOpEohdeUjrFYMX/NPhn06uEMoTmwXseDUg7ZrRN2vzSAW2o/dj7XCy5ZQ9Qpa65AQ3tvVA==", "license": "Apache-2.0", "dependencies": { - "@streamr/utils": "103.2.2", + "@streamr/utils": "103.3.0-experiment.0", "haversine": "^1.1.1" } }, @@ -10058,19 +10058,19 @@ "license": "STREAMR NETWORK OPEN SOURCE LICENSE" }, "node_modules/@streamr/dht": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/dht/-/dht-103.2.2.tgz", - "integrity": "sha512-+gYNv+ERnYq4kV1YtGxcltp7NDb44wkW67eWmO7S+cxkn067EU+XrVAPB9anz/4wGUFEQedObL9JQrobqhVMUA==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/dht/-/dht-103.3.0-experiment.0.tgz", + "integrity": "sha512-5fBnJ351kaqgts8YS+623tDrh76zJfXvCNC2fHnjB9QV36YQ4YcJK7ygn6c8QcevMxeH5UYV/E+0Hwx0lHJtRA==", "license": "STREAMR NETWORK OPEN SOURCE LICENSE", "dependencies": { "@js-sdsl/ordered-map": "^4.4.2", "@protobuf-ts/runtime": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", - "@streamr/autocertifier-client": "103.2.2", - "@streamr/cdn-location": "103.2.2", - "@streamr/geoip-location": "103.2.2", - "@streamr/proto-rpc": "103.2.2", - "@streamr/utils": "103.2.2", + "@streamr/autocertifier-client": "103.3.0-experiment.0", + "@streamr/cdn-location": "103.3.0-experiment.0", + "@streamr/geoip-location": "103.3.0-experiment.0", + "@streamr/proto-rpc": "103.3.0-experiment.0", + "@streamr/utils": "103.3.0-experiment.0", "eventemitter3": "^5.0.0", "heap": "^0.2.6", "ipaddr.js": "^2.0.1", @@ -10154,12 +10154,12 @@ } }, "node_modules/@streamr/geoip-location": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/geoip-location/-/geoip-location-103.2.2.tgz", - "integrity": "sha512-Ypua/C8VZYAQ6DuYVNN0a4VpdN7GbsBKeJR4IQn9vlqjFFaXZUhE1f3GB3IfDdfhriRUIpXHAziMwlW3qMUgqg==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/geoip-location/-/geoip-location-103.3.0-experiment.0.tgz", + "integrity": "sha512-ez0Oh0c1VaoLDrjJmeKOCm0D7bpORnpX23igCWZoCUn7Ur3mihN0wz1pOnCTVNW5C064dlhI6HszaFTmrbTDqA==", "license": "Apache-2.0", "dependencies": { - "@streamr/utils": "103.2.2", + "@streamr/utils": "103.3.0-experiment.0", "eventemitter3": "^5.0.0", "long-timeout": "^0.1.1", "mmdb-lib": "^3.0.1", @@ -10198,9 +10198,9 @@ } }, "node_modules/@streamr/geoip-location/node_modules/tar": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", - "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", + "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -10339,14 +10339,14 @@ "integrity": "sha512-A8DRvmfNCwLS1iduPPj7wNAZJMe9/ZimMhoHhbbBiq+7Vq/HFjiNcdoQ5NinFdXD5aTsoNUGG5pAYKj7YMpm9A==" }, "node_modules/@streamr/proto-rpc": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/proto-rpc/-/proto-rpc-103.2.2.tgz", - "integrity": "sha512-RG0FZMR9nxtb0ndS6sOZrBPxuASXs3/8vJ80tGaq2QZH7ymOPpGE4mDfXF7SlNkMP2vblTllPSgglNu9zqMqKQ==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/proto-rpc/-/proto-rpc-103.3.0-experiment.0.tgz", + "integrity": "sha512-vtBXuXkLaZQVsfUyYivddLPgl5p+8JIDhQuuWEO3YSBLLhwBGiCBGguma/wNSm02s7pDhLgLwMo4OzjxwhuiSQ==", "license": "(Apache-2.0 AND BSD-3-Clause)", "dependencies": { "@protobuf-ts/runtime": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", - "@streamr/utils": "103.2.2", + "@streamr/utils": "103.3.0-experiment.0", "eventemitter3": "^5.0.0", "lodash": "^4.17.21", "uuid": "^11.1.0" @@ -10384,23 +10384,20 @@ } }, "node_modules/@streamr/sdk": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/sdk/-/sdk-103.2.2.tgz", - "integrity": "sha512-MkElzXjLdtrFif0cUnQefrmbjHjxkbCPrIEYLKr/pxLtjigjUL6ZT25QwakKa1ZK7+6/cXLZlrCg4CmKxqFzaQ==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/sdk/-/sdk-103.3.0-experiment.0.tgz", + "integrity": "sha512-kz7XMnoOEXQx2xxkxSMtfHUCYpkzKXtzpowwNUEadSS6olKkRL1a+t38IBN8l9OtK8tYgxuurMkV2er1MHOFSA==", "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.28.4", - "@babel/runtime-corejs3": "^7.28.4", "@noble/post-quantum": "^0.4.1", "@protobuf-ts/runtime": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", "@streamr/config": "^5.9.2", - "@streamr/dht": "103.2.2", + "@streamr/dht": "103.3.0-experiment.0", "@streamr/network-contracts": "^9.1.0", - "@streamr/proto-rpc": "103.2.2", - "@streamr/trackerless-network": "103.2.2", - "@streamr/utils": "103.2.2", - "core-js": "^3.47.0", + "@streamr/proto-rpc": "103.3.0-experiment.0", + "@streamr/trackerless-network": "103.3.0-experiment.0", + "@streamr/utils": "103.3.0-experiment.0", "env-paths": "^2.2.1", "ethers": "^6.13.0", "eventemitter3": "^5.0.0", @@ -10410,9 +10407,11 @@ "p-limit": "^3.1.0", "p-memoize": "4.0.4", "p-throttle": "4.1.1", + "readable-stream": "^4.7.0", "reflect-metadata": "^0.2.1", "sqlite": "^5.1.1", "sqlite3": "^5.1.7", + "timers-browserify": "^2.0.12", "ts-essentials": "^10.1.1", "ts-toolbelt": "^9.6.0", "tsyringe": "^4.10.0", @@ -10439,6 +10438,22 @@ "node": "20 || >=22" } }, + "node_modules/@streamr/sdk/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@streamr/sdk/node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", @@ -10525,16 +10540,16 @@ } }, "node_modules/@streamr/trackerless-network": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/trackerless-network/-/trackerless-network-103.2.2.tgz", - "integrity": "sha512-klwi6F8hZBmUzYOZEUwnodwhASXdF596Ay1f3t6GibwJTwxrmXNfK+tEHka//yh1lAroKZYzqbc8w50z4GKOXQ==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/trackerless-network/-/trackerless-network-103.3.0-experiment.0.tgz", + "integrity": "sha512-0Ai0r6fhvkPDOO8WCo8HSsQgrHDX01Ld9wyzVHPnsR+H9RGzJG65PzC62P2Z5w1G4PZwzMiebeJH0xjN8DAKcQ==", "license": "STREAMR NETWORK OPEN SOURCE LICENSE", "dependencies": { "@protobuf-ts/runtime": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", - "@streamr/dht": "103.2.2", - "@streamr/proto-rpc": "103.2.2", - "@streamr/utils": "103.2.2", + "@streamr/dht": "103.3.0-experiment.0", + "@streamr/proto-rpc": "103.3.0-experiment.0", + "@streamr/utils": "103.3.0-experiment.0", "eventemitter3": "^5.0.0", "lodash": "^4.17.21", "ts-essentials": "^10.1.1", @@ -10579,17 +10594,25 @@ } }, "node_modules/@streamr/utils": { - "version": "103.2.2", - "resolved": "https://registry.npmjs.org/@streamr/utils/-/utils-103.2.2.tgz", - "integrity": "sha512-TRsIj9xi6GYJQ8qwxhXK85FfApbgXOFY70SukrO/zKTCxRWIXCfEiC5cVzGiS2470AInnjGwgQF83oOcIKmP8w==", + "version": "103.3.0-experiment.0", + "resolved": "https://registry.npmjs.org/@streamr/utils/-/utils-103.3.0-experiment.0.tgz", + "integrity": "sha512-IHX3qFgo3vZ2NeVf8lWeLV3uAfM+5EzY2qFQBmn//eNbYlGiTBm2FEkfYAeup+Xn9PdYfzjdDv8OkLagJa4HoA==", "license": "Apache-2.0", "dependencies": { "@noble/curves": "^1.9.7", + "@noble/hashes": "^2.0.1", "@noble/post-quantum": "^0.4.1", + "asn1.js": "^5.4.1", + "browserify-aes": "^1.2.0", + "buffer": "^6.0.3", + "buffer-shim": "^1.0.1", "eventemitter3": "^5.0.0", "lodash": "^4.17.21", + "path-browserify": "^1.0.1", "pino": "^10.1.0", "pino-pretty": "^13.1.2", + "public-encrypt": "^4.0.3", + "readable-stream": "^4.7.0", "secp256k1": "^5.0.1", "sha3": "^2.1.4" } @@ -10609,7 +10632,7 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@streamr/utils/node_modules/@noble/hashes": { + "node_modules/@streamr/utils/node_modules/@noble/curves/node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", @@ -10621,6 +10644,30 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@streamr/utils/node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@streamr/utils/node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/@streamr/utils/node_modules/bn.js": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", @@ -10716,6 +10763,22 @@ ], "license": "MIT" }, + "node_modules/@streamr/utils/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@streamr/utils/node_modules/secp256k1": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", @@ -15600,6 +15663,15 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-shim/-/buffer-shim-1.0.1.tgz", + "integrity": "sha512-VG1oTE6Ecr9h/Gx3XOXue0F1vQaQlkBd3tGAzpL7Fsu+8f1Jbtk5ORPkrVLA/ADBTQ08bcPt3HanaZ7tUfJqMg==", + "license": "ISC", + "peerDependencies": { + "buffer": "^6.0.3" + } + }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -38945,11 +39017,12 @@ } }, "node_modules/streamr-client-react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/streamr-client-react/-/streamr-client-react-3.3.0.tgz", - "integrity": "sha512-vnI7RN81lSopi+c3suskEXXROeFDVhFXmpRKgNzMw+6cco7AdxyGWBpV+jaujEJDSdorsmfIWUK92GGkC//hTw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/streamr-client-react/-/streamr-client-react-3.4.0.tgz", + "integrity": "sha512-wH0I8/+QOyOH6gBvZeDpiXauwFfhSF/2BNTIyYQu025KDU/TguHUIYnCIf610iAeTGIeqSSwfIioa7dqVKRhfQ==", + "license": "ISC", "peerDependencies": { - "@streamr/sdk": "^102.0.0", + "@streamr/sdk": "^103.3.0-experiment.0", "process": "^0.11.10", "react": ">=16.8.0", "react-fast-compare": "^3.2.0" diff --git a/package.json b/package.json index d868d7acab..c2c6ec31c0 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@sentry/react": "^8.34.0", "@streamr/config": "^5.9.2", "@streamr/hub-contracts": "^1.1.2", - "@streamr/sdk": "^103.2.2", + "@streamr/sdk": "^103.3.0-experiment.0", "@streamr/streamr-icons": "^0.1.9", "@streamr/streamr-layout": "^2.5.3", "@tanstack/react-query": "^5.51.21", @@ -101,7 +101,7 @@ "rich-markdown-editor": "^11.21.3", "storybook": "^8.3.3", "stream-browserify": "^3.0.0", - "streamr-client-react": "^3.3.0", + "streamr-client-react": "^3.4.0", "stringify-object": "^5.0.0", "styled-components": "^5.3.10", "toasterhea": "^1.0.4", diff --git a/src/getters/getStreamrClient.ts b/src/getters/getStreamrClient.ts index 0d045fae55..a8781ac3ac 100644 --- a/src/getters/getStreamrClient.ts +++ b/src/getters/getStreamrClient.ts @@ -35,7 +35,8 @@ export async function getStreamrClientInstance( * Returns StreamrClient class. */ async function getStreamrClient() { - return (await import('@streamr/sdk')).default + const { StreamrClient } = await import('@streamr/sdk') + return StreamrClient } // Load the client library proactively so that we don't have to wait later. diff --git a/src/shared/test/components/Nav/nav.test.tsx b/src/shared/test/components/Nav/nav.test.tsx index 44c940f7b1..3bab67165c 100644 --- a/src/shared/test/components/Nav/nav.test.tsx +++ b/src/shared/test/components/Nav/nav.test.tsx @@ -4,17 +4,6 @@ import { render, RenderResult, screen } from '@testing-library/react' import Nav from '~/components/Nav' import { useWalletAccount, useEns } from '~/shared/stores/wallet' -/** - * Jest, even when using the `jsdom` environment, does not respect the `browser` field - * or `exports.*.browser` overrides in `package.json`. This means that Node-specific files - * from `@streamr/*` are not automatically swapped for their browser-friendly alternatives. - * - * To ensure the correct files are used in tests, the following mapping is required. - */ -jest.mock('@streamr/dht/dist/src/connection/webrtc/NodeWebrtcConnection', () => - require('@streamr/dht/dist/src/connection/webrtc/BrowserWebrtcConnection'), -) - jest.mock('~/shared/stores/wallet', () => ({ __esModule: true, useWalletAccount: jest.fn(), diff --git a/src/stores/streamDraft.tsx b/src/stores/streamDraft.tsx index 38ee3ec8a6..bc66af92a9 100644 --- a/src/stores/streamDraft.tsx +++ b/src/stores/streamDraft.tsx @@ -1,7 +1,8 @@ -import StreamrClient, { +import type { PermissionAssignment, Stream, StreamPermission, + StreamrClient, } from '@streamr/sdk' import { useQuery } from '@tanstack/react-query' import isEqual from 'lodash/isEqual'