heimdall-tide 0.14.33-staging → 0.14.34
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.
- package/dist/cjs/enclaves/ApprovalEnclaveNEW.js +1 -1
- package/dist/cjs/enclaves/ApprovalEnclaveNEW.js.map +1 -1
- package/dist/cjs/heimdall.d.ts +1 -1
- package/dist/cjs/heimdall.js +32 -6
- package/dist/cjs/heimdall.js.map +1 -1
- package/dist/esm/enclaves/ApprovalEnclaveNEW.js +1 -1
- package/dist/esm/enclaves/ApprovalEnclaveNEW.js.map +1 -1
- package/dist/esm/heimdall.d.ts +1 -1
- package/dist/esm/heimdall.js +32 -6
- package/dist/esm/heimdall.js.map +1 -1
- package/package.json +3 -3
- package/src/enclaves/ApprovalEnclaveNEW.ts +1 -1
- package/src/heimdall.ts +35 -6
- package/heimdall-tide-0.14.33-staging.tgz +0 -0
|
@@ -16,7 +16,7 @@ class ApprovalEnclaveNew extends RequestEnclave_1.RequestEnclave {
|
|
|
16
16
|
// return fully serialized approved requests
|
|
17
17
|
this.checkEnclaveOpen();
|
|
18
18
|
await this.initDone;
|
|
19
|
-
const pre_resp = this.recieve("approvals");
|
|
19
|
+
const pre_resp = this.recieve("approvals", false, true); // reject if the popup is closed
|
|
20
20
|
this.send({
|
|
21
21
|
type: "approvalRequests",
|
|
22
22
|
message: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalEnclaveNEW.js","sourceRoot":"","sources":["../../../src/enclaves/ApprovalEnclaveNEW.ts"],"names":[],"mappings":";;;AAAA,0CAA6D;AAE7D,qDAAkD;AAElD,MAAa,kBAAmB,SAAQ,+BAAc;IAAtD;;QACI,SAAI,GAAW,aAAa,CAAC;QAC7B,gBAAW,GAAe,qBAAU,CAAC,KAAK,CAAC;IAwB/C,CAAC;IAtBG,IAAI,CAAC,IAAgB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAuB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,iBAAqC;QAC/C,4CAA4C;QAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,QAAQ,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApprovalEnclaveNEW.js","sourceRoot":"","sources":["../../../src/enclaves/ApprovalEnclaveNEW.ts"],"names":[],"mappings":";;;AAAA,0CAA6D;AAE7D,qDAAkD;AAElD,MAAa,kBAAmB,SAAQ,+BAAc;IAAtD;;QACI,SAAI,GAAW,aAAa,CAAC;QAC7B,gBAAW,GAAe,qBAAU,CAAC,KAAK,CAAC;IAwB/C,CAAC;IAtBG,IAAI,CAAC,IAAgB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAuB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,iBAAqC;QAC/C,4CAA4C;QAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,QAAQ,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,gCAAgC;QACzF,IAAI,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAC;gBACJ,QAAQ,EAAE,iBAAiB;aAC9B;SACJ,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC;QAC5B,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,sDAAsD,GAAG,IAAI,CAAC;QAC7F,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,kEAAkE,CAAC;QAC7J,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ;AA1BD,gDA0BC;AACD,MAAM,gBAAgB;CAGrB;AACD,MAAM,wBAAyB,SAAQ,gBAAgB;IAEnD,MAAM,CAAC,0BAA0B,CAAC,MAAW;QACzC,OAAO,CACH,MAAM,IAAI,IAAI;YACd,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;YAC7B,CAAC,MAAM,CAAC,OAAO,YAAY,UAAU,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAChD,CAAC;IACN,CAAC;CACJ;AACD,IAAK,MAIJ;AAJD,WAAK,MAAM;IACP,+BAAqB,CAAA;IACrB,2BAAiB,CAAA;IACjB,6BAAmB,CAAA;AACvB,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV"}
|
package/dist/cjs/heimdall.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare abstract class Heimdall<T> implements EnclaveFlow<T> {
|
|
|
19
19
|
getOrkUrl(): URL;
|
|
20
20
|
open(): Promise<boolean>;
|
|
21
21
|
send(data: any): void;
|
|
22
|
-
recieve(type: string, silent?: boolean): Promise<any>;
|
|
22
|
+
recieve(type: string, silent?: boolean, failOnClose?: boolean): Promise<any>;
|
|
23
23
|
close(): void;
|
|
24
24
|
onerror(data: any): void;
|
|
25
25
|
private openPopUp;
|
package/dist/cjs/heimdall.js
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
// If not, see https://tide.org/licenses_tcoc2-0-0-en
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.windowType = exports.Heimdall = void 0;
|
|
19
|
+
// Backstop only; closing the popup is the normal way out.
|
|
20
|
+
const WAIT_TIMEOUT_MS = 300_000;
|
|
19
21
|
class Heimdall {
|
|
20
22
|
constructor(init) {
|
|
21
23
|
this.enclaveOrigin = init.homeOrkOrigin;
|
|
@@ -54,14 +56,14 @@ class Heimdall {
|
|
|
54
56
|
break;
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
|
-
async recieve(type, silent = false) {
|
|
59
|
+
async recieve(type, silent = false, failOnClose = false) {
|
|
58
60
|
switch (this._windowType) {
|
|
59
61
|
case windowType.Popup:
|
|
60
|
-
return this.waitForWindowPostMessage(type, silent);
|
|
62
|
+
return this.waitForWindowPostMessage(type, silent, failOnClose);
|
|
61
63
|
case windowType.Redirect:
|
|
62
64
|
throw new Error("Method not implemented.");
|
|
63
65
|
case windowType.Hidden:
|
|
64
|
-
return this.waitForWindowPostMessage(type, silent);
|
|
66
|
+
return this.waitForWindowPostMessage(type, silent, failOnClose);
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
close() {
|
|
@@ -138,13 +140,20 @@ class Heimdall {
|
|
|
138
140
|
closePopupEnclave() {
|
|
139
141
|
this.enclaveWindow?.close();
|
|
140
142
|
}
|
|
141
|
-
async waitForWindowPostMessage(responseTypeToAwait, silent = false) {
|
|
142
|
-
return new Promise((resolve) => {
|
|
143
|
+
async waitForWindowPostMessage(responseTypeToAwait, silent = false, failOnClose = false) {
|
|
144
|
+
return new Promise((resolve, reject) => {
|
|
145
|
+
let poll;
|
|
146
|
+
let deadline;
|
|
147
|
+
const done = () => {
|
|
148
|
+
window.removeEventListener("message", handler);
|
|
149
|
+
clearInterval(poll);
|
|
150
|
+
clearTimeout(deadline);
|
|
151
|
+
};
|
|
143
152
|
const handler = (event) => {
|
|
144
153
|
const response = this.processEvent(event.data, event.origin, responseTypeToAwait, silent);
|
|
145
154
|
if (response.ok) {
|
|
155
|
+
done();
|
|
146
156
|
resolve(response.message);
|
|
147
|
-
window.removeEventListener("message", handler);
|
|
148
157
|
}
|
|
149
158
|
else {
|
|
150
159
|
if (response.print)
|
|
@@ -152,6 +161,19 @@ class Heimdall {
|
|
|
152
161
|
}
|
|
153
162
|
};
|
|
154
163
|
window.addEventListener("message", handler, false);
|
|
164
|
+
if (failOnClose) {
|
|
165
|
+
poll = setInterval(() => {
|
|
166
|
+
if (!this.enclaveWindow?.closed)
|
|
167
|
+
return;
|
|
168
|
+
done();
|
|
169
|
+
// Callers treat a message containing "popup" as a cancel.
|
|
170
|
+
reject(new Error(`[HEIMDALL] Enclave popup closed before sending ${responseTypeToAwait}`));
|
|
171
|
+
}, 250);
|
|
172
|
+
deadline = setTimeout(() => {
|
|
173
|
+
done();
|
|
174
|
+
reject(Object.assign(new Error(`[HEIMDALL] No ${responseTypeToAwait} from the enclave within ${WAIT_TIMEOUT_MS / 1000}s`), { code: "enclave.timeout" }));
|
|
175
|
+
}, WAIT_TIMEOUT_MS);
|
|
176
|
+
}
|
|
155
177
|
});
|
|
156
178
|
}
|
|
157
179
|
sendPostWindowMessage(message) {
|
|
@@ -160,6 +182,10 @@ class Heimdall {
|
|
|
160
182
|
processEvent(data, origin, expectedType, silent) {
|
|
161
183
|
if (origin !== new URL(this.enclaveOrigin).origin) {
|
|
162
184
|
// Something's not right... The message has come from an unknown domain...
|
|
185
|
+
// Untyped messages (HMR, extensions) are not ours, so skip them.
|
|
186
|
+
if (!silent && typeof data?.type === "string") {
|
|
187
|
+
console.warn(`[HEIMDALL] Ignored ${data.type} from ${origin}, expected ${new URL(this.enclaveOrigin).origin}`);
|
|
188
|
+
}
|
|
163
189
|
return { ok: false, print: false, error: "WRONG WINDOW SENT MESSAGE" };
|
|
164
190
|
}
|
|
165
191
|
switch (data.type) {
|
package/dist/cjs/heimdall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heimdall.js","sourceRoot":"","sources":["../../src/heimdall.ts"],"names":[],"mappings":";AAAA,GAAG;AACH,gEAAgE;AAChE,yCAAyC;AACzC,GAAG;AACH,gEAAgE;AAChE,4DAA4D;AAC5D,+DAA+D;AAC/D,kEAAkE;AAClE,6DAA6D;AAC7D,gEAAgE;AAChE,oCAAoC;AACpC,6DAA6D;AAC7D,8DAA8D;AAC9D,wCAAwC;AACxC,qDAAqD;;;AAWrD,MAAsB,QAAQ;IAW1B,YAAY,IAAyB;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,CAAC;IAED,aAAa;QACT,IAAG,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,SAAS;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IACM,IAAI,CAAC,IAAS;QACjB,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;YACV,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;QACd,CAAC;IACL,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,SAAkB,KAAK;
|
|
1
|
+
{"version":3,"file":"heimdall.js","sourceRoot":"","sources":["../../src/heimdall.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export class ApprovalEnclaveNew extends RequestEnclave {
|
|
|
13
13
|
// return fully serialized approved requests
|
|
14
14
|
this.checkEnclaveOpen();
|
|
15
15
|
await this.initDone;
|
|
16
|
-
const pre_resp = this.recieve("approvals");
|
|
16
|
+
const pre_resp = this.recieve("approvals", false, true); // reject if the popup is closed
|
|
17
17
|
this.send({
|
|
18
18
|
type: "approvalRequests",
|
|
19
19
|
message: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalEnclaveNEW.js","sourceRoot":"","sources":["../../../src/enclaves/ApprovalEnclaveNEW.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,UAAU,EAAC,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IAAtD;;QACI,SAAI,GAAW,aAAa,CAAC;QAC7B,gBAAW,GAAe,UAAU,CAAC,KAAK,CAAC;IAwB/C,CAAC;IAtBG,IAAI,CAAC,IAAgB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAuB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,iBAAqC;QAC/C,4CAA4C;QAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,QAAQ,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApprovalEnclaveNEW.js","sourceRoot":"","sources":["../../../src/enclaves/ApprovalEnclaveNEW.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,UAAU,EAAC,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IAAtD;;QACI,SAAI,GAAW,aAAa,CAAC;QAC7B,gBAAW,GAAe,UAAU,CAAC,KAAK,CAAC;IAwB/C,CAAC;IAtBG,IAAI,CAAC,IAAgB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAuB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,iBAAqC;QAC/C,4CAA4C;QAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,QAAQ,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,gCAAgC;QACzF,IAAI,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAC;gBACJ,QAAQ,EAAE,iBAAiB;aAC9B;SACJ,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC;QAC5B,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,sDAAsD,GAAG,IAAI,CAAC;QAC7F,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,kEAAkE,CAAC;QAC7J,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ;AACD,MAAM,gBAAgB;CAGrB;AACD,MAAM,wBAAyB,SAAQ,gBAAgB;IAEnD,MAAM,CAAC,0BAA0B,CAAC,MAAW;QACzC,OAAO,CACH,MAAM,IAAI,IAAI;YACd,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;YAC7B,CAAC,MAAM,CAAC,OAAO,YAAY,UAAU,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAChD,CAAC;IACN,CAAC;CACJ;AACD,IAAK,MAIJ;AAJD,WAAK,MAAM;IACP,+BAAqB,CAAA;IACrB,2BAAiB,CAAA;IACjB,6BAAmB,CAAA;AACvB,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV"}
|
package/dist/esm/heimdall.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare abstract class Heimdall<T> implements EnclaveFlow<T> {
|
|
|
19
19
|
getOrkUrl(): URL;
|
|
20
20
|
open(): Promise<boolean>;
|
|
21
21
|
send(data: any): void;
|
|
22
|
-
recieve(type: string, silent?: boolean): Promise<any>;
|
|
22
|
+
recieve(type: string, silent?: boolean, failOnClose?: boolean): Promise<any>;
|
|
23
23
|
close(): void;
|
|
24
24
|
onerror(data: any): void;
|
|
25
25
|
private openPopUp;
|
package/dist/esm/heimdall.js
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
// You should have received a copy of the Tide Community Open
|
|
14
14
|
// Code License along with this program.
|
|
15
15
|
// If not, see https://tide.org/licenses_tcoc2-0-0-en
|
|
16
|
+
// Backstop only; closing the popup is the normal way out.
|
|
17
|
+
const WAIT_TIMEOUT_MS = 300_000;
|
|
16
18
|
export class Heimdall {
|
|
17
19
|
constructor(init) {
|
|
18
20
|
this.enclaveOrigin = init.homeOrkOrigin;
|
|
@@ -51,14 +53,14 @@ export class Heimdall {
|
|
|
51
53
|
break;
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
|
-
async recieve(type, silent = false) {
|
|
56
|
+
async recieve(type, silent = false, failOnClose = false) {
|
|
55
57
|
switch (this._windowType) {
|
|
56
58
|
case windowType.Popup:
|
|
57
|
-
return this.waitForWindowPostMessage(type, silent);
|
|
59
|
+
return this.waitForWindowPostMessage(type, silent, failOnClose);
|
|
58
60
|
case windowType.Redirect:
|
|
59
61
|
throw new Error("Method not implemented.");
|
|
60
62
|
case windowType.Hidden:
|
|
61
|
-
return this.waitForWindowPostMessage(type, silent);
|
|
63
|
+
return this.waitForWindowPostMessage(type, silent, failOnClose);
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
close() {
|
|
@@ -135,13 +137,20 @@ export class Heimdall {
|
|
|
135
137
|
closePopupEnclave() {
|
|
136
138
|
this.enclaveWindow?.close();
|
|
137
139
|
}
|
|
138
|
-
async waitForWindowPostMessage(responseTypeToAwait, silent = false) {
|
|
139
|
-
return new Promise((resolve) => {
|
|
140
|
+
async waitForWindowPostMessage(responseTypeToAwait, silent = false, failOnClose = false) {
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
let poll;
|
|
143
|
+
let deadline;
|
|
144
|
+
const done = () => {
|
|
145
|
+
window.removeEventListener("message", handler);
|
|
146
|
+
clearInterval(poll);
|
|
147
|
+
clearTimeout(deadline);
|
|
148
|
+
};
|
|
140
149
|
const handler = (event) => {
|
|
141
150
|
const response = this.processEvent(event.data, event.origin, responseTypeToAwait, silent);
|
|
142
151
|
if (response.ok) {
|
|
152
|
+
done();
|
|
143
153
|
resolve(response.message);
|
|
144
|
-
window.removeEventListener("message", handler);
|
|
145
154
|
}
|
|
146
155
|
else {
|
|
147
156
|
if (response.print)
|
|
@@ -149,6 +158,19 @@ export class Heimdall {
|
|
|
149
158
|
}
|
|
150
159
|
};
|
|
151
160
|
window.addEventListener("message", handler, false);
|
|
161
|
+
if (failOnClose) {
|
|
162
|
+
poll = setInterval(() => {
|
|
163
|
+
if (!this.enclaveWindow?.closed)
|
|
164
|
+
return;
|
|
165
|
+
done();
|
|
166
|
+
// Callers treat a message containing "popup" as a cancel.
|
|
167
|
+
reject(new Error(`[HEIMDALL] Enclave popup closed before sending ${responseTypeToAwait}`));
|
|
168
|
+
}, 250);
|
|
169
|
+
deadline = setTimeout(() => {
|
|
170
|
+
done();
|
|
171
|
+
reject(Object.assign(new Error(`[HEIMDALL] No ${responseTypeToAwait} from the enclave within ${WAIT_TIMEOUT_MS / 1000}s`), { code: "enclave.timeout" }));
|
|
172
|
+
}, WAIT_TIMEOUT_MS);
|
|
173
|
+
}
|
|
152
174
|
});
|
|
153
175
|
}
|
|
154
176
|
sendPostWindowMessage(message) {
|
|
@@ -157,6 +179,10 @@ export class Heimdall {
|
|
|
157
179
|
processEvent(data, origin, expectedType, silent) {
|
|
158
180
|
if (origin !== new URL(this.enclaveOrigin).origin) {
|
|
159
181
|
// Something's not right... The message has come from an unknown domain...
|
|
182
|
+
// Untyped messages (HMR, extensions) are not ours, so skip them.
|
|
183
|
+
if (!silent && typeof data?.type === "string") {
|
|
184
|
+
console.warn(`[HEIMDALL] Ignored ${data.type} from ${origin}, expected ${new URL(this.enclaveOrigin).origin}`);
|
|
185
|
+
}
|
|
160
186
|
return { ok: false, print: false, error: "WRONG WINDOW SENT MESSAGE" };
|
|
161
187
|
}
|
|
162
188
|
switch (data.type) {
|
package/dist/esm/heimdall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heimdall.js","sourceRoot":"","sources":["../../src/heimdall.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,gEAAgE;AAChE,yCAAyC;AACzC,GAAG;AACH,gEAAgE;AAChE,4DAA4D;AAC5D,+DAA+D;AAC/D,kEAAkE;AAClE,6DAA6D;AAC7D,gEAAgE;AAChE,oCAAoC;AACpC,6DAA6D;AAC7D,8DAA8D;AAC9D,wCAAwC;AACxC,qDAAqD;AAWrD,MAAM,OAAgB,QAAQ;IAW1B,YAAY,IAAyB;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,CAAC;IAED,aAAa;QACT,IAAG,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,SAAS;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IACM,IAAI,CAAC,IAAS;QACjB,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;YACV,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;QACd,CAAC;IACL,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,SAAkB,KAAK;
|
|
1
|
+
{"version":3,"file":"heimdall.js","sourceRoot":"","sources":["../../src/heimdall.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,gEAAgE;AAChE,yCAAyC;AACzC,GAAG;AACH,gEAAgE;AAChE,4DAA4D;AAC5D,+DAA+D;AAC/D,kEAAkE;AAClE,6DAA6D;AAC7D,gEAAgE;AAChE,oCAAoC;AACpC,6DAA6D;AAC7D,8DAA8D;AAC9D,wCAAwC;AACxC,qDAAqD;AAWrD,0DAA0D;AAC1D,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,OAAgB,QAAQ;IAW1B,YAAY,IAAyB;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,CAAC;IAED,aAAa;QACT,IAAG,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,SAAS;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IACM,IAAI,CAAC,IAAS;QACjB,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;YACV,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;QACd,CAAC;IACL,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,SAAkB,KAAK,EAAE,cAAuB,KAAK;QACpF,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACpE,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IACM,KAAK;QACR,QAAO,IAAI,CAAC,WAAW,EAAC,CAAC;YACrB,KAAK,UAAU,CAAC,KAAK;gBACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;YACV,KAAK,UAAU,CAAC,QAAQ;gBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,KAAK,UAAU,CAAC,MAAM;gBAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;YACV;gBACI,MAAM,qBAAqB,CAAC;QACpC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAS;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,SAAS;QACnB,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,6BAA6B,QAAQ,EAAE,CAAC,CAAC;QAC3F,IAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,qEAAqE;QACxH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC3B,MAAM,CAAC,QAAQ;aACV,gBAAgB,CAAoB,iBAAiB,CAAC;aACtD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC1B,IAAG,CAAC;YACA,+CAA+C;YAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,uBAAuB;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE/C,+BAA+B;YAChC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAU,CAAC,GAAG,EAAE,EAAE;gBACrD,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBAClC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB;gBACjC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAU,mBAAmB;YAC3D,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,2DAA2D;YACnF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,qBAAqB;YAEjE,IAAG,IAAI,CAAC,cAAc;gBAAE,MAAM,CAAC,KAAK,GAAG,sBAAsB,CAAC;YAE9D,4BAA4B;YAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAElC,oDAAoD;YACpD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YAEtC,oCAAoC;YACpC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAU,KAAK,EAAE,GAAG,EAAE,EAAE;gBAClD,MAAM,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;gBAClD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc;YAC7B,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;gBAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB;YAC/D,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAEpF,OAAO,YAAY,CAAC;QACxB,CAAC;QAAA,MAAK,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,mBAA2B,EAAE,SAAkB,KAAK,EAAE,cAAuB,KAAK;QACrH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,IAAgD,CAAC;YACrD,IAAI,QAAmD,CAAC;YACxD,MAAM,IAAI,GAAG,GAAG,EAAE;gBACd,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC/C,aAAa,CAAC,IAAI,CAAC,CAAC;gBACpB,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;gBACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;gBAC1F,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACd,IAAI,EAAE,CAAC;oBACP,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACJ,IAAG,QAAQ,CAAC,KAAK;wBAAE,OAAO,CAAC,KAAK,CAAC,qCAAqC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7F,CAAC;YACL,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,WAAW,EAAE,CAAC;gBACd,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;oBACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM;wBAAE,OAAO;oBACxC,IAAI,EAAE,CAAC;oBACP,0DAA0D;oBAC1D,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,mBAAmB,EAAE,CAAC,CAAC,CAAC;gBAC/F,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;oBACvB,IAAI,EAAE,CAAC;oBACP,MAAM,CAAC,MAAM,CAAC,MAAM,CAChB,IAAI,KAAK,CAAC,iBAAiB,mBAAmB,4BAA4B,eAAe,GAAG,IAAI,GAAG,CAAC,EACpG,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAC9B,CAAC,CAAC;gBACP,CAAC,EAAE,eAAe,CAAC,CAAC;YACxB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,qBAAqB,CAAC,OAAY;QACtC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAEO,YAAY,CAAC,IAAS,EAAE,MAAc,EAAE,YAAoB,EAAE,MAAe;QACjF,IAAI,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YAChD,2EAA2E;YAC3E,iEAAiE;YACjE,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,SAAS,MAAM,cAAc,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACnH,CAAC;YACD,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAC,CAAC;QACzE,CAAC;QAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,WAAW;gBACZ,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC9C,MAAM;YACV,KAAK,OAAO;gBACR,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAC,CAAA;QAChE,CAAC;QAED,IAAG,YAAY,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAG,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,IAAI,CAAC,IAAI,GAAG,yBAAyB,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC;YAClH,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAC,CAAA;QAC5D,CAAC;aAAI,CAAC;YACF,IAAG,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YACjF,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAA;QAC5C,CAAC;IACL,CAAC;CACJ;AACD,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,6CAAK,CAAA;IACL,mDAAQ,CAAA;IACR,+CAAM,CAAA;AACV,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAAA,CAAC;AA4BD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "heimdall-tide",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.34",
|
|
4
4
|
"description": "SDK for communicating with a Tide Enclave",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
7
|
-
"typings": "dist/esm/index.d.ts",
|
|
7
|
+
"typings": "dist/esm/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
10
|
"import": "./dist/esm/index.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"homepage": "https://github.com/tide-foundation/heimdall#readme",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@tideorg/js": "0.14.
|
|
42
|
+
"@tideorg/js": "^0.14.29"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"typescript": "^5.8.3"
|
|
@@ -14,7 +14,7 @@ export class ApprovalEnclaveNew extends RequestEnclave{
|
|
|
14
14
|
// return fully serialized approved requests
|
|
15
15
|
this.checkEnclaveOpen();
|
|
16
16
|
await this.initDone;
|
|
17
|
-
const pre_resp = this.recieve("approvals");
|
|
17
|
+
const pre_resp = this.recieve("approvals", false, true); // reject if the popup is closed
|
|
18
18
|
this.send({
|
|
19
19
|
type: "approvalRequests",
|
|
20
20
|
message:{
|
package/src/heimdall.ts
CHANGED
|
@@ -23,6 +23,9 @@ export interface HeimdallConstructor{
|
|
|
23
23
|
signed_client_origin: string;
|
|
24
24
|
isRunningLocal?: boolean
|
|
25
25
|
}
|
|
26
|
+
// Backstop only; closing the popup is the normal way out.
|
|
27
|
+
const WAIT_TIMEOUT_MS = 300_000;
|
|
28
|
+
|
|
26
29
|
export abstract class Heimdall<T> implements EnclaveFlow<T> {
|
|
27
30
|
name: string;
|
|
28
31
|
_windowType: windowType;
|
|
@@ -74,14 +77,14 @@ export abstract class Heimdall<T> implements EnclaveFlow<T> {
|
|
|
74
77
|
break;
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
|
-
public async recieve(type: string, silent: boolean = false): Promise<any> {
|
|
80
|
+
public async recieve(type: string, silent: boolean = false, failOnClose: boolean = false): Promise<any> {
|
|
78
81
|
switch(this._windowType){
|
|
79
82
|
case windowType.Popup:
|
|
80
|
-
return this.waitForWindowPostMessage(type, silent);
|
|
83
|
+
return this.waitForWindowPostMessage(type, silent, failOnClose);
|
|
81
84
|
case windowType.Redirect:
|
|
82
85
|
throw new Error("Method not implemented.");
|
|
83
86
|
case windowType.Hidden:
|
|
84
|
-
return this.waitForWindowPostMessage(type, silent);
|
|
87
|
+
return this.waitForWindowPostMessage(type, silent, failOnClose);
|
|
85
88
|
}
|
|
86
89
|
}
|
|
87
90
|
public close() {
|
|
@@ -170,18 +173,40 @@ export abstract class Heimdall<T> implements EnclaveFlow<T> {
|
|
|
170
173
|
this.enclaveWindow?.close();
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
private async waitForWindowPostMessage(responseTypeToAwait: string, silent: boolean = false) {
|
|
174
|
-
return new Promise((resolve) => {
|
|
176
|
+
private async waitForWindowPostMessage(responseTypeToAwait: string, silent: boolean = false, failOnClose: boolean = false) {
|
|
177
|
+
return new Promise((resolve, reject) => {
|
|
178
|
+
let poll: ReturnType<typeof setInterval> | undefined;
|
|
179
|
+
let deadline: ReturnType<typeof setTimeout> | undefined;
|
|
180
|
+
const done = () => {
|
|
181
|
+
window.removeEventListener("message", handler);
|
|
182
|
+
clearInterval(poll);
|
|
183
|
+
clearTimeout(deadline);
|
|
184
|
+
};
|
|
175
185
|
const handler = (event) => {
|
|
176
186
|
const response = this.processEvent(event.data, event.origin, responseTypeToAwait, silent);
|
|
177
187
|
if (response.ok) {
|
|
188
|
+
done();
|
|
178
189
|
resolve(response.message);
|
|
179
|
-
window.removeEventListener("message", handler);
|
|
180
190
|
} else {
|
|
181
191
|
if(response.print) console.error("[HEIMDALL] Recieved enclave error: " + response.error);
|
|
182
192
|
}
|
|
183
193
|
};
|
|
184
194
|
window.addEventListener("message", handler, false);
|
|
195
|
+
if (failOnClose) {
|
|
196
|
+
poll = setInterval(() => {
|
|
197
|
+
if (!this.enclaveWindow?.closed) return;
|
|
198
|
+
done();
|
|
199
|
+
// Callers treat a message containing "popup" as a cancel.
|
|
200
|
+
reject(new Error(`[HEIMDALL] Enclave popup closed before sending ${responseTypeToAwait}`));
|
|
201
|
+
}, 250);
|
|
202
|
+
deadline = setTimeout(() => {
|
|
203
|
+
done();
|
|
204
|
+
reject(Object.assign(
|
|
205
|
+
new Error(`[HEIMDALL] No ${responseTypeToAwait} from the enclave within ${WAIT_TIMEOUT_MS / 1000}s`),
|
|
206
|
+
{ code: "enclave.timeout" },
|
|
207
|
+
));
|
|
208
|
+
}, WAIT_TIMEOUT_MS);
|
|
209
|
+
}
|
|
185
210
|
});
|
|
186
211
|
}
|
|
187
212
|
|
|
@@ -192,6 +217,10 @@ export abstract class Heimdall<T> implements EnclaveFlow<T> {
|
|
|
192
217
|
private processEvent(data: any, origin: string, expectedType: string, silent: boolean){
|
|
193
218
|
if (origin !== new URL(this.enclaveOrigin).origin) {
|
|
194
219
|
// Something's not right... The message has come from an unknown domain...
|
|
220
|
+
// Untyped messages (HMR, extensions) are not ours, so skip them.
|
|
221
|
+
if (!silent && typeof data?.type === "string") {
|
|
222
|
+
console.warn(`[HEIMDALL] Ignored ${data.type} from ${origin}, expected ${new URL(this.enclaveOrigin).origin}`);
|
|
223
|
+
}
|
|
195
224
|
return {ok: false, print: false, error: "WRONG WINDOW SENT MESSAGE"};
|
|
196
225
|
}
|
|
197
226
|
|
|
Binary file
|