@metamask/snaps-execution-environments 0.24.0 → 0.25.0

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.
Files changed (33) hide show
  1. package/dist/common/BaseSnapExecutor.d.ts +6 -6
  2. package/dist/common/BaseSnapExecutor.js +17 -10
  3. package/dist/common/BaseSnapExecutor.js.map +1 -1
  4. package/dist/common/commands.js +3 -5
  5. package/dist/common/commands.js.map +1 -1
  6. package/dist/common/endowments/index.d.ts +1 -1
  7. package/dist/common/endowments/index.js +2 -2
  8. package/dist/common/endowments/index.js.map +1 -1
  9. package/dist/common/endowments/interval.d.ts +1 -1
  10. package/dist/common/endowments/math.d.ts +43 -43
  11. package/dist/common/endowments/math.js.map +1 -1
  12. package/dist/common/endowments/network.d.ts +7 -7
  13. package/dist/common/endowments/network.js +24 -20
  14. package/dist/common/endowments/network.js.map +1 -1
  15. package/dist/common/endowments/timeout.d.ts +1 -1
  16. package/dist/common/globalObject.js +2 -0
  17. package/dist/common/globalObject.js.map +1 -1
  18. package/dist/common/sortParams.js +1 -1
  19. package/dist/common/sortParams.js.map +1 -1
  20. package/dist/common/utils.js +1 -1
  21. package/dist/common/utils.js.map +1 -1
  22. package/dist/common/validation.js.map +1 -1
  23. package/dist/iframe/IFrameSnapExecutor.js +4 -4
  24. package/dist/iframe/IFrameSnapExecutor.js.map +1 -1
  25. package/dist/node-process/ChildProcessSnapExecutor.js +4 -4
  26. package/dist/node-process/ChildProcessSnapExecutor.js.map +1 -1
  27. package/dist/node-thread/ThreadSnapExecutor.js +4 -4
  28. package/dist/node-thread/ThreadSnapExecutor.js.map +1 -1
  29. package/dist/webpack/iframe/bundle.js +1 -1
  30. package/dist/webpack/iframe/bundle.js.LICENSE.txt +6 -0
  31. package/dist/webpack/node-process/bundle.js +1 -1
  32. package/dist/webpack/node-thread/bundle.js +1 -1
  33. package/package.json +19 -17
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _ResponseWrapper_ogResponse;
13
+ var _ResponseWrapper_teardownRef, _ResponseWrapper_ogResponse;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const utils_1 = require("../utils");
16
16
  /**
@@ -19,9 +19,10 @@ const utils_1 = require("../utils");
19
19
  */
