Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nikos/5939/eip1193 provider callback types #5971

Merged
merged 47 commits into from
Apr 20, 2023
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
6b2ac1b
Fix ProviderRpcError type
nikoulai Mar 29, 2023
9990e33
Fix callbacks' types
nikoulai Mar 29, 2023
1ea2abc
Update Eip1194Provider class
nikoulai Mar 29, 2023
14c627e
Update socket provider
nikoulai Mar 29, 2023
54235ba
Trigger workflow
nikoulai Mar 30, 2023
7f3ec5b
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Mar 30, 2023
de1b09b
Update system tests utils
nikoulai Mar 30, 2023
d4fbffc
Remove test console
nikoulai Mar 30, 2023
5253a72
Update types
nikoulai Mar 30, 2023
69439ca
Update socket provider
nikoulai Mar 30, 2023
705c69e
Update import
nikoulai Mar 30, 2023
0ef6fe6
Fix tests
nikoulai Mar 30, 2023
750c773
Fix websocket test
nikoulai Mar 30, 2023
2c2ec30
Update eip1193 tests
nikoulai Mar 31, 2023
696e60c
Fix eip1193 class' emits
nikoulai Mar 31, 2023
d323dd8
More changes
nikoulai Mar 31, 2023
94e525f
Replace waitForOpenConnection with waitSocketOpen
nikoulai Mar 31, 2023
9ef30ab
Revert unit test
nikoulai Apr 2, 2023
92a8f85
Update types in tests
nikoulai Apr 2, 2023
7a360e8
modify websocket test
nikoulai Apr 2, 2023
5f00a32
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 3, 2023
87a9ec1
Fix providerConnectInfo event
nikoulai Apr 3, 2023
85179c3
Delete unused import
nikoulai Apr 3, 2023
417618e
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 3, 2023
fca32c4
Follow restrictions for once
nikoulai Apr 4, 2023
ccdde52
Follow restrictions for removeListener
nikoulai Apr 4, 2023
d3009f4
Update packages/web3-utils/src/socket_provider.ts
nikoulai Apr 4, 2023
d4575d3
Update packages/web3-types/src/web3_api_types.ts
nikoulai Apr 5, 2023
46e50c7
Revert
nikoulai Apr 5, 2023
2a29464
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 5, 2023
5bce5c8
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 5, 2023
4fe13a1
Merge branch 'nikos/5939/EIP1193Provider-callback-types' of https://g…
nikoulai Apr 5, 2023
6705da6
Add on and once in socket provider
nikoulai Apr 7, 2023
b3f534b
Add sendSignedTransaction deploy with input test
nikoulai Apr 7, 2023
16a5359
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
Muhammad-Altabba Apr 11, 2023
d4bcebe
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 11, 2023
9fd71b2
Add types to removeListener
nikoulai Apr 11, 2023
7044709
Merge branch 'nikos/5939/EIP1193Provider-callback-types' of https://g…
nikoulai Apr 11, 2023
1b1060c
delete type
nikoulai Apr 11, 2023
3e9c0e4
Address feedback
nikoulai Apr 11, 2023
72a1883
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 20, 2023
c0cc167
Move any to unknown
nikoulai Apr 20, 2023
1eec542
Update changelog
nikoulai Apr 20, 2023
d23459b
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 20, 2023
6b235c3
don't allow generic string as type in events' functions
nikoulai Apr 20, 2023
11b1520
Merge branch '4.x' into nikos/5939/EIP1193Provider-callback-types
nikoulai Apr 20, 2023
52d48f1
Update changelog
nikoulai Apr 20, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion packages/web3-core/src/web3_subscriptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
Log,
JsonRpcNotification,
JsonRpcSubscriptionResult,
Web3ProviderEventCallback,
nikoulai marked this conversation as resolved.
Show resolved Hide resolved
} from 'web3-types';
import { jsonRpc } from 'web3-utils';
import { Web3EventEmitter, Web3EventMap } from './web3_event_emitter';
Expand Down Expand Up @@ -81,7 +82,10 @@ export abstract class Web3Subscription<
}
};

