@metamask/snaps-controllers 0.30.0 → 0.31.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 (39) hide show
  1. package/dist/cronjob/CronjobController.js +11 -8
  2. package/dist/cronjob/CronjobController.js.map +1 -1
  3. package/dist/fsm.js +5 -5
  4. package/dist/fsm.js.map +1 -1
  5. package/dist/multichain/MultiChainController.js +12 -20
  6. package/dist/multichain/MultiChainController.js.map +1 -1
  7. package/dist/multichain/matching.js +3 -4
  8. package/dist/multichain/matching.js.map +1 -1
  9. package/dist/services/iframe/IframeExecutionService.js +1 -2
  10. package/dist/services/iframe/IframeExecutionService.js.map +1 -1
  11. package/dist/snaps/RequestQueue.js +3 -6
  12. package/dist/snaps/RequestQueue.js.map +1 -1
  13. package/dist/snaps/SnapController.d.ts +7 -5
  14. package/dist/snaps/SnapController.js +245 -170
  15. package/dist/snaps/SnapController.js.map +1 -1
  16. package/dist/snaps/endowments/cronjob.js +2 -3
  17. package/dist/snaps/endowments/cronjob.js.map +1 -1
  18. package/dist/snaps/endowments/index.js +6 -1
  19. package/dist/snaps/endowments/index.js.map +1 -1
  20. package/dist/snaps/endowments/keyring.js +3 -4
  21. package/dist/snaps/endowments/keyring.js.map +1 -1
  22. package/dist/snaps/endowments/rpc.js +2 -2
  23. package/dist/snaps/endowments/rpc.js.map +1 -1
  24. package/dist/snaps/endowments/transaction-insight.js +4 -5
  25. package/dist/snaps/endowments/transaction-insight.js.map +1 -1
  26. package/dist/snaps/location/http.js +9 -3
  27. package/dist/snaps/location/http.js.map +1 -1
  28. package/dist/snaps/location/local.js +1 -1
  29. package/dist/snaps/location/local.js.map +1 -1
  30. package/dist/snaps/location/location.js +2 -3
  31. package/dist/snaps/location/location.js.map +1 -1
  32. package/dist/snaps/location/npm.js +11 -8
  33. package/dist/snaps/location/npm.js.map +1 -1
  34. package/dist/snaps/registry/json.js +5 -7
  35. package/dist/snaps/registry/json.js.map +1 -1
  36. package/package.json +31 -11
  37. package/dist/services/iframe/test/fixJSDOMPostMessageEventSource.d.ts +0 -3
  38. package/dist/services/iframe/test/fixJSDOMPostMessageEventSource.js +0 -34
  39. package/dist/services/iframe/test/fixJSDOMPostMessageEventSource.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/snaps/registry/json.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,2CAAwD;AAExD,yCAOoB;AAEpB,kCAAkC;AAClC,MAAM,iBAAiB,GACrB,4EAA4E,CAAC;AAQ/E,MAAa,iBAAiB;IAS5B,YAAY,EACV,GAAG,GAAG,iBAAiB,EACvB,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EACjD,yBAAyB,GAAG,IAAI,MACP,EAAE;;QAZ7B,yCAAa;QAEb,sCAA0C,IAAI,EAAC;QAE/C,mDAA6B;QAE7B,+DAAoC;QAOlC,uBAAA,IAAI,0BAAQ,GAAG,MAAA,CAAC;QAChB,uBAAA,IAAI,oCAAkB,aAAa,MAAA,CAAC;QACpC,uBAAA,IAAI,gDAA8B,yBAAyB,MAAA,CAAC;IAC9D,CAAC;IAmDM,KAAK,CAAC,GAAG,CACd,KAA2B;QAE3B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAEjC,KAAK,EAAE,eAAe,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,kEAAW,MAAf,IAAI,EAAY,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC;YAClC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,WAAW,CACtB,MAAc;;QAEd,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,oEAAa,MAAjB,IAAI,CAAe,CAAC;QAC3C,OAAO,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,CAAC,MAAM,CAAC,0CAAE,QAAQ,mCAAI,IAAI,CAAC;IAC3D,CAAC;CACF;AA9FD,8CA8FC;oRA3EC,KAAK;IACH,IAAI,uBAAA,IAAI,mCAAU,KAAK,IAAI,EAAE;QAC3B,0DAA0D;QAC1D,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,wCAAe,MAAnB,IAAI,EAAgB,uBAAA,IAAI,8BAAK,CAAC,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACpD;YACD,uBAAA,IAAI,+BAAa,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAA,CAAC;SACxC;QAAC,WAAM;YACN,SAAS;SACV;KACF;IACD,0DAA0D;IAC1D,IAAI,uBAAA,IAAI,oDAA2B,IAAI,uBAAA,IAAI,mCAAU,KAAK,IAAI,EAAE;QAC9D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;KACzE;IACD,OAAO,uBAAA,IAAI,mCAAU,CAAC;AACxB,CAAC,iCAED,KAAK,uCAAY,MAAc,EAAE,QAA2B;;IAC1D,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,oEAAa,MAAjB,IAAI,CAAe,CAAC;IAE3C,MAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3D,IAAI,IAAI,IAAI,OAAO,EAAE;YACnB,OAAO,CACL,OAAO,CAAC,EAAE,KAAK,MAAM;gBACrB,IAAA,6BAAqB,EAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAC9D,CAAC;SACH;QAED,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,YAAY,EAAE;QAChB,OAAO;YACL,MAAM,EAAE,8BAAmB,CAAC,OAAO;YACnC,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,CAAC;KACH;IAED,MAAM,QAAQ,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,0CAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE;QACrD,OAAO,EAAE,MAAM,EAAE,8BAAmB,CAAC,QAAQ,EAAE,CAAC;KACjD;IACD,OAAO,EAAE,MAAM,EAAE,8BAAmB,CAAC,UAAU,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import { SnapsRegistryDatabase } from '@metamask/snaps-registry';\nimport { SnapId } from '@metamask/snaps-utils';\nimport { satisfiesVersionRange } from '@metamask/utils';\n\nimport {\n SnapsRegistry,\n SnapsRegistryInfo,\n SnapsRegistryMetadata,\n SnapsRegistryRequest,\n SnapsRegistryResult,\n SnapsRegistryStatus,\n} from './registry';\n\n// TODO: Replace with a Codefi URL\nconst SNAP_REGISTRY_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@main/src/registry.json';\n\nexport type JsonSnapsRegistryArgs = {\n fetchFunction?: typeof fetch;\n url?: string;\n failOnUnavailableRegistry?: boolean;\n};\n\nexport class JsonSnapsRegistry implements SnapsRegistry {\n #url: string;\n\n #database: SnapsRegistryDatabase | null = null;\n\n #fetchFunction: typeof fetch;\n\n #failOnUnavailableRegistry: boolean;\n\n constructor({\n url = SNAP_REGISTRY_URL,\n fetchFunction = globalThis.fetch.bind(globalThis),\n failOnUnavailableRegistry = true,\n }: JsonSnapsRegistryArgs = {}) {\n this.#url = url;\n this.#fetchFunction = fetchFunction;\n this.#failOnUnavailableRegistry = failOnUnavailableRegistry;\n }\n\n async #getDatabase(): Promise<SnapsRegistryDatabase | null> {\n if (this.#database === null) {\n // TODO: Decide if we should persist this between sessions\n try {\n const response = await this.#fetchFunction(this.#url);\n if (!response.ok) {\n throw new Error('Failed to fetch Snaps registry.');\n }\n this.#database = await response.json();\n } catch {\n // Ignore\n }\n }\n // If the database is still null and we require it, throw.\n if (this.#failOnUnavailableRegistry && this.#database === null) {\n throw new Error('Snaps registry is unavailable, installation blocked.');\n }\n return this.#database;\n }\n\n async #getSingle(snapId: SnapId, snapInfo: SnapsRegistryInfo) {\n const database = await this.#getDatabase();\n\n const blockedEntry = database?.blockedSnaps.find((blocked) => {\n if ('id' in blocked) {\n return (\n blocked.id === snapId &&\n satisfiesVersionRange(snapInfo.version, blocked.versionRange)\n );\n }\n\n return blocked.checksum === snapInfo.checksum;\n });\n\n if (blockedEntry) {\n return {\n status: SnapsRegistryStatus.Blocked,\n reason: blockedEntry.reason,\n };\n }\n\n const verified = database?.verifiedSnaps[snapId];\n const version = verified?.versions?.[snapInfo.version];\n if (version && version.checksum === snapInfo.checksum) {\n return { status: SnapsRegistryStatus.Verified };\n }\n return { status: SnapsRegistryStatus.Unverified };\n }\n\n public async get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<SnapId, SnapsRegistryResult>> {\n return Object.entries(snaps).reduce<\n Promise<Record<SnapId, SnapsRegistryResult>>\n >(async (previousPromise, [snapId, snapInfo]) => {\n const result = await this.#getSingle(snapId, snapInfo);\n const acc = await previousPromise;\n acc[snapId] = result;\n return acc;\n }, Promise.resolve({}));\n }\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n public async getMetadata(\n snapId: SnapId,\n ): Promise<SnapsRegistryMetadata | null> {\n const database = await this.#getDatabase();\n return database?.verifiedSnaps[snapId]?.metadata ?? null;\n }\n}\n"]}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/snaps/registry/json.ts"],"names":[],"mappings":"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","sourcesContent":["import { SnapsRegistryDatabase } from '@metamask/snaps-registry';\nimport { SnapId } from '@metamask/snaps-utils';\nimport { satisfiesVersionRange } from '@metamask/utils';\n\nimport {\n SnapsRegistry,\n SnapsRegistryInfo,\n SnapsRegistryMetadata,\n SnapsRegistryRequest,\n SnapsRegistryResult,\n SnapsRegistryStatus,\n} from './registry';\n\n// TODO: Replace with a Codefi URL\nconst SNAP_REGISTRY_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@main/src/registry.json';\n\nexport type JsonSnapsRegistryArgs = {\n fetchFunction?: typeof fetch;\n url?: string;\n failOnUnavailableRegistry?: boolean;\n};\n\nexport class JsonSnapsRegistry implements SnapsRegistry {\n #url: string;\n\n #database: SnapsRegistryDatabase | null = null;\n\n #fetchFunction: typeof fetch;\n\n #failOnUnavailableRegistry: boolean;\n\n constructor({\n url = SNAP_REGISTRY_URL,\n fetchFunction = globalThis.fetch.bind(globalThis),\n failOnUnavailableRegistry = true,\n }: JsonSnapsRegistryArgs = {}) {\n this.#url = url;\n this.#fetchFunction = fetchFunction;\n this.#failOnUnavailableRegistry = failOnUnavailableRegistry;\n }\n\n async #getDatabase(): Promise<SnapsRegistryDatabase | null> {\n if (this.#database === null) {\n // TODO: Decide if we should persist this between sessions\n try {\n const response = await this.#fetchFunction(this.#url);\n if (!response.ok) {\n throw new Error('Failed to fetch Snaps registry.');\n }\n this.#database = await response.json();\n } catch {\n // Ignore\n }\n }\n // If the database is still null and we require it, throw.\n if (this.#failOnUnavailableRegistry && this.#database === null) {\n throw new Error('Snaps registry is unavailable, installation blocked.');\n }\n return this.#database;\n }\n\n async #getSingle(snapId: SnapId, snapInfo: SnapsRegistryInfo) {\n const database = await this.#getDatabase();\n\n const blockedEntry = database?.blockedSnaps.find((blocked) => {\n if ('id' in blocked) {\n return (\n blocked.id === snapId &&\n satisfiesVersionRange(snapInfo.version, blocked.versionRange)\n );\n }\n\n return blocked.checksum === snapInfo.checksum;\n });\n\n if (blockedEntry) {\n return {\n status: SnapsRegistryStatus.Blocked,\n reason: blockedEntry.reason,\n };\n }\n\n const verified = database?.verifiedSnaps[snapId];\n const version = verified?.versions?.[snapInfo.version];\n if (version && version.checksum === snapInfo.checksum) {\n return { status: SnapsRegistryStatus.Verified };\n }\n return { status: SnapsRegistryStatus.Unverified };\n }\n\n public async get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<SnapId, SnapsRegistryResult>> {\n return Object.entries(snaps).reduce<\n Promise<Record<SnapId, SnapsRegistryResult>>\n >(async (previousPromise, [snapId, snapInfo]) => {\n const result = await this.#getSingle(snapId, snapInfo);\n const acc = await previousPromise;\n acc[snapId] = result;\n return acc;\n }, Promise.resolve({}));\n }\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n public async getMetadata(\n snapId: SnapId,\n ): Promise<SnapsRegistryMetadata | null> {\n const database = await this.#getDatabase();\n return database?.verifiedSnaps[snapId]?.metadata ?? null;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/snaps-controllers",