20
20
  class ResponseWrapper {
21
21
  constructor(ogResponse, teardownRef) {
22
+ _ResponseWrapper_teardownRef.set(this, void 0);
22
23
  _ResponseWrapper_ogResponse.set(this, void 0);
23
24
  __classPrivateFieldSet(this, _ResponseWrapper_ogResponse, ogResponse, "f");
24
- this.teardownRef = teardownRef;
25
+ __classPrivateFieldSet(this, _ResponseWrapper_teardownRef, teardownRef, "f");
25
26
  }
26
27
  get body() {
27
28
  return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").body;
@@ -50,27 +51,27 @@ class ResponseWrapper {
50
51
  get url() {
51
52
  return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").url;
52
53
  }
53
- text() {
54
+ async text() {
54
55
  return (0, utils_1.withTeardown)(__classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").text(), this);
55
56
  }
56
- arrayBuffer() {
57
+ async arrayBuffer() {
57
58
  return (0, utils_1.withTeardown)(__classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").arrayBuffer(), this);
58
59
  }
59
- blob() {
60
+ async blob() {
60
61
  return (0, utils_1.withTeardown)(__classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").blob(), this);
61
62
  }
62
63
  clone() {
63
64
  const newResponse = __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").clone();
64
- return new ResponseWrapper(newResponse, this.teardownRef);
65
+ return new ResponseWrapper(newResponse, __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
65
66
  }
66
- formData() {
67
+ async formData() {
67
68
  return (0, utils_1.withTeardown)(__classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").formData(), this);
68
69
  }
69
- json() {
70
+ async json() {
70
71
  return (0, utils_1.withTeardown)(__classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").json(), this);
71
72
  }
72
73
  }
73
- _ResponseWrapper_ogResponse = new WeakMap();
74
+ _ResponseWrapper_teardownRef = new WeakMap(), _ResponseWrapper_ogResponse = new WeakMap();
74
75
  /**
75
76
  * Create a network endowment, consisting of a `WebSocket` object and `fetch`
76
77
  * function. This allows us to provide a teardown function, so that we can cancel
@@ -194,7 +195,7 @@ const createNetwork = () => {
194
195
  return __classPrivateFieldGet(this, _oncloseOriginal, "f");
195
196
  }
196
197
  set onclose(callback) {
197
- if (__classPrivateFieldGet(this, _isTornDown, "f") !== true) {
198
+ if (!__classPrivateFieldGet(this, _isTornDown, "f")) {
198
199
  __classPrivateFieldSet(this, _oncloseOriginal, callback, "f");
199
200
  __classPrivateFieldGet(this, _socket, "f").onclose = __classPrivateFieldGet(this, _instances, "m", _createWrapped).call(this, callback);
200
201
  }
@@ -226,6 +227,8 @@ const createNetwork = () => {
226
227
  send(data) {
227
228
  __classPrivateFieldGet(this, _socket, "f").send(data);
228
229
  }
230
+ // The WebSocket interface don't respect the camelCase format
231
+ /* eslint-disable @typescript-eslint/naming-convention */
229
232
  get CLOSED() {
230
233
  return __classPrivateFieldGet(this, _socket, "f").CLOSED;
231
234
  }
@@ -238,6 +241,7 @@ const createNetwork = () => {
238
241
  get OPEN() {
239
242
  return __classPrivateFieldGet(this, _socket, "f").OPEN;
240
243
  }
244
+ /* eslint-enable @typescript-eslint/naming-convention */
241
245
  get binaryType() {
242
246
  return __classPrivateFieldGet(this, _socket, "f").binaryType;
243
247
  }
@@ -262,7 +266,7 @@ const createNetwork = () => {
262
266
  return __classPrivateFieldGet(this, _socket, "f").url;
263
267
  }
264
268
  addEventListener(type, listener, options) {
265
- if (__classPrivateFieldGet(this, _isTornDown, "f") !== true) {
269
+ if (!__classPrivateFieldGet(this, _isTornDown, "f")) {
266
270
  if (__classPrivateFieldGet(this, _events, "f")[type] === undefined) {
267
271
  __classPrivateFieldGet(this, _events, "f")[type] = new Map();
268
272
  }
@@ -284,7 +288,7 @@ const createNetwork = () => {
284
288
  }
285
289
  dispatchEvent(event) {
286
290
  // Can't call close prematurely before the teardown finishes
287
- if (event.type !== 'close' || __classPrivateFieldGet(this, _isTornDown, "f") !== true) {
291
+ if (event.type !== 'close' || !__classPrivateFieldGet(this, _isTornDown, "f")) {
288
292
  return __classPrivateFieldGet(this, _socket, "f").dispatchEvent(event);
289
293
  }
290
294
  return false;
@@ -298,7 +302,7 @@ const createNetwork = () => {
298
302
  _onerrorOriginal = new WeakMap(),
299
303
  _oncloseOriginal = new WeakMap(),
300
304
  _instances = new WeakSet(),
301
- _teardownClose = function _teardownClose() {
305
+ _teardownClose = async function _teardownClose() {
302
306
  var _a, _b, _c;
303
307
  // We clear all close listeners
304
308
  __classPrivateFieldGet(this, _socket, "f").onclose = null;
@@ -308,7 +312,7 @@ const createNetwork = () => {
308
312
  (_c = __classPrivateFieldGet(this, _events, "f").close) === null || _c === void 0 ? void 0 : _c.clear();
309
313
  // We add our own listener
310
314
  let onClosedResolve;
311
- const onClosed = new Promise((r) => (onClosedResolve = r));
315
+ const onClosed = new Promise((resolve) => (onClosedResolve = resolve));
312
316
  __classPrivateFieldGet(this, _socket, "f").onclose = () => {
313
317
  onClosedResolve();
314
318
  };
@@ -321,23 +325,23 @@ const createNetwork = () => {
321
325
  if (listener === null) {
322
326
  return null;
323
327
  }
324
- return (e) => {
328
+ return (event) => {
325
329
  // TODO: Should we migrate this to use a wrapper class?
326
- const properties = [...(0, utils_1.allProperties)(e)]
330
+ const properties = [...(0, utils_1.allProperties)(event)]
327
331
  .filter(([_, key]) => key !== 'constructor')
328
332
  .reduce((acc, [obj, key]) => {
329
333
  const stringKey = key.toString();
330
334
  const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
331
335
  if (typeof (descriptor === null || descriptor === void 0 ? void 0 : descriptor.value) === 'function') {
332
- acc[stringKey] = e[stringKey].bind(this);
336
+ acc[stringKey] = event[stringKey].bind(this);
333
337
  }
334
338
  else {
335
- acc[stringKey] = e[stringKey];
339
+ acc[stringKey] = event[stringKey];
336
340
  }
337
341
  return acc;
338
342
  }, {});
339
- const event = Object.assign(Object.assign({}, properties), { target: this, currentTarget: this, srcElement: this, ports: [this], source: null, composedPath: () => [this] });
340
- listener.apply(this, [event]);
343
+ const wrappedEvent = Object.assign(Object.assign({}, properties), { target: this, currentTarget: this, srcElement: this, ports: [this], source: null, composedPath: () => [this] });
344
+ listener.apply(this, [wrappedEvent]);
341
345
  };
342
346
  },
343
347
  _a);
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/common/endowments/network.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oCAAuD;AAIvD;;;GAGG;AACH,MAAM,eAAe;IAKnB,YAAY,UAAoB,EAAE,WAAqC;QAFvE,8CAAsB;QAGpB,uBAAA,IAAI,+BAAe,UAAU,MAAA,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,mCAAY,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,uBAAA,IAAI,mCAAY,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,uBAAA,IAAI,mCAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,uBAAA,IAAI,mCAAY,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,mCAAY,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,uBAAA,IAAI,mCAAY,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,mCAAY,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,mCAAY,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,GAAG;QACL,OAAO,uBAAA,IAAI,mCAAY,CAAC,GAAG,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,IAAA,oBAAY,EAAS,uBAAA,IAAI,mCAAY,CAAC,IAAI,EAAE,EAAE,IAAW,CAAC,CAAC;IACpE,CAAC;IAED,WAAW;QACT,OAAO,IAAA,oBAAY,EACjB,uBAAA,IAAI,mCAAY,CAAC,WAAW,EAAE,EAC9B,IAAW,CACZ,CAAC;IACJ,CAAC;IAED,IAAI;QACF,OAAO,IAAA,oBAAY,EAAO,uBAAA,IAAI,mCAAY,CAAC,IAAI,EAAE,EAAE,IAAW,CAAC,CAAC;IAClE,CAAC;IAED,KAAK;QACH,MAAM,WAAW,GAAG,uBAAA,IAAI,mCAAY,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ;QACN,OAAO,IAAA,oBAAY,EAAW,uBAAA,IAAI,mCAAY,CAAC,QAAQ,EAAE,EAAE,IAAW,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI;QACF,OAAO,IAAA,oBAAY,EAAC,uBAAA,IAAI,mCAAY,CAAC,IAAI,EAAE,EAAE,IAAW,CAAC,CAAC;IAC5D,CAAC;CACF;;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,aAAa,GAAG,GAAG,EAAE;;IACzB,2DAA2D;IAC3D,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmC,CAAC;IACnE,4BAA4B;IAC5B,MAAM,WAAW,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAExC,sEAAsE;IACtE,MAAM,OAAO,GAAG,IAAI,oBAAoB;IACtC,2FAA2F;IAC3F,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CACzB,CAAC;IAEF,MAAM,MAAM,GAAiB,KAAK,EAChC,KAAkB,EAClB,IAAkB,EACC,EAAE;QACrB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,MAAK,IAAI,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,MAAK,SAAS,EAAE;YACvD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YACnC,0BAA0B;YAC1B,cAAc,CAAC,gBAAgB,CAC7B,OAAO,EACP,GAAG,EAAE;gBACH,eAAe,CAAC,KAAK,CAAE,cAAsB,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;SACH;QAED,IAAI,GAAa,CAAC;QAClB,IAAI,mBAAgE,CAAC;QACrE,IAAI;YACF,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,kCAC3B,IAAI,KACP,MAAM,EAAE,eAAe,CAAC,MAAM,IAC9B,CAAC;YAEH,mBAAmB,GAAG;gBACpB,MAAM,EAAE,KAAK,IAAI,EAAE;oBACjB,eAAe,CAAC,KAAK,EAAE,CAAC;oBACxB,IAAI;wBACF,MAAM,YAAY,CAAC;qBACpB;oBAAC,WAAM;wBACN,gBAAgB;qBACjB;gBACH,CAAC;aACF,CAAC;YACF,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAEzC,GAAG,GAAG,IAAI,eAAe,CACvB,MAAM,IAAA,oBAAY,EAAC,YAAY,EAAE,WAAW,CAAC,EAC7C,WAAW,CACZ,CAAC;SACH;gBAAS;YACR,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBACrC,eAAe,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;aAC7C;SACF;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAiB,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnD,MAAM,kBAAkB,GAAG;gBACzB,MAAM;gBACJ,iFAAiF;gBACjF,KAAK,IAAI,EAAE;;oBACT,IAAI;wBACF,MAAM,CAAA,MAAA,IAAI,CAAC,KAAK,EAAE,0CAAE,MAAM,EAAE,CAAA,CAAC;qBAC9B;oBAAC,WAAM;wBACN,gBAAgB;qBACjB;gBACH,CAAC;aACJ,CAAC;YACF,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACxC,OAAO,CAAC,QAAQ,CACd,GAAG,CAAC,IAAI;YACR,2FAA2F;YAC3F,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACjD,CAAC;SACH;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF;;;;;;;;OAQG;IACH,MAAM,UAAU,SAAG;YACjB,YAAY,GAAiB,EAAE,SAA6B;;gBA2O5D,0BAAmB;gBAEnB;;mBAEG;gBACH,sBAAc,KAAK,EAAC;gBAEpB,kBAAqE,EAAE,EAAC;gBAExE,0BAA4C,IAAI,EAAC;gBAEjD,6BAA+C,IAAI,EAAC;gBAEpD,2BAA6C,IAAI,EAAC;gBAElD,2BAA6C,IAAI,EAAC;gBAzPhD,uBAAA,IAAI,WAAW,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,MAAA,CAAC;gBAE7C,+CAA+C;gBAC/C,uCAAuC;gBACvC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,uBAAA,IAAI,kCAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxD,MAAM,cAAc,GAAG;oBACrB,MAAM,EAAE,KAAK,IAAI,EAAE;;wBACjB,IAAI;4BACF,MAAM,CAAA,MAAA,GAAG,CAAC,KAAK,EAAE,2CAAI,CAAA,CAAC;yBACvB;wBAAC,WAAM;4BACN,gBAAgB;yBACjB;oBACH,CAAC;iBACF,CAAC;gBACF,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACpC,OAAO,CAAC,QAAQ,CACd,IAAI;gBACJ,2FAA2F;gBAC3F,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAC7C,CAAC;YACJ,CAAC;YAED,IAAI,OAAO;gBACT,OAAO,uBAAA,IAAI,wBAAiB,CAAC;YAC/B,CAAC;YAED,IAAI,OAAO,CAAC,QAAkC;gBAC5C,IAAI,uBAAA,IAAI,mBAAY,KAAK,IAAI,EAAE;oBAC7B,uBAAA,IAAI,oBAAoB,QAAQ,MAAA,CAAC;oBACjC,uBAAA,IAAI,eAAQ,CAAC,OAAO,GAAG,uBAAA,IAAI,kCAAe,MAAnB,IAAI,EAAgB,QAAQ,CAAC,CAAC;iBACtD;YACH,CAAC;YAED,IAAI,OAAO;gBACT,OAAO,uBAAA,IAAI,wBAAiB,CAAC;YAC/B,CAAC;YAED,IAAI,OAAO,CAAC,QAAsD;gBAChE,uBAAA,IAAI,oBAAoB,QAAQ,MAAA,CAAC;gBACjC,uBAAA,IAAI,eAAQ,CAAC,OAAO,GAAG,uBAAA,IAAI,kCAAe,MAAnB,IAAI,EAAgB,QAAQ,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,SAAS;gBACX,OAAO,uBAAA,IAAI,0BAAmB,CAAC;YACjC,CAAC;YAED,IAAI,SAAS,CACX,QAAkE;gBAElE,uBAAA,IAAI,sBAAsB,QAAQ,MAAA,CAAC;gBACnC,uBAAA,IAAI,eAAQ,CAAC,SAAS,GAAG,uBAAA,IAAI,kCAAe,MAAnB,IAAI,EAAgB,QAAQ,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,MAAM;gBACR,OAAO,uBAAA,IAAI,uBAAgB,CAAC;YAC9B,CAAC;YAED,IAAI,MAAM,CAAC,QAAsD;gBAC/D,uBAAA,IAAI,mBAAmB,QAAQ,MAAA,CAAC;gBAChC,uBAAA,IAAI,eAAQ,CAAC,MAAM,GAAG,uBAAA,IAAI,kCAAe,MAAnB,IAAI,EAAgB,QAAQ,CAAC,CAAC;YACtD,CAAC;YAED,KAAK,CAAC,IAAa,EAAE,MAAe;gBAClC,uBAAA,IAAI,eAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,IAAuD;gBAC1D,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,MAAM;gBACR,OAAO,uBAAA,IAAI,eAAQ,CAAC,MAAM,CAAC;YAC7B,CAAC;YAED,IAAI,OAAO;gBACT,OAAO,uBAAA,IAAI,eAAQ,CAAC,OAAO,CAAC;YAC9B,CAAC;YAED,IAAI,UAAU;gBACZ,OAAO,uBAAA,IAAI,eAAQ,CAAC,UAAU,CAAC;YACjC,CAAC;YAED,IAAI,IAAI;gBACN,OAAO,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC;YAC3B,CAAC;YAED,IAAI,UAAU;gBACZ,OAAO,uBAAA,IAAI,eAAQ,CAAC,UAAU,CAAC;YACjC,CAAC;YAED,IAAI,UAAU,CAAC,KAAiB;gBAC9B,uBAAA,IAAI,eAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;YAClC,CAAC;YAED,IAAI,cAAc;;gBAChB,OAAO,MAAA,uBAAA,IAAI,eAAQ,CAAC,cAAc,mCAAI,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,UAAU;;gBACZ,OAAO,MAAA,uBAAA,IAAI,eAAQ,CAAC,UAAU,mCAAI,EAAE,CAAC;YACvC,CAAC;YAED,IAAI,QAAQ;gBACV,OAAO,uBAAA,IAAI,eAAQ,CAAC,QAAQ,CAAC;YAC/B,CAAC;YAED,IAAI,UAAU;gBACZ,OAAO,uBAAA,IAAI,eAAQ,CAAC,UAAU,CAAC;YACjC,CAAC;YAED,IAAI,GAAG;gBACL,OAAO,uBAAA,IAAI,eAAQ,CAAC,GAAG,CAAC;YAC1B,CAAC;YAcD,gBAAgB,CAAC,IAAS,EAAE,QAAa,EAAE,OAAa;gBACtD,IAAI,uBAAA,IAAI,mBAAY,KAAK,IAAI,EAAE;oBAC7B,IAAI,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;wBACpC,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;qBAChC;oBACD,MAAM,OAAO,GAAG,uBAAA,IAAI,kCAAe,MAAnB,IAAI,EAAgB,QAAQ,CAAC,CAAC;oBAC9C,IAAI,OAAO,KAAK,IAAI,EAAE;wBACpB,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBAC1C,uBAAA,IAAI,eAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;qBACvD;iBACF;YACH,CAAC;YAcD,mBAAmB,CAAC,IAAS,EAAE,QAAa,EAAE,OAAa;gBACzD,IAAI,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;oBACpC,MAAM,OAAO,GAAG,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,OAAO,KAAK,SAAS,EAAE;wBACzB,uBAAA,IAAI,eAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACpC,uBAAA,IAAI,eAAQ,CAAC,mBAAmB,CAAC,IAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;qBACjE;iBACF;YACH,CAAC;YAED,aAAa,CAAC,KAAY;gBACxB,4DAA4D;gBAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,uBAAA,IAAI,mBAAY,KAAK,IAAI,EAAE;oBACvD,OAAO,uBAAA,IAAI,eAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;iBAC1C;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;SAmFF;;;;;;;;;;;YAhFG,+BAA+B;YAC/B,uBAAA,IAAI,eAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC5B,KAAK,MAAM,OAAO,IAAI,MAAA,MAAA,uBAAA,IAAI,eAAQ,CAAC,KAAK,0CAAE,MAAM,EAAE,mCAAI,EAAE,EAAE;gBACxD,uBAAA,IAAI,eAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;aACpD;YACD,MAAA,uBAAA,IAAI,eAAQ,CAAC,KAAK,0CAAE,KAAK,EAAE,CAAC;YAE5B,0BAA0B;YAC1B,IAAI,eAAoB,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;YACjE,uBAAA,IAAI,eAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;gBAC1B,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC;YAEF,iDAAiD;YACjD,uBAAA,IAAI,eAAe,IAAI,MAAA,CAAC;YAExB,uBAAA,IAAI,eAAQ,CAAC,KAAK,EAAE,CAAC;YAErB,OAAO,QAAQ,CAAC;QAClB,CAAC;iDAWC,QAAkC;YAElC,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrB,OAAO,IAAI,CAAC;aACb;YAED,OAAO,CAAC,CAAC,EAAE,EAAE;gBACX,uDAAuD;gBACvD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAA,qBAAa,EAAC,CAAC,CAAC,CAAC;qBACrC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,aAAa,CAAC;qBAC3C,MAAM,CAAsB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;oBAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACjC,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC9D,IAAI,OAAO,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAA,KAAK,UAAU,EAAE;wBAC3C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC1C;yBAAM;wBACL,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;qBAC/B;oBACD,OAAO,GAAG,CAAC;gBACb,CAAC,EAAE,EAAE,CAAC,CAAC;gBACT,MAAM,KAAK,mCACN,UAAU,KACb,MAAM,EAAE,IAAI,EACZ,aAAa,EAAE,IAAI,EACnB,UAAU,EAAE,IAAI,EAChB,KAAK,EAAE,CAAC,IAAI,CAAC,EACb,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAC3B,CAAC;gBACF,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC;QACJ,CAAC;WAkBF,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjE,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,UAAU;QACrB,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAU;IACtC,OAAO,EAAE,aAAa;CACvB,CAAC;AACF,kBAAe,eAAe,CAAC","sourcesContent":["import { allProperties, withTeardown } from '../utils';\n\ntype WebSocketCallback = (this: WebSocket, ev: any) => any;\n\n/**\n * This class wraps a Response object.\n * That way, a teardown process can stop any processes left.\n */\nclass ResponseWrapper implements Response {\n private readonly teardownRef: { lastTeardown: number };\n\n #ogResponse: Response;\n\n constructor(ogResponse: Response, teardownRef: { lastTeardown: number }) {\n this.#ogResponse = ogResponse;\n this.teardownRef = teardownRef;\n }\n\n get body(): ReadableStream<Uint8Array> | null {\n return this.#ogResponse.body;\n }\n\n get bodyUsed() {\n return this.#ogResponse.bodyUsed;\n }\n\n get headers() {\n return this.#ogResponse.headers;\n }\n\n get ok() {\n return this.#ogResponse.ok;\n }\n\n get redirected() {\n return this.#ogResponse.redirected;\n }\n\n get status() {\n return this.#ogResponse.status;\n }\n\n get statusText() {\n return this.#ogResponse.statusText;\n }\n\n get type() {\n return this.#ogResponse.type;\n }\n\n get url() {\n return this.#ogResponse.url;\n }\n\n text() {\n return withTeardown<string>(this.#ogResponse.text(), this as any);\n }\n\n arrayBuffer(): Promise<ArrayBuffer> {\n return withTeardown<ArrayBuffer>(\n this.#ogResponse.arrayBuffer(),\n this as any,\n );\n }\n\n blob(): Promise<Blob> {\n return withTeardown<Blob>(this.#ogResponse.blob(), this as any);\n }\n\n clone(): Response {\n const newResponse = this.#ogResponse.clone();\n return new ResponseWrapper(newResponse, this.teardownRef);\n }\n\n formData(): Promise<FormData> {\n return withTeardown<FormData>(this.#ogResponse.formData(), this as any);\n }\n\n json(): Promise<any> {\n return withTeardown(this.#ogResponse.json(), this as any);\n }\n}\n\n/**\n * Create a network endowment, consisting of a `WebSocket` object and `fetch`\n * function. This allows us to provide a teardown function, so that we can cancel\n * any pending requests, connections, streams, etc. that may be open when a snap\n * is terminated.\n *\n * This wraps the original implementations of `WebSocket` and `fetch`,\n * to ensure that a bad actor cannot get access to the original objects, thus\n * potentially preventing the network requests from being torn down.\n *\n * @returns An object containing a wrapped `WebSocket` class and `fetch`\n * function, as well as a teardown function.\n */\nconst createNetwork = () => {\n // Open fetch calls or open body streams or open websockets\n const openConnections = new Set<{ cancel: () => Promise<void> }>();\n // Track last teardown count\n const teardownRef = { lastTeardown: 0 };\n\n // Remove items from openConnections after they were garbage collected\n const cleanup = new FinalizationRegistry<() => void>(\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n (callback) => callback(),\n );\n\n const _fetch: typeof fetch = async (\n input: RequestInfo,\n init?: RequestInit,\n ): Promise<Response> => {\n const abortController = new AbortController();\n if (init?.signal !== null && init?.signal !== undefined) {\n const originalSignal = init.signal;\n // Merge abort controllers\n originalSignal.addEventListener(\n 'abort',\n () => {\n abortController.abort((originalSignal as any).reason);\n },\n { once: true },\n );\n }\n\n let res: Response;\n let openFetchConnection: { cancel: () => Promise<void> } | undefined;\n try {\n const fetchPromise = fetch(input, {\n ...init,\n signal: abortController.signal,\n });\n\n openFetchConnection = {\n cancel: async () => {\n abortController.abort();\n try {\n await fetchPromise;\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openFetchConnection);\n\n res = new ResponseWrapper(\n await withTeardown(fetchPromise, teardownRef),\n teardownRef,\n );\n } finally {\n if (openFetchConnection !== undefined) {\n openConnections.delete(openFetchConnection);\n }\n }\n\n if (res.body !== null) {\n const body = new WeakRef<ReadableStream>(res.body);\n\n const openBodyConnection = {\n cancel:\n /* istanbul ignore next: see it.todo('can be torn down during body read') test */\n async () => {\n try {\n await body.deref()?.cancel();\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openBodyConnection);\n cleanup.register(\n res.body,\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n () => openConnections.delete(openBodyConnection),\n );\n }\n return res;\n };\n\n /**\n * This class wraps a WebSocket object instead of extending it.\n * That way, a bad actor can't get access to original methods using\n * `socket.prototype`.\n *\n * When modifying this class, ensure that no method calls any other method\n * from the same class (#socket calls are fine). Otherwise, a bad actor could\n * replace one of the implementations\n */\n const _WebSocket = class implements WebSocket {\n constructor(url: string | URL, protocols?: string | string[]) {\n this.#socket = new WebSocket(url, protocols);\n\n // You can't call ref.deref()?.#teardownClose()\n // But you can capture the close itself\n const ref = new WeakRef(this.#teardownClose.bind(this));\n const openConnection = {\n cancel: async () => {\n try {\n await ref.deref()?.();\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openConnection);\n cleanup.register(\n this,\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n () => openConnections.delete(openConnection),\n );\n }\n\n get onclose(): WebSocketCallback | null {\n return this.#oncloseOriginal;\n }\n\n set onclose(callback: WebSocketCallback | null) {\n if (this.#isTornDown !== true) {\n this.#oncloseOriginal = callback;\n this.#socket.onclose = this.#createWrapped(callback);\n }\n }\n\n get onerror(): ((this: WebSocket, ev: Event) => any) | null {\n return this.#onerrorOriginal;\n }\n\n set onerror(callback: ((this: WebSocket, ev: Event) => any) | null) {\n this.#onerrorOriginal = callback;\n this.#socket.onerror = this.#createWrapped(callback);\n }\n\n get onmessage(): ((this: WebSocket, ev: MessageEvent<any>) => any) | null {\n return this.#onmessageOriginal;\n }\n\n set onmessage(\n callback: ((this: WebSocket, ev: MessageEvent<any>) => any) | null,\n ) {\n this.#onmessageOriginal = callback;\n this.#socket.onmessage = this.#createWrapped(callback);\n }\n\n get onopen(): ((this: WebSocket, ev: Event) => any) | null {\n return this.#onopenOriginal;\n }\n\n set onopen(callback: ((this: WebSocket, ev: Event) => any) | null) {\n this.#onopenOriginal = callback;\n this.#socket.onopen = this.#createWrapped(callback);\n }\n\n close(code?: number, reason?: string): void {\n this.#socket.close(code, reason);\n }\n\n send(data: string | Blob | ArrayBufferView | ArrayBufferLike): void {\n this.#socket.send(data);\n }\n\n get CLOSED(): number {\n return this.#socket.CLOSED;\n }\n\n get CLOSING(): number {\n return this.#socket.CLOSING;\n }\n\n get CONNECTING(): number {\n return this.#socket.CONNECTING;\n }\n\n get OPEN(): number {\n return this.#socket.OPEN;\n }\n\n get binaryType(): BinaryType {\n return this.#socket.binaryType;\n }\n\n set binaryType(value: BinaryType) {\n this.#socket.binaryType = value;\n }\n\n get bufferedAmount(): number {\n return this.#socket.bufferedAmount ?? 0;\n }\n\n get extensions(): string {\n return this.#socket.extensions ?? '';\n }\n\n get protocol(): string {\n return this.#socket.protocol;\n }\n\n get readyState(): number {\n return this.#socket.readyState;\n }\n\n get url(): string {\n return this.#socket.url;\n }\n\n addEventListener<K extends keyof WebSocketEventMap>(\n type: K,\n listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n addEventListener(type: any, listener: any, options?: any): void {\n if (this.#isTornDown !== true) {\n if (this.#events[type] === undefined) {\n this.#events[type] = new Map();\n }\n const wrapped = this.#createWrapped(listener);\n if (wrapped !== null) {\n this.#events[type].set(listener, wrapped);\n this.#socket.addEventListener(type, wrapped, options);\n }\n }\n }\n\n removeEventListener<K extends keyof WebSocketEventMap>(\n type: K,\n listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,\n options?: boolean | EventListenerOptions,\n ): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n\n removeEventListener(type: any, listener: any, options?: any): void {\n if (this.#events[type] !== undefined) {\n const wrapped = this.#events[type].get(listener);\n if (wrapped !== undefined) {\n this.#events[type].delete(listener);\n this.#socket.removeEventListener(type as any, wrapped, options);\n }\n }\n }\n\n dispatchEvent(event: Event): boolean {\n // Can't call close prematurely before the teardown finishes\n if (event.type !== 'close' || this.#isTornDown !== true) {\n return this.#socket.dispatchEvent(event);\n }\n return false;\n }\n\n #teardownClose() {\n // We clear all close listeners\n this.#socket.onclose = null;\n for (const wrapped of this.#events.close?.values() ?? []) {\n this.#socket.removeEventListener('close', wrapped);\n }\n this.#events.close?.clear();\n\n // We add our own listener\n let onClosedResolve: any;\n const onClosed = new Promise<void>((r) => (onClosedResolve = r));\n this.#socket.onclose = () => {\n onClosedResolve();\n };\n\n // No new listeners can be added after this point\n this.#isTornDown = true;\n\n this.#socket.close();\n\n return onClosed;\n }\n\n #createWrapped(listener: WebSocketCallback): WebSocketCallback;\n\n #createWrapped(listener: null): null;\n\n #createWrapped(\n listener: WebSocketCallback | null,\n ): WebSocketCallback | null;\n\n #createWrapped(\n listener: WebSocketCallback | null,\n ): WebSocketCallback | null {\n if (listener === null) {\n return null;\n }\n\n return (e) => {\n // TODO: Should we migrate this to use a wrapper class?\n const properties = [...allProperties(e)]\n .filter(([_, key]) => key !== 'constructor')\n .reduce<Record<string, any>>((acc, [obj, key]) => {\n const stringKey = key.toString();\n const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);\n if (typeof descriptor?.value === 'function') {\n acc[stringKey] = e[stringKey].bind(this);\n } else {\n acc[stringKey] = e[stringKey];\n }\n return acc;\n }, {});\n const event = {\n ...properties,\n target: this,\n currentTarget: this,\n srcElement: this,\n ports: [this],\n source: null,\n composedPath: () => [this],\n };\n listener.apply(this, [event]);\n };\n }\n\n #socket: WebSocket;\n\n /**\n * After this is set to true, no new event listeners can be added\n */\n #isTornDown = false;\n\n #events: Record<string, Map<WebSocketCallback, WebSocketCallback>> = {};\n\n #onopenOriginal: WebSocketCallback | null = null;\n\n #onmessageOriginal: WebSocketCallback | null = null;\n\n #onerrorOriginal: WebSocketCallback | null = null;\n\n #oncloseOriginal: WebSocketCallback | null = null;\n };\n\n const teardownFunction = async () => {\n teardownRef.lastTeardown += 1;\n const promises: Promise<void>[] = [];\n openConnections.forEach(({ cancel }) => promises.push(cancel()));\n openConnections.clear();\n await Promise.all(promises);\n };\n\n return {\n fetch: _fetch,\n WebSocket: _WebSocket,\n teardownFunction,\n };\n};\n\nconst endowmentModule = {\n names: ['fetch', 'WebSocket'] as const,\n factory: createNetwork,\n};\nexport default endowmentModule;\n"]}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/common/endowments/network.ts"],"names":[],"mappings":"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","sourcesContent":["import { allProperties, withTeardown } from '../utils';\n\ntype WebSocketCallback = (this: WebSocket, ev: any) => any;\n\n/**\n * This class wraps a Response object.\n * That way, a teardown process can stop any processes left.\n */\nclass ResponseWrapper implements Response {\n readonly #teardownRef: { lastTeardown: number };\n\n #ogResponse: Response;\n\n constructor(ogResponse: Response, teardownRef: { lastTeardown: number }) {\n this.#ogResponse = ogResponse;\n this.#teardownRef = teardownRef;\n }\n\n get body(): ReadableStream<Uint8Array> | null {\n return this.#ogResponse.body;\n }\n\n get bodyUsed() {\n return this.#ogResponse.bodyUsed;\n }\n\n get headers() {\n return this.#ogResponse.headers;\n }\n\n get ok() {\n return this.#ogResponse.ok;\n }\n\n get redirected() {\n return this.#ogResponse.redirected;\n }\n\n get status() {\n return this.#ogResponse.status;\n }\n\n get statusText() {\n return this.#ogResponse.statusText;\n }\n\n get type() {\n return this.#ogResponse.type;\n }\n\n get url() {\n return this.#ogResponse.url;\n }\n\n async text() {\n return withTeardown<string>(this.#ogResponse.text(), this as any);\n }\n\n async arrayBuffer(): Promise<ArrayBuffer> {\n return withTeardown<ArrayBuffer>(\n this.#ogResponse.arrayBuffer(),\n this as any,\n );\n }\n\n async blob(): Promise<Blob> {\n return withTeardown<Blob>(this.#ogResponse.blob(), this as any);\n }\n\n clone(): Response {\n const newResponse = this.#ogResponse.clone();\n return new ResponseWrapper(newResponse, this.#teardownRef);\n }\n\n async formData(): Promise<FormData> {\n return withTeardown<FormData>(this.#ogResponse.formData(), this as any);\n }\n\n async json(): Promise<any> {\n return withTeardown(this.#ogResponse.json(), this as any);\n }\n}\n\n/**\n * Create a network endowment, consisting of a `WebSocket` object and `fetch`\n * function. This allows us to provide a teardown function, so that we can cancel\n * any pending requests, connections, streams, etc. that may be open when a snap\n * is terminated.\n *\n * This wraps the original implementations of `WebSocket` and `fetch`,\n * to ensure that a bad actor cannot get access to the original objects, thus\n * potentially preventing the network requests from being torn down.\n *\n * @returns An object containing a wrapped `WebSocket` class and `fetch`\n * function, as well as a teardown function.\n */\nconst createNetwork = () => {\n // Open fetch calls or open body streams or open websockets\n const openConnections = new Set<{ cancel: () => Promise<void> }>();\n // Track last teardown count\n const teardownRef = { lastTeardown: 0 };\n\n // Remove items from openConnections after they were garbage collected\n const cleanup = new FinalizationRegistry<() => void>(\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n (callback) => callback(),\n );\n\n const _fetch: typeof fetch = async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const abortController = new AbortController();\n if (init?.signal !== null && init?.signal !== undefined) {\n const originalSignal = init.signal;\n // Merge abort controllers\n originalSignal.addEventListener(\n 'abort',\n () => {\n abortController.abort((originalSignal as any).reason);\n },\n { once: true },\n );\n }\n\n let res: Response;\n let openFetchConnection: { cancel: () => Promise<void> } | undefined;\n try {\n const fetchPromise = fetch(input, {\n ...init,\n signal: abortController.signal,\n });\n\n openFetchConnection = {\n cancel: async () => {\n abortController.abort();\n try {\n await fetchPromise;\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openFetchConnection);\n\n res = new ResponseWrapper(\n await withTeardown(fetchPromise, teardownRef),\n teardownRef,\n );\n } finally {\n if (openFetchConnection !== undefined) {\n openConnections.delete(openFetchConnection);\n }\n }\n\n if (res.body !== null) {\n const body = new WeakRef<ReadableStream>(res.body);\n\n const openBodyConnection = {\n cancel:\n /* istanbul ignore next: see it.todo('can be torn down during body read') test */\n async () => {\n try {\n await body.deref()?.cancel();\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openBodyConnection);\n cleanup.register(\n res.body,\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n () => openConnections.delete(openBodyConnection),\n );\n }\n return res;\n };\n\n /**\n * This class wraps a WebSocket object instead of extending it.\n * That way, a bad actor can't get access to original methods using\n * `socket.prototype`.\n *\n * When modifying this class, ensure that no method calls any other method\n * from the same class (#socket calls are fine). Otherwise, a bad actor could\n * replace one of the implementations\n */\n const _WebSocket = class implements WebSocket {\n constructor(url: string | URL, protocols?: string | string[]) {\n this.#socket = new WebSocket(url, protocols);\n\n // You can't call ref.deref()?.#teardownClose()\n // But you can capture the close itself\n const ref = new WeakRef(this.#teardownClose.bind(this));\n const openConnection = {\n cancel: async () => {\n try {\n await ref.deref()?.();\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openConnection);\n cleanup.register(\n this,\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n () => openConnections.delete(openConnection),\n );\n }\n\n get onclose(): WebSocketCallback | null {\n return this.#oncloseOriginal;\n }\n\n set onclose(callback: WebSocketCallback | null) {\n if (!this.#isTornDown) {\n this.#oncloseOriginal = callback;\n this.#socket.onclose = this.#createWrapped(callback);\n }\n }\n\n get onerror(): ((this: WebSocket, ev: Event) => any) | null {\n return this.#onerrorOriginal;\n }\n\n set onerror(callback: ((this: WebSocket, ev: Event) => any) | null) {\n this.#onerrorOriginal = callback;\n this.#socket.onerror = this.#createWrapped(callback);\n }\n\n get onmessage(): ((this: WebSocket, ev: MessageEvent) => any) | null {\n return this.#onmessageOriginal;\n }\n\n set onmessage(\n callback: ((this: WebSocket, ev: MessageEvent) => any) | null,\n ) {\n this.#onmessageOriginal = callback;\n this.#socket.onmessage = this.#createWrapped(callback);\n }\n\n get onopen(): ((this: WebSocket, ev: Event) => any) | null {\n return this.#onopenOriginal;\n }\n\n set onopen(callback: ((this: WebSocket, ev: Event) => any) | null) {\n this.#onopenOriginal = callback;\n this.#socket.onopen = this.#createWrapped(callback);\n }\n\n close(code?: number, reason?: string): void {\n this.#socket.close(code, reason);\n }\n\n send(data: string | Blob | ArrayBufferView | ArrayBufferLike): void {\n this.#socket.send(data);\n }\n\n // The WebSocket interface don't respect the camelCase format\n /* eslint-disable @typescript-eslint/naming-convention */\n get CLOSED(): number {\n return this.#socket.CLOSED;\n }\n\n get CLOSING(): number {\n return this.#socket.CLOSING;\n }\n\n get CONNECTING(): number {\n return this.#socket.CONNECTING;\n }\n\n get OPEN(): number {\n return this.#socket.OPEN;\n }\n /* eslint-enable @typescript-eslint/naming-convention */\n\n get binaryType(): BinaryType {\n return this.#socket.binaryType;\n }\n\n set binaryType(value: BinaryType) {\n this.#socket.binaryType = value;\n }\n\n get bufferedAmount(): number {\n return this.#socket.bufferedAmount ?? 0;\n }\n\n get extensions(): string {\n return this.#socket.extensions ?? '';\n }\n\n get protocol(): string {\n return this.#socket.protocol;\n }\n\n get readyState(): number {\n return this.#socket.readyState;\n }\n\n get url(): string {\n return this.#socket.url;\n }\n\n addEventListener<K extends keyof WebSocketEventMap>(\n type: K,\n listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n addEventListener(type: any, listener: any, options?: any): void {\n if (!this.#isTornDown) {\n if (this.#events[type] === undefined) {\n this.#events[type] = new Map();\n }\n const wrapped = this.#createWrapped(listener);\n if (wrapped !== null) {\n this.#events[type].set(listener, wrapped);\n this.#socket.addEventListener(type, wrapped, options);\n }\n }\n }\n\n removeEventListener<K extends keyof WebSocketEventMap>(\n type: K,\n listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,\n options?: boolean | EventListenerOptions,\n ): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n\n removeEventListener(type: any, listener: any, options?: any): void {\n if (this.#events[type] !== undefined) {\n const wrapped = this.#events[type].get(listener);\n if (wrapped !== undefined) {\n this.#events[type].delete(listener);\n this.#socket.removeEventListener(type, wrapped, options);\n }\n }\n }\n\n dispatchEvent(event: Event): boolean {\n // Can't call close prematurely before the teardown finishes\n if (event.type !== 'close' || !this.#isTornDown) {\n return this.#socket.dispatchEvent(event);\n }\n return false;\n }\n\n async #teardownClose() {\n // We clear all close listeners\n this.#socket.onclose = null;\n for (const wrapped of this.#events.close?.values() ?? []) {\n this.#socket.removeEventListener('close', wrapped);\n }\n this.#events.close?.clear();\n\n // We add our own listener\n let onClosedResolve: any;\n const onClosed = new Promise<void>(\n (resolve) => (onClosedResolve = resolve),\n );\n this.#socket.onclose = () => {\n onClosedResolve();\n };\n\n // No new listeners can be added after this point\n this.#isTornDown = true;\n\n this.#socket.close();\n\n return onClosed;\n }\n\n #createWrapped(listener: WebSocketCallback): WebSocketCallback;\n\n #createWrapped(listener: null): null;\n\n #createWrapped(\n listener: WebSocketCallback | null,\n ): WebSocketCallback | null;\n\n #createWrapped(\n listener: WebSocketCallback | null,\n ): WebSocketCallback | null {\n if (listener === null) {\n return null;\n }\n\n return (event) => {\n // TODO: Should we migrate this to use a wrapper class?\n const properties = [...allProperties(event)]\n .filter(([_, key]) => key !== 'constructor')\n .reduce<Record<string, any>>((acc, [obj, key]) => {\n const stringKey = key.toString();\n const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);\n if (typeof descriptor?.value === 'function') {\n acc[stringKey] = event[stringKey].bind(this);\n } else {\n acc[stringKey] = event[stringKey];\n }\n return acc;\n }, {});\n const wrappedEvent = {\n ...properties,\n target: this,\n currentTarget: this,\n srcElement: this,\n ports: [this],\n source: null,\n composedPath: () => [this],\n };\n listener.apply(this, [wrappedEvent]);\n };\n }\n\n #socket: WebSocket;\n\n /**\n * After this is set to true, no new event listeners can be added\n */\n #isTornDown = false;\n\n #events: Record<string, Map<WebSocketCallback, WebSocketCallback>> = {};\n\n #onopenOriginal: WebSocketCallback | null = null;\n\n #onmessageOriginal: WebSocketCallback | null = null;\n\n #onerrorOriginal: WebSocketCallback | null = null;\n\n #oncloseOriginal: WebSocketCallback | null = null;\n };\n\n const teardownFunction = async () => {\n teardownRef.lastTeardown += 1;\n const promises: Promise<void>[] = [];\n openConnections.forEach(({ cancel }) => promises.push(cancel()));\n openConnections.clear();\n await Promise.all(promises);\n };\n\n return {\n fetch: _fetch,\n WebSocket: _WebSocket,\n teardownFunction,\n };\n};\n\nconst endowmentModule = {\n names: ['fetch', 'WebSocket'] as const,\n factory: createNetwork,\n};\nexport default endowmentModule;\n"]}
@@ -1,7 +1,7 @@
1
1
  declare const endowmentModule: {
2
2
  names: readonly ["setTimeout", "clearTimeout"];
3
3
  factory: () => {
4
- readonly setTimeout: (handler: TimerHandler, timeout?: number | undefined) => unknown;
4
+ readonly setTimeout: (handler: TimerHandler, timeout?: number) => unknown;
5
5
  readonly clearTimeout: (handle: unknown) => void;
6
6
  readonly teardownFunction: () => void;
7
7
  };
@@ -5,11 +5,13 @@ var GlobalObjectNames;
5
5
  (function (GlobalObjectNames) {
6
6
  // The globalThis entry is incorrectly identified as shadowing the global
7
7
  // globalThis.
8
+ /* eslint-disable @typescript-eslint/naming-convention */
8
9
  // eslint-disable-next-line @typescript-eslint/no-shadow
9
10
  GlobalObjectNames["globalThis"] = "globalThis";
10
11
  GlobalObjectNames["global"] = "global";
11
12
  GlobalObjectNames["self"] = "self";
12
13
  GlobalObjectNames["window"] = "window";
14
+ /* eslint-enavle @typescript-eslint/naming-convention */
13
15
  })(GlobalObjectNames || (GlobalObjectNames = {}));
14
16
  let _rootRealmGlobal;
15
17
  let _rootRealmGlobalName;
@@ -1 +1 @@
1
- {"version":3,"file":"globalObject.js","sourceRoot":"","sources":["../../src/common/globalObject.ts"],"names":[],"mappings":";;;AAAA,IAAK,iBAQJ;AARD,WAAK,iBAAiB;IACpB,yEAAyE;IACzE,cAAc;IACd,wDAAwD;IACxD,8CAAyB,CAAA;IACzB,sCAAiB,CAAA;IACjB,kCAAa,CAAA;IACb,sCAAiB,CAAA;AACnB,CAAC,EARI,iBAAiB,KAAjB,iBAAiB,QAQrB;AAED,IAAI,gBAAmC,CAAC;AACxC,IAAI,oBAA4B,CAAC;AAEjC,0BAA0B;AAC1B,yCAAyC;AACzC,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IACrC,gBAAgB,GAAG,UAAU,CAAC;IAC9B,oBAAoB,GAAG,iBAAiB,CAAC,UAAU,CAAC;CACrD;KAAM,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IACtC,gBAAgB,GAAG,IAAI,CAAC;IACxB,oBAAoB,GAAG,iBAAiB,CAAC,IAAI,CAAC;CAC/C;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACxC,gBAAgB,GAAG,MAAM,CAAC;IAC1B,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,CAAC;CACjD;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACxC,gBAAgB,GAAG,MAAM,CAAC;IAC1B,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,CAAC;CACjD;KAAM;IACL,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;CAC1E;AACD,wCAAwC;AAExC;;GAEG;AACH,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAOhC,0CAAe;AALxB;;GAEG;AACH,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEvB,kDAAmB","sourcesContent":["enum GlobalObjectNames {\n // The globalThis entry is incorrectly identified as shadowing the global\n // globalThis.\n // eslint-disable-next-line @typescript-eslint/no-shadow\n globalThis = 'globalThis',\n global = 'global',\n self = 'self',\n window = 'window',\n}\n\nlet _rootRealmGlobal: typeof globalThis;\nlet _rootRealmGlobalName: string;\n\n/* istanbul ignore next */\n/* eslint-disable no-negated-condition */\nif (typeof globalThis !== 'undefined') {\n _rootRealmGlobal = globalThis;\n _rootRealmGlobalName = GlobalObjectNames.globalThis;\n} else if (typeof self !== 'undefined') {\n _rootRealmGlobal = self;\n _rootRealmGlobalName = GlobalObjectNames.self;\n} else if (typeof window !== 'undefined') {\n _rootRealmGlobal = window;\n _rootRealmGlobalName = GlobalObjectNames.window;\n} else if (typeof global !== 'undefined') {\n _rootRealmGlobal = global;\n _rootRealmGlobalName = GlobalObjectNames.global;\n} else {\n throw new Error('Unknown realm type; failed to identify global object.');\n}\n/* eslint-enable no-negated-condition */\n\n/**\n * A platform-agnostic alias for the root realm global object.\n */\nconst rootRealmGlobal = _rootRealmGlobal;\n\n/**\n * The string literal corresponding to the name of the root realm global object.\n */\nconst rootRealmGlobalName = _rootRealmGlobalName;\n\nexport { rootRealmGlobal, rootRealmGlobalName };\n"]}
1
+ {"version":3,"file":"globalObject.js","sourceRoot":"","sources":["../../src/common/globalObject.ts"],"names":[],"mappings":";;;AAAA,IAAK,iBAUJ;AAVD,WAAK,iBAAiB;IACpB,yEAAyE;IACzE,cAAc;IACd,yDAAyD;IACzD,wDAAwD;IACxD,8CAAyB,CAAA;IACzB,sCAAiB,CAAA;IACjB,kCAAa,CAAA;IACb,sCAAiB,CAAA;IACjB,wDAAwD;AAC1D,CAAC,EAVI,iBAAiB,KAAjB,iBAAiB,QAUrB;AAED,IAAI,gBAAmC,CAAC;AACxC,IAAI,oBAA4B,CAAC;AAEjC,0BAA0B;AAC1B,yCAAyC;AACzC,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IACrC,gBAAgB,GAAG,UAAU,CAAC;IAC9B,oBAAoB,GAAG,iBAAiB,CAAC,UAAU,CAAC;CACrD;KAAM,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IACtC,gBAAgB,GAAG,IAAI,CAAC;IACxB,oBAAoB,GAAG,iBAAiB,CAAC,IAAI,CAAC;CAC/C;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACxC,gBAAgB,GAAG,MAAM,CAAC;IAC1B,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,CAAC;CACjD;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACxC,gBAAgB,GAAG,MAAM,CAAC;IAC1B,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,CAAC;CACjD;KAAM;IACL,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;CAC1E;AACD,wCAAwC;AAExC;;GAEG;AACH,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAOhC,0CAAe;AALxB;;GAEG;AACH,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEvB,kDAAmB","sourcesContent":["enum GlobalObjectNames {\n // The globalThis entry is incorrectly identified as shadowing the global\n // globalThis.\n /* eslint-disable @typescript-eslint/naming-convention */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n globalThis = 'globalThis',\n global = 'global',\n self = 'self',\n window = 'window',\n /* eslint-enavle @typescript-eslint/naming-convention */\n}\n\nlet _rootRealmGlobal: typeof globalThis;\nlet _rootRealmGlobalName: string;\n\n/* istanbul ignore next */\n/* eslint-disable no-negated-condition */\nif (typeof globalThis !== 'undefined') {\n _rootRealmGlobal = globalThis;\n _rootRealmGlobalName = GlobalObjectNames.globalThis;\n} else if (typeof self !== 'undefined') {\n _rootRealmGlobal = self;\n _rootRealmGlobalName = GlobalObjectNames.self;\n} else if (typeof window !== 'undefined') {\n _rootRealmGlobal = window;\n _rootRealmGlobalName = GlobalObjectNames.window;\n} else if (typeof global !== 'undefined') {\n _rootRealmGlobal = global;\n _rootRealmGlobalName = GlobalObjectNames.global;\n} else {\n throw new Error('Unknown realm type; failed to identify global object.');\n}\n/* eslint-enable no-negated-condition */\n\n/**\n * A platform-agnostic alias for the root realm global object.\n */\nconst rootRealmGlobal = _rootRealmGlobal;\n\n/**\n * The string literal corresponding to the name of the root realm global object.\n */\nconst rootRealmGlobalName = _rootRealmGlobalName;\n\nexport { rootRealmGlobal, rootRealmGlobalName };\n"]}
@@ -25,7 +25,7 @@ const sortParamKeys = (methodParams, params) => {
25
25
  }
26
26
  const methodParamsOrder = methodParams.reduce((paramsOrderObj, paramsName, i) => (Object.assign(Object.assign({}, paramsOrderObj), { [paramsName]: i })), {});
27
27
  return Object.entries(params)
28
- .sort(([name1, _], [name2, __]) => methodParamsOrder[name1] - methodParamsOrder[name2])
28
+ .sort(([name1, _1], [name2, _2]) => methodParamsOrder[name1] - methodParamsOrder[name2])
29
29
  .map(([_, val]) => val);
30
30
  };
31
31
  exports.sortParamKeys = sortParamKeys;
@@ -1 +1 @@
1
- {"version":3,"file":"sortParams.js","sourceRoot":"","sources":["../../src/common/sortParams.ts"],"names":[],"mappings":";AAAA,8IAA8I;;;AAI9I;;;;;;;;;;;;;GAaG;AACI,MAAM,aAAa,GAAG,CAC3B,YAAsB,EACtB,MAAsB,EACtB,EAAE;IACF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,CAAC;KACX;IAED,IAAI,MAAM,YAAY,KAAK,EAAE;QAC3B,OAAO,MAAM,CAAC;KACf;IAED,MAAM,iBAAiB,GAA4B,YAAY,CAAC,MAAM,CACpE,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,iCAC9B,cAAc,KACjB,CAAC,UAAU,CAAC,EAAE,CAAC,IACf,EACF,EAAE,CACH,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,IAAI,CACH,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAC1B,iBAAiB,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CACtD;SACA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AA1BW,QAAA,aAAa,iBA0BxB","sourcesContent":["// original source sortParamKeys from: https://github.com/etclabscore/sig.tools/blob/master/src/postMessageServer/postMessageServer.ts#L75-L77\n\nimport { JsonRpcParams } from '@metamask/utils';\n\n/**\n * Deterministically sort JSON-RPC parameter keys. This makes it possible to\n * support both arrays and objects as parameters. Objects are sorted and turned\n * into arrays, for easier consumption by the snap.\n *\n * The order is defined by the `method` parameter.\n *\n * @param methodParams - The parameters of the JSON-RPC method, which\n * determines the ordering for the parameters.\n * @param params - JSON-RPC parameters as object or array.\n * @returns The values for the sorted keys. If `params` is not provided, this\n * returns an empty array. If `params` is an array, this returns the same\n * `params`.\n */\nexport const sortParamKeys = (\n methodParams: string[],\n params?: JsonRpcParams,\n) => {\n if (!params) {\n return [];\n }\n\n if (params instanceof Array) {\n return params;\n }\n\n const methodParamsOrder: { [k: string]: number } = methodParams.reduce(\n (paramsOrderObj, paramsName, i) => ({\n ...paramsOrderObj,\n [paramsName]: i,\n }),\n {},\n );\n\n return Object.entries(params)\n .sort(\n ([name1, _], [name2, __]) =>\n methodParamsOrder[name1] - methodParamsOrder[name2],\n )\n .map(([_, val]) => val);\n};\n"]}
1
+ {"version":3,"file":"sortParams.js","sourceRoot":"","sources":["../../src/common/sortParams.ts"],"names":[],"mappings":";AAAA,8IAA8I;;;AAI9I;;;;;;;;;;;;;GAaG;AACI,MAAM,aAAa,GAAG,CAC3B,YAAsB,EACtB,MAAsB,EACtB,EAAE;IACF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,CAAC;KACX;IAED,IAAI,MAAM,YAAY,KAAK,EAAE;QAC3B,OAAO,MAAM,CAAC;KACf;IAED,MAAM,iBAAiB,GAA4B,YAAY,CAAC,MAAM,CACpE,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,iCAC9B,cAAc,KACjB,CAAC,UAAU,CAAC,EAAE,CAAC,IACf,EACF,EAAE,CACH,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,IAAI,CACH,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAC3B,iBAAiB,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CACtD;SACA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AA1BW,QAAA,aAAa,iBA0BxB","sourcesContent":["// original source sortParamKeys from: https://github.com/etclabscore/sig.tools/blob/master/src/postMessageServer/postMessageServer.ts#L75-L77\n\nimport { JsonRpcParams } from '@metamask/utils';\n\n/**\n * Deterministically sort JSON-RPC parameter keys. This makes it possible to\n * support both arrays and objects as parameters. Objects are sorted and turned\n * into arrays, for easier consumption by the snap.\n *\n * The order is defined by the `method` parameter.\n *\n * @param methodParams - The parameters of the JSON-RPC method, which\n * determines the ordering for the parameters.\n * @param params - JSON-RPC parameters as object or array.\n * @returns The values for the sorted keys. If `params` is not provided, this\n * returns an empty array. If `params` is an array, this returns the same\n * `params`.\n */\nexport const sortParamKeys = (\n methodParams: string[],\n params?: JsonRpcParams,\n) => {\n if (!params) {\n return [];\n }\n\n if (params instanceof Array) {\n return params;\n }\n\n const methodParamsOrder: { [k: string]: number } = methodParams.reduce(\n (paramsOrderObj, paramsName, i) => ({\n ...paramsOrderObj,\n [paramsName]: i,\n }),\n {},\n );\n\n return Object.entries(params)\n .sort(\n ([name1, _1], [name2, _2]) =>\n methodParamsOrder[name1] - methodParamsOrder[name2],\n )\n .map(([_, val]) => val);\n};\n"]}
@@ -72,7 +72,7 @@ exports.allFunctions = allFunctions;
72
72
  * @param teardownRef.lastTeardown - Number of the last teardown.
73
73
  * @returns New proxy promise.
74
74
  */
75
- function withTeardown(originalPromise, teardownRef) {
75
+ async function withTeardown(originalPromise, teardownRef) {
76
76
  const myTeardown = teardownRef.lastTeardown;
77
77
  return new Promise((resolve, reject) => {
78
78
  originalPromise
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,aAAsB;IACnD,IAAI,cAAiC,CAAC;IACtC,IAAI,aAAa,YAAY,KAAK,EAAE;QAClC,cAAc,GAAG,aAAa,CAAC;KAChC;SAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;QAC5C,cAAc,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,qCAAqC;QACrC,OAAO,cAAc,CAAC,KAAK,CAAC;KAC7B;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAVD,wCAUC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,GAAQ;IACpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAc,CAAC;IACzC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,GAAG;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1C,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;SAChC;KACF,QACC,CAAC,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,KAAK,MAAM,CAAC,SAAS,EAC5B;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAZD,sCAYC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,GAAQ;IACnC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;QAC9C,IAAI,GAAG,KAAK,aAAa,EAAE;YACzB,SAAS;SACV;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE;YACtE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,oCAYC;AAED;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,eAA2B,EAC3B,WAAqC;IAErC,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC;IAC5C,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,eAAe;aACZ,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,WAAW,CAAC,YAAY,KAAK,UAAU,EAAE;gBAC3C,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;iBAAM;gBACL,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;aACH;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YAChB,IAAI,WAAW,CAAC,YAAY,KAAK,UAAU,EAAE;gBAC3C,MAAM,CAAC,MAAM,CAAC,CAAC;aAChB;iBAAM;gBACL,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;aACH;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AA1BD,oCA0BC","sourcesContent":["/**\n * Takes an error that was thrown, determines if it is\n * an error object. If it is then it will return that. Otherwise,\n * an error object is created with the original error message.\n *\n * @param originalError - The error that was originally thrown.\n * @returns An error object.\n */\nexport function constructError(originalError: unknown) {\n let _originalError: Error | undefined;\n if (originalError instanceof Error) {\n _originalError = originalError;\n } else if (typeof originalError === 'string') {\n _originalError = new Error(originalError);\n // The stack is useless in this case.\n delete _originalError.stack;\n }\n return _originalError;\n}\n\n/**\n * Get all properties of an object, including its prototype chain.\n *\n * @param obj - The object to get all properties for.\n * @returns All properties of `obj` as a tuple set, containing the property name\n * and value.\n */\nexport function allProperties(obj: any): Set<[object, string | symbol]> {\n const properties = new Set<[any, any]>();\n let current = obj;\n do {\n for (const key of Reflect.ownKeys(current)) {\n properties.add([current, key]);\n }\n } while (\n (current = Reflect.getPrototypeOf(current)) &&\n current !== Object.prototype\n );\n return properties;\n}\n\n/**\n * Get all functions of an object, including its prototype chain. This does not\n * include constructor functions.\n *\n * @param obj - The object to get all functions for.\n * @returns An array with all functions of `obj` as string or symbol.\n */\nexport function allFunctions(obj: any): (string | symbol)[] {\n const result = [];\n for (const [object, key] of allProperties(obj)) {\n if (key === 'constructor') {\n continue;\n }\n const descriptor = Reflect.getOwnPropertyDescriptor(object, key);\n if (descriptor !== undefined && typeof descriptor.value === 'function') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Make proxy for Promise and handle the teardown process properly.\n * If the teardown is called in the meanwhile, Promise result will not be\n * exposed to the snap anymore and warning will be logged to the console.\n *\n * @param originalPromise - Original promise.\n * @param teardownRef - Reference containing teardown count.\n * @param teardownRef.lastTeardown - Number of the last teardown.\n * @returns New proxy promise.\n */\nexport function withTeardown<T>(\n originalPromise: Promise<T>,\n teardownRef: { lastTeardown: number },\n): Promise<T> {\n const myTeardown = teardownRef.lastTeardown;\n return new Promise<T>((resolve, reject) => {\n originalPromise\n .then((value) => {\n if (teardownRef.lastTeardown === myTeardown) {\n resolve(value);\n } else {\n console.warn(\n 'Late promise received after Snap finished execution. Promise will be dropped.',\n );\n }\n })\n .catch((reason) => {\n if (teardownRef.lastTeardown === myTeardown) {\n reject(reason);\n } else {\n console.warn(\n 'Late promise received after Snap finished execution. Promise will be dropped.',\n );\n }\n });\n });\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,aAAsB;IACnD,IAAI,cAAiC,CAAC;IACtC,IAAI,aAAa,YAAY,KAAK,EAAE;QAClC,cAAc,GAAG,aAAa,CAAC;KAChC;SAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;QAC5C,cAAc,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,qCAAqC;QACrC,OAAO,cAAc,CAAC,KAAK,CAAC;KAC7B;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAVD,wCAUC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,GAAQ;IACpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAc,CAAC;IACzC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,GAAG;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1C,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;SAChC;KACF,QACC,CAAC,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,KAAK,MAAM,CAAC,SAAS,EAC5B;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAZD,sCAYC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,GAAQ;IACnC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;QAC9C,IAAI,GAAG,KAAK,aAAa,EAAE;YACzB,SAAS;SACV;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE;YACtE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,oCAYC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,YAAY,CAChC,eAA2B,EAC3B,WAAqC;IAErC,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC;IAC5C,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,eAAe;aACZ,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,WAAW,CAAC,YAAY,KAAK,UAAU,EAAE;gBAC3C,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;iBAAM;gBACL,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;aACH;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YAChB,IAAI,WAAW,CAAC,YAAY,KAAK,UAAU,EAAE;gBAC3C,MAAM,CAAC,MAAM,CAAC,CAAC;aAChB;iBAAM;gBACL,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;aACH;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AA1BD,oCA0BC","sourcesContent":["/**\n * Takes an error that was thrown, determines if it is\n * an error object. If it is then it will return that. Otherwise,\n * an error object is created with the original error message.\n *\n * @param originalError - The error that was originally thrown.\n * @returns An error object.\n */\nexport function constructError(originalError: unknown) {\n let _originalError: Error | undefined;\n if (originalError instanceof Error) {\n _originalError = originalError;\n } else if (typeof originalError === 'string') {\n _originalError = new Error(originalError);\n // The stack is useless in this case.\n delete _originalError.stack;\n }\n return _originalError;\n}\n\n/**\n * Get all properties of an object, including its prototype chain.\n *\n * @param obj - The object to get all properties for.\n * @returns All properties of `obj` as a tuple set, containing the property name\n * and value.\n */\nexport function allProperties(obj: any): Set<[object, string | symbol]> {\n const properties = new Set<[any, any]>();\n let current = obj;\n do {\n for (const key of Reflect.ownKeys(current)) {\n properties.add([current, key]);\n }\n } while (\n (current = Reflect.getPrototypeOf(current)) &&\n current !== Object.prototype\n );\n return properties;\n}\n\n/**\n * Get all functions of an object, including its prototype chain. This does not\n * include constructor functions.\n *\n * @param obj - The object to get all functions for.\n * @returns An array with all functions of `obj` as string or symbol.\n */\nexport function allFunctions(obj: any): (string | symbol)[] {\n const result = [];\n for (const [object, key] of allProperties(obj)) {\n if (key === 'constructor') {\n continue;\n }\n const descriptor = Reflect.getOwnPropertyDescriptor(object, key);\n if (descriptor !== undefined && typeof descriptor.value === 'function') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Make proxy for Promise and handle the teardown process properly.\n * If the teardown is called in the meanwhile, Promise result will not be\n * exposed to the snap anymore and warning will be logged to the console.\n *\n * @param originalPromise - Original promise.\n * @param teardownRef - Reference containing teardown count.\n * @param teardownRef.lastTeardown - Number of the last teardown.\n * @returns New proxy promise.\n */\nexport async function withTeardown<T>(\n originalPromise: Promise<T>,\n teardownRef: { lastTeardown: number },\n): Promise<T> {\n const myTeardown = teardownRef.lastTeardown;\n return new Promise<T>((resolve, reject) => {\n originalPromise\n .then((value) => {\n if (teardownRef.lastTeardown === myTeardown) {\n resolve(value);\n } else {\n console.warn(\n 'Late promise received after Snap finished execution. Promise will be dropped.',\n );\n }\n })\n .catch((reason) => {\n if (teardownRef.lastTeardown === myTeardown) {\n reject(reason);\n } else {\n console.warn(\n 'Late promise received after Snap finished execution. Promise will be dropped.',\n );\n }\n });\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/common/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainIdStruct, HandlerType } from '@metamask/snaps-utils';\nimport { SnapKeyring } from '@metamask/snaps-types';\nimport {\n assertStruct,\n Json,\n JsonRpcIdStruct,\n JsonRpcRequestStruct,\n JsonRpcSuccess,\n JsonRpcSuccessStruct,\n JsonStruct,\n} from '@metamask/utils';\nimport {\n array,\n assign,\n enums,\n Infer,\n is,\n literal,\n nullable,\n object,\n omit,\n optional,\n record,\n string,\n tuple,\n union,\n} from 'superstruct';\n\nconst VALIDATION_FUNCTIONS = {\n [HandlerType.OnRpcRequest]: validateFunctionExport,\n [HandlerType.OnTransaction]: validateFunctionExport,\n [HandlerType.SnapKeyring]: validateKeyringExport,\n [HandlerType.OnCronjob]: validateFunctionExport,\n};\n\n/**\n * Validates a function export.\n *\n * @param snapExport - The export itself.\n * @returns True if the export matches the expected shape, false otherwise.\n */\nfunction validateFunctionExport(\n snapExport: unknown,\n): snapExport is (...args: unknown[]) => unknown {\n return typeof snapExport === 'function';\n}\n\n/**\n * Validates a keyring export.\n *\n * @param snapExport - The export itself.\n * @returns True if the export matches the expected shape, false otherwise.\n */\nfunction validateKeyringExport(snapExport: unknown): snapExport is SnapKeyring {\n // TODO Decide whether we want more validation\n return typeof snapExport === 'object';\n}\n\n/**\n * Validates a given snap export.\n *\n * @param type - The type of export expected.\n * @param snapExport - The export itself.\n * @returns True if the export matches the expected shape, false otherwise.\n */\nexport function validateExport(type: HandlerType, snapExport: unknown) {\n const validationFunction = VALIDATION_FUNCTIONS[type];\n return validationFunction?.(snapExport) ?? false;\n}\n\nexport const JsonRpcRequestWithoutIdStruct = assign(\n omit(JsonRpcRequestStruct, ['id']),\n object({\n id: optional(JsonRpcIdStruct),\n }),\n);\n\nexport type JsonRpcRequestWithoutId = Infer<\n typeof JsonRpcRequestWithoutIdStruct\n>;\n\nexport const EndowmentStruct = string();\nexport type Endowment = Infer<typeof EndowmentStruct>;\n\n/**\n * Check if the given value is an endowment.\n *\n * @param value - The value to check.\n * @returns Whether the value is an endowment.\n */\nexport function isEndowment(value: unknown): value is Endowment {\n return is(value, EndowmentStruct);\n}\n\n/**\n * Check if the given value is an array of endowments.\n *\n * @param value - The value to check.\n * @returns Whether the value is an array of endowments.\n */\nexport function isEndowmentsArray(value: unknown): value is Endowment[] {\n return Array.isArray(value) && value.every(isEndowment);\n}\n\nconst OkStruct = literal('OK');\n\nexport const PingRequestArgumentsStruct = optional(\n union([literal(undefined), array()]),\n);\n\nexport const TerminateRequestArgumentsStruct = union([\n literal(undefined),\n array(),\n]);\n\nexport const ExecuteSnapRequestArgumentsStruct = tuple([\n string(),\n string(),\n optional(array(EndowmentStruct)),\n]);\n\nexport const SnapRpcRequestArgumentsStruct = tuple([\n string(),\n enums(Object.values(HandlerType)),\n string(),\n assign(\n JsonRpcRequestWithoutIdStruct,\n object({\n params: optional(record(string(), JsonStruct)),\n }),\n ),\n]);\n\nexport type PingRequestArguments = Infer<typeof PingRequestArgumentsStruct>;\nexport type TerminateRequestArguments = Infer<\n typeof TerminateRequestArgumentsStruct\n>;\n\nexport type ExecuteSnapRequestArguments = Infer<\n typeof ExecuteSnapRequestArgumentsStruct\n>;\n\nexport type SnapRpcRequestArguments = Infer<\n typeof SnapRpcRequestArgumentsStruct\n>;\n\nexport type RequestArguments =\n | PingRequestArguments\n | TerminateRequestArguments\n | ExecuteSnapRequestArguments\n | SnapRpcRequestArguments;\n\nexport const OnTransactionRequestArgumentsStruct = object({\n // TODO: Improve `transaction` type.\n transaction: record(string(), JsonStruct),\n chainId: ChainIdStruct,\n transactionOrigin: nullable(string()),\n});\n\nexport type OnTransactionRequestArguments = Infer<\n typeof OnTransactionRequestArgumentsStruct\n>;\n\n/**\n * Asserts that the given value is a valid {@link OnTransactionRequestArguments}\n * object.\n *\n * @param value - The value to validate.\n * @throws If the value is not a valid {@link OnTransactionRequestArguments}\n * object.\n */\nexport function assertIsOnTransactionRequestArguments(\n value: unknown,\n): asserts value is OnTransactionRequestArguments {\n assertStruct(\n value,\n OnTransactionRequestArgumentsStruct,\n 'Invalid request params',\n );\n}\n\nconst OkResponseStruct = assign(\n JsonRpcSuccessStruct,\n object({\n result: OkStruct,\n }),\n);\n\nconst SnapRpcResponse = JsonRpcSuccessStruct;\n\nexport type OkResponse = Infer<typeof OkResponseStruct>;\nexport type SnapRpcResponse = Infer<typeof SnapRpcResponse>;\n\nexport type Response = OkResponse | SnapRpcResponse;\n\ntype RequestParams<Params extends unknown[] | undefined> =\n Params extends undefined ? [] : Params;\n\ntype RequestFunction<\n Args extends RequestArguments,\n ResponseType extends JsonRpcSuccess<Json>,\n> = (...args: RequestParams<Args>) => Promise<ResponseType['result']>;\n\nexport type Ping = RequestFunction<PingRequestArguments, OkResponse>;\nexport type Terminate = RequestFunction<TerminateRequestArguments, OkResponse>;\nexport type ExecuteSnap = RequestFunction<\n ExecuteSnapRequestArguments,\n OkResponse\n>;\nexport type SnapRpc = RequestFunction<SnapRpcRequestArguments, SnapRpcResponse>;\n"]}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/common/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { SnapKeyring } from '@metamask/snaps-types';\nimport { ChainIdStruct, HandlerType } from '@metamask/snaps-utils';\nimport {\n assertStruct,\n Json,\n JsonRpcIdStruct,\n JsonRpcRequestStruct,\n JsonRpcSuccess,\n JsonRpcSuccessStruct,\n JsonStruct,\n} from '@metamask/utils';\nimport {\n array,\n assign,\n enums,\n Infer,\n is,\n literal,\n nullable,\n object,\n omit,\n optional,\n record,\n string,\n tuple,\n union,\n} from 'superstruct';\n\nconst VALIDATION_FUNCTIONS = {\n [HandlerType.OnRpcRequest]: validateFunctionExport,\n [HandlerType.OnTransaction]: validateFunctionExport,\n [HandlerType.SnapKeyring]: validateKeyringExport,\n [HandlerType.OnCronjob]: validateFunctionExport,\n};\n\n/**\n * Validates a function export.\n *\n * @param snapExport - The export itself.\n * @returns True if the export matches the expected shape, false otherwise.\n */\nfunction validateFunctionExport(\n snapExport: unknown,\n): snapExport is (...args: unknown[]) => unknown {\n return typeof snapExport === 'function';\n}\n\n/**\n * Validates a keyring export.\n *\n * @param snapExport - The export itself.\n * @returns True if the export matches the expected shape, false otherwise.\n */\nfunction validateKeyringExport(snapExport: unknown): snapExport is SnapKeyring {\n // TODO Decide whether we want more validation\n return typeof snapExport === 'object';\n}\n\n/**\n * Validates a given snap export.\n *\n * @param type - The type of export expected.\n * @param snapExport - The export itself.\n * @returns True if the export matches the expected shape, false otherwise.\n */\nexport function validateExport(type: HandlerType, snapExport: unknown) {\n const validationFunction = VALIDATION_FUNCTIONS[type];\n return validationFunction?.(snapExport) ?? false;\n}\n\nexport const JsonRpcRequestWithoutIdStruct = assign(\n omit(JsonRpcRequestStruct, ['id']),\n object({\n id: optional(JsonRpcIdStruct),\n }),\n);\n\nexport type JsonRpcRequestWithoutId = Infer<\n typeof JsonRpcRequestWithoutIdStruct\n>;\n\nexport const EndowmentStruct = string();\nexport type Endowment = Infer<typeof EndowmentStruct>;\n\n/**\n * Check if the given value is an endowment.\n *\n * @param value - The value to check.\n * @returns Whether the value is an endowment.\n */\nexport function isEndowment(value: unknown): value is Endowment {\n return is(value, EndowmentStruct);\n}\n\n/**\n * Check if the given value is an array of endowments.\n *\n * @param value - The value to check.\n * @returns Whether the value is an array of endowments.\n */\nexport function isEndowmentsArray(value: unknown): value is Endowment[] {\n return Array.isArray(value) && value.every(isEndowment);\n}\n\nconst OkStruct = literal('OK');\n\nexport const PingRequestArgumentsStruct = optional(\n union([literal(undefined), array()]),\n);\n\nexport const TerminateRequestArgumentsStruct = union([\n literal(undefined),\n array(),\n]);\n\nexport const ExecuteSnapRequestArgumentsStruct = tuple([\n string(),\n string(),\n optional(array(EndowmentStruct)),\n]);\n\nexport const SnapRpcRequestArgumentsStruct = tuple([\n string(),\n enums(Object.values(HandlerType)),\n string(),\n assign(\n JsonRpcRequestWithoutIdStruct,\n object({\n params: optional(record(string(), JsonStruct)),\n }),\n ),\n]);\n\nexport type PingRequestArguments = Infer<typeof PingRequestArgumentsStruct>;\nexport type TerminateRequestArguments = Infer<\n typeof TerminateRequestArgumentsStruct\n>;\n\nexport type ExecuteSnapRequestArguments = Infer<\n typeof ExecuteSnapRequestArgumentsStruct\n>;\n\nexport type SnapRpcRequestArguments = Infer<\n typeof SnapRpcRequestArgumentsStruct\n>;\n\nexport type RequestArguments =\n | PingRequestArguments\n | TerminateRequestArguments\n | ExecuteSnapRequestArguments\n | SnapRpcRequestArguments;\n\nexport const OnTransactionRequestArgumentsStruct = object({\n // TODO: Improve `transaction` type.\n transaction: record(string(), JsonStruct),\n chainId: ChainIdStruct,\n transactionOrigin: nullable(string()),\n});\n\nexport type OnTransactionRequestArguments = Infer<\n typeof OnTransactionRequestArgumentsStruct\n>;\n\n/**\n * Asserts that the given value is a valid {@link OnTransactionRequestArguments}\n * object.\n *\n * @param value - The value to validate.\n * @throws If the value is not a valid {@link OnTransactionRequestArguments}\n * object.\n */\nexport function assertIsOnTransactionRequestArguments(\n value: unknown,\n): asserts value is OnTransactionRequestArguments {\n assertStruct(\n value,\n OnTransactionRequestArgumentsStruct,\n 'Invalid request params',\n );\n}\n\nconst OkResponseStruct = assign(\n JsonRpcSuccessStruct,\n object({\n result: OkStruct,\n }),\n);\n\nconst SnapRpcResponse = JsonRpcSuccessStruct;\n\nexport type OkResponse = Infer<typeof OkResponseStruct>;\nexport type SnapRpcResponse = Infer<typeof SnapRpcResponse>;\n\nexport type Response = OkResponse | SnapRpcResponse;\n\ntype RequestParams<Params extends unknown[] | undefined> =\n Params extends undefined ? [] : Params;\n\ntype RequestFunction<\n Args extends RequestArguments,\n ResponseType extends JsonRpcSuccess<Json>,\n> = (...args: RequestParams<Args>) => Promise<ResponseType['result']>;\n\nexport type Ping = RequestFunction<PingRequestArguments, OkResponse>;\nexport type Terminate = RequestFunction<TerminateRequestArguments, OkResponse>;\nexport type ExecuteSnap = RequestFunction<\n ExecuteSnapRequestArguments,\n OkResponse\n>;\nexport type SnapRpc = RequestFunction<SnapRpcRequestArguments, SnapRpcResponse>;\n"]}
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.IFrameSnapExecutor = void 0;
7
7
  const object_multiplex_1 = __importDefault(require("@metamask/object-multiplex"));
8
8
  const post_message_stream_1 = require("@metamask/post-message-stream");
9
- const pump_1 = __importDefault(require("pump"));
10
9
  const snaps_utils_1 = require("@metamask/snaps-utils");
10
+ const pump_1 = __importDefault(require("pump"));
11
11
  const BaseSnapExecutor_1 = require("../common/BaseSnapExecutor");
12
12
  class IFrameSnapExecutor extends BaseSnapExecutor_1.BaseSnapExecutor {
13
13
  /**
@@ -26,9 +26,9 @@ class IFrameSnapExecutor extends BaseSnapExecutor_1.BaseSnapExecutor {
26
26
  targetOrigin: '*',
27
27
  });
28
28
  const mux = new object_multiplex_1.default();
29
- (0, pump_1.default)(parentStream, mux, parentStream, (err) => {
30
- if (err) {
31
- console.error(`Parent stream failure, closing worker.`, err);
29
+ (0, pump_1.default)(parentStream, mux, parentStream, (error) => {
30
+ if (error) {
31
+ console.error(`Parent stream failure, closing worker.`, error);
32
32
  }
33
33
  self.close();
34
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"IFrameSnapExecutor.js","sourceRoot":"","sources":["../../src/iframe/IFrameSnapExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAyD;AACzD,uEAAwE;AACxE,gDAAwB;AACxB,uDAA0D;AAC1D,iEAA8D;AAE9D,MAAa,kBAAmB,SAAQ,mCAAgB;IACtD;;;;;;OAMG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,IAAI,6CAAuB,CAAC;YAC/C,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,YAAY,EAAE,GAAG;SAClB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,0BAAe,EAAE,CAAC;QAClC,IAAA,cAAI,EAAC,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5C,IAAI,GAAG,EAAE;gBACP,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,QAAQ,CAAC,CAAC;QAE/D,OAAO,IAAI,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AA/BD,gDA+BC","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport { WindowPostMessageStream } from '@metamask/post-message-stream';\nimport pump from 'pump';\nimport { SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\n\nexport class IFrameSnapExecutor extends BaseSnapExecutor {\n /**\n * Initialize the IFrameSnapExecutor. This creates a post message stream from\n * and to the parent window, for two-way communication with the iframe.\n *\n * @returns An instance of `IFrameSnapExecutor`, with the initialized post\n * message streams.\n */\n static initialize() {\n console.log('Worker: Connecting to parent.');\n\n const parentStream = new WindowPostMessageStream({\n name: 'child',\n target: 'parent',\n targetWindow: self.parent,\n targetOrigin: '*',\n });\n\n const mux = new ObjectMultiplex();\n pump(parentStream, mux, parentStream, (err) => {\n if (err) {\n console.error(`Parent stream failure, closing worker.`, err);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC);\n\n return new IFrameSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}
1
+ {"version":3,"file":"IFrameSnapExecutor.js","sourceRoot":"","sources":["../../src/iframe/IFrameSnapExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAyD;AACzD,uEAAwE;AACxE,uDAA0D;AAC1D,gDAAwB;AAExB,iEAA8D;AAE9D,MAAa,kBAAmB,SAAQ,mCAAgB;IACtD;;;;;;OAMG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,IAAI,6CAAuB,CAAC;YAC/C,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,YAAY,EAAE,GAAG;SAClB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,0BAAe,EAAE,CAAC;QAClC,IAAA,cAAI,EAAC,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9C,IAAI,KAAK,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;aAChE;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,QAAQ,CAAC,CAAC;QAE/D,OAAO,IAAI,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AA/BD,gDA+BC","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport { WindowPostMessageStream } from '@metamask/post-message-stream';\nimport { SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport pump from 'pump';\n\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\n\nexport class IFrameSnapExecutor extends BaseSnapExecutor {\n /**\n * Initialize the IFrameSnapExecutor. This creates a post message stream from\n * and to the parent window, for two-way communication with the iframe.\n *\n * @returns An instance of `IFrameSnapExecutor`, with the initialized post\n * message streams.\n */\n static initialize() {\n console.log('Worker: Connecting to parent.');\n\n const parentStream = new WindowPostMessageStream({\n name: 'child',\n target: 'parent',\n targetWindow: self.parent,\n targetOrigin: '*',\n });\n\n const mux = new ObjectMultiplex();\n pump(parentStream, mux, parentStream, (error) => {\n if (error) {\n console.error(`Parent stream failure, closing worker.`, error);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC);\n\n return new IFrameSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}
@@ -5,18 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ChildProcessSnapExecutor = void 0;
7
7
  const object_multiplex_1 = __importDefault(require("@metamask/object-multiplex"));
8
- const pump_1 = __importDefault(require("pump"));
9
8
  const post_message_stream_1 = require("@metamask/post-message-stream");
10
9
  const snaps_utils_1 = require("@metamask/snaps-utils");
10
+ const pump_1 = __importDefault(require("pump"));
11
11
  const BaseSnapExecutor_1 = require("../common/BaseSnapExecutor");
12
12
  class ChildProcessSnapExecutor extends BaseSnapExecutor_1.BaseSnapExecutor {
13
13
  static initialize() {
14
14
  console.log('Worker: Connecting to parent.');
15
15
  const parentStream = new post_message_stream_1.ProcessMessageStream();
16
16
  const mux = new object_multiplex_1.default();
17
- (0, pump_1.default)(parentStream, mux, parentStream, (err) => {
18
- if (err) {
19
- console.error(`Parent stream failure, closing worker.`, err);
17
+ (0, pump_1.default)(parentStream, mux, parentStream, (error) => {
18
+ if (error) {
19
+ console.error(`Parent stream failure, closing worker.`, error);
20
20
  }
21
21
  self.close();
22
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ChildProcessSnapExecutor.js","sourceRoot":"","sources":["../../src/node-process/ChildProcessSnapExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAyD;AACzD,gDAAwB;AACxB,uEAAqE;AACrE,uDAA0D;AAC1D,iEAA8D;AAE9D,MAAa,wBAAyB,SAAQ,mCAAgB;IAC5D,MAAM,CAAC,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,IAAI,0CAAoB,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,0BAAe,EAAE,CAAC;QAClC,IAAA,cAAI,EAAC,YAAY,EAAE,GAAU,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,GAAG,EAAE;gBACP,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,QAAQ,CAAQ,CAAC;QACtE,OAAO,IAAI,wBAAwB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;CACF;AAjBD,4DAiBC","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport pump from 'pump';\nimport { ProcessMessageStream } from '@metamask/post-message-stream';\nimport { SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\n\nexport class ChildProcessSnapExecutor extends BaseSnapExecutor {\n static initialize() {\n console.log('Worker: Connecting to parent.');\n\n const parentStream = new ProcessMessageStream();\n const mux = new ObjectMultiplex();\n pump(parentStream, mux as any, parentStream, (err) => {\n if (err) {\n console.error(`Parent stream failure, closing worker.`, err);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC) as any;\n return new ChildProcessSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}
1
+ {"version":3,"file":"ChildProcessSnapExecutor.js","sourceRoot":"","sources":["../../src/node-process/ChildProcessSnapExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAyD;AACzD,uEAAqE;AACrE,uDAA0D;AAC1D,gDAAwB;AAExB,iEAA8D;AAE9D,MAAa,wBAAyB,SAAQ,mCAAgB;IAC5D,MAAM,CAAC,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,IAAI,0CAAoB,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,0BAAe,EAAE,CAAC;QAClC,IAAA,cAAI,EAAC,YAAY,EAAE,GAAU,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YACrD,IAAI,KAAK,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;aAChE;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,QAAQ,CAAQ,CAAC;QACtE,OAAO,IAAI,wBAAwB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;CACF;AAjBD,4DAiBC","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport { ProcessMessageStream } from '@metamask/post-message-stream';\nimport { SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport pump from 'pump';\n\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\n\nexport class ChildProcessSnapExecutor extends BaseSnapExecutor {\n static initialize() {\n console.log('Worker: Connecting to parent.');\n\n const parentStream = new ProcessMessageStream();\n const mux = new ObjectMultiplex();\n pump(parentStream, mux as any, parentStream, (error) => {\n if (error) {\n console.error(`Parent stream failure, closing worker.`, error);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC) as any;\n return new ChildProcessSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}
@@ -5,18 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ThreadSnapExecutor = void 0;
7
7
  const object_multiplex_1 = __importDefault(require("@metamask/object-multiplex"));
8
- const pump_1 = __importDefault(require("pump"));
9
8
  const post_message_stream_1 = require("@metamask/post-message-stream");
10
9
  const snaps_utils_1 = require("@metamask/snaps-utils");
10
+ const pump_1 = __importDefault(require("pump"));
11
11
  const BaseSnapExecutor_1 = require("../common/BaseSnapExecutor");
12
12
  class ThreadSnapExecutor extends BaseSnapExecutor_1.BaseSnapExecutor {
13
13
  static initialize() {
14
14
  console.log('Worker: Connecting to parent.');
15
15
  const parentStream = new post_message_stream_1.ThreadMessageStream();
16
16
  const mux = new object_multiplex_1.default();
17
- (0, pump_1.default)(parentStream, mux, parentStream, (err) => {
18
- if (err) {
19
- console.error(`Parent stream failure, closing worker.`, err);
17
+ (0, pump_1.default)(parentStream, mux, parentStream, (error) => {
18
+ if (error) {
19
+ console.error(`Parent stream failure, closing worker.`, error);
20
20
  }
21
21
  self.close();
22
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadSnapExecutor.js","sourceRoot":"","sources":["../../src/node-thread/ThreadSnapExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAyD;AACzD,gDAAwB;AACxB,uEAAoE;AACpE,uDAA0D;AAC1D,iEAA8D;AAE9D,MAAa,kBAAmB,SAAQ,mCAAgB;IACtD,MAAM,CAAC,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,IAAI,yCAAmB,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,0BAAe,EAAE,CAAC;QAClC,IAAA,cAAI,EAAC,YAAY,EAAE,GAAU,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,GAAG,EAAE;gBACP,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,QAAQ,CAAQ,CAAC;QACtE,OAAO,IAAI,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AAjBD,gDAiBC","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport pump from 'pump';\nimport { ThreadMessageStream } from '@metamask/post-message-stream';\nimport { SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\n\nexport class ThreadSnapExecutor extends BaseSnapExecutor {\n static initialize() {\n console.log('Worker: Connecting to parent.');\n\n const parentStream = new ThreadMessageStream();\n const mux = new ObjectMultiplex();\n pump(parentStream, mux as any, parentStream, (err) => {\n if (err) {\n console.error(`Parent stream failure, closing worker.`, err);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC) as any;\n return new ThreadSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}
1
+ {"version":3,"file":"ThreadSnapExecutor.js","sourceRoot":"","sources":["../../src/node-thread/ThreadSnapExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAyD;AACzD,uEAAoE;AACpE,uDAA0D;AAC1D,gDAAwB;AAExB,iEAA8D;AAE9D,MAAa,kBAAmB,SAAQ,mCAAgB;IACtD,MAAM,CAAC,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,IAAI,yCAAmB,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,0BAAe,EAAE,CAAC;QAClC,IAAA,cAAI,EAAC,YAAY,EAAE,GAAU,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YACrD,IAAI,KAAK,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;aAChE;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,+BAAiB,CAAC,QAAQ,CAAQ,CAAC;QACtE,OAAO,IAAI,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AAjBD,gDAiBC","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport { ThreadMessageStream } from '@metamask/post-message-stream';\nimport { SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport pump from 'pump';\n\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\n\nexport class ThreadSnapExecutor extends BaseSnapExecutor {\n static initialize() {\n console.log('Worker: Connecting to parent.');\n\n const parentStream = new ThreadMessageStream();\n const mux = new ObjectMultiplex();\n pump(parentStream, mux as any, parentStream, (error) => {\n if (error) {\n console.error(`Parent stream failure, closing worker.`, error);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC) as any;\n return new ThreadSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}