@lerna-labs/hydra-sdk 1.0.0-beta.7 → 1.0.0-beta.8

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.
@@ -16,12 +16,13 @@ export declare class Wrangler {
16
16
  private createHydraInstance;
17
17
  connect(): Promise<void>;
18
18
  startHead(txHash: string, txIndex: number): Promise<void>;
19
+ shutdownHead(): Promise<void>;
20
+ waitForHeadClose(timeoutMs: 180000): Promise<void>;
19
21
  waitForHeadOpen(commitArgs: {
20
22
  txHash: string;
21
23
  txIndex: number;
22
24
  }, timeoutMs?: number): Promise<void>;
23
25
  getHeadStatus(timeoutMs?: number): Promise<string>;
24
- shutdownHead(): Promise<void>;
25
26
  private doCommit;
26
27
  private handleIncoming;
27
28
  private onGreetings;
@@ -37,6 +37,72 @@ export class Wrangler {
37
37
  this.provider.onMessage(msg => this.handleIncoming(msg, { txHash, txIndex }));
38
38
  await this.provider.connect();
39
39
  }
40
+ async shutdownHead() {
41
+ this.mode = "shutdown";
42
+ this.provider.onMessage(msg => this.handleIncoming(msg));
43
+ await this.provider.connect();
44
+ }
45
+ async waitForHeadClose(timeoutMs) {
46
+ this.mode = "shutdown";
47
+ return new Promise(async (resolve, reject) => {
48
+ let settled = false;
49
+ const handle = async (message) => {
50
+ try {
51
+ console.log("Message received: ", message.tag, message);
52
+ switch (message.tag) {
53
+ case "HeadIsClosed":
54
+ case "HeadIsFinalized":
55
+ if (settled)
56
+ return;
57
+ settled = true;
58
+ resolve();
59
+ break;
60
+ case "ReadyToFanout":
61
+ if (settled)
62
+ return;
63
+ await this.provider.fanout();
64
+ break;
65
+ case "Greetings":
66
+ await this.onGreetings(message.headStatus);
67
+ break;
68
+ }
69
+ }
70
+ catch (err) {
71
+ if (!settled) {
72
+ settled = true;
73
+ reject(err);
74
+ }
75
+ }
76
+ };
77
+ this.provider.onMessage(handle);
78
+ try {
79
+ await this.provider.connect();
80
+ }
81
+ catch (err) {
82
+ if (!settled) {
83
+ settled = true;
84
+ return reject(new Error("Failed to connect to Hydra provider: " + String(err)));
85
+ }
86
+ }
87
+ const timer = setTimeout(() => {
88
+ if (!settled) {
89
+ settled = true;
90
+ reject(new Error("Timeout waiting for head to close!"));
91
+ }
92
+ }, timeoutMs);
93
+ const finalizer = () => clearTimeout(timer);
94
+ const origResolve = resolve;
95
+ const origReject = reject;
96
+ resolve = (v) => {
97
+ finalizer();
98
+ origResolve(v);
99
+ };
100
+ reject = (e) => {
101
+ finalizer();
102
+ origReject(e);
103
+ };
104
+ });
105
+ }
40
106
  async waitForHeadOpen(commitArgs, timeoutMs = 180000) {
41
107
  this.mode = "start";
42
108
  return new Promise(async (resolve, reject) => {
@@ -134,11 +200,6 @@ export class Wrangler {
134
200
  };
135
201
  });
136
202
  }
137
- async shutdownHead() {
138
- this.mode = "shutdown";
139
- this.provider.onMessage(msg => this.handleIncoming(msg));
140
- await this.provider.connect();
141
- }
142
203
  async doCommit(commitArgs) {
143
204
  try {
144
205
  const rawTx = await this.instance.commitFunds(commitArgs.txHash, commitArgs.txIndex);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lerna-labs/hydra-sdk",
3
- "version": "1.0.0-beta.7",
3
+ "version": "1.0.0-beta.8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",