3
- "version": "0.30.0",
3
+ "version": "0.31.0",
4
4
  "description": "Controllers for MetaMask Snaps.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,8 +16,9 @@
16
16
  ],
17
17
  "scripts": {
18
18
  "test:prepare": "yarn mkdirp test/fixtures && ./scripts/generate-fixtures.sh",
19
- "test": "yarn test:prepare && jest && yarn posttest",
20
- "posttest": "jest-it-up --margin 0.25",
19
+ "test": "rimraf coverage && yarn test:prepare && jest && yarn test:browser && yarn posttest",
20
+ "posttest": "ts-node scripts/coverage.ts && rimraf coverage/jest coverage/wdio",
21
+ "test:browser": "wdio run wdio.config.ts",
21
22
  "test:ci": "yarn test",
22
23
  "build:tsc": "tsc --project tsconfig.build.json",
23
24
  "build": "yarn build:tsc",
@@ -28,6 +29,8 @@
28
29
  "lint": "yarn lint:eslint && yarn lint:misc --check",
29
30
  "lint:fix": "yarn lint:eslint --fix && yarn lint:misc --write",
30
31
  "lint:changelog": "yarn auto-changelog validate",
32
+ "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh",
33
+ "publish:preview": "yarn npm publish --tag preview",
31
34
  "publish:package": "../../scripts/publish-package.sh"
32
35
  },
