diff --git a/package.json b/package.json index 2713d683c1..63874dfc91 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "test:one": "polkadot-dev-run-test --env node" }, "devDependencies": { - "@polkadot/dev": "^0.75.11", + "@polkadot/dev": "^0.75.13", "@polkadot/typegen": "workspace:packages/typegen", "@types/node": "^20.2.5" }, diff --git a/packages/rpc-provider/src/substrate-connect/index.spec.ts b/packages/rpc-provider/src/substrate-connect/index.spec.ts index 5baf00a01c..a7a5c85c3a 100644 --- a/packages/rpc-provider/src/substrate-connect/index.spec.ts +++ b/packages/rpc-provider/src/substrate-connect/index.spec.ts @@ -3,43 +3,30 @@ /// -/* eslint-disable sort-keys */ -/* eslint-disable promise/param-names */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-empty-function */ -/* eslint-disable @typescript-eslint/no-floating-promises */ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ -/* eslint-disable @typescript-eslint/ban-types */ - -// FIXME A number of tests here, that were passing, is not skipped since -// Jest has "some" issues with `await import` - we don't transform these - import type * as Sc from '@substrate/connect'; import type { HealthChecker, SmoldotHealth } from './types.js'; import { ScProvider } from './index.js'; -type MockChain = Sc.Chain & { - _spec: () => string - _recevedRequests: () => string[] - _isTerminated: () => boolean - _triggerCallback: (response: string | {}) => void - _setTerminateInterceptor: (fn: () => void) => void - _setSendJsonRpcInterceptor: (fn: (rpc: string) => void) => void - _getLatestRequest: () => string +interface MockChain extends Sc.Chain { + _spec: () => string; + _recevedRequests: () => string[]; + _isTerminated: () => boolean; + _triggerCallback: (response: string | object) => void; + _setTerminateInterceptor: (fn: () => void) => void; + _setSendJsonRpcInterceptor: (fn: (rpc: string) => void) => void; + _getLatestRequest: () => string; } -type MockedHealthChecker = HealthChecker & { - _isActive: () => boolean - _triggerHealthUpdate: (update: SmoldotHealth) => void +interface MockedHealthChecker extends HealthChecker { + _isActive: () => boolean; + _triggerHealthUpdate: (update: SmoldotHealth) => void; } +type MockSc = typeof Sc & { + latestChain: () => MockChain; +}; + enum WellKnownChain { polkadot = 'polkadot', ksmcc3 = 'ksmcc3', @@ -47,16 +34,23 @@ enum WellKnownChain { westend2 = 'westend2' } -const wait = (ms: number) => new Promise((res) => setTimeout(res, ms)); +const wait = (ms: number) => + new Promise((resolve) => + setTimeout(resolve, ms) + ); function healthCheckerMock (): MockedHealthChecker { - let cb: (health: SmoldotHealth) => void = () => {}; - - let sendJsonRpc: (request: string) => void = () => {}; - + let cb: (health: SmoldotHealth) => void = () => undefined; + let sendJsonRpc: (request: string) => void = () => undefined; let isActive = false; return { + _isActive: () => isActive, + _triggerHealthUpdate: (update: SmoldotHealth) => { + cb(update); + }, + responsePassThrough: (response) => response, + sendJsonRpc: (...args) => sendJsonRpc(...args), setSendJsonRpc: (cb) => { sendJsonRpc = cb; }, @@ -66,12 +60,6 @@ function healthCheckerMock (): MockedHealthChecker { }, stop: () => { isActive = false; - }, - sendJsonRpc: (...args) => sendJsonRpc(...args), - responsePassThrough: (response) => response, - _isActive: () => isActive, - _triggerHealthUpdate: (update: SmoldotHealth) => { - cb(update); } }; } @@ -80,15 +68,15 @@ function healthCheckerFactory () { const _healthCheckers: MockedHealthChecker[] = []; return { + _healthCheckers, + _latestHealthChecker: () => _healthCheckers.slice(-1)[0], healthChecker: () => { const result = healthCheckerMock(); _healthCheckers.push(result); return result; - }, - _healthCheckers, - _latestHealthChecker: () => _healthCheckers.slice(-1)[0] + } }; } @@ -96,33 +84,33 @@ function getFakeChain (spec: string, callback: Sc.JsonRpcCallback): MockChain { const _receivedRequests: string[] = []; let _isTerminated = false; - let terminateInterceptor: Function = Function.prototype; - let sendJsonRpcInterceptor: Function = Function.prototype; + let terminateInterceptor = Function.prototype; + let sendJsonRpcInterceptor = Function.prototype; return { - _spec: () => spec, - _recevedRequests: () => _receivedRequests, + _getLatestRequest: () => _receivedRequests[_receivedRequests.length - 1], _isTerminated: () => _isTerminated, - _triggerCallback: (response) => { - callback( - typeof response === 'string' ? response : JSON.stringify(response) - ); - }, + _recevedRequests: () => _receivedRequests, _setSendJsonRpcInterceptor: (fn) => { sendJsonRpcInterceptor = fn; }, _setTerminateInterceptor: (fn) => { terminateInterceptor = fn; }, - sendJsonRpc: (rpc) => { - sendJsonRpcInterceptor(rpc); - _receivedRequests.push(rpc); + _spec: () => spec, + _triggerCallback: (response) => { + callback( + typeof response === 'string' ? response : JSON.stringify(response) + ); }, remove: () => { terminateInterceptor(); _isTerminated = true; }, - _getLatestRequest: () => _receivedRequests[_receivedRequests.length - 1] + sendJsonRpc: (rpc) => { + sendJsonRpcInterceptor(rpc); + _receivedRequests.push(rpc); + } }; } @@ -161,12 +149,13 @@ function getFakeClient () { }; } -function connectorFactory () { +function connectorFactory (): MockSc { const clients: ReturnType[] = []; const latestClient = () => clients[clients.length - 1]; return { WellKnownChain, + _clients: () => clients, createScClient: () => { const result = getFakeClient(); @@ -174,14 +163,13 @@ function connectorFactory () { return result; }, - _clients: () => clients, - latestClient, latestChain: () => - latestClient()._chains()[latestClient()._chains().length - 1] - }; + latestClient()._chains()[latestClient()._chains().length - 1], + latestClient + } as unknown as MockSc; } -function setChainSyncyingStatus (isSyncing: boolean) { +function setChainSyncyingStatus (isSyncing: boolean): void { getCurrentHealthChecker()._triggerHealthUpdate({ isSyncing, peers: 1, @@ -189,13 +177,13 @@ function setChainSyncyingStatus (isSyncing: boolean) { }); } -let mockSc: typeof Sc & { latestChain: () => MockChain }; +let mockSc: MockSc; let mockedHealthChecker: ReturnType; const getCurrentHealthChecker = () => mockedHealthChecker._latestHealthChecker(); describe('ScProvider', () => { beforeAll(() => { - mockSc = connectorFactory() as unknown as typeof Sc & { latestChain: () => MockChain }; + mockSc = connectorFactory(); mockedHealthChecker = healthCheckerFactory(); }); @@ -348,7 +336,7 @@ describe('ScProvider', () => { setChainSyncyingStatus(false); - const responsePromise = provider.send('getData', ['foo']); + const responsePromise = provider.send('getData', ['foo']); await wait(0); expect(chain._getLatestRequest()).toEqual( @@ -358,8 +346,8 @@ describe('ScProvider', () => { const result = { foo: 'foo' }; chain._triggerCallback({ - jsonrpc: '2.0', id: 1, + jsonrpc: '2.0', result }); @@ -378,8 +366,8 @@ describe('ScProvider', () => { setTimeout(() => { chain._triggerCallback({ - jsonrpc: '2.0', - id: 1 + id: 1, + jsonrpc: '2.0' }); }, 0); @@ -419,8 +407,8 @@ describe('ScProvider', () => { setTimeout(() => { chain._triggerCallback({ - jsonrpc: '2.0', id: 1, + jsonrpc: '2.0', result: unsubscribeToken }); }, 0); @@ -458,7 +446,9 @@ describe('ScProvider', () => { expect(cb).toHaveBeenCalledTimes(2); expect(cb).toHaveBeenLastCalledWith(null, 2); - provider.unsubscribe('foo', 'chain_unsubscribeNewHeads', unsubscribeToken); + provider + .unsubscribe('foo', 'chain_unsubscribeNewHeads', unsubscribeToken) + .catch(console.error); chain._triggerCallback({ jsonrpc: '2.0', @@ -492,8 +482,8 @@ describe('ScProvider', () => { }); setTimeout(() => { chain._triggerCallback({ - jsonrpc: '2.0', id: 1, + jsonrpc: '2.0', result: unsubscribeToken }); }, 0); @@ -523,8 +513,8 @@ describe('ScProvider', () => { setTimeout(() => { chain._triggerCallback({ - jsonrpc: '2.0', id: 1, + jsonrpc: '2.0', result: unsubscribeToken }); }, 0); @@ -560,7 +550,7 @@ describe('ScProvider', () => { await wait(0); await expect( - provider.subscribe('foo', 'bar', ['baz'], () => {}) + provider.subscribe('foo', 'bar', ['baz'], () => undefined) ).rejects.toThrow(/Unsupported subscribe method: bar/); }); }); @@ -594,8 +584,8 @@ describe('ScProvider', () => { setTimeout(() => { chain._triggerCallback({ - jsonrpc: '2.0', id: 1, + jsonrpc: '2.0', result: unsubscribeToken }); }, 0); diff --git a/packages/types/src/primitive/StorageKey.ts b/packages/types/src/primitive/StorageKey.ts index 46104b4499..7a5582eca5 100644 --- a/packages/types/src/primitive/StorageKey.ts +++ b/packages/types/src/primitive/StorageKey.ts @@ -70,8 +70,6 @@ function decodeStorageKey (value?: string | Uint8Array | StorageKey | StorageEnt } return { - // This is unknown[] above (also where assigned), the linter thinks it is any[] here - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument key: fn(...args), method: fn.method, section: fn.section diff --git a/yarn.lock b/yarn.lock index e2e625e816..681f843845 100644 --- a/yarn.lock +++ b/yarn.lock @@ -468,40 +468,40 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/dev-test@npm:^0.75.11": - version: 0.75.11 - resolution: "@polkadot/dev-test@npm:0.75.11" +"@polkadot/dev-test@npm:^0.75.13": + version: 0.75.13 + resolution: "@polkadot/dev-test@npm:0.75.13" dependencies: jsdom: ^22.1.0 tslib: ^2.5.2 - checksum: 2342e72802c761eecb0ba26435070b2bfd14d05fa28c5b8e35962a160a0b4ab2a55955bf03f3e0449ea08a102fb82b424e0a24b3ee87ebc05a6ea72e41c37d08 + checksum: 817e3f60b227a5c77fcc5e5472478e2460ea21f895e92f78db423245b08b5c60d96d592c96b3bfd58f03087eb891390b5558fd60a346fd9194f7736301ff674b languageName: node linkType: hard -"@polkadot/dev-ts@npm:^0.75.11": - version: 0.75.11 - resolution: "@polkadot/dev-ts@npm:0.75.11" +"@polkadot/dev-ts@npm:^0.75.13": + version: 0.75.13 + resolution: "@polkadot/dev-ts@npm:0.75.13" dependencies: json5: ^2.2.3 tslib: ^2.5.2 typescript: ^5.0.4 - checksum: f15d902adb68c473d3306f9caf4e0dd5472b56ae0dc4dbc119cb681168b0b0aa113f43e888b9ccea926cc5df836a410e474f3f7bc87cb53514a7af3c6dfa9a9f + checksum: cfe6a123055d70fd50f73540d0d5fe11adeacf37aad120aa9a12cb9a09c4181bfe32c33c943b55fb46ceb083849c414bad755b9b808059e5c9d342232b114f55 languageName: node linkType: hard -"@polkadot/dev@npm:^0.75.11": - version: 0.75.11 - resolution: "@polkadot/dev@npm:0.75.11" +"@polkadot/dev@npm:^0.75.13": + version: 0.75.13 + resolution: "@polkadot/dev@npm:0.75.13" dependencies: "@eslint/js": ^8.41.0 - "@polkadot/dev-test": ^0.75.11 - "@polkadot/dev-ts": ^0.75.11 + "@polkadot/dev-test": ^0.75.13 + "@polkadot/dev-ts": ^0.75.13 "@rollup/plugin-alias": ^5.0.0 "@rollup/plugin-commonjs": ^25.0.0 "@rollup/plugin-dynamic-import-vars": ^2.0.3 "@rollup/plugin-inject": ^5.0.3 "@rollup/plugin-json": ^6.0.0 - "@rollup/plugin-node-resolve": ^15.0.2 + "@rollup/plugin-node-resolve": ^15.1.0 "@tsconfig/strictest": ^2.0.1 "@typescript-eslint/eslint-plugin": ^5.59.8 "@typescript-eslint/parser": ^5.59.8 @@ -530,7 +530,7 @@ __metadata: rollup-plugin-cleanup: ^3.2.1 tslib: ^2.5.2 typescript: ^5.0.4 - webpack: ^5.84.1 + webpack: ^5.85.0 webpack-cli: ^5.1.1 webpack-dev-server: ^4.15.0 webpack-merge: ^5.9.0 @@ -560,7 +560,7 @@ __metadata: polkadot-exec-rollup: scripts/polkadot-exec-rollup.mjs polkadot-exec-tsc: scripts/polkadot-exec-tsc.mjs polkadot-exec-webpack: scripts/polkadot-exec-webpack.mjs - checksum: fcdc8fe4f3d2e8837a69344ed360e7289e92d54be6f12e5f70fbc97df85e6d888d70055a4483613b66451a18357f0624acc10400906b84f0a7791acd41a0e880 + checksum: 62e0e6ddfc1b92e66554e23f1092a23b6df6bda3d71c2e2922dbf8cdc00f84de079cd2ec0d23854544e3660f9f1ca7f275ae2b63c66df0a9e6a9cfc9010b2cfc languageName: node linkType: hard @@ -1012,9 +1012,9 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-node-resolve@npm:^15.0.2": - version: 15.0.2 - resolution: "@rollup/plugin-node-resolve@npm:15.0.2" +"@rollup/plugin-node-resolve@npm:^15.1.0": + version: 15.1.0 + resolution: "@rollup/plugin-node-resolve@npm:15.1.0" dependencies: "@rollup/pluginutils": ^5.0.1 "@types/resolve": 1.20.2 @@ -1027,7 +1027,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 328eafee06ff967a36441b55e77fbd0d4f599d256e5d1977800ee71915846c46bc1b6185df35c7b512ad2b4023b05b65a332be77b8b00b9d8a20f87d056b8166 + checksum: 83617cdbb90cb780251e8b16dc1671e35bde90b8d4d30e008aefe706b5b643057f6299bdd3226b2a30bf5e4f807a880169de3faa47b9f2ba38d39f294f85f951 languageName: node linkType: hard @@ -7515,7 +7515,7 @@ fsevents@~2.3.2: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: - "@polkadot/dev": ^0.75.11 + "@polkadot/dev": ^0.75.13 "@polkadot/typegen": "workspace:packages/typegen" "@types/node": ^20.2.5 languageName: unknown @@ -8971,9 +8971,9 @@ fsevents@~2.3.2: languageName: node linkType: hard -"webpack@npm:^5.84.1": - version: 5.84.1 - resolution: "webpack@npm:5.84.1" +"webpack@npm:^5.85.0": + version: 5.85.0 + resolution: "webpack@npm:5.85.0" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.0 @@ -9004,7 +9004,7 @@ fsevents@~2.3.2: optional: true bin: webpack: bin/webpack.js - checksum: 646b645df5badf2dac2ddd0193c9e9a177d51283d18f918eead36a0cdf7b750c4111d9ac11d9825c1334cbd0a6fb8f82628fbfb90d0066f927265dd11b47b192 + checksum: b013be9fbc7f6810d1f229f570c70710ddbc7290f817411acffe4214b2b6c783a041ab1f2005d9e1109f4ab21c136f0f8d8c067a5fb64f20a82dcbc1ee0d3f42 languageName: node linkType: hard