@prismicio/simulator 0.2.0 → 0.2.1-canary.4625090
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SimulatorAPI.cjs +7 -9
- package/dist/SimulatorAPI.cjs.map +1 -1
- package/dist/SimulatorAPI.d.cts.map +1 -0
- package/dist/SimulatorAPI.d.ts.map +1 -0
- package/dist/SimulatorAPI.js +6 -8
- package/dist/SimulatorAPI.js.map +1 -1
- package/dist/SimulatorClient.cjs +7 -9
- package/dist/SimulatorClient.cjs.map +1 -1
- package/dist/SimulatorClient.d.cts.map +1 -0
- package/dist/SimulatorClient.d.ts.map +1 -0
- package/dist/SimulatorClient.js +6 -8
- package/dist/SimulatorClient.js.map +1 -1
- package/dist/channel/ChannelEmitter.cjs +10 -13
- package/dist/channel/ChannelEmitter.cjs.map +1 -1
- package/dist/channel/ChannelEmitter.d.cts +1 -3
- package/dist/channel/ChannelEmitter.d.cts.map +1 -0
- package/dist/channel/ChannelEmitter.d.ts +1 -3
- package/dist/channel/ChannelEmitter.d.ts.map +1 -0
- package/dist/channel/ChannelEmitter.js +6 -9
- package/dist/channel/ChannelEmitter.js.map +1 -1
- package/dist/channel/ChannelNetwork.cjs +5 -6
- package/dist/channel/ChannelNetwork.cjs.map +1 -1
- package/dist/channel/ChannelNetwork.d.cts.map +1 -0
- package/dist/channel/ChannelNetwork.d.ts.map +1 -0
- package/dist/channel/ChannelNetwork.js +3 -4
- package/dist/channel/ChannelNetwork.js.map +1 -1
- package/dist/channel/ChannelReceiver.cjs +12 -10
- package/dist/channel/ChannelReceiver.cjs.map +1 -1
- package/dist/channel/ChannelReceiver.d.cts.map +1 -0
- package/dist/channel/ChannelReceiver.d.ts.map +1 -0
- package/dist/channel/ChannelReceiver.js +8 -6
- package/dist/channel/ChannelReceiver.js.map +1 -1
- package/dist/channel/errors.cjs +1 -2
- package/dist/channel/errors.cjs.map +1 -1
- package/dist/channel/errors.d.cts.map +1 -0
- package/dist/channel/errors.d.ts.map +1 -0
- package/dist/channel/errors.js +1 -1
- package/dist/channel/errors.js.map +1 -1
- package/dist/channel/messages.cjs +5 -6
- package/dist/channel/messages.cjs.map +1 -1
- package/dist/channel/messages.d.cts +0 -1
- package/dist/channel/messages.d.cts.map +1 -0
- package/dist/channel/messages.d.ts +0 -1
- package/dist/channel/messages.d.ts.map +1 -0
- package/dist/channel/messages.js +5 -5
- package/dist/channel/messages.js.map +1 -1
- package/dist/channel/types.cjs +7 -8
- package/dist/channel/types.cjs.map +1 -1
- package/dist/channel/types.d.cts +1 -1
- package/dist/channel/types.d.cts.map +1 -0
- package/dist/channel/types.d.ts +1 -1
- package/dist/channel/types.d.ts.map +1 -0
- package/dist/channel/types.js +7 -7
- package/dist/channel/types.js.map +1 -1
- package/dist/globalExtensions.d.cts +1 -1
- package/dist/globalExtensions.d.cts.map +1 -0
- package/dist/globalExtensions.d.ts +1 -1
- package/dist/globalExtensions.d.ts.map +1 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2 -3
- package/dist/kit/SimulatorManager.cjs +12 -15
- package/dist/kit/SimulatorManager.cjs.map +1 -1
- package/dist/kit/SimulatorManager.d.cts.map +1 -0
- package/dist/kit/SimulatorManager.d.ts.map +1 -0
- package/dist/kit/SimulatorManager.js +7 -10
- package/dist/kit/SimulatorManager.js.map +1 -1
- package/dist/kit/State.cjs +7 -8
- package/dist/kit/State.cjs.map +1 -1
- package/dist/kit/State.d.cts.map +1 -0
- package/dist/kit/State.d.ts.map +1 -0
- package/dist/kit/State.js +4 -5
- package/dist/kit/State.js.map +1 -1
- package/dist/kit/domHelpers.cjs +1 -2
- package/dist/kit/domHelpers.cjs.map +1 -1
- package/dist/kit/domHelpers.d.cts.map +1 -0
- package/dist/kit/domHelpers.d.ts.map +1 -0
- package/dist/kit/domHelpers.js +1 -1
- package/dist/kit/domHelpers.js.map +1 -1
- package/dist/kit/eventHandlers.cjs +1 -2
- package/dist/kit/eventHandlers.cjs.map +1 -1
- package/dist/kit/eventHandlers.d.cts.map +1 -0
- package/dist/kit/eventHandlers.d.ts.map +1 -0
- package/dist/kit/eventHandlers.js +1 -1
- package/dist/kit/eventHandlers.js.map +1 -1
- package/dist/kit/getDefault.cjs +1 -2
- package/dist/kit/getDefault.cjs.map +1 -1
- package/dist/kit/getDefault.d.cts.map +1 -0
- package/dist/kit/getDefault.d.ts.map +1 -0
- package/dist/kit/getDefault.js +1 -1
- package/dist/kit/messages.cjs +3 -6
- package/dist/kit/messages.cjs.map +1 -1
- package/dist/kit/messages.d.cts.map +1 -0
- package/dist/kit/messages.d.ts.map +1 -0
- package/dist/kit/messages.js +3 -5
- package/dist/kit/messages.js.map +1 -1
- package/dist/kit/types.cjs +6 -7
- package/dist/kit/types.cjs.map +1 -1
- package/dist/kit/types.d.cts +1 -1
- package/dist/kit/types.d.cts.map +1 -0
- package/dist/kit/types.d.ts +1 -1
- package/dist/kit/types.d.ts.map +1 -0
- package/dist/kit/types.js +6 -6
- package/dist/kit/types.js.map +1 -1
- package/dist/kit.cjs +9 -9
- package/dist/kit.js +3 -4
- package/dist/lib/EventEmitter.cjs +1 -2
- package/dist/lib/EventEmitter.cjs.map +1 -1
- package/dist/lib/EventEmitter.d.cts.map +1 -0
- package/dist/lib/EventEmitter.d.ts.map +1 -0
- package/dist/lib/EventEmitter.js +1 -1
- package/dist/lib/EventEmitter.js.map +1 -1
- package/dist/lib/throttle.cjs +1 -2
- package/dist/lib/throttle.cjs.map +1 -1
- package/dist/lib/throttle.js +1 -1
- package/dist/types.cjs +10 -11
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +2 -2
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -10
- package/dist/types.js.map +1 -1
- package/package.json +33 -35
- package/src/SimulatorAPI.ts +14 -30
- package/src/SimulatorClient.ts +15 -32
- package/src/channel/ChannelEmitter.ts +25 -57
- package/src/channel/ChannelNetwork.ts +36 -61
- package/src/channel/ChannelReceiver.ts +36 -51
- package/src/channel/errors.ts +2 -7
- package/src/channel/index.ts +5 -20
- package/src/channel/messages.ts +4 -13
- package/src/channel/types.ts +15 -31
- package/src/index.ts +2 -10
- package/src/kit/SimulatorManager.ts +7 -20
- package/src/kit/State.ts +4 -9
- package/src/kit/domHelpers.ts +1 -3
- package/src/kit/eventHandlers.ts +2 -7
- package/src/kit/index.ts +1 -5
- package/src/kit/messages.ts +1 -2
- package/src/kit/types.ts +0 -1
- package/src/lib/EventEmitter.ts +3 -9
- package/src/lib/__PRODUCTION__.ts +1 -2
package/dist/SimulatorAPI.cjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
|
|
1
|
+
const require_ChannelReceiver = require("./channel/ChannelReceiver.cjs");
|
|
2
|
+
const require_types = require("./types.cjs");
|
|
4
3
|
//#region src/SimulatorAPI.ts
|
|
5
4
|
const simulatorAPIDefaultOptions = {
|
|
6
5
|
requestIDPrefix: "api-",
|
|
@@ -9,7 +8,7 @@ const simulatorAPIDefaultOptions = {
|
|
|
9
8
|
};
|
|
10
9
|
var SimulatorAPI = class extends require_ChannelReceiver.ChannelReceiver {
|
|
11
10
|
constructor(requestHandlers, options) {
|
|
12
|
-
const debug =
|
|
11
|
+
const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
|
|
13
12
|
super({
|
|
14
13
|
[require_types.ClientRequestType.Ping]: (_req, res) => {
|
|
15
14
|
return res.success("pong");
|
|
@@ -21,10 +20,9 @@ var SimulatorAPI = class extends require_ChannelReceiver.ChannelReceiver {
|
|
|
21
20
|
debug
|
|
22
21
|
});
|
|
23
22
|
if (debug) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(_window$prismic$slice = window.prismic.sliceSimulator).api || (_window$prismic$slice.api = []);
|
|
23
|
+
window.prismic ||= {};
|
|
24
|
+
window.prismic.sliceSimulator ||= {};
|
|
25
|
+
window.prismic.sliceSimulator.api ||= [];
|
|
28
26
|
window.prismic.sliceSimulator.api.push(this);
|
|
29
27
|
}
|
|
30
28
|
}
|
|
@@ -35,8 +33,8 @@ var SimulatorAPI = class extends require_ChannelReceiver.ChannelReceiver {
|
|
|
35
33
|
return await this.postFormattedRequest(require_types.APIRequestType.SetSliceZoneSize, data);
|
|
36
34
|
};
|
|
37
35
|
};
|
|
38
|
-
|
|
39
36
|
//#endregion
|
|
40
37
|
exports.SimulatorAPI = SimulatorAPI;
|
|
41
38
|
exports.simulatorAPIDefaultOptions = simulatorAPIDefaultOptions;
|
|
39
|
+
|
|
42
40
|
//# sourceMappingURL=SimulatorAPI.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimulatorAPI.cjs","names":["ChannelReceiver","ClientRequestType","APIRequestType"],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\
|
|
1
|
+
{"version":3,"file":"SimulatorAPI.cjs","names":["ChannelReceiver","ClientRequestType","APIRequestType"],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\tAllChannelReceiverOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelReceiver } from \"./channel\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport type SimulatorAPIOptions = {\n\tactiveSliceAPI: boolean\n\tsliceZoneSizeAPI: boolean\n}\n\nexport const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> & SimulatorAPIOptions =\n\t{\n\t\trequestIDPrefix: \"api-\",\n\t\tactiveSliceAPI: false,\n\t\tsliceZoneSizeAPI: false,\n\t}\n\nexport class SimulatorAPI\n\textends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>\n\timplements TransactionsMethods<APITransactions>\n{\n\tconstructor(\n\t\trequestHandlers: Omit<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping> &\n\t\t\tPartial<Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>>,\n\t\toptions?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\t{\n\t\t\t\t[ClientRequestType.Ping]: (_req, res) => {\n\t\t\t\t\treturn res.success(\"pong\")\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorAPIDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append API to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.api ||= []\n\t\t\twindow.prismic.sliceSimulator.api.push(this)\n\t\t}\n\t}\n\n\t[APIRequestType.SetActiveSlice]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetActiveSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetActiveSlice, data)\n\t};\n\n\t[APIRequestType.SetSliceZoneSize]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetSliceZoneSize]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data)\n\t}\n}\n"],"mappings":";;;AAeA,MAAa,6BACZ;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;AAEF,IAAa,eAAb,cACSA,wBAAAA,gBAET;CACC,YACC,iBAEA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC;IACEC,cAAAA,kBAAkB,QAAQ,MAAM,QAAQ;AACxC,WAAO,IAAI,QAAQ,OAAO;;GAE3B,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,QAAQ,EAAE;AACxC,UAAO,QAAQ,eAAe,IAAI,KAAK,KAAK;;;CAI9C,CAACC,cAAAA,eAAe,kBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,eAAe,gBAAgB,KAAK;;CAG5E,CAACA,cAAAA,eAAe,oBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,eAAe,kBAAkB,KAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimulatorAPI.d.cts","names":[],"sources":["../src/SimulatorAPI.ts"],"mappings":";;;;;KAUY,mBAAA;EACX,cAAA;EACA,gBAAA;AAAA;AAAA,cAGY,0BAAA,EAA4B,OAAA,CAAQ,yBAAA,IAA6B,mBAAA;AAAA,cAOjE,YAAA,SACJ,eAAA,CAAgB,kBAAA,EAAoB,mBAAA,aACjC,mBAAA,CAAoB,eAAA;cAG9B,eAAA,EAAiB,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IACjF,OAAA,CAAQ,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IAC1E,OAAA,GAAU,OAAA,CAAQ,yBAAA,GAA4B,mBAAA;EAAA,CA6B9C,cAAA,CAAe,cAAA,GAAiB,iBAAA,CAChC,eAAA,CAAgB,cAAA,CAAe,cAAA;EAAA,CAK/B,cAAA,CAAe,gBAAA,GAAmB,iBAAA,CAClC,eAAA,CAAgB,cAAA,CAAe,gBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimulatorAPI.d.ts","names":[],"sources":["../src/SimulatorAPI.ts"],"mappings":";;;;;KAUY,mBAAA;EACX,cAAA;EACA,gBAAA;AAAA;AAAA,cAGY,0BAAA,EAA4B,OAAA,CAAQ,yBAAA,IAA6B,mBAAA;AAAA,cAOjE,YAAA,SACJ,eAAA,CAAgB,kBAAA,EAAoB,mBAAA,aACjC,mBAAA,CAAoB,eAAA;cAG9B,eAAA,EAAiB,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IACjF,OAAA,CAAQ,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IAC1E,OAAA,GAAU,OAAA,CAAQ,yBAAA,GAA4B,mBAAA;EAAA,CA6B9C,cAAA,CAAe,cAAA,GAAiB,iBAAA,CAChC,eAAA,CAAgB,cAAA,CAAe,cAAA;EAAA,CAK/B,cAAA,CAAe,gBAAA,GAAmB,iBAAA,CAClC,eAAA,CAAgB,cAAA,CAAe,gBAAA;AAAA"}
|
package/dist/SimulatorAPI.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { APIRequestType, ClientRequestType } from "./types.js";
|
|
2
1
|
import { ChannelReceiver } from "./channel/ChannelReceiver.js";
|
|
3
|
-
|
|
2
|
+
import { APIRequestType, ClientRequestType } from "./types.js";
|
|
4
3
|
//#region src/SimulatorAPI.ts
|
|
5
4
|
const simulatorAPIDefaultOptions = {
|
|
6
5
|
requestIDPrefix: "api-",
|
|
@@ -9,7 +8,7 @@ const simulatorAPIDefaultOptions = {
|
|
|
9
8
|
};
|
|
10
9
|
var SimulatorAPI = class extends ChannelReceiver {
|
|
11
10
|
constructor(requestHandlers, options) {
|
|
12
|
-
const debug =
|
|
11
|
+
const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
|
|
13
12
|
super({
|
|
14
13
|
[ClientRequestType.Ping]: (_req, res) => {
|
|
15
14
|
return res.success("pong");
|
|
@@ -21,10 +20,9 @@ var SimulatorAPI = class extends ChannelReceiver {
|
|
|
21
20
|
debug
|
|
22
21
|
});
|
|
23
22
|
if (debug) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(_window$prismic$slice = window.prismic.sliceSimulator).api || (_window$prismic$slice.api = []);
|
|
23
|
+
window.prismic ||= {};
|
|
24
|
+
window.prismic.sliceSimulator ||= {};
|
|
25
|
+
window.prismic.sliceSimulator.api ||= [];
|
|
28
26
|
window.prismic.sliceSimulator.api.push(this);
|
|
29
27
|
}
|
|
30
28
|
}
|
|
@@ -35,7 +33,7 @@ var SimulatorAPI = class extends ChannelReceiver {
|
|
|
35
33
|
return await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data);
|
|
36
34
|
};
|
|
37
35
|
};
|
|
38
|
-
|
|
39
36
|
//#endregion
|
|
40
37
|
export { SimulatorAPI, simulatorAPIDefaultOptions };
|
|
38
|
+
|
|
41
39
|
//# sourceMappingURL=SimulatorAPI.js.map
|
package/dist/SimulatorAPI.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimulatorAPI.js","names":[],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\
|
|
1
|
+
{"version":3,"file":"SimulatorAPI.js","names":[],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\tAllChannelReceiverOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelReceiver } from \"./channel\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport type SimulatorAPIOptions = {\n\tactiveSliceAPI: boolean\n\tsliceZoneSizeAPI: boolean\n}\n\nexport const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> & SimulatorAPIOptions =\n\t{\n\t\trequestIDPrefix: \"api-\",\n\t\tactiveSliceAPI: false,\n\t\tsliceZoneSizeAPI: false,\n\t}\n\nexport class SimulatorAPI\n\textends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>\n\timplements TransactionsMethods<APITransactions>\n{\n\tconstructor(\n\t\trequestHandlers: Omit<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping> &\n\t\t\tPartial<Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>>,\n\t\toptions?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\t{\n\t\t\t\t[ClientRequestType.Ping]: (_req, res) => {\n\t\t\t\t\treturn res.success(\"pong\")\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorAPIDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append API to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.api ||= []\n\t\t\twindow.prismic.sliceSimulator.api.push(this)\n\t\t}\n\t}\n\n\t[APIRequestType.SetActiveSlice]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetActiveSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetActiveSlice, data)\n\t};\n\n\t[APIRequestType.SetSliceZoneSize]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetSliceZoneSize]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data)\n\t}\n}\n"],"mappings":";;;AAeA,MAAa,6BACZ;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;AAEF,IAAa,eAAb,cACS,gBAET;CACC,YACC,iBAEA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC;IACE,kBAAkB,QAAQ,MAAM,QAAQ;AACxC,WAAO,IAAI,QAAQ,OAAO;;GAE3B,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,QAAQ,EAAE;AACxC,UAAO,QAAQ,eAAe,IAAI,KAAK,KAAK;;;CAI9C,CAAC,eAAe,kBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,eAAe,gBAAgB,KAAK;;CAG5E,CAAC,eAAe,oBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,eAAe,kBAAkB,KAAK"}
|
package/dist/SimulatorClient.cjs
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
|
|
1
|
+
const require_ChannelEmitter = require("./channel/ChannelEmitter.cjs");
|
|
2
|
+
const require_types = require("./types.cjs");
|
|
4
3
|
//#region src/SimulatorClient.ts
|
|
5
4
|
const simulatorClientDefaultOptions = { requestIDPrefix: "client-" };
|
|
6
5
|
var SimulatorClient = class extends require_ChannelEmitter.ChannelEmitter {
|
|
7
6
|
constructor(target, requestHandlers, options) {
|
|
8
|
-
const debug =
|
|
7
|
+
const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
|
|
9
8
|
super(target, {
|
|
10
9
|
[require_types.APIRequestType.SetActiveSlice]: (_req, res) => {
|
|
11
10
|
return res.success();
|
|
@@ -20,10 +19,9 @@ var SimulatorClient = class extends require_ChannelEmitter.ChannelEmitter {
|
|
|
20
19
|
debug
|
|
21
20
|
});
|
|
22
21
|
if (debug) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
(_window$prismic$slice = window.prismic.sliceSimulator).client || (_window$prismic$slice.client = []);
|
|
22
|
+
window.prismic ||= {};
|
|
23
|
+
window.prismic.sliceSimulator ||= {};
|
|
24
|
+
window.prismic.sliceSimulator.client ||= [];
|
|
27
25
|
window.prismic.sliceSimulator.client.push(this);
|
|
28
26
|
}
|
|
29
27
|
}
|
|
@@ -37,8 +35,8 @@ var SimulatorClient = class extends require_ChannelEmitter.ChannelEmitter {
|
|
|
37
35
|
return await this.postFormattedRequest(require_types.ClientRequestType.ScrollToSlice, data);
|
|
38
36
|
};
|
|
39
37
|
};
|
|
40
|
-
|
|
41
38
|
//#endregion
|
|
42
39
|
exports.SimulatorClient = SimulatorClient;
|
|
43
40
|
exports.simulatorClientDefaultOptions = simulatorClientDefaultOptions;
|
|
41
|
+
|
|
44
42
|
//# sourceMappingURL=SimulatorClient.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimulatorClient.cjs","names":["ChannelEmitter","APIRequestType","ClientRequestType"],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\
|
|
1
|
+
{"version":3,"file":"SimulatorClient.cjs","names":["ChannelEmitter","APIRequestType","ClientRequestType"],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\tAllChannelEmitterOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelEmitter } from \"./channel\"\nimport type { SimulatorAPIOptions } from \"./SimulatorAPI\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> = {\n\trequestIDPrefix: \"client-\",\n}\n\nexport class SimulatorClient\n\textends ChannelEmitter<APITransactions, Partial<AllChannelEmitterOptions>, SimulatorAPIOptions>\n\timplements TransactionsMethods<ClientTransactions>\n{\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers?: Partial<TransactionsHandlers<APITransactions>>,\n\t\toptions?: Partial<AllChannelEmitterOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\t[APIRequestType.SetActiveSlice]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t[APIRequestType.SetSliceZoneSize]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorClientDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append client to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.client ||= []\n\t\t\twindow.prismic.sliceSimulator.client.push(this)\n\t\t}\n\t}\n\n\t[ClientRequestType.Ping]: TransactionMethod<ClientTransactions[ClientRequestType.Ping]> =\n\t\tasync () => {\n\t\t\treturn await this.postFormattedRequest(ClientRequestType.Ping)\n\t\t};\n\n\t[ClientRequestType.SetSliceZone]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.SetSliceZone]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.SetSliceZone, data)\n\t};\n\n\t[ClientRequestType.ScrollToSlice]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.ScrollToSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data)\n\t}\n}\n"],"mappings":";;;AAWA,MAAa,gCAAmE,EAC/E,iBAAiB,WACjB;AAED,IAAa,kBAAb,cACSA,uBAAAA,eAET;CACC,YACC,QACA,iBACA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC,QACA;IACEC,cAAAA,eAAe,kBAAkB,MAAM,QAAQ;AAC/C,WAAO,IAAI,SAAS;;IAEpBA,cAAAA,eAAe,oBAAoB,MAAM,QAAQ;AACjD,WAAO,IAAI,SAAS;;GAErB,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,WAAW,EAAE;AAC3C,UAAO,QAAQ,eAAe,OAAO,KAAK,KAAK;;;CAIjD,CAACC,cAAAA,kBAAkB,QAClB,YAAY;AACX,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,kBAAkB,KAAK;;CAGhE,CAACA,cAAAA,kBAAkB,gBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,kBAAkB,cAAc,KAAK;;CAG7E,CAACA,cAAAA,kBAAkB,iBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,kBAAkB,eAAe,KAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimulatorClient.d.cts","names":[],"sources":["../src/SimulatorClient.ts"],"mappings":";;;;;;cAWa,6BAAA,EAA+B,OAAA,CAAQ,wBAAA;AAAA,cAIvC,eAAA,SACJ,cAAA,CAAe,eAAA,EAAiB,OAAA,CAAQ,wBAAA,GAA2B,mBAAA,aAChE,mBAAA,CAAoB,kBAAA;cAG9B,MAAA,EAAQ,iBAAA,EACR,eAAA,GAAkB,OAAA,CAAQ,oBAAA,CAAqB,eAAA,IAC/C,OAAA,GAAU,OAAA,CAAQ,wBAAA;EAAA,CAiClB,iBAAA,CAAkB,IAAA,GAAO,iBAAA,CAAkB,kBAAA,CAAmB,iBAAA,CAAkB,IAAA;EAAA,CAKhF,iBAAA,CAAkB,YAAA,GAAe,iBAAA,CACjC,kBAAA,CAAmB,iBAAA,CAAkB,YAAA;EAAA,CAKrC,iBAAA,CAAkB,aAAA,GAAgB,iBAAA,CAClC,kBAAA,CAAmB,iBAAA,CAAkB,aAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimulatorClient.d.ts","names":[],"sources":["../src/SimulatorClient.ts"],"mappings":";;;;;;cAWa,6BAAA,EAA+B,OAAA,CAAQ,wBAAA;AAAA,cAIvC,eAAA,SACJ,cAAA,CAAe,eAAA,EAAiB,OAAA,CAAQ,wBAAA,GAA2B,mBAAA,aAChE,mBAAA,CAAoB,kBAAA;cAG9B,MAAA,EAAQ,iBAAA,EACR,eAAA,GAAkB,OAAA,CAAQ,oBAAA,CAAqB,eAAA,IAC/C,OAAA,GAAU,OAAA,CAAQ,wBAAA;EAAA,CAiClB,iBAAA,CAAkB,IAAA,GAAO,iBAAA,CAAkB,kBAAA,CAAmB,iBAAA,CAAkB,IAAA;EAAA,CAKhF,iBAAA,CAAkB,YAAA,GAAe,iBAAA,CACjC,kBAAA,CAAmB,iBAAA,CAAkB,YAAA;EAAA,CAKrC,iBAAA,CAAkB,aAAA,GAAgB,iBAAA,CAClC,kBAAA,CAAmB,iBAAA,CAAkB,aAAA;AAAA"}
|
package/dist/SimulatorClient.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { APIRequestType, ClientRequestType } from "./types.js";
|
|
2
1
|
import { ChannelEmitter } from "./channel/ChannelEmitter.js";
|
|
3
|
-
|
|
2
|
+
import { APIRequestType, ClientRequestType } from "./types.js";
|
|
4
3
|
//#region src/SimulatorClient.ts
|
|
5
4
|
const simulatorClientDefaultOptions = { requestIDPrefix: "client-" };
|
|
6
5
|
var SimulatorClient = class extends ChannelEmitter {
|
|
7
6
|
constructor(target, requestHandlers, options) {
|
|
8
|
-
const debug =
|
|
7
|
+
const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
|
|
9
8
|
super(target, {
|
|
10
9
|
[APIRequestType.SetActiveSlice]: (_req, res) => {
|
|
11
10
|
return res.success();
|
|
@@ -20,10 +19,9 @@ var SimulatorClient = class extends ChannelEmitter {
|
|
|
20
19
|
debug
|
|
21
20
|
});
|
|
22
21
|
if (debug) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
(_window$prismic$slice = window.prismic.sliceSimulator).client || (_window$prismic$slice.client = []);
|
|
22
|
+
window.prismic ||= {};
|
|
23
|
+
window.prismic.sliceSimulator ||= {};
|
|
24
|
+
window.prismic.sliceSimulator.client ||= [];
|
|
27
25
|
window.prismic.sliceSimulator.client.push(this);
|
|
28
26
|
}
|
|
29
27
|
}
|
|
@@ -37,7 +35,7 @@ var SimulatorClient = class extends ChannelEmitter {
|
|
|
37
35
|
return await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data);
|
|
38
36
|
};
|
|
39
37
|
};
|
|
40
|
-
|
|
41
38
|
//#endregion
|
|
42
39
|
export { SimulatorClient, simulatorClientDefaultOptions };
|
|
40
|
+
|
|
43
41
|
//# sourceMappingURL=SimulatorClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimulatorClient.js","names":[],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\
|
|
1
|
+
{"version":3,"file":"SimulatorClient.js","names":[],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\tAllChannelEmitterOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelEmitter } from \"./channel\"\nimport type { SimulatorAPIOptions } from \"./SimulatorAPI\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> = {\n\trequestIDPrefix: \"client-\",\n}\n\nexport class SimulatorClient\n\textends ChannelEmitter<APITransactions, Partial<AllChannelEmitterOptions>, SimulatorAPIOptions>\n\timplements TransactionsMethods<ClientTransactions>\n{\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers?: Partial<TransactionsHandlers<APITransactions>>,\n\t\toptions?: Partial<AllChannelEmitterOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\t[APIRequestType.SetActiveSlice]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t[APIRequestType.SetSliceZoneSize]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorClientDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append client to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.client ||= []\n\t\t\twindow.prismic.sliceSimulator.client.push(this)\n\t\t}\n\t}\n\n\t[ClientRequestType.Ping]: TransactionMethod<ClientTransactions[ClientRequestType.Ping]> =\n\t\tasync () => {\n\t\t\treturn await this.postFormattedRequest(ClientRequestType.Ping)\n\t\t};\n\n\t[ClientRequestType.SetSliceZone]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.SetSliceZone]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.SetSliceZone, data)\n\t};\n\n\t[ClientRequestType.ScrollToSlice]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.ScrollToSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data)\n\t}\n}\n"],"mappings":";;;AAWA,MAAa,gCAAmE,EAC/E,iBAAiB,WACjB;AAED,IAAa,kBAAb,cACS,eAET;CACC,YACC,QACA,iBACA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC,QACA;IACE,eAAe,kBAAkB,MAAM,QAAQ;AAC/C,WAAO,IAAI,SAAS;;IAEpB,eAAe,oBAAoB,MAAM,QAAQ;AACjD,WAAO,IAAI,SAAS;;GAErB,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,WAAW,EAAE;AAC3C,UAAO,QAAQ,eAAe,OAAO,KAAK,KAAK;;;CAIjD,CAAC,kBAAkB,QAClB,YAAY;AACX,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,KAAK;;CAGhE,CAAC,kBAAkB,gBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,cAAc,KAAK;;CAG7E,CAAC,kBAAkB,iBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,eAAe,KAAK"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
const require_errors = require(
|
|
2
|
-
const require_messages = require(
|
|
3
|
-
const require_ChannelNetwork = require(
|
|
4
|
-
const require_types = require(
|
|
5
|
-
|
|
1
|
+
const require_errors = require("./errors.cjs");
|
|
2
|
+
const require_messages = require("./messages.cjs");
|
|
3
|
+
const require_ChannelNetwork = require("./ChannelNetwork.cjs");
|
|
4
|
+
const require_types = require("./types.cjs");
|
|
6
5
|
//#region src/channel/ChannelEmitter.ts
|
|
7
6
|
const channelEmitterDefaultOptions = {
|
|
8
7
|
connectTimeout: 2e4,
|
|
@@ -40,9 +39,7 @@ var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
|
|
|
40
39
|
* Initiates connection to receiver
|
|
41
40
|
*
|
|
42
41
|
* @param receiverOptions - Options to configure the receiver with
|
|
43
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
44
|
-
* origin
|
|
45
|
-
*
|
|
42
|
+
* @param newOrigin - Indicates to the emitter that we're connecting to a new origin
|
|
46
43
|
* @returns Success connect message
|
|
47
44
|
*/
|
|
48
45
|
connect(receiverOptions = {}, newOrigin = false) {
|
|
@@ -58,11 +55,11 @@ var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
|
|
|
58
55
|
clearTimeout(receiverReadyTimeout);
|
|
59
56
|
this.channel = new MessageChannel();
|
|
60
57
|
const request = this.createRequestMessage(require_types.InternalEmitterRequestType.Connect, receiverOptions);
|
|
61
|
-
const response = await this.postRequest(request, (request
|
|
62
|
-
this._target.contentWindow.postMessage(request
|
|
58
|
+
const response = await this.postRequest(request, (request) => {
|
|
59
|
+
this._target.contentWindow.postMessage(request, "*", [this.channel.port2]);
|
|
63
60
|
});
|
|
64
|
-
this.postResponse(require_messages.createSuccessResponseMessage(this._receiverReady, void 0), (response
|
|
65
|
-
this._target.contentWindow.postMessage(response
|
|
61
|
+
this.postResponse(require_messages.createSuccessResponseMessage(this._receiverReady, void 0), (response) => {
|
|
62
|
+
this._target.contentWindow.postMessage(response, "*");
|
|
66
63
|
});
|
|
67
64
|
this._connected = true;
|
|
68
65
|
resolve(response);
|
|
@@ -109,7 +106,7 @@ var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
|
|
|
109
106
|
return this.postRequest(this.createRequestMessage(type, data), void 0, options);
|
|
110
107
|
}
|
|
111
108
|
};
|
|
112
|
-
|
|
113
109
|
//#endregion
|
|
114
110
|
exports.ChannelEmitter = ChannelEmitter;
|
|
111
|
+
|
|
115
112
|
//# sourceMappingURL=ChannelEmitter.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelEmitter.cjs","names":["ChannelNetwork","ChannelNotSetError","ConnectionTimeoutError","InternalEmitterRequestType","request","createSuccessResponseMessage","response","validateMessage","isRequestMessage","InternalReceiverRequestType","createErrorResponseMessage","NotReadyError"],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction} from \"./types\";\nimport {\n\tInternalEmitterRequestType,\n\tInternalReceiverRequestType\n} from \"./types\"\n\nimport {\n\tChannelNotSetError,\n\tConnectionTimeoutError,\n\tNotReadyError,\n} from \"./errors\"\n\nimport type {\n\tChannelNetworkOptions,\n\tPostRequestOptions} from \"./ChannelNetwork\";\nimport {\n\tChannelNetwork\n} from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions &\n\tPartial<ChannelNetworkOptions> = {\n\tconnectTimeout: 20000,\n\trequestIDPrefix: \"emitter-\",\n}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions &\n\tChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<\n\t\tstring,\n\t\tnever\n\t>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<\n\tTReceiverTransactions,\n\tChannelEmitterOptions & TOptions\n> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new\n\t * origin\n\t *\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [\n\t\t\t\t\t\t\t\tthis.channel.port2,\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(\n\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t\tevent.origin,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\n\t\t\t\t\"Emitter is not connected, use `ChannelEmitter.connect()` first\",\n\t\t\t)\n\t\t}\n\n\t\treturn this.postRequest(\n\t\t\tthis.createRequestMessage(type, data),\n\t\t\tundefined,\n\t\t\toptions,\n\t\t)\n\t}\n}\n"],"mappings":";;;;;;AAqCA,MAAa,+BACqB;CACjC,gBAAgB;CAChB,iBAAiB;CACjB;AAKD,IAAsB,iBAAtB,cAOUA,sCAGR;CACD,AAAQ;CACR,AAAQ,WAAkC;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAIC,mCAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,AAAQ,iBAAiB;CACzB,AAAQ,yBAAuD;CAC/D,AAAQ,aAAa;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;;;CAYH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAIC,uCAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpBC,yCAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,cAAY;AAGvB,WAAK,QAAQ,cAAe,YAAYC,WAAS,KAAK,CACrD,KAAK,QAAQ,MACb,CAAC;OACD;AAGF,UAAK,aACJC,8CAA6B,KAAK,gBAAgB,OAAU,GAC3D,eAAa;AAGb,WAAK,QAAQ,cAAe,YAAYC,YAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAUC,iCAAgB,MAAM,KAAK;AAE3C,OAAIC,kCAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAKC,0CAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJC,4CAA2B,QAAQ,WAAW,OAAU,GACvD,aAAa;AACZ,OAAC,MAAM,OAAuB,YAC9B,UACA,MAAM,OACN;QAEF;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,AAAU,qBAIT,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAIC,6BACT,iEACA;AAGF,SAAO,KAAK,YACX,KAAK,qBAAqB,MAAM,KAAK,EACrC,QACA,QACA"}
|
|
1
|
+
{"version":3,"file":"ChannelEmitter.cjs","names":["ChannelNetwork","ChannelNotSetError","ConnectionTimeoutError","InternalEmitterRequestType","createSuccessResponseMessage","validateMessage","isRequestMessage","InternalReceiverRequestType","createErrorResponseMessage","NotReadyError"],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type { ChannelNetworkOptions, PostRequestOptions } from \"./ChannelNetwork\"\nimport { ChannelNetwork } from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from \"./errors\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\nimport type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\nimport { InternalEmitterRequestType, InternalReceiverRequestType } from \"./types\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions & Partial<ChannelNetworkOptions> =\n\t{\n\t\tconnectTimeout: 20000,\n\t\trequestIDPrefix: \"emitter-\",\n\t}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new origin\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [this.channel.port2])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(response, event.origin)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\"Emitter is not connected, use `ChannelEmitter.connect()` first\")\n\t\t}\n\n\t\treturn this.postRequest(this.createRequestMessage(type, data), undefined, options)\n\t}\n}\n"],"mappings":";;;;;AAyBA,MAAa,+BACZ;CACC,gBAAgB;CAChB,iBAAiB;CACjB;AAIF,IAAsB,iBAAtB,cAIUA,uBAAAA,eAAwE;CACjF;CACA,WAA0C;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAIC,eAAAA,oBAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,iBAAyB;CACzB,yBAA+D;CAC/D,aAAqB;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;CAUH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAIC,eAAAA,wBAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpBC,cAAAA,2BAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,YAAY;AAGvB,WAAK,QAAQ,cAAe,YAAY,SAAS,KAAK,CAAC,KAAK,QAAQ,MAAM,CAAC;OAC1E;AAGF,UAAK,aACJC,iBAAAA,6BAA6B,KAAK,gBAAgB,KAAA,EAAU,GAC3D,aAAa;AAGb,WAAK,QAAQ,cAAe,YAAY,UAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAUC,iBAAAA,gBAAgB,MAAM,KAAK;AAE3C,OAAIC,iBAAAA,iBAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAKC,cAAAA,4BAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJC,iBAAAA,2BAA2B,QAAQ,WAAW,KAAA,EAAU,GACvD,aAAa;AACX,aAAM,OAAuB,YAAY,UAAU,MAAM,OAAO;QAEnE;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,qBAIC,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAIC,eAAAA,cAAc,iEAAiE;AAG1F,SAAO,KAAK,YAAY,KAAK,qBAAqB,MAAM,KAAK,EAAE,KAAA,GAAW,QAAQ"}
|
|
@@ -21,9 +21,7 @@ declare abstract class ChannelEmitter<TReceiverTransactions extends Record<strin
|
|
|
21
21
|
* Initiates connection to receiver
|
|
22
22
|
*
|
|
23
23
|
* @param receiverOptions - Options to configure the receiver with
|
|
24
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
25
|
-
* origin
|
|
26
|
-
*
|
|
24
|
+
* @param newOrigin - Indicates to the emitter that we're connecting to a new origin
|
|
27
25
|
* @returns Success connect message
|
|
28
26
|
*/
|
|
29
27
|
connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelEmitter.d.cts","names":[],"sources":["../../src/channel/ChannelEmitter.ts"],"mappings":";;;;;KAqBY,qBAAA;EACX,cAAA;AAAA;AAAA,KASW,wBAAA,GAA2B,qBAAA,GAAwB,qBAAA;AAAA,uBAEzC,cAAA,+BACS,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCAClD,MAAA,oBAA0B,MAAA,4CAClB,MAAA,oBAA0B,MAAA,2BAC1C,cAAA,CAAe,qBAAA,EAAuB,qBAAA,GAAwB,QAAA;EAAA,QAC/D,OAAA;EAAA,QACA,QAAA;EAAA,cACM,OAAA,CAAA,GAAW,cAAA;EAAA,cAOX,OAAA,CAAQ,OAAA,EAAS,cAAA;EAAA,QAUvB,cAAA;EAAA,QACA,sBAAA;EAAA,QACA,UAAA;EAAA,IACG,SAAA,CAAA;cAKV,MAAA,EAAQ,iBAAA,EACR,eAAA,EAAiB,oBAAA,CAAqB,qBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,wBAAA,IAA4B,QAAA;EAjChB;;;;;;;EAmD9B,OAAA,CACC,eAAA,GAAiB,2BAAA,CAChB,yBAAA,GAA4B,gBAAA,iCAE7B,SAAA,aACE,OAAA,CAAQ,sBAAA;EArD4D;EAsIvE,UAAA,CAAA;EA5H+B;EAAA,QAkIjB,gBAAA;EAAA,UAmDJ,oBAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,IAAA,EAAM,QAAA,UACN,IAAA,GAAO,QAAA,UACP,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;AAAA"}
|
|
@@ -21,9 +21,7 @@ declare abstract class ChannelEmitter<TReceiverTransactions extends Record<strin
|
|
|
21
21
|
* Initiates connection to receiver
|
|
22
22
|
*
|
|
23
23
|
* @param receiverOptions - Options to configure the receiver with
|
|
24
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
25
|
-
* origin
|
|
26
|
-
*
|
|
24
|
+
* @param newOrigin - Indicates to the emitter that we're connecting to a new origin
|
|
27
25
|
* @returns Success connect message
|
|
28
26
|
*/
|
|
29
27
|
connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelEmitter.d.ts","names":[],"sources":["../../src/channel/ChannelEmitter.ts"],"mappings":";;;;;KAqBY,qBAAA;EACX,cAAA;AAAA;AAAA,KASW,wBAAA,GAA2B,qBAAA,GAAwB,qBAAA;AAAA,uBAEzC,cAAA,+BACS,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCAClD,MAAA,oBAA0B,MAAA,4CAClB,MAAA,oBAA0B,MAAA,2BAC1C,cAAA,CAAe,qBAAA,EAAuB,qBAAA,GAAwB,QAAA;EAAA,QAC/D,OAAA;EAAA,QACA,QAAA;EAAA,cACM,OAAA,CAAA,GAAW,cAAA;EAAA,cAOX,OAAA,CAAQ,OAAA,EAAS,cAAA;EAAA,QAUvB,cAAA;EAAA,QACA,sBAAA;EAAA,QACA,UAAA;EAAA,IACG,SAAA,CAAA;cAKV,MAAA,EAAQ,iBAAA,EACR,eAAA,EAAiB,oBAAA,CAAqB,qBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,wBAAA,IAA4B,QAAA;EAjChB;;;;;;;EAmD9B,OAAA,CACC,eAAA,GAAiB,2BAAA,CAChB,yBAAA,GAA4B,gBAAA,iCAE7B,SAAA,aACE,OAAA,CAAQ,sBAAA;EArD4D;EAsIvE,UAAA,CAAA;EA5H+B;EAAA,QAkIjB,gBAAA;EAAA,UAmDJ,oBAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,IAAA,EAAM,QAAA,UACN,IAAA,GAAO,QAAA,UACP,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;AAAA"}
|
|
@@ -2,7 +2,6 @@ import { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from "./err
|
|
|
2
2
|
import { createErrorResponseMessage, createSuccessResponseMessage, isRequestMessage, validateMessage } from "./messages.js";
|
|
3
3
|
import { ChannelNetwork } from "./ChannelNetwork.js";
|
|
4
4
|
import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types.js";
|
|
5
|
-
|
|
6
5
|
//#region src/channel/ChannelEmitter.ts
|
|
7
6
|
const channelEmitterDefaultOptions = {
|
|
8
7
|
connectTimeout: 2e4,
|
|
@@ -40,9 +39,7 @@ var ChannelEmitter = class extends ChannelNetwork {
|
|
|
40
39
|
* Initiates connection to receiver
|
|
41
40
|
*
|
|
42
41
|
* @param receiverOptions - Options to configure the receiver with
|
|
43
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
44
|
-
* origin
|
|
45
|
-
*
|
|
42
|
+
* @param newOrigin - Indicates to the emitter that we're connecting to a new origin
|
|
46
43
|
* @returns Success connect message
|
|
47
44
|
*/
|
|
48
45
|
connect(receiverOptions = {}, newOrigin = false) {
|
|
@@ -58,11 +55,11 @@ var ChannelEmitter = class extends ChannelNetwork {
|
|
|
58
55
|
clearTimeout(receiverReadyTimeout);
|
|
59
56
|
this.channel = new MessageChannel();
|
|
60
57
|
const request = this.createRequestMessage(InternalEmitterRequestType.Connect, receiverOptions);
|
|
61
|
-
const response = await this.postRequest(request, (request
|
|
62
|
-
this._target.contentWindow.postMessage(request
|
|
58
|
+
const response = await this.postRequest(request, (request) => {
|
|
59
|
+
this._target.contentWindow.postMessage(request, "*", [this.channel.port2]);
|
|
63
60
|
});
|
|
64
|
-
this.postResponse(createSuccessResponseMessage(this._receiverReady, void 0), (response
|
|
65
|
-
this._target.contentWindow.postMessage(response
|
|
61
|
+
this.postResponse(createSuccessResponseMessage(this._receiverReady, void 0), (response) => {
|
|
62
|
+
this._target.contentWindow.postMessage(response, "*");
|
|
66
63
|
});
|
|
67
64
|
this._connected = true;
|
|
68
65
|
resolve(response);
|
|
@@ -109,7 +106,7 @@ var ChannelEmitter = class extends ChannelNetwork {
|
|
|
109
106
|
return this.postRequest(this.createRequestMessage(type, data), void 0, options);
|
|
110
107
|
}
|
|
111
108
|
};
|
|
112
|
-
|
|
113
109
|
//#endregion
|
|
114
110
|
export { ChannelEmitter };
|
|
111
|
+
|
|
115
112
|
//# sourceMappingURL=ChannelEmitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelEmitter.js","names":["request","response"],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction} from \"./types\";\nimport {\n\tInternalEmitterRequestType,\n\tInternalReceiverRequestType\n} from \"./types\"\n\nimport {\n\tChannelNotSetError,\n\tConnectionTimeoutError,\n\tNotReadyError,\n} from \"./errors\"\n\nimport type {\n\tChannelNetworkOptions,\n\tPostRequestOptions} from \"./ChannelNetwork\";\nimport {\n\tChannelNetwork\n} from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions &\n\tPartial<ChannelNetworkOptions> = {\n\tconnectTimeout: 20000,\n\trequestIDPrefix: \"emitter-\",\n}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions &\n\tChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<\n\t\tstring,\n\t\tnever\n\t>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<\n\tTReceiverTransactions,\n\tChannelEmitterOptions & TOptions\n> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new\n\t * origin\n\t *\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [\n\t\t\t\t\t\t\t\tthis.channel.port2,\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(\n\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t\tevent.origin,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\n\t\t\t\t\"Emitter is not connected, use `ChannelEmitter.connect()` first\",\n\t\t\t)\n\t\t}\n\n\t\treturn this.postRequest(\n\t\t\tthis.createRequestMessage(type, data),\n\t\t\tundefined,\n\t\t\toptions,\n\t\t)\n\t}\n}\n"],"mappings":";;;;;;AAqCA,MAAa,+BACqB;CACjC,gBAAgB;CAChB,iBAAiB;CACjB;AAKD,IAAsB,iBAAtB,cAOU,eAGR;CACD,AAAQ;CACR,AAAQ,WAAkC;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAI,oBAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,AAAQ,iBAAiB;CACzB,AAAQ,yBAAuD;CAC/D,AAAQ,aAAa;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;;;CAYH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAI,wBAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpB,2BAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,cAAY;AAGvB,WAAK,QAAQ,cAAe,YAAYA,WAAS,KAAK,CACrD,KAAK,QAAQ,MACb,CAAC;OACD;AAGF,UAAK,aACJ,6BAA6B,KAAK,gBAAgB,OAAU,GAC3D,eAAa;AAGb,WAAK,QAAQ,cAAe,YAAYC,YAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAU,gBAAgB,MAAM,KAAK;AAE3C,OAAI,iBAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAK,4BAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJ,2BAA2B,QAAQ,WAAW,OAAU,GACvD,aAAa;AACZ,OAAC,MAAM,OAAuB,YAC9B,UACA,MAAM,OACN;QAEF;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,AAAU,qBAIT,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAI,cACT,iEACA;AAGF,SAAO,KAAK,YACX,KAAK,qBAAqB,MAAM,KAAK,EACrC,QACA,QACA"}
|
|
1
|
+
{"version":3,"file":"ChannelEmitter.js","names":[],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type { ChannelNetworkOptions, PostRequestOptions } from \"./ChannelNetwork\"\nimport { ChannelNetwork } from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from \"./errors\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\nimport type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\nimport { InternalEmitterRequestType, InternalReceiverRequestType } from \"./types\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions & Partial<ChannelNetworkOptions> =\n\t{\n\t\tconnectTimeout: 20000,\n\t\trequestIDPrefix: \"emitter-\",\n\t}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new origin\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [this.channel.port2])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(response, event.origin)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\"Emitter is not connected, use `ChannelEmitter.connect()` first\")\n\t\t}\n\n\t\treturn this.postRequest(this.createRequestMessage(type, data), undefined, options)\n\t}\n}\n"],"mappings":";;;;;AAyBA,MAAa,+BACZ;CACC,gBAAgB;CAChB,iBAAiB;CACjB;AAIF,IAAsB,iBAAtB,cAIU,eAAwE;CACjF;CACA,WAA0C;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAI,oBAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,iBAAyB;CACzB,yBAA+D;CAC/D,aAAqB;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;CAUH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAI,wBAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpB,2BAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,YAAY;AAGvB,WAAK,QAAQ,cAAe,YAAY,SAAS,KAAK,CAAC,KAAK,QAAQ,MAAM,CAAC;OAC1E;AAGF,UAAK,aACJ,6BAA6B,KAAK,gBAAgB,KAAA,EAAU,GAC3D,aAAa;AAGb,WAAK,QAAQ,cAAe,YAAY,UAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAU,gBAAgB,MAAM,KAAK;AAE3C,OAAI,iBAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAK,4BAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJ,2BAA2B,QAAQ,WAAW,KAAA,EAAU,GACvD,aAAa;AACX,aAAM,OAAuB,YAAY,UAAU,MAAM,OAAO;QAEnE;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,qBAIC,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAI,cAAc,iEAAiE;AAG1F,SAAO,KAAK,YAAY,KAAK,qBAAqB,MAAM,KAAK,EAAE,KAAA,GAAW,QAAQ"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
const require_errors = require(
|
|
2
|
-
const require_messages = require(
|
|
3
|
-
|
|
1
|
+
const require_errors = require("./errors.cjs");
|
|
2
|
+
const require_messages = require("./messages.cjs");
|
|
4
3
|
//#region src/channel/ChannelNetwork.ts
|
|
5
4
|
const channelNetworkDefaultOptions = {
|
|
6
5
|
debug: false,
|
|
@@ -56,7 +55,7 @@ var ChannelNetwork = class {
|
|
|
56
55
|
else throw error;
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
|
-
postRequest(request, postMessage = (request
|
|
58
|
+
postRequest(request, postMessage = (request) => this.port.postMessage(request), options = {}) {
|
|
60
59
|
if (this.options.debug) console.debug(request);
|
|
61
60
|
if (this._pendingRequests.size >= this.options.maximumRequestConcurrency) throw new require_errors.TooManyConcurrentRequestsError(request);
|
|
62
61
|
return new Promise((resolve, reject) => {
|
|
@@ -72,13 +71,13 @@ var ChannelNetwork = class {
|
|
|
72
71
|
postMessage(request);
|
|
73
72
|
});
|
|
74
73
|
}
|
|
75
|
-
postResponse(response, postMessage = (response
|
|
74
|
+
postResponse(response, postMessage = (response) => this.port.postMessage(response)) {
|
|
76
75
|
if (this.options.debug) console.debug(response);
|
|
77
76
|
postMessage(response);
|
|
78
77
|
return response;
|
|
79
78
|
}
|
|
80
79
|
};
|
|
81
|
-
|
|
82
80
|
//#endregion
|
|
83
81
|
exports.ChannelNetwork = ChannelNetwork;
|
|
82
|
+
|
|
84
83
|
//# sourceMappingURL=ChannelNetwork.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelNetwork.cjs","names":["PortNotSetError","createRequestMessage","validateMessage","isRequestMessage","createErrorResponseMessage","createSuccessResponseMessage","
|
|
1
|
+
{"version":3,"file":"ChannelNetwork.cjs","names":["PortNotSetError","createRequestMessage","validateMessage","isRequestMessage","createErrorResponseMessage","createSuccessResponseMessage","TooManyConcurrentRequestsError","RequestTimeoutError","isSuccessResponseMessage","ResponseError"],"sources":["../../src/channel/ChannelNetwork.ts"],"sourcesContent":["import {\n\tPortNotSetError,\n\tRequestTimeoutError,\n\tResponseError,\n\tTooManyConcurrentRequestsError,\n} from \"./errors\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateRequestMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tisSuccessResponseMessage,\n\tvalidateMessage,\n} from \"./messages\"\nimport type {\n\tExtractErrorResponseMessage,\n\tExtractSuccessResponseMessage,\n\tRequestMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\n\nexport type PostRequestOptions = {\n\ttimeout?: number\n}\n\nexport type ChannelNetworkOptions = {\n\tdebug: boolean\n\tmaximumRequestConcurrency: number\n\tdefaultTimeout: number\n\trequestIDPrefix: string\n}\n\nexport const channelNetworkDefaultOptions: ChannelNetworkOptions = {\n\tdebug: false,\n\tmaximumRequestConcurrency: 20,\n\tdefaultTimeout: 5000,\n\trequestIDPrefix: \"channel-\",\n}\n\nexport abstract class ChannelNetwork<\n\tTPartnerTransactions extends Record<string, UnknownTransaction> = Record<string, never>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n> {\n\tpublic requestHandlers: TransactionsHandlers<TPartnerTransactions>\n\tpublic options: ChannelNetworkOptions & TOptions\n\n\tprivate _port: MessagePort | null = null\n\tprotected get port(): MessagePort {\n\t\tif (!this._port) {\n\t\t\tthrow new PortNotSetError()\n\t\t}\n\n\t\treturn this._port\n\t}\n\tprotected set port(port: MessagePort | null) {\n\t\t// Destroy old port\n\t\tif (this._port) {\n\t\t\tthis._port.onmessage = null\n\t\t}\n\n\t\tthis._port = port\n\t\tif (this._port) {\n\t\t\tthis._port.onmessage = this.onMessage.bind(this)\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tprivate _pendingRequests: Map<string, (response: any) => void> = new Map()\n\n\tconstructor(\n\t\trequestHandlers: TransactionsHandlers<TPartnerTransactions>,\n\t\toptions: Partial<ChannelNetworkOptions> & TOptions,\n\t) {\n\t\tthis.requestHandlers = requestHandlers\n\t\tthis.options = { ...channelNetworkDefaultOptions, ...options }\n\t}\n\n\tpublic createRequestMessage<TType extends string = string, TData = undefined>(\n\t\ttype: TType,\n\t\tdata: TData,\n\t): RequestMessage<TType, TData> {\n\t\treturn createRequestMessage(type, data, this.options.requestIDPrefix)\n\t}\n\n\tprotected async onMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(event.data)\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (!this.requestHandlers[message.type]) {\n\t\t\t\t\tthis.postResponse(createErrorResponseMessage(message.requestID, undefined, 501))\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// TODO: Figure out why type cannot be inferred on its own anymore\n\t\t\t\t\t\tconst response = await this.requestHandlers[message.type](message, {\n\t\t\t\t\t\t\tsuccess: createSuccessResponseMessage.bind(this, message.requestID) as Parameters<\n\t\t\t\t\t\t\t\t(typeof this.requestHandlers)[string]\n\t\t\t\t\t\t\t>[1][\"success\"],\n\t\t\t\t\t\t\terror: createErrorResponseMessage.bind(this, message.requestID) as Parameters<\n\t\t\t\t\t\t\t\t(typeof this.requestHandlers)[string]\n\t\t\t\t\t\t\t>[1][\"error\"],\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tthis.postResponse(response)\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.postResponse(createErrorResponseMessage(message.requestID, error, 500))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!this._pendingRequests.has(message.requestID)) {\n\t\t\t\t\tconsole.error(`Unknown request ID received in response: ${JSON.stringify(message)}`)\n\t\t\t\t} else {\n\t\t\t\t\t// Pending requests are checked in previous statement\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tthis._pendingRequests.get(message.requestID)!(message)\n\t\t\t\t\tthis._pendingRequests.delete(message.requestID)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tconsole.warn(error.message)\n\t\t\t} else {\n\t\t\t\t// Should not be possible, but who knows :shrug:\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\trequest: TRequest,\n\t\tpostMessage = (request: TRequest): void => this.port.postMessage(request),\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(request)\n\t\t}\n\n\t\tif (this._pendingRequests.size >= this.options.maximumRequestConcurrency) {\n\t\t\tthrow new TooManyConcurrentRequestsError(request)\n\t\t}\n\n\t\treturn new Promise<ExtractSuccessResponseMessage<TResponse>>((resolve, reject) => {\n\t\t\tconst requestTimeout = setTimeout(() => {\n\t\t\t\tif (this._pendingRequests.has(request.requestID)) {\n\t\t\t\t\tthis._pendingRequests.delete(request.requestID)\n\t\t\t\t}\n\t\t\t\treject(new RequestTimeoutError(request))\n\t\t\t}, options.timeout || this.options.defaultTimeout)\n\n\t\t\tthis._pendingRequests.set(request.requestID, (response: TResponse): void => {\n\t\t\t\tclearTimeout(requestTimeout)\n\n\t\t\t\tif (isSuccessResponseMessage(response)) {\n\t\t\t\t\tresolve(response as ExtractSuccessResponseMessage<TResponse>)\n\t\t\t\t} else {\n\t\t\t\t\treject(new ResponseError(response as ExtractErrorResponseMessage<TResponse>))\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tpostMessage(request)\n\t\t})\n\t}\n\n\tprotected postResponse<TResponse extends UnknownResponseMessage>(\n\t\tresponse: TResponse,\n\t\tpostMessage = (response: TResponse): void => this.port.postMessage(response),\n\t): TResponse {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(response)\n\t\t}\n\n\t\tpostMessage(response)\n\n\t\treturn response\n\t}\n}\n"],"mappings":";;;AAmCA,MAAa,+BAAsD;CAClE,OAAO;CACP,2BAA2B;CAC3B,gBAAgB;CAChB,iBAAiB;CACjB;AAED,IAAsB,iBAAtB,MAGE;CACD;CACA;CAEA,QAAoC;CACpC,IAAc,OAAoB;AACjC,MAAI,CAAC,KAAK,MACT,OAAM,IAAIA,eAAAA,iBAAiB;AAG5B,SAAO,KAAK;;CAEb,IAAc,KAAK,MAA0B;AAE5C,MAAI,KAAK,MACR,MAAK,MAAM,YAAY;AAGxB,OAAK,QAAQ;AACb,MAAI,KAAK,MACR,MAAK,MAAM,YAAY,KAAK,UAAU,KAAK,KAAK;;CAKlD,mCAAiE,IAAI,KAAK;CAE1E,YACC,iBACA,SACC;AACD,OAAK,kBAAkB;AACvB,OAAK,UAAU;GAAE,GAAG;GAA8B,GAAG;GAAS;;CAG/D,qBACC,MACA,MAC+B;AAC/B,SAAOC,iBAAAA,qBAAqB,MAAM,MAAM,KAAK,QAAQ,gBAAgB;;CAGtE,MAAgB,UAAU,OAA6C;AACtE,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,MAAI;GACH,MAAM,UAAUC,iBAAAA,gBAAgB,MAAM,KAAK;AAE3C,OAAIC,iBAAAA,iBAAiB,QAAQ,CAC5B,KAAI,CAAC,KAAK,gBAAgB,QAAQ,MACjC,MAAK,aAAaC,iBAAAA,2BAA2B,QAAQ,WAAW,KAAA,GAAW,IAAI,CAAC;OAEhF,KAAI;IAEH,MAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQ,MAAM,SAAS;KAClE,SAASC,iBAAAA,6BAA6B,KAAK,MAAM,QAAQ,UAAU;KAGnE,OAAOD,iBAAAA,2BAA2B,KAAK,MAAM,QAAQ,UAAU;KAG/D,CAAC;AAEF,SAAK,aAAa,SAAS;YACnB,OAAO;AACf,SAAK,aAAaA,iBAAAA,2BAA2B,QAAQ,WAAW,OAAO,IAAI,CAAC;;YAI1E,CAAC,KAAK,iBAAiB,IAAI,QAAQ,UAAU,CAChD,SAAQ,MAAM,4CAA4C,KAAK,UAAU,QAAQ,GAAG;QAC9E;AAGN,SAAK,iBAAiB,IAAI,QAAQ,UAAU,CAAE,QAAQ;AACtD,SAAK,iBAAiB,OAAO,QAAQ,UAAU;;WAGzC,OAAO;AACf,OAAI,iBAAiB,UACpB,SAAQ,KAAK,MAAM,QAAQ;OAG3B,OAAM;;;CAKT,YAIC,SACA,eAAe,YAA4B,KAAK,KAAK,YAAY,QAAQ,EACzE,UAA8B,EAAE,EACoB;AACpD,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,QAAQ;AAGvB,MAAI,KAAK,iBAAiB,QAAQ,KAAK,QAAQ,0BAC9C,OAAM,IAAIE,eAAAA,+BAA+B,QAAQ;AAGlD,SAAO,IAAI,SAAmD,SAAS,WAAW;GACjF,MAAM,iBAAiB,iBAAiB;AACvC,QAAI,KAAK,iBAAiB,IAAI,QAAQ,UAAU,CAC/C,MAAK,iBAAiB,OAAO,QAAQ,UAAU;AAEhD,WAAO,IAAIC,eAAAA,oBAAoB,QAAQ,CAAC;MACtC,QAAQ,WAAW,KAAK,QAAQ,eAAe;AAElD,QAAK,iBAAiB,IAAI,QAAQ,YAAY,aAA8B;AAC3E,iBAAa,eAAe;AAE5B,QAAIC,iBAAAA,yBAAyB,SAAS,CACrC,SAAQ,SAAqD;QAE7D,QAAO,IAAIC,eAAAA,cAAc,SAAmD,CAAC;KAE7E;AAEF,eAAY,QAAQ;IACnB;;CAGH,aACC,UACA,eAAe,aAA8B,KAAK,KAAK,YAAY,SAAS,EAChE;AACZ,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,SAAS;AAGxB,cAAY,SAAS;AAErB,SAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelNetwork.d.cts","names":[],"sources":["../../src/channel/ChannelNetwork.ts"],"mappings":";;;KAwBY,kBAAA;EACX,OAAA;AAAA;AAAA,KAGW,qBAAA;EACX,KAAA;EACA,yBAAA;EACA,cAAA;EACA,eAAA;AAAA;AAAA,uBAUqB,cAAA,8BACQ,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCACjD,MAAA,oBAA0B,MAAA;EAEpC,eAAA,EAAiB,oBAAA,CAAqB,oBAAA;EACtC,OAAA,EAAS,qBAAA,GAAwB,QAAA;EAAA,QAEhC,KAAA;EAAA,cACM,IAAA,CAAA,GAAQ,WAAA;EAAA,cAOR,IAAA,CAAK,IAAA,EAAM,WAAA;EAAA,QAajB,gBAAA;cAGP,eAAA,EAAiB,oBAAA,CAAqB,oBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,qBAAA,IAAyB,QAAA;EAMpC,oBAAA,kDAAA,CACN,IAAA,EAAM,KAAA,EACN,IAAA,EAAM,KAAA,GACJ,cAAA,CAAe,KAAA,EAAO,KAAA;EAAA,UAIT,SAAA,CAAU,KAAA,EAAO,YAAA,YAAwB,OAAA;EAAA,UAiD/C,WAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,OAAA,EAAS,QAAA,EACT,WAAA,IAAe,OAAA,EAAS,QAAA,WACxB,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;EAAA,UAgC/B,YAAA,mBAA+B,sBAAA,CAAA,CACxC,QAAA,EAAU,SAAA,EACV,WAAA,IAAe,QAAA,EAAU,SAAA,YACvB,SAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelNetwork.d.ts","names":[],"sources":["../../src/channel/ChannelNetwork.ts"],"mappings":";;;KAwBY,kBAAA;EACX,OAAA;AAAA;AAAA,KAGW,qBAAA;EACX,KAAA;EACA,yBAAA;EACA,cAAA;EACA,eAAA;AAAA;AAAA,uBAUqB,cAAA,8BACQ,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCACjD,MAAA,oBAA0B,MAAA;EAEpC,eAAA,EAAiB,oBAAA,CAAqB,oBAAA;EACtC,OAAA,EAAS,qBAAA,GAAwB,QAAA;EAAA,QAEhC,KAAA;EAAA,cACM,IAAA,CAAA,GAAQ,WAAA;EAAA,cAOR,IAAA,CAAK,IAAA,EAAM,WAAA;EAAA,QAajB,gBAAA;cAGP,eAAA,EAAiB,oBAAA,CAAqB,oBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,qBAAA,IAAyB,QAAA;EAMpC,oBAAA,kDAAA,CACN,IAAA,EAAM,KAAA,EACN,IAAA,EAAM,KAAA,GACJ,cAAA,CAAe,KAAA,EAAO,KAAA;EAAA,UAIT,SAAA,CAAU,KAAA,EAAO,YAAA,YAAwB,OAAA;EAAA,UAiD/C,WAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,OAAA,EAAS,QAAA,EACT,WAAA,IAAe,OAAA,EAAS,QAAA,WACxB,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;EAAA,UAgC/B,YAAA,mBAA+B,sBAAA,CAAA,CACxC,QAAA,EAAU,SAAA,EACV,WAAA,IAAe,QAAA,EAAU,SAAA,YACvB,SAAA;AAAA"}
|