33
36
  "dependencies": {
@@ -36,12 +39,12 @@
36
39
  "@metamask/object-multiplex": "^1.1.0",
37
40
  "@metamask/permission-controller": "^3.0.0",
38
41
  "@metamask/post-message-stream": "^6.1.0",
39
- "@metamask/rpc-methods": "^0.30.0",
40
- "@metamask/snaps-execution-environments": "^0.30.0",
41
- "@metamask/snaps-registry": "^1.1.0",
42
- "@metamask/snaps-utils": "^0.30.0",
42
+ "@metamask/rpc-methods": "^0.31.0",
43
+ "@metamask/snaps-execution-environments": "^0.31.0",
44
+ "@metamask/snaps-registry": "^1.1.1",
45
+ "@metamask/snaps-utils": "^0.31.0",
43
46
  "@metamask/subject-metadata-controller": "^2.0.0",
44
- "@metamask/utils": "^3.4.1",
47
+ "@metamask/utils": "^5.0.0",
45
48
  "@xstate/fsm": "^2.0.0",
46
49
  "concat-stream": "^2.0.0",
47
50
  "cron-parser": "^4.5.0",
@@ -56,6 +59,8 @@
56
59
  "tar-stream": "^2.2.0"
57
60
  },
58
61
  "devDependencies": {
62
+ "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
63
+ "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
59
64
  "@lavamoat/allow-scripts": "^2.0.3",
60
65
  "@metamask/auto-changelog": "^3.1.0",
61
66
  "@metamask/eslint-config": "^11.0.0",
@@ -67,11 +72,18 @@
67
72
  "@types/concat-stream": "^2.0.0",
68
73
  "@types/gunzip-maybe": "^1.4.0",
69
74
  "@types/jest": "^27.5.1",
75
+ "@types/mocha": "^10.0.1",
70
76
  "@types/pump": "^1.1.1",
71
77
  "@types/readable-stream": "^2.3.9",
72
78
  "@types/tar-stream": "^2.2.2",
73
79
  "@typescript-eslint/eslint-plugin": "^5.42.1",
74
80
  "@typescript-eslint/parser": "^5.42.1",
81
+ "@wdio/browser-runner": "^8.3.10",
82
+ "@wdio/cli": "^8.3.10",
83
+ "@wdio/globals": "^8.3.10",
84
+ "@wdio/mocha-framework": "^8.3.0",
85
+ "@wdio/spec-reporter": "^8.3.0",
86
+ "@wdio/static-server-service": "^8.3.0",
75
87
  "deepmerge": "^4.2.2",
76
88
  "eslint": "^8.27.0",
77
89
  "eslint-config-prettier": "^8.5.0",
@@ -80,18 +92,26 @@
80
92
  "eslint-plugin-jsdoc": "^39.6.2",
81
93
  "eslint-plugin-node": "^11.1.0",
82
94
  "eslint-plugin-prettier": "^4.2.1",
95
+ "expect-webdriverio": "^4.1.2",
96
+ "istanbul-lib-coverage": "^3.2.0",
97
+ "istanbul-lib-report": "^3.0.0",
98
+ "istanbul-reports": "^3.1.5",
83
99
  "jest": "^29.0.2",
84
- "jest-environment-jsdom": "^29.0.2",
85
100
  "jest-fetch-mock": "^3.0.3",
86
101
  "jest-it-up": "^2.0.0",
87
- "jsdom": "^19.0.0",
88
102
  "mkdirp": "^1.0.4",
89
103
  "prettier": "^2.7.1",
90
104
  "prettier-plugin-packagejson": "^2.2.11",
91
105
  "rimraf": "^3.0.2",
92
106
  "serve-handler": "^6.1.5",
93
107
  "ts-jest": "^29.0.0",
94
- "typescript": "~4.8.4"
108
+ "ts-node": "^10.9.1",
109
+ "typescript": "~4.8.4",
110
+ "vite": "^4.1.4",
111
+ "vite-tsconfig-paths": "^4.0.5",
112
+ "wdio-chromedriver-service": "^8.1.1",
113
+ "wdio-geckodriver-service": "^4.1.0",
114
+ "webdriverio": "^8.3.10"
95
115
  },