(this._requestManager.provider as Web3BaseProvider).on<Log>('message', messageListener);
(this._requestManager.provider as Web3BaseProvider).on<Log>(
'message',
messageListener as Web3ProviderEventCallback<Log>,
nikoulai marked this conversation as resolved.
Show resolved Hide resolved
);

this._messageListener = messageListener;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
*/
import { Web3Eth } from 'web3-eth';
import { Contract } from '../../src';
import { sleep } from '../shared_fixtures/utils';
import { ERC721TokenAbi, ERC721TokenBytecode } from '../shared_fixtures/build/ERC721Token';
Expand All @@ -27,6 +28,7 @@ import {
signTxAndSendEIP2930,
signTxAndSendEIP1559,
sendFewSampleTxs,
closeOpenConnection,
} from '../fixtures/system_test_utils';

describe('contract', () => {
Expand All @@ -36,7 +38,10 @@ describe('contract', () => {
let sendOptions: Record<string, unknown>;
let acc: { address: string; privateKey: string };
let pkAccount: { address: string; privateKey: string };
let web3Eth: Web3Eth;

beforeAll(async () => {
web3Eth = new Web3Eth(getSystemTestProvider());
deployOptions = {
data: GreeterBytecode,
arguments: ['My Greeting'],
Expand All @@ -49,6 +54,10 @@ describe('contract', () => {
});
sendOptions = { from: acc.address, gas: '1000000' };
});

afterAll(async () => {
await closeOpenConnection(web3Eth);
});
describe('local account', () => {
it.each([signTxAndSendEIP1559, signTxAndSendEIP2930])(
'should deploy the contract %p',
Expand All @@ -68,6 +77,24 @@ describe('contract', () => {
},
);

it.each([signTxAndSendEIP1559, signTxAndSendEIP2930])(
'should deploy the contract with input%p',
async signTxAndSend => {
pkAccount = await createNewAccount({ refill: true });

const deployData = contract.deploy(deployOptions);

const res = await signTxAndSend(
contract.provider,
{
input: deployData.encodeABI(),
},
pkAccount.privateKey,
);
expect(Number(res.status)).toBe(1);
},
);

it('should return estimated gas of contract constructor %p', async () => {
const estimatedGas = await new Contract(GreeterAbi, undefined, {
provider: getSystemTestProvider(),
Expand Down
48 changes: 21 additions & 27 deletions packages/web3-providers-ipc/test/integration/eip1193.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,7 @@ along with web3.js. If not, see <http://www.gnu.org/licenses/>.
*/

import { hexToNumber } from 'web3-utils';
import {
HexString,
ProviderConnectInfo,
ProviderRpcError,
Web3ProviderEventCallback,
} from 'web3-types';
import { HexString, ProviderRpcError, ProviderConnectInfo } from 'web3-types';
import IpcProvider from '../../src/index';

import {
Expand Down Expand Up @@ -49,20 +44,19 @@ describeIf(isIpc)('IpcProvider - eip1193', () => {

describe('check events', () => {
it('should send connect event', async () => {
const { chainId } = await new Promise(resolve => {
socketProvider.on('connect', ((_error: unknown, data) => {
resolve(data as unknown as ProviderConnectInfo);
}) as Web3ProviderEventCallback<ProviderConnectInfo>);
const providerConnectInfo = await new Promise<ProviderConnectInfo>(resolve => {
socketProvider.on('connect', (data: ProviderConnectInfo) => {
resolve(data);
});
});
expect(hexToNumber(chainId)).toBeGreaterThan(0);
expect(hexToNumber(providerConnectInfo.chainId)).toBeGreaterThan(0);
});

it('should send disconnect event', async () => {
await waitForSocketConnect(socketProvider);
const disconnectPromise = new Promise<ProviderRpcError>(resolve => {
socketProvider.on('disconnect', ((error: ProviderRpcError) => {
socketProvider.on('disconnect', (error: ProviderRpcError) => {
resolve(error);
}) as Web3ProviderEventCallback<ProviderRpcError>);
});
});
socketProvider.disconnect(1000, 'Some extra data');

Expand All @@ -76,16 +70,16 @@ describeIf(isIpc)('IpcProvider - eip1193', () => {
socketProvider._chainId = '0x1';
socketProvider.disconnect(1000);
await waitForSocketDisconnect(socketProvider);
const chainChangedPromise = new Promise<ProviderConnectInfo>(resolve => {
socketProvider.on('chainChanged', ((_error, data) => {
resolve(data as unknown as ProviderConnectInfo);
}) as Web3ProviderEventCallback<ProviderConnectInfo>);
const chainChangedPromise = new Promise<HexString>(resolve => {
socketProvider.on('chainChanged', (result: HexString) => {
resolve(result);
});
});
socketProvider.connect();
await waitForSocketConnect(socketProvider);
const changedData = await chainChangedPromise;
expect(changedData.chainId).not.toBe('0x1');
expect(hexToNumber(changedData.chainId)).toBeGreaterThan(0);
const chainId = await chainChangedPromise;
expect(chainId).not.toBe('0x1');
expect(hexToNumber(chainId)).toBeGreaterThan(0);
});
it('should send accountsChanged event', async () => {
await waitForSocketConnect(socketProvider);
Expand All @@ -94,16 +88,16 @@ describeIf(isIpc)('IpcProvider - eip1193', () => {
socketProvider._accounts = ['1', '2'];
socketProvider.disconnect(1000);
await waitForSocketDisconnect(socketProvider);
const chainChangedPromise = new Promise<{ accounts: HexString[] }>(resolve => {
socketProvider.on('accountsChanged', ((_error, data) => {
resolve(data as unknown as { accounts: HexString[] });
}) as Web3ProviderEventCallback<{ accounts: HexString[] }>);
const chainChangedPromise = new Promise<HexString[]>(resolve => {
socketProvider.on('accountsChanged', (accounts: HexString[]) => {
resolve(accounts);
});
});
socketProvider.connect();
await waitForSocketConnect(socketProvider);
const changedData = await chainChangedPromise;
const accounts = await chainChangedPromise;

expect(JSON.stringify(changedData.accounts)).not.toBe(JSON.stringify(['1', '2']));
expect(JSON.stringify(accounts)).not.toBe(JSON.stringify(['1', '2']));
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
describeIf,
getSystemTestProvider,
isIpc,
waitForOpenSocketConnection,
waitForSocketConnect,
waitForCloseSocketConnection,
waitForEvent,
} from '../fixtures/system_test_utils';
Expand Down Expand Up @@ -49,15 +49,15 @@ describeIf(isIpc)('IpcSocketProvider - reconnection', () => {
delay: 5000,
maxAttempts: 5,
});
await waitForOpenSocketConnection(web3Provider);
await waitForSocketConnect(web3Provider);
web3Provider.disconnect(1000, 'test');
await waitForCloseSocketConnection(web3Provider);
});
it('set custom reconnectOptions', async () => {
const web3Provider = new IpcProvider(getSystemTestProvider(), {}, reconnectionOptions);
// @ts-expect-error-next-line
expect(web3Provider._reconnectOptions).toEqual(reconnectionOptions);
await waitForOpenSocketConnection(web3Provider);
await waitForSocketConnect(web3Provider);
web3Provider.disconnect(1000, 'test');
await waitForCloseSocketConnection(web3Provider);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
getSystemTestProvider,
describeIf,
isWs,
waitForOpenSocketConnection,
waitForSocketConnect,
waitForCloseSocketConnection,
} from '../fixtures/system_test_utils';

Expand Down Expand Up @@ -81,14 +81,14 @@ describeIf(isWs)('Support of Basic Auth', () => {
afterEach(async () => {
// make sure we try to close the connection after it is established
if (webSocketProvider.getStatus() === 'connecting') {
await waitForOpenSocketConnection(webSocketProvider);
await waitForSocketConnect(webSocketProvider);
}
webSocketProvider.disconnect();
await waitForCloseSocketConnection(webSocketProvider);
});
// eslint-disable-next-line jest/expect-expect
test('should connect with basic auth', async () => {
await waitForOpenSocketConnection(webSocketProvider);
await waitForSocketConnect(webSocketProvider);
expect(webSocketProvider.getStatus()).toBe('connected');
});
});
47 changes: 21 additions & 26 deletions packages/web3-providers-ws/test/integration/eip1193.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,7 @@ along with web3.js. If not, see <http://www.gnu.org/licenses/>.
*/

import { hexToNumber } from 'web3-utils';
import {
HexString,
ProviderConnectInfo,
ProviderRpcError,
Web3ProviderEventCallback,
} from 'web3-types';
import { HexString, ProviderRpcError, ProviderConnectInfo } from 'web3-types';
import WebSocketProvider from '../../src/index';

import {
Expand Down Expand Up @@ -49,19 +44,19 @@ describeIf(isWs)('WebSocketProvider - eip1193', () => {

describe('check events', () => {
it('should send connect event', async () => {
const { chainId } = await new Promise(resolve => {
socketProvider.on('connect', ((_error: unknown, data) => {
resolve(data as unknown as ProviderConnectInfo);
}) as Web3ProviderEventCallback<ProviderConnectInfo>);
const providerConnectInfo = await new Promise<ProviderConnectInfo>(resolve => {
socketProvider.on('connect', (data: ProviderConnectInfo) => {
resolve(data);
});
});
expect(hexToNumber(chainId)).toBeGreaterThan(0);
expect(hexToNumber(providerConnectInfo.chainId)).toBeGreaterThan(0);
});
it('should send disconnect event', async () => {
await waitForSocketConnect(socketProvider);
const disconnectPromise = new Promise<ProviderRpcError>(resolve => {
socketProvider.on('disconnect', ((error: ProviderRpcError) => {
socketProvider.on('disconnect', (error: ProviderRpcError) => {
resolve(error);
}) as Web3ProviderEventCallback<ProviderRpcError>);
});
});
socketProvider.disconnect(1000, 'Some extra data');

Expand All @@ -75,16 +70,16 @@ describeIf(isWs)('WebSocketProvider - eip1193', () => {
socketProvider._chainId = '0x1';
socketProvider.disconnect(1000);
await waitForSocketDisconnect(socketProvider);
const chainChangedPromise = new Promise<ProviderConnectInfo>(resolve => {
socketProvider.on('chainChanged', ((_error, data) => {
resolve(data as unknown as ProviderConnectInfo);
}) as Web3ProviderEventCallback<ProviderConnectInfo>);
const chainChangedPromise = new Promise<HexString>(resolve => {
socketProvider.on('chainChanged', (result: HexString) => {
resolve(result);
});
});
socketProvider.connect();
await waitForSocketConnect(socketProvider);
const changedData = await chainChangedPromise;
expect(changedData.chainId).not.toBe('0x1');
expect(hexToNumber(changedData.chainId)).toBeGreaterThan(0);
const chainId = await chainChangedPromise;
expect(chainId).not.toBe('0x1');
expect(hexToNumber(chainId)).toBeGreaterThan(0);
});
it('should send accountsChanged event', async () => {
await waitForSocketConnect(socketProvider);
Expand All @@ -93,16 +88,16 @@ describeIf(isWs)('WebSocketProvider - eip1193', () => {
socketProvider._accounts = ['1', '2'];
socketProvider.disconnect(1000);
await waitForSocketDisconnect(socketProvider);
const chainChangedPromise = new Promise<{ accounts: HexString[] }>(resolve => {
socketProvider.on('accountsChanged', ((_error, data) => {
resolve(data as unknown as { accounts: HexString[] });
}) as Web3ProviderEventCallback<{ accounts: HexString[] }>);
const chainChangedPromise = new Promise<HexString[]>(resolve => {
socketProvider.on('accountsChanged', (accounts: HexString[]) => {
resolve(accounts);
});
});
socketProvider.connect();
await waitForSocketConnect(socketProvider);
const changedData = await chainChangedPromise;
const accounts = await chainChangedPromise;

expect(JSON.stringify(changedData.accounts)).not.toBe(JSON.stringify(['1', '2']));
expect(JSON.stringify(accounts)).not.toBe(JSON.stringify(['1', '2']));
});
});
});
Loading