@acala-network/chopsticks 0.9.11 → 0.9.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,7 +29,8 @@ const schema = _zod.z.object({
29
29
  });
30
30
  const cli = (y)=>{
31
31
  y.command('run-block', 'Replay a block', (yargs)=>yargs.options((0, _index.getYargsOptions)(schema.shape)), async (argv)=>{
32
- const context = await (0, _context.setupContext)(schema.parse(argv), true);
32
+ const parsedArgv = schema.parse(argv);
33
+ const context = await (0, _context.setupContext)(parsedArgv, true);
33
34
  const header = await context.chain.head.header;
34
35
  const block = context.chain.head;
35
36
  const parent = await block.parentBlock;
@@ -60,7 +61,7 @@ const cli = (y)=>{
60
61
  calls,
61
62
  mockSignatureHost: false,
62
63
  allowUnresolvedImports: false,
63
- runtimeLogLevel: argv.runtimeLogLevel || 0
64
+ runtimeLogLevel: parsedArgv['runtime-log-level'] || 0
64
65
  }, (0, _chopstickscore.taskHandler)(parent));
65
66
  if ('Error' in result) {
66
67
  throw new Error(result.Error);
@@ -62,6 +62,26 @@ const respond = (res, data)=>{
62
62
  }
63
63
  res.end();
64
64
  };
65
+ const portInUse = async (port)=>{
66
+ const server = _nodehttp.default.createServer();
67
+ const inUse = await new Promise((resolve)=>{
68
+ server.once('error', (e)=>{
69
+ if (e.code === 'EADDRINUSE') {
70
+ resolve(true);
71
+ } else {
72
+ resolve(false);
73
+ }
74
+ });
75
+ server.once('listening', ()=>{
76
+ server.close();
77
+ resolve(false);
78
+ });
79
+ server.listen(port);
80
+ });
81
+ server.removeAllListeners();
82
+ server.unref();
83
+ return inUse;
84
+ };
65
85
  const createServer = async (handler, port)=>{
66
86
  let wss;
67
87
  let listenPort;
@@ -120,27 +140,28 @@ const createServer = async (handler, port)=>{
120
140
  }
121
141
  });
122
142
  for(let i = 0; i < 10; i++){
143
+ if (port && await portInUse(port + i)) {
144
+ continue;
145
+ }
123
146
  const preferPort = port ? port + i : undefined;
124
147
  wsLogger.debug('Try starting on port %d', preferPort);
125
- const success = await new Promise((resolve)=>{
126
- server.once('error', (e)=>{
127
- if (e.code === 'EADDRINUSE') {
128
- server.close();
129
- resolve(false);
130
- }
131
- });
148
+ await new Promise((resolve, reject)=>{
149
+ const onError = (e)=>{
150
+ server.close();
151
+ reject(e);
152
+ };
153
+ server.once('error', onError);
132
154
  server.listen(preferPort, ()=>{
133
155
  wss = new _ws.WebSocketServer({
134
156
  server,
135
157
  maxPayload: 1024 * 1024 * 100
136
158
  });
137
159
  listenPort = server.address().port;
138
- resolve(true);
160
+ server.removeListener('error', onError);
161
+ resolve();
139
162
  });
140
163
  });
141
- if (success) {
142
- break;
143
- }
164
+ break;
144
165
  }
145
166
  if (!wss || !listenPort) {
146
167
  throw new Error(`Failed to create WebsocketServer at port ${port}`);
@@ -19,7 +19,8 @@ const schema = z.object({
19
19
  });
20
20
  export const cli = (y)=>{
21
21
  y.command('run-block', 'Replay a block', (yargs)=>yargs.options(getYargsOptions(schema.shape)), async (argv)=>{
22
- const context = await setupContext(schema.parse(argv), true);
22
+ const parsedArgv = schema.parse(argv);
23
+ const context = await setupContext(parsedArgv, true);
23
24
  const header = await context.chain.head.header;
24
25
  const block = context.chain.head;
25
26
  const parent = await block.parentBlock;
@@ -50,7 +51,7 @@ export const cli = (y)=>{
50
51
  calls,
51
52
  mockSignatureHost: false,
52
53
  allowUnresolvedImports: false,
53
- runtimeLogLevel: argv.runtimeLogLevel || 0
54
+ runtimeLogLevel: parsedArgv['runtime-log-level'] || 0
54
55
  }, taskHandler(parent));
55
56
  if ('Error' in result) {
56
57
  throw new Error(result.Error);
@@ -47,6 +47,26 @@ const respond = (res, data)=>{
47
47
  }
48
48
  res.end();
49
49
  };
50
+ const portInUse = async (port)=>{
51
+ const server = http.createServer();
52
+ const inUse = await new Promise((resolve)=>{
53
+ server.once('error', (e)=>{
54
+ if (e.code === 'EADDRINUSE') {
55
+ resolve(true);
56
+ } else {
57
+ resolve(false);
58
+ }
59
+ });
60
+ server.once('listening', ()=>{
61
+ server.close();
62
+ resolve(false);
63
+ });
64
+ server.listen(port);
65
+ });
66
+ server.removeAllListeners();
67
+ server.unref();
68
+ return inUse;
69
+ };
50
70
  export const createServer = async (handler, port)=>{
51
71
  let wss;
52
72
  let listenPort;
@@ -105,27 +125,28 @@ export const createServer = async (handler, port)=>{
105
125
  }
106
126
  });
107
127
  for(let i = 0; i < 10; i++){
128
+ if (port && await portInUse(port + i)) {
129
+ continue;
130
+ }
108
131
  const preferPort = port ? port + i : undefined;
109
132
  wsLogger.debug('Try starting on port %d', preferPort);
110
- const success = await new Promise((resolve)=>{
111
- server.once('error', (e)=>{
112
- if (e.code === 'EADDRINUSE') {
113
- server.close();
114
- resolve(false);
115
- }
116
- });
133
+ await new Promise((resolve, reject)=>{
134
+ const onError = (e)=>{
135
+ server.close();
136
+ reject(e);
137
+ };
138
+ server.once('error', onError);
117
139
  server.listen(preferPort, ()=>{
118
140
  wss = new WebSocketServer({
119
141
  server,
120
142
  maxPayload: 1024 * 1024 * 100
121
143
  });
122
144
  listenPort = server.address().port;
123
- resolve(true);
145
+ server.removeListener('error', onError);
146
+ resolve();
124
147
  });
125
148
  });
126
- if (success) {
127
- break;
128
- }
149
+ break;
129
150
  }
130
151
  if (!wss || !listenPort) {
131
152
  throw new Error(`Failed to create WebsocketServer at port ${port}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acala-network/chopsticks",
3
- "version": "0.9.11",
3
+ "version": "0.9.13",
4
4
  "author": "Acala Developers <hello@acala.network>",
5
5
  "license": "Apache-2.0",
6
6
  "bin": "./chopsticks.cjs",
@@ -13,8 +13,8 @@
13
13
  "docs:prep": "typedoc"
14
14
  },
15
15
  "dependencies": {
16
- "@acala-network/chopsticks-core": "0.9.11",
17
- "@acala-network/chopsticks-db": "0.9.11",
16
+ "@acala-network/chopsticks-core": "0.9.13",
17
+ "@acala-network/chopsticks-db": "0.9.13",
18
18
  "@pnpm/npm-conf": "^2.2.2",
19
19
  "@polkadot/api-augment": "^10.11.2",
20
20
  "@polkadot/types": "^10.11.2",