96
116
  "engines": {
97
117
  "node": ">=16.0.0"
@@ -1,3 +0,0 @@
1
- import { IframeExecutionService } from '../IframeExecutionService';
2
- declare const fixJSDOMPostMessageEventSource: (iframeExecutionService: IframeExecutionService) => () => void;
3
- export default fixJSDOMPostMessageEventSource;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // Fix for JSDOM not setting `event.origin` or `event.source`: https://github.com/jsdom/jsdom/issues/2745
4
- const fixJSDOMPostMessageEventSource = (iframeExecutionService) => {
5
- const listener = (event) => {
6
- if (event.source === null && !event.origin) {
7
- let source;
8
- let origin;
9
- if (event.data.target === 'child') {
10
- source = window;
11
- origin = window.location.origin;
12
- }
13
- else if (event.data.target === 'parent') {
14
- // @ts-expect-error Accessing private property
15
- const { worker } = iframeExecutionService.jobs.values().next().value;
16
- source = worker;
17
- origin = iframeExecutionService.iframeUrl.toString();
18
- }
19
- if (event.data.target) {
20
- event.stopImmediatePropagation();
21
- const args = Object.assign(Object.assign(Object.assign({}, event), { data: event.data, source,
22
- origin }));
23
- const eventWithOrigin = new MessageEvent('message', args);
24
- window.dispatchEvent(eventWithOrigin);
25
- }
26
- }
27
- };
28
- window.addEventListener('message', listener);
29
- return () => {
30
- window.removeEventListener('message', listener);
31
- };
32
- };
33
- exports.default = fixJSDOMPostMessageEventSource;
34
- //# sourceMappingURL=fixJSDOMPostMessageEventSource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixJSDOMPostMessageEventSource.js","sourceRoot":"","sources":["../../../../src/services/iframe/test/fixJSDOMPostMessageEventSource.ts"],"names":[],"mappings":";;AAEA,yGAAyG;AACzG,MAAM,8BAA8B,GAAG,CACrC,sBAA8C,EAC9C,EAAE;IACF,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;QACvC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1C,IAAI,MAAM,CAAC;YACX,IAAI,MAAM,CAAC;YACX,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;gBACjC,MAAM,GAAG,MAAM,CAAC;gBAChB,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;aACjC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACzC,8CAA8C;gBAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBACrE,MAAM,GAAG,MAAM,CAAC;gBAChB,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aACtD;YAED,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBACrB,KAAK,CAAC,wBAAwB,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iCACrB,KAAK,KACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,MAAM;oBACN,MAAM,IACN,CAAC;gBACH,MAAM,eAAe,GAAiB,IAAI,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACxE,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;aACvC;SACF;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE7C,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,8BAA8B,CAAC","sourcesContent":["import { IframeExecutionService } from '../IframeExecutionService';\n\n// Fix for JSDOM not setting `event.origin` or `event.source`: https://github.com/jsdom/jsdom/issues/2745\nconst fixJSDOMPostMessageEventSource = (\n iframeExecutionService: IframeExecutionService,\n) => {\n const listener = (event: MessageEvent) => {\n if (event.source === null && !event.origin) {\n let source;\n let origin;\n if (event.data.target === 'child') {\n source = window;\n origin = window.location.origin;\n } else if (event.data.target === 'parent') {\n // @ts-expect-error Accessing private property\n const { worker } = iframeExecutionService.jobs.values().next().value;\n source = worker;\n origin = iframeExecutionService.iframeUrl.toString();\n }\n\n if (event.data.target) {\n event.stopImmediatePropagation();\n const args = Object.assign({\n ...event,\n data: event.data,\n source,\n origin,\n });\n const eventWithOrigin: MessageEvent = new MessageEvent('message', args);\n window.dispatchEvent(eventWithOrigin);\n }\n }\n };\n\n window.addEventListener('message', listener);\n\n return () => {\n window.removeEventListener('message', listener);\n };\n};\n\nexport default fixJSDOMPostMessageEventSource;\n"]}