-
Notifications
You must be signed in to change notification settings - Fork 11
/
constructApiPromise.ts
55 lines (49 loc) · 1.36 KB
/
constructApiPromise.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Copyright 2023 Parity Technologies (UK) Ltd.
import { ApiPromise } from '@polkadot/api';
import type { ApiOptions } from '@polkadot/api/types';
import { WsProvider } from '@polkadot/rpc-provider';
import { fetchSafeXcmVersion } from './createXcmCalls/util/fetchSafeXcmVersion';
/**
* Return value for `constructApiPromise`
*/
export interface ApiInfo {
/**
* Polkadot-js ApiPromise
*/
api: ApiPromise;
/**
* SpecName of the chain which the api is connected to.
*/
specName: string;
/**
* SafeXcmVersion for the chain which the api is connected too.
*/
safeXcmVersion: number;
}
/**
* Construct a Polkadot-js ApiPromise, and retrieve the specName of the chain.
*
* ```ts
* import { constructApiPromise } from '@substrate/asset-transfer-api';
*
* const { api, specName, safeXcmVersion } = constructApiPromise('wss://some_ws_url');
* ```
*
* @param wsUrl WebSocket Url to connect to.
* @param opts ApiOptions
*/
export const constructApiPromise = async (wsUrl: string, opts: ApiOptions = {}): Promise<ApiInfo> => {
const api = await ApiPromise.create({
provider: new WsProvider(wsUrl),
noInitWarn: true,
...opts,
});
await api.isReady;
const { specName } = await api.rpc.state.getRuntimeVersion();
const safeXcmVersion = await fetchSafeXcmVersion(api);
return {
api,
specName: specName.toString(),
safeXcmVersion: safeXcmVersion,
};
};