diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index 0e762bb2c7..52d4387f3c 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -70,7 +70,6 @@ "subleveldown": "4.1.4", "tslib": "2.6.3", "typeorm": "0.3.17", - "undici": "5.28.4", "uuid": "8.3.2" }, "devDependencies": { diff --git a/packages/neuron-wallet/src/utils/ckb-rpc.ts b/packages/neuron-wallet/src/utils/ckb-rpc.ts index 6a7d3a08d8..3f67d6e8be 100644 --- a/packages/neuron-wallet/src/utils/ckb-rpc.ts +++ b/packages/neuron-wallet/src/utils/ckb-rpc.ts @@ -10,7 +10,6 @@ import { PayloadInBatchException, IdNotMatchedInBatchException, } from '@ckb-lumos/rpc/lib/exceptions' -import { request } from 'undici' import CommonUtils from './common' import { NetworkType } from '../models/network' import type { RPCConfig } from '@ckb-lumos/rpc/lib/types/common' @@ -335,12 +334,12 @@ export class LightRPC extends Base { return [] } - const res = await request(node.url, { + const res = await fetch(node.url, { method: 'POST', body: JSON.stringify(payload), headers: { 'content-type': 'application/json' }, }) - const batchRes = await res.body.json() + const batchRes = await res.json() if (!Array.isArray(batchRes)) { return [] diff --git a/packages/neuron-wallet/src/utils/rpc-request.ts b/packages/neuron-wallet/src/utils/rpc-request.ts index 56bbd7babc..dc0631caaf 100644 --- a/packages/neuron-wallet/src/utils/rpc-request.ts +++ b/packages/neuron-wallet/src/utils/rpc-request.ts @@ -1,5 +1,3 @@ -import { request } from 'undici' - export const rpcRequest = async ( url: string, options: { @@ -7,7 +5,7 @@ export const rpcRequest = async ( params?: any } ): Promise => { - const res = await request(url, { + const res = await fetch(url, { method: 'POST', body: JSON.stringify({ id: 0, @@ -19,10 +17,10 @@ export const rpcRequest = async ( 'content-type': 'application/json', }, }) - if (res.statusCode !== 200) { - throw new Error(`indexer request failed with HTTP code ${res.statusCode}`) + if (res.status !== 200) { + throw new Error(`indexer request failed with HTTP code ${res.status}`) } - const body = await res.body.json() + const body = await res.json() if (body !== null && typeof body === 'object' && 'result' in body) { return body?.result as T } @@ -36,7 +34,7 @@ export const rpcBatchRequest = async ( params?: any }[] ): Promise => { - const res = await request(url, { + const res = await fetch(url, { headers: { 'content-type': 'application/json', }, @@ -50,10 +48,10 @@ export const rpcBatchRequest = async ( })) ), }) - if (res.statusCode !== 200) { - throw new Error(`indexer request failed with HTTP code ${res.statusCode}`) + if (res.status !== 200) { + throw new Error(`indexer request failed with HTTP code ${res.status}`) } - const responseBody = await res.body.json() + const responseBody = await res.json() if (Array.isArray(responseBody) && responseBody.every(i => 'id' in i)) { return responseBody.sort((a, b) => a.id - b.id) } diff --git a/packages/neuron-wallet/tests/controllers/sync-api.test.ts b/packages/neuron-wallet/tests/controllers/sync-api.test.ts index 40dec1ce51..1288f92a1a 100644 --- a/packages/neuron-wallet/tests/controllers/sync-api.test.ts +++ b/packages/neuron-wallet/tests/controllers/sync-api.test.ts @@ -44,9 +44,6 @@ jest.doMock('models/subjects/networks', () => { }, } }) -jest.mock('undici', () => ({ - request: () => jest.fn()(), -})) jest.mock('services/multisig', () => ({ syncMultisigOutput: () => jest.fn(), })) diff --git a/packages/neuron-wallet/tests/utils/rpc-request.test.ts b/packages/neuron-wallet/tests/utils/rpc-request.test.ts index f93ad617b9..fc1f0d207c 100644 --- a/packages/neuron-wallet/tests/utils/rpc-request.test.ts +++ b/packages/neuron-wallet/tests/utils/rpc-request.test.ts @@ -1,10 +1,5 @@ import { rpcBatchRequest, rpcRequest } from '../../src/utils/rpc-request' -const requestMock = jest.fn() -jest.mock('undici', () => ({ - request: () => requestMock(), -})) - describe('rpc-batch-request', () => { const options = [ { @@ -17,15 +12,19 @@ describe('rpc-batch-request', () => { }, ] it('fetch error', async () => { - requestMock.mockResolvedValueOnce({ statusCode: 500 }) + global.fetch = jest.fn(() => + Promise.resolve({ + status: 500, + }) + ) as jest.Mock await expect(rpcBatchRequest('url', options)).rejects.toThrow( new Error(`indexer request failed with HTTP code 500`) ) }) it('result is order by id', async () => { - requestMock.mockResolvedValueOnce({ - statusCode: 200, - body: { + global.fetch = jest.fn(() => + Promise.resolve({ + status: 200, json() { return Promise.resolve([ { @@ -38,8 +37,9 @@ describe('rpc-batch-request', () => { }, ]) }, - }, - }) + }) + ) as jest.Mock + const res = await rpcBatchRequest('url', options) expect(res).toEqual([ { @@ -60,21 +60,25 @@ describe('rpc-request', () => { params: 1, } it('fetch error', async () => { - requestMock.mockResolvedValueOnce({ statusCode: 500 }) + global.fetch = jest.fn(() => + Promise.resolve({ + status: 500, + }) + ) as jest.Mock await expect(rpcRequest('url', option)).rejects.toThrow(new Error(`indexer request failed with HTTP code 500`)) }) it('fetch success', async () => { - requestMock.mockResolvedValueOnce({ - statusCode: 200, - body: { + global.fetch = jest.fn(() => + Promise.resolve({ + status: 200, json() { return Promise.resolve({ id: 2, result: 2, }) }, - }, - }) + }) + ) as jest.Mock const res = await rpcRequest('url', option) expect(res).toEqual(2) }) diff --git a/yarn.lock b/yarn.lock index fea9265fb4..a925a6d045 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2658,11 +2658,6 @@ resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== -"@fastify/busboy@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" - integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== - "@floating-ui/core@^1.4.2": version "1.5.2" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.2.tgz#53a0f7a98c550e63134d504f26804f6b83dbc071" @@ -19981,13 +19976,6 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici@5.28.4: - version "5.28.4" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"