@prismicio/simulator 0.1.4 → 0.2.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.
- package/README.md +7 -18
- package/dist/SimulatorAPI.cjs +38 -46
- package/dist/SimulatorAPI.cjs.map +1 -1
- package/dist/SimulatorAPI.d.cts +18 -0
- package/dist/SimulatorAPI.d.ts +16 -10
- package/dist/SimulatorAPI.js +37 -46
- package/dist/SimulatorAPI.js.map +1 -1
- package/dist/SimulatorClient.cjs +41 -51
- package/dist/SimulatorClient.cjs.map +1 -1
- package/dist/SimulatorClient.d.cts +16 -0
- package/dist/SimulatorClient.d.ts +15 -9
- package/dist/SimulatorClient.js +40 -51
- package/dist/SimulatorClient.js.map +1 -1
- package/dist/channel/ChannelEmitter.cjs +112 -143
- package/dist/channel/ChannelEmitter.cjs.map +1 -1
- package/dist/channel/ChannelEmitter.d.cts +38 -0
- package/dist/channel/ChannelEmitter.d.ts +36 -36
- package/dist/channel/ChannelEmitter.js +110 -141
- package/dist/channel/ChannelEmitter.js.map +1 -1
- package/dist/channel/ChannelNetwork.cjs +81 -109
- package/dist/channel/ChannelNetwork.cjs.map +1 -1
- package/dist/channel/ChannelNetwork.d.cts +28 -0
- package/dist/channel/ChannelNetwork.d.ts +25 -21
- package/dist/channel/ChannelNetwork.js +81 -109
- package/dist/channel/ChannelNetwork.js.map +1 -1
- package/dist/channel/ChannelReceiver.cjs +69 -92
- package/dist/channel/ChannelReceiver.cjs.map +1 -1
- package/dist/channel/ChannelReceiver.d.cts +20 -0
- package/dist/channel/ChannelReceiver.d.ts +18 -18
- package/dist/channel/ChannelReceiver.js +67 -90
- package/dist/channel/ChannelReceiver.js.map +1 -1
- package/dist/channel/errors.cjs +41 -46
- package/dist/channel/errors.cjs.map +1 -1
- package/dist/channel/errors.d.cts +28 -0
- package/dist/channel/errors.d.ts +22 -19
- package/dist/channel/errors.js +40 -52
- package/dist/channel/errors.js.map +1 -1
- package/dist/channel/messages.cjs +48 -43
- package/dist/channel/messages.cjs.map +1 -1
- package/dist/channel/messages.d.cts +12 -0
- package/dist/channel/messages.d.ts +12 -10
- package/dist/channel/messages.js +50 -53
- package/dist/channel/messages.js.map +1 -1
- package/dist/channel/types.cjs +15 -11
- package/dist/channel/types.cjs.map +1 -1
- package/dist/channel/types.d.cts +53 -0
- package/dist/channel/types.d.ts +42 -50
- package/dist/channel/types.js +13 -13
- package/dist/channel/types.js.map +1 -1
- package/dist/globalExtensions.d.cts +15 -0
- package/dist/globalExtensions.d.ts +13 -10
- package/dist/index.cjs +24 -33
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.js +5 -25
- package/dist/kit/SimulatorManager.cjs +106 -137
- package/dist/kit/SimulatorManager.cjs.map +1 -1
- package/dist/kit/SimulatorManager.d.cts +19 -0
- package/dist/kit/SimulatorManager.d.ts +16 -12
- package/dist/kit/SimulatorManager.js +103 -134
- package/dist/kit/SimulatorManager.js.map +1 -1
- package/dist/kit/State.cjs +82 -80
- package/dist/kit/State.cjs.map +1 -1
- package/dist/kit/State.d.cts +29 -0
- package/dist/kit/State.d.ts +26 -22
- package/dist/kit/State.js +80 -78
- package/dist/kit/State.js.map +1 -1
- package/dist/kit/domHelpers.cjs +25 -37
- package/dist/kit/domHelpers.cjs.map +1 -1
- package/dist/kit/domHelpers.d.cts +11 -0
- package/dist/kit/domHelpers.d.ts +10 -8
- package/dist/kit/domHelpers.js +25 -43
- package/dist/kit/domHelpers.js.map +1 -1
- package/dist/kit/eventHandlers.cjs +11 -9
- package/dist/kit/eventHandlers.cjs.map +1 -1
- package/dist/kit/eventHandlers.d.cts +8 -0
- package/dist/kit/eventHandlers.d.ts +7 -3
- package/dist/kit/eventHandlers.js +11 -11
- package/dist/kit/eventHandlers.js.map +1 -1
- package/dist/kit/getDefault.cjs +9 -7
- package/dist/kit/getDefault.cjs.map +1 -1
- package/dist/kit/getDefault.d.cts +10 -0
- package/dist/kit/getDefault.d.ts +10 -8
- package/dist/kit/getDefault.js +9 -10
- package/dist/kit/getDefault.js.map +1 -1
- package/dist/kit/messages.cjs +8 -22
- package/dist/kit/messages.cjs.map +1 -1
- package/dist/kit/messages.d.cts +5 -0
- package/dist/kit/messages.d.ts +5 -1
- package/dist/kit/messages.js +8 -23
- package/dist/kit/messages.js.map +1 -1
- package/dist/kit/types.cjs +12 -9
- package/dist/kit/types.cjs.map +1 -1
- package/dist/kit/types.d.cts +28 -0
- package/dist/kit/types.d.ts +24 -19
- package/dist/kit/types.js +11 -10
- package/dist/kit/types.js.map +1 -1
- package/dist/kit.cjs +21 -26
- package/dist/kit.d.cts +8 -0
- package/dist/kit.d.ts +8 -0
- package/dist/kit.js +7 -21
- package/dist/lib/EventEmitter.cjs +16 -25
- package/dist/lib/EventEmitter.cjs.map +1 -1
- package/dist/lib/EventEmitter.d.cts +12 -0
- package/dist/lib/EventEmitter.d.ts +11 -9
- package/dist/lib/EventEmitter.js +16 -26
- package/dist/lib/EventEmitter.js.map +1 -1
- package/dist/lib/throttle.cjs +21 -21
- package/dist/lib/throttle.cjs.map +1 -1
- package/dist/lib/throttle.js +21 -22
- package/dist/lib/throttle.js.map +1 -1
- package/dist/types.cjs +18 -14
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +39 -0
- package/dist/types.d.ts +32 -27
- package/dist/types.js +16 -16
- package/dist/types.js.map +1 -1
- package/package.json +27 -68
- package/src/SimulatorAPI.ts +24 -22
- package/src/SimulatorClient.ts +24 -25
- package/src/channel/ChannelEmitter.ts +71 -74
- package/src/channel/ChannelNetwork.ts +53 -55
- package/src/channel/ChannelReceiver.ts +46 -48
- package/src/channel/errors.ts +14 -14
- package/src/channel/index.ts +10 -10
- package/src/channel/messages.ts +39 -31
- package/src/channel/types.ts +40 -40
- package/src/globalExtensions.ts +6 -6
- package/src/index.ts +8 -8
- package/src/kit/SimulatorManager.ts +64 -63
- package/src/kit/State.ts +45 -44
- package/src/kit/domHelpers.ts +24 -24
- package/src/kit/eventHandlers.ts +6 -6
- package/src/kit/getDefault.ts +8 -8
- package/src/kit/index.ts +8 -8
- package/src/kit/messages.ts +5 -5
- package/src/kit/types.ts +13 -13
- package/src/lib/EventEmitter.ts +8 -8
- package/src/lib/__PRODUCTION__.ts +2 -2
- package/src/lib/throttle.ts +12 -12
- package/src/types.ts +20 -20
- package/dist/channel/index.d.ts +0 -10
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kit/index.d.ts +0 -8
- package/dist/kit.cjs.map +0 -1
- package/dist/kit.js.map +0 -1
- package/dist/lib/__PRODUCTION__.d.ts +0 -7
- package/dist/lib/throttle.d.ts +0 -1
|
@@ -1,146 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
9
|
-
const types = require("./types.cjs");
|
|
10
|
-
const errors = require("./errors.cjs");
|
|
11
|
-
const ChannelNetwork = require("./ChannelNetwork.cjs");
|
|
12
|
-
const messages = require("./messages.cjs");
|
|
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');
|
|
5
|
+
|
|
6
|
+
//#region src/channel/ChannelEmitter.ts
|
|
13
7
|
const channelEmitterDefaultOptions = {
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
connectTimeout: 2e4,
|
|
9
|
+
requestIDPrefix: "emitter-"
|
|
10
|
+
};
|
|
11
|
+
var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
|
|
12
|
+
_target;
|
|
13
|
+
_channel = null;
|
|
14
|
+
get channel() {
|
|
15
|
+
if (!this._channel) throw new require_errors.ChannelNotSetError();
|
|
16
|
+
return this._channel;
|
|
17
|
+
}
|
|
18
|
+
set channel(channel) {
|
|
19
|
+
this._channel = channel;
|
|
20
|
+
if (this._channel) this.port = this._channel.port1;
|
|
21
|
+
else this.port = null;
|
|
22
|
+
}
|
|
23
|
+
_receiverReady = "";
|
|
24
|
+
_receiverReadyCallback = null;
|
|
25
|
+
_connected = false;
|
|
26
|
+
get connected() {
|
|
27
|
+
return this._connected;
|
|
28
|
+
}
|
|
29
|
+
constructor(target, requestHandlers, options) {
|
|
30
|
+
super(requestHandlers, {
|
|
31
|
+
...channelEmitterDefaultOptions,
|
|
32
|
+
...options
|
|
33
|
+
});
|
|
34
|
+
this._target = target;
|
|
35
|
+
window.addEventListener("message", (event) => {
|
|
36
|
+
this._onPublicMessage(event);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Initiates connection to receiver
|
|
41
|
+
*
|
|
42
|
+
* @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
|
+
*
|
|
46
|
+
* @returns Success connect message
|
|
47
|
+
*/
|
|
48
|
+
connect(receiverOptions = {}, newOrigin = false) {
|
|
49
|
+
this.disconnect();
|
|
50
|
+
if (newOrigin) this._receiverReady = "";
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
this._target.addEventListener("load", () => {
|
|
53
|
+
if (!this._target.contentWindow) return reject(/* @__PURE__ */ new Error("Target window is not available"));
|
|
54
|
+
const receiverReadyTimeout = setTimeout(() => {
|
|
55
|
+
reject(new require_errors.ConnectionTimeoutError());
|
|
56
|
+
}, this.options.connectTimeout);
|
|
57
|
+
const receiverReadyCallback = async () => {
|
|
58
|
+
clearTimeout(receiverReadyTimeout);
|
|
59
|
+
this.channel = new MessageChannel();
|
|
60
|
+
const request = this.createRequestMessage(require_types.InternalEmitterRequestType.Connect, receiverOptions);
|
|
61
|
+
const response = await this.postRequest(request, (request$1) => {
|
|
62
|
+
this._target.contentWindow.postMessage(request$1, "*", [this.channel.port2]);
|
|
63
|
+
});
|
|
64
|
+
this.postResponse(require_messages.createSuccessResponseMessage(this._receiverReady, void 0), (response$1) => {
|
|
65
|
+
this._target.contentWindow.postMessage(response$1, "*");
|
|
66
|
+
});
|
|
67
|
+
this._connected = true;
|
|
68
|
+
resolve(response);
|
|
69
|
+
};
|
|
70
|
+
if (this._receiverReady) receiverReadyCallback();
|
|
71
|
+
else this._receiverReadyCallback = receiverReadyCallback;
|
|
72
|
+
}, { once: true });
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** Destroys current connection to receiver if any */
|
|
76
|
+
disconnect() {
|
|
77
|
+
this._connected = false;
|
|
78
|
+
this.channel = null;
|
|
79
|
+
}
|
|
80
|
+
/** Handles public messages */
|
|
81
|
+
async _onPublicMessage(event) {
|
|
82
|
+
if (event.source !== this._target.contentWindow) return;
|
|
83
|
+
try {
|
|
84
|
+
const message = require_messages.validateMessage(event.data);
|
|
85
|
+
if (require_messages.isRequestMessage(message)) {
|
|
86
|
+
if (this.options.debug) console.debug(event.data);
|
|
87
|
+
switch (message.type) {
|
|
88
|
+
case require_types.InternalReceiverRequestType.Ready:
|
|
89
|
+
this._receiverReady = message.requestID;
|
|
90
|
+
if (this._receiverReadyCallback) {
|
|
91
|
+
const receiverReadyCallbackPromise = this._receiverReadyCallback();
|
|
92
|
+
this._receiverReadyCallback = null;
|
|
93
|
+
await receiverReadyCallbackPromise;
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
this.postResponse(require_messages.createErrorResponseMessage(message.requestID, void 0), (response) => {
|
|
98
|
+
event.source.postMessage(response, event.origin);
|
|
99
|
+
});
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
} catch (error) {
|
|
104
|
+
if (error instanceof TypeError) {} else throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
postFormattedRequest(type, data, options = {}) {
|
|
108
|
+
if (!this._connected) throw new require_errors.NotReadyError("Emitter is not connected, use `ChannelEmitter.connect()` first");
|
|
109
|
+
return this.postRequest(this.createRequestMessage(type, data), void 0, options);
|
|
110
|
+
}
|
|
16
111
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
super(requestHandlers, { ...channelEmitterDefaultOptions, ...options });
|
|
20
|
-
__publicField(this, "_target");
|
|
21
|
-
__publicField(this, "_channel", null);
|
|
22
|
-
__publicField(this, "_receiverReady", "");
|
|
23
|
-
__publicField(this, "_receiverReadyCallback", null);
|
|
24
|
-
__publicField(this, "_connected", false);
|
|
25
|
-
this._target = target;
|
|
26
|
-
window.addEventListener("message", (event) => {
|
|
27
|
-
this._onPublicMessage(event);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
get channel() {
|
|
31
|
-
if (!this._channel) {
|
|
32
|
-
throw new errors.ChannelNotSetError();
|
|
33
|
-
}
|
|
34
|
-
return this._channel;
|
|
35
|
-
}
|
|
36
|
-
set channel(channel) {
|
|
37
|
-
this._channel = channel;
|
|
38
|
-
if (this._channel) {
|
|
39
|
-
this.port = this._channel.port1;
|
|
40
|
-
} else {
|
|
41
|
-
this.port = null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
get connected() {
|
|
45
|
-
return this._connected;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Initiates connection to receiver
|
|
49
|
-
*
|
|
50
|
-
* @param receiverOptions - Options to configure the receiver with
|
|
51
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
52
|
-
* origin
|
|
53
|
-
*
|
|
54
|
-
* @returns Success connect message
|
|
55
|
-
*/
|
|
56
|
-
connect(receiverOptions = {}, newOrigin = false) {
|
|
57
|
-
this.disconnect();
|
|
58
|
-
if (newOrigin) {
|
|
59
|
-
this._receiverReady = "";
|
|
60
|
-
}
|
|
61
|
-
return new Promise((resolve, reject) => {
|
|
62
|
-
this._target.addEventListener("load", () => {
|
|
63
|
-
if (!this._target.contentWindow) {
|
|
64
|
-
return reject(new Error("Target window is not available"));
|
|
65
|
-
}
|
|
66
|
-
const receiverReadyTimeout = setTimeout(() => {
|
|
67
|
-
reject(new errors.ConnectionTimeoutError());
|
|
68
|
-
}, this.options.connectTimeout);
|
|
69
|
-
const receiverReadyCallback = async () => {
|
|
70
|
-
clearTimeout(receiverReadyTimeout);
|
|
71
|
-
this.channel = new MessageChannel();
|
|
72
|
-
const request = this.createRequestMessage(types.InternalEmitterRequestType.Connect, receiverOptions);
|
|
73
|
-
const response = await this.postRequest(request, (request2) => {
|
|
74
|
-
this._target.contentWindow.postMessage(request2, "*", [
|
|
75
|
-
this.channel.port2
|
|
76
|
-
]);
|
|
77
|
-
});
|
|
78
|
-
this.postResponse(messages.createSuccessResponseMessage(this._receiverReady, void 0), (response2) => {
|
|
79
|
-
this._target.contentWindow.postMessage(response2, "*");
|
|
80
|
-
});
|
|
81
|
-
this._connected = true;
|
|
82
|
-
resolve(response);
|
|
83
|
-
};
|
|
84
|
-
if (this._receiverReady) {
|
|
85
|
-
receiverReadyCallback();
|
|
86
|
-
} else {
|
|
87
|
-
this._receiverReadyCallback = receiverReadyCallback;
|
|
88
|
-
}
|
|
89
|
-
}, { once: true });
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Destroys current connection to receiver if any
|
|
94
|
-
*/
|
|
95
|
-
disconnect() {
|
|
96
|
-
this._connected = false;
|
|
97
|
-
this.channel = null;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Handles public messages
|
|
101
|
-
*/
|
|
102
|
-
async _onPublicMessage(event) {
|
|
103
|
-
if (event.source !== this._target.contentWindow) {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
try {
|
|
107
|
-
const message = messages.validateMessage(event.data);
|
|
108
|
-
if (messages.isRequestMessage(message)) {
|
|
109
|
-
if (this.options.debug) {
|
|
110
|
-
console.debug(event.data);
|
|
111
|
-
}
|
|
112
|
-
switch (message.type) {
|
|
113
|
-
case types.InternalReceiverRequestType.Ready:
|
|
114
|
-
this._receiverReady = message.requestID;
|
|
115
|
-
if (this._receiverReadyCallback) {
|
|
116
|
-
const receiverReadyCallbackPromise = this._receiverReadyCallback();
|
|
117
|
-
this._receiverReadyCallback = null;
|
|
118
|
-
await receiverReadyCallbackPromise;
|
|
119
|
-
}
|
|
120
|
-
break;
|
|
121
|
-
default:
|
|
122
|
-
this.postResponse(messages.createErrorResponseMessage(message.requestID, void 0), (response) => {
|
|
123
|
-
event.source.postMessage(response, event.origin);
|
|
124
|
-
});
|
|
125
|
-
break;
|
|
126
|
-
}
|
|
127
|
-
} else {
|
|
128
|
-
}
|
|
129
|
-
} catch (error) {
|
|
130
|
-
if (error instanceof TypeError)
|
|
131
|
-
;
|
|
132
|
-
else {
|
|
133
|
-
throw error;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
postFormattedRequest(type, data, options = {}) {
|
|
138
|
-
if (!this._connected) {
|
|
139
|
-
throw new errors.NotReadyError("Emitter is not connected, use `ChannelEmitter.connect()` first");
|
|
140
|
-
}
|
|
141
|
-
return this.postRequest(this.createRequestMessage(type, data), void 0, options);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
144
114
|
exports.ChannelEmitter = ChannelEmitter;
|
|
145
|
-
|
|
146
|
-
//# sourceMappingURL=ChannelEmitter.cjs.map
|
|
115
|
+
//# sourceMappingURL=ChannelEmitter.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelEmitter.cjs","sources":["../../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterRequestType,\n\tInternalEmitterTransactions,\n\tInternalReceiverRequestType,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\";\n\nimport {\n\tChannelNotSetError,\n\tConnectionTimeoutError,\n\tNotReadyError,\n} from \"./errors\";\n\nimport {\n\tChannelNetwork,\n\tChannelNetworkOptions,\n\tPostRequestOptions,\n} from \"./ChannelNetwork\";\nimport { 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/**\n\t * Destroys current connection to receiver if any\n\t */\n\tdisconnect(): void {\n\t\tthis._connected = false;\n\t\tthis.channel = null;\n\t}\n\n\t/**\n\t * Handles public messages\n\t */\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 =\n\t\t\t\t\t\t\t\tthis._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"],"names":["ChannelNetwork","ChannelNotSetError","ConnectionTimeoutError","InternalEmitterRequestType","request","createSuccessResponseMessage","response","validateMessage","isRequestMessage","InternalReceiverRequestType","createErrorResponseMessage","NotReadyError"],"mappings":"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"}
|
|
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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ExtractSuccessResponseMessage, InternalEmitterTransactions, SuccessResponseMessage, TransactionsHandlers, UnknownRequestMessage, UnknownResponseMessage, UnknownTransaction } from "./types.cjs";
|
|
2
|
+
import { ChannelNetwork, ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork.cjs";
|
|
3
|
+
import { AllChannelReceiverOptions } from "./ChannelReceiver.cjs";
|
|
4
|
+
|
|
5
|
+
//#region src/channel/ChannelEmitter.d.ts
|
|
6
|
+
type ChannelEmitterOptions = {
|
|
7
|
+
connectTimeout: number;
|
|
8
|
+
};
|
|
9
|
+
type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions;
|
|
10
|
+
declare abstract class ChannelEmitter<TReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>, TOptions extends Record<string, unknown> = Record<string, unknown>, TReceiverOptions extends Record<string, unknown> = Record<string, unknown>> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {
|
|
11
|
+
private _target;
|
|
12
|
+
private _channel;
|
|
13
|
+
protected get channel(): MessageChannel;
|
|
14
|
+
protected set channel(channel: MessageChannel | null);
|
|
15
|
+
private _receiverReady;
|
|
16
|
+
private _receiverReadyCallback;
|
|
17
|
+
private _connected;
|
|
18
|
+
get connected(): boolean;
|
|
19
|
+
constructor(target: HTMLIFrameElement, requestHandlers: TransactionsHandlers<TReceiverTransactions>, options: Partial<AllChannelEmitterOptions> & TOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Initiates connection to receiver
|
|
22
|
+
*
|
|
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
|
+
*
|
|
27
|
+
* @returns Success connect message
|
|
28
|
+
*/
|
|
29
|
+
connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
|
|
30
|
+
/** Destroys current connection to receiver if any */
|
|
31
|
+
disconnect(): void;
|
|
32
|
+
/** Handles public messages */
|
|
33
|
+
private _onPublicMessage;
|
|
34
|
+
protected postFormattedRequest<TRequest extends UnknownRequestMessage, TResponse extends UnknownResponseMessage>(type: TRequest["type"], data?: TRequest["data"], options?: PostRequestOptions): Promise<ExtractSuccessResponseMessage<TResponse>>;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { AllChannelEmitterOptions, ChannelEmitter };
|
|
38
|
+
//# sourceMappingURL=ChannelEmitter.d.cts.map
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { ExtractSuccessResponseMessage, InternalEmitterTransactions, SuccessResponseMessage, TransactionsHandlers, UnknownRequestMessage, UnknownResponseMessage, UnknownTransaction } from "./types";
|
|
2
|
-
import { ChannelNetwork, ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork";
|
|
3
|
-
import { AllChannelReceiverOptions } from "./ChannelReceiver";
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { ExtractSuccessResponseMessage, InternalEmitterTransactions, SuccessResponseMessage, TransactionsHandlers, UnknownRequestMessage, UnknownResponseMessage, UnknownTransaction } from "./types.js";
|
|
2
|
+
import { ChannelNetwork, ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork.js";
|
|
3
|
+
import { AllChannelReceiverOptions } from "./ChannelReceiver.js";
|
|
4
|
+
|
|
5
|
+
//#region src/channel/ChannelEmitter.d.ts
|
|
6
|
+
type ChannelEmitterOptions = {
|
|
7
|
+
connectTimeout: number;
|
|
6
8
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Handles public messages
|
|
35
|
-
*/
|
|
36
|
-
private _onPublicMessage;
|
|
37
|
-
protected postFormattedRequest<TRequest extends UnknownRequestMessage, TResponse extends UnknownResponseMessage>(type: TRequest["type"], data?: TRequest["data"], options?: PostRequestOptions): Promise<ExtractSuccessResponseMessage<TResponse>>;
|
|
9
|
+
type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions;
|
|
10
|
+
declare abstract class ChannelEmitter<TReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>, TOptions extends Record<string, unknown> = Record<string, unknown>, TReceiverOptions extends Record<string, unknown> = Record<string, unknown>> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {
|
|
11
|
+
private _target;
|
|
12
|
+
private _channel;
|
|
13
|
+
protected get channel(): MessageChannel;
|
|
14
|
+
protected set channel(channel: MessageChannel | null);
|
|
15
|
+
private _receiverReady;
|
|
16
|
+
private _receiverReadyCallback;
|
|
17
|
+
private _connected;
|
|
18
|
+
get connected(): boolean;
|
|
19
|
+
constructor(target: HTMLIFrameElement, requestHandlers: TransactionsHandlers<TReceiverTransactions>, options: Partial<AllChannelEmitterOptions> & TOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Initiates connection to receiver
|
|
22
|
+
*
|
|
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
|
+
*
|
|
27
|
+
* @returns Success connect message
|
|
28
|
+
*/
|
|
29
|
+
connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
|
|
30
|
+
/** Destroys current connection to receiver if any */
|
|
31
|
+
disconnect(): void;
|
|
32
|
+
/** Handles public messages */
|
|
33
|
+
private _onPublicMessage;
|
|
34
|
+
protected postFormattedRequest<TRequest extends UnknownRequestMessage, TResponse extends UnknownResponseMessage>(type: TRequest["type"], data?: TRequest["data"], options?: PostRequestOptions): Promise<ExtractSuccessResponseMessage<TResponse>>;
|
|
38
35
|
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { AllChannelEmitterOptions, ChannelEmitter };
|
|
38
|
+
//# sourceMappingURL=ChannelEmitter.d.ts.map
|