@prismicio/simulator 0.2.0 → 0.2.1-canary.d9ffa62
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/src/SimulatorAPI.ts
CHANGED
|
@@ -1,50 +1,37 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
APITransactions,
|
|
3
|
-
ClientTransactions} from "./types";
|
|
4
|
-
import {
|
|
5
|
-
APIRequestType,
|
|
6
|
-
ClientRequestType
|
|
7
|
-
} from "./types"
|
|
8
|
-
|
|
9
1
|
import type {
|
|
10
2
|
AllChannelReceiverOptions,
|
|
11
3
|
TransactionMethod,
|
|
12
4
|
TransactionsHandlers,
|
|
13
|
-
TransactionsMethods
|
|
14
|
-
import {
|
|
15
|
-
ChannelReceiver
|
|
5
|
+
TransactionsMethods,
|
|
16
6
|
} from "./channel"
|
|
7
|
+
import { ChannelReceiver } from "./channel"
|
|
8
|
+
import type { APITransactions, ClientTransactions } from "./types"
|
|
9
|
+
import { APIRequestType, ClientRequestType } from "./types"
|
|
17
10
|
|
|
18
11
|
export type SimulatorAPIOptions = {
|
|
19
12
|
activeSliceAPI: boolean
|
|
20
13
|
sliceZoneSizeAPI: boolean
|
|
21
14
|
}
|
|
22
15
|
|
|
23
|
-
export const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> &
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
16
|
+
export const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> & SimulatorAPIOptions =
|
|
17
|
+
{
|
|
18
|
+
requestIDPrefix: "api-",
|
|
19
|
+
activeSliceAPI: false,
|
|
20
|
+
sliceZoneSizeAPI: false,
|
|
21
|
+
}
|
|
29
22
|
|
|
30
23
|
export class SimulatorAPI
|
|
31
24
|
extends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>
|
|
32
25
|
implements TransactionsMethods<APITransactions>
|
|
33
26
|
{
|
|
34
27
|
constructor(
|
|
35
|
-
requestHandlers: Omit<
|
|
36
|
-
TransactionsHandlers<ClientTransactions>,
|
|
37
|
-
ClientRequestType.Ping
|
|
38
|
-
> &
|
|
39
|
-
Partial<
|
|
40
|
-
Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>
|
|
41
|
-
>,
|
|
28
|
+
requestHandlers: Omit<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping> &
|
|
29
|
+
Partial<Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>>,
|
|
42
30
|
options?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,
|
|
43
31
|
) {
|
|
44
32
|
// True if `options.debug` is true or `debug=true` is among query parameters
|
|
45
33
|
const debug =
|
|
46
|
-
options?.debug ||
|
|
47
|
-
/[?&]debug=true/i.test(decodeURIComponent(window.location.search))
|
|
34
|
+
options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))
|
|
48
35
|
|
|
49
36
|
super(
|
|
50
37
|
{
|
|
@@ -78,9 +65,6 @@ export class SimulatorAPI
|
|
|
78
65
|
[APIRequestType.SetSliceZoneSize]: TransactionMethod<
|
|
79
66
|
APITransactions[APIRequestType.SetSliceZoneSize]
|
|
80
67
|
> = async (data) => {
|
|
81
|
-
return await this.postFormattedRequest(
|
|
82
|
-
APIRequestType.SetSliceZoneSize,
|
|
83
|
-
data,
|
|
84
|
-
)
|
|
68
|
+
return await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data)
|
|
85
69
|
}
|
|
86
70
|
}
|
package/src/SimulatorClient.ts
CHANGED
|
@@ -1,32 +1,20 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
APITransactions,
|
|
3
|
-
ClientTransactions} from "./types";
|
|
4
|
-
import {
|
|
5
|
-
APIRequestType,
|
|
6
|
-
ClientRequestType
|
|
7
|
-
} from "./types"
|
|
8
|
-
|
|
9
|
-
import type { SimulatorAPIOptions } from "./SimulatorAPI"
|
|
10
1
|
import type {
|
|
11
2
|
AllChannelEmitterOptions,
|
|
12
3
|
TransactionMethod,
|
|
13
4
|
TransactionsHandlers,
|
|
14
|
-
TransactionsMethods
|
|
15
|
-
import {
|
|
16
|
-
ChannelEmitter
|
|
5
|
+
TransactionsMethods,
|
|
17
6
|
} from "./channel"
|
|
7
|
+
import { ChannelEmitter } from "./channel"
|
|
8
|
+
import type { SimulatorAPIOptions } from "./SimulatorAPI"
|
|
9
|
+
import type { APITransactions, ClientTransactions } from "./types"
|
|
10
|
+
import { APIRequestType, ClientRequestType } from "./types"
|
|
18
11
|
|
|
19
|
-
export const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
12
|
+
export const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> = {
|
|
13
|
+
requestIDPrefix: "client-",
|
|
14
|
+
}
|
|
23
15
|
|
|
24
16
|
export class SimulatorClient
|
|
25
|
-
extends ChannelEmitter<
|
|
26
|
-
APITransactions,
|
|
27
|
-
Partial<AllChannelEmitterOptions>,
|
|
28
|
-
SimulatorAPIOptions
|
|
29
|
-
>
|
|
17
|
+
extends ChannelEmitter<APITransactions, Partial<AllChannelEmitterOptions>, SimulatorAPIOptions>
|
|
30
18
|
implements TransactionsMethods<ClientTransactions>
|
|
31
19
|
{
|
|
32
20
|
constructor(
|
|
@@ -36,8 +24,7 @@ export class SimulatorClient
|
|
|
36
24
|
) {
|
|
37
25
|
// True if `options.debug` is true or `debug=true` is among query parameters
|
|
38
26
|
const debug =
|
|
39
|
-
options?.debug ||
|
|
40
|
-
/[?&]debug=true/i.test(decodeURIComponent(window.location.search))
|
|
27
|
+
options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))
|
|
41
28
|
|
|
42
29
|
super(
|
|
43
30
|
target,
|
|
@@ -66,11 +53,10 @@ export class SimulatorClient
|
|
|
66
53
|
}
|
|
67
54
|
}
|
|
68
55
|
|
|
69
|
-
[ClientRequestType.Ping]: TransactionMethod<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
56
|
+
[ClientRequestType.Ping]: TransactionMethod<ClientTransactions[ClientRequestType.Ping]> =
|
|
57
|
+
async () => {
|
|
58
|
+
return await this.postFormattedRequest(ClientRequestType.Ping)
|
|
59
|
+
};
|
|
74
60
|
|
|
75
61
|
[ClientRequestType.SetSliceZone]: TransactionMethod<
|
|
76
62
|
ClientTransactions[ClientRequestType.SetSliceZone]
|
|
@@ -81,9 +67,6 @@ export class SimulatorClient
|
|
|
81
67
|
[ClientRequestType.ScrollToSlice]: TransactionMethod<
|
|
82
68
|
ClientTransactions[ClientRequestType.ScrollToSlice]
|
|
83
69
|
> = async (data) => {
|
|
84
|
-
return await this.postFormattedRequest(
|
|
85
|
-
ClientRequestType.ScrollToSlice,
|
|
86
|
-
data,
|
|
87
|
-
)
|
|
70
|
+
return await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data)
|
|
88
71
|
}
|
|
89
72
|
}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import type { ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork"
|
|
2
|
+
import { ChannelNetwork } from "./ChannelNetwork"
|
|
3
|
+
import type { AllChannelReceiverOptions } from "./ChannelReceiver"
|
|
4
|
+
import { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from "./errors"
|
|
5
|
+
import {
|
|
6
|
+
createErrorResponseMessage,
|
|
7
|
+
createSuccessResponseMessage,
|
|
8
|
+
isRequestMessage,
|
|
9
|
+
validateMessage,
|
|
10
|
+
} from "./messages"
|
|
1
11
|
import type {
|
|
2
12
|
ExtractSuccessResponseMessage,
|
|
3
13
|
InternalEmitterTransactions,
|
|
@@ -5,56 +15,27 @@ import type {
|
|
|
5
15
|
TransactionsHandlers,
|
|
6
16
|
UnknownRequestMessage,
|
|
7
17
|
UnknownResponseMessage,
|
|
8
|
-
UnknownTransaction
|
|
9
|
-
import {
|
|
10
|
-
InternalEmitterRequestType,
|
|
11
|
-
InternalReceiverRequestType
|
|
18
|
+
UnknownTransaction,
|
|
12
19
|
} from "./types"
|
|
13
|
-
|
|
14
|
-
import {
|
|
15
|
-
ChannelNotSetError,
|
|
16
|
-
ConnectionTimeoutError,
|
|
17
|
-
NotReadyError,
|
|
18
|
-
} from "./errors"
|
|
19
|
-
|
|
20
|
-
import type {
|
|
21
|
-
ChannelNetworkOptions,
|
|
22
|
-
PostRequestOptions} from "./ChannelNetwork";
|
|
23
|
-
import {
|
|
24
|
-
ChannelNetwork
|
|
25
|
-
} from "./ChannelNetwork"
|
|
26
|
-
import type { AllChannelReceiverOptions } from "./ChannelReceiver"
|
|
27
|
-
import {
|
|
28
|
-
createErrorResponseMessage,
|
|
29
|
-
createSuccessResponseMessage,
|
|
30
|
-
isRequestMessage,
|
|
31
|
-
validateMessage,
|
|
32
|
-
} from "./messages"
|
|
20
|
+
import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
33
21
|
|
|
34
22
|
export type ChannelEmitterOptions = {
|
|
35
23
|
connectTimeout: number
|
|
36
24
|
}
|
|
37
25
|
|
|
38
|
-
export const channelEmitterDefaultOptions: ChannelEmitterOptions &
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
26
|
+
export const channelEmitterDefaultOptions: ChannelEmitterOptions & Partial<ChannelNetworkOptions> =
|
|
27
|
+
{
|
|
28
|
+
connectTimeout: 20000,
|
|
29
|
+
requestIDPrefix: "emitter-",
|
|
30
|
+
}
|
|
43
31
|
|
|
44
|
-
export type AllChannelEmitterOptions = ChannelEmitterOptions &
|
|
45
|
-
ChannelNetworkOptions
|
|
32
|
+
export type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions
|
|
46
33
|
|
|
47
34
|
export abstract class ChannelEmitter<
|
|
48
|
-
TReceiverTransactions extends Record<string, UnknownTransaction> = Record<
|
|
49
|
-
string,
|
|
50
|
-
never
|
|
51
|
-
>,
|
|
35
|
+
TReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
52
36
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
53
37
|
TReceiverOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
54
|
-
> extends ChannelNetwork<
|
|
55
|
-
TReceiverTransactions,
|
|
56
|
-
ChannelEmitterOptions & TOptions
|
|
57
|
-
> {
|
|
38
|
+
> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {
|
|
58
39
|
private _target: HTMLIFrameElement
|
|
59
40
|
private _channel: MessageChannel | null = null
|
|
60
41
|
protected get channel(): MessageChannel {
|
|
@@ -99,9 +80,7 @@ export abstract class ChannelEmitter<
|
|
|
99
80
|
* Initiates connection to receiver
|
|
100
81
|
*
|
|
101
82
|
* @param receiverOptions - Options to configure the receiver with
|
|
102
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
103
|
-
* origin
|
|
104
|
-
*
|
|
83
|
+
* @param newOrigin - Indicates to the emitter that we're connecting to a new origin
|
|
105
84
|
* @returns Success connect message
|
|
106
85
|
*/
|
|
107
86
|
connect(
|
|
@@ -157,9 +136,7 @@ export abstract class ChannelEmitter<
|
|
|
157
136
|
>(request, (request) => {
|
|
158
137
|
// Target content window is checked in previous statement
|
|
159
138
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
160
|
-
this._target.contentWindow!.postMessage(request, "*", [
|
|
161
|
-
this.channel.port2,
|
|
162
|
-
])
|
|
139
|
+
this._target.contentWindow!.postMessage(request, "*", [this.channel.port2])
|
|
163
140
|
})
|
|
164
141
|
|
|
165
142
|
// Finish by aknowledging ready
|
|
@@ -232,10 +209,7 @@ export abstract class ChannelEmitter<
|
|
|
232
209
|
this.postResponse(
|
|
233
210
|
createErrorResponseMessage(message.requestID, undefined),
|
|
234
211
|
(response) => {
|
|
235
|
-
;(event.source as WindowProxy).postMessage(
|
|
236
|
-
response,
|
|
237
|
-
event.origin,
|
|
238
|
-
)
|
|
212
|
+
;(event.source as WindowProxy).postMessage(response, event.origin)
|
|
239
213
|
},
|
|
240
214
|
)
|
|
241
215
|
break
|
|
@@ -261,15 +235,9 @@ export abstract class ChannelEmitter<
|
|
|
261
235
|
options: PostRequestOptions = {},
|
|
262
236
|
): Promise<ExtractSuccessResponseMessage<TResponse>> {
|
|
263
237
|
if (!this._connected) {
|
|
264
|
-
throw new NotReadyError(
|
|
265
|
-
"Emitter is not connected, use `ChannelEmitter.connect()` first",
|
|
266
|
-
)
|
|
238
|
+
throw new NotReadyError("Emitter is not connected, use `ChannelEmitter.connect()` first")
|
|
267
239
|
}
|
|
268
240
|
|
|
269
|
-
return this.postRequest(
|
|
270
|
-
this.createRequestMessage(type, data),
|
|
271
|
-
undefined,
|
|
272
|
-
options,
|
|
273
|
-
)
|
|
241
|
+
return this.postRequest(this.createRequestMessage(type, data), undefined, options)
|
|
274
242
|
}
|
|
275
243
|
}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ExtractErrorResponseMessage,
|
|
3
|
-
ExtractSuccessResponseMessage,
|
|
4
|
-
RequestMessage,
|
|
5
|
-
TransactionsHandlers,
|
|
6
|
-
UnknownRequestMessage,
|
|
7
|
-
UnknownResponseMessage,
|
|
8
|
-
UnknownTransaction,
|
|
9
|
-
} from "./types"
|
|
10
|
-
|
|
11
1
|
import {
|
|
12
2
|
PortNotSetError,
|
|
13
3
|
RequestTimeoutError,
|
|
14
4
|
ResponseError,
|
|
15
5
|
TooManyConcurrentRequestsError,
|
|
16
6
|
} from "./errors"
|
|
17
|
-
|
|
18
7
|
import {
|
|
19
8
|
createErrorResponseMessage,
|
|
20
9
|
createRequestMessage,
|
|
@@ -23,6 +12,15 @@ import {
|
|
|
23
12
|
isSuccessResponseMessage,
|
|
24
13
|
validateMessage,
|
|
25
14
|
} from "./messages"
|
|
15
|
+
import type {
|
|
16
|
+
ExtractErrorResponseMessage,
|
|
17
|
+
ExtractSuccessResponseMessage,
|
|
18
|
+
RequestMessage,
|
|
19
|
+
TransactionsHandlers,
|
|
20
|
+
UnknownRequestMessage,
|
|
21
|
+
UnknownResponseMessage,
|
|
22
|
+
UnknownTransaction,
|
|
23
|
+
} from "./types"
|
|
26
24
|
|
|
27
25
|
export type PostRequestOptions = {
|
|
28
26
|
timeout?: number
|
|
@@ -43,10 +41,7 @@ export const channelNetworkDefaultOptions: ChannelNetworkOptions = {
|
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
export abstract class ChannelNetwork<
|
|
46
|
-
TPartnerTransactions extends Record<string, UnknownTransaction> = Record<
|
|
47
|
-
string,
|
|
48
|
-
never
|
|
49
|
-
>,
|
|
44
|
+
TPartnerTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
50
45
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
51
46
|
> {
|
|
52
47
|
public requestHandlers: TransactionsHandlers<TPartnerTransactions>
|
|
@@ -101,41 +96,27 @@ export abstract class ChannelNetwork<
|
|
|
101
96
|
|
|
102
97
|
if (isRequestMessage(message)) {
|
|
103
98
|
if (!this.requestHandlers[message.type]) {
|
|
104
|
-
this.postResponse(
|
|
105
|
-
createErrorResponseMessage(message.requestID, undefined, 501),
|
|
106
|
-
)
|
|
99
|
+
this.postResponse(createErrorResponseMessage(message.requestID, undefined, 501))
|
|
107
100
|
} else {
|
|
108
101
|
try {
|
|
109
102
|
// TODO: Figure out why type cannot be inferred on its own anymore
|
|
110
103
|
const response = await this.requestHandlers[message.type](message, {
|
|
111
|
-
success: createSuccessResponseMessage.bind(
|
|
112
|
-
this,
|
|
113
|
-
message.requestID,
|
|
114
|
-
) as Parameters<
|
|
104
|
+
success: createSuccessResponseMessage.bind(this, message.requestID) as Parameters<
|
|
115
105
|
(typeof this.requestHandlers)[string]
|
|
116
106
|
>[1]["success"],
|
|
117
|
-
error: createErrorResponseMessage.bind(
|
|
118
|
-
this,
|
|
119
|
-
message.requestID,
|
|
120
|
-
) as Parameters<
|
|
107
|
+
error: createErrorResponseMessage.bind(this, message.requestID) as Parameters<
|
|
121
108
|
(typeof this.requestHandlers)[string]
|
|
122
109
|
>[1]["error"],
|
|
123
110
|
})
|
|
124
111
|
|
|
125
112
|
this.postResponse(response)
|
|
126
113
|
} catch (error) {
|
|
127
|
-
this.postResponse(
|
|
128
|
-
createErrorResponseMessage(message.requestID, error, 500),
|
|
129
|
-
)
|
|
114
|
+
this.postResponse(createErrorResponseMessage(message.requestID, error, 500))
|
|
130
115
|
}
|
|
131
116
|
}
|
|
132
117
|
} else {
|
|
133
118
|
if (!this._pendingRequests.has(message.requestID)) {
|
|
134
|
-
console.error(
|
|
135
|
-
`Unknown request ID received in response: ${JSON.stringify(
|
|
136
|
-
message,
|
|
137
|
-
)}`,
|
|
138
|
-
)
|
|
119
|
+
console.error(`Unknown request ID received in response: ${JSON.stringify(message)}`)
|
|
139
120
|
} else {
|
|
140
121
|
// Pending requests are checked in previous statement
|
|
141
122
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -170,37 +151,31 @@ export abstract class ChannelNetwork<
|
|
|
170
151
|
throw new TooManyConcurrentRequestsError(request)
|
|
171
152
|
}
|
|
172
153
|
|
|
173
|
-
return new Promise<ExtractSuccessResponseMessage<TResponse>>(
|
|
174
|
-
(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
postMessage(request)
|
|
196
|
-
},
|
|
197
|
-
)
|
|
154
|
+
return new Promise<ExtractSuccessResponseMessage<TResponse>>((resolve, reject) => {
|
|
155
|
+
const requestTimeout = setTimeout(() => {
|
|
156
|
+
if (this._pendingRequests.has(request.requestID)) {
|
|
157
|
+
this._pendingRequests.delete(request.requestID)
|
|
158
|
+
}
|
|
159
|
+
reject(new RequestTimeoutError(request))
|
|
160
|
+
}, options.timeout || this.options.defaultTimeout)
|
|
161
|
+
|
|
162
|
+
this._pendingRequests.set(request.requestID, (response: TResponse): void => {
|
|
163
|
+
clearTimeout(requestTimeout)
|
|
164
|
+
|
|
165
|
+
if (isSuccessResponseMessage(response)) {
|
|
166
|
+
resolve(response as ExtractSuccessResponseMessage<TResponse>)
|
|
167
|
+
} else {
|
|
168
|
+
reject(new ResponseError(response as ExtractErrorResponseMessage<TResponse>))
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
postMessage(request)
|
|
173
|
+
})
|
|
198
174
|
}
|
|
199
175
|
|
|
200
176
|
protected postResponse<TResponse extends UnknownResponseMessage>(
|
|
201
177
|
response: TResponse,
|
|
202
|
-
postMessage = (response: TResponse): void =>
|
|
203
|
-
this.port.postMessage(response),
|
|
178
|
+
postMessage = (response: TResponse): void => this.port.postMessage(response),
|
|
204
179
|
): TResponse {
|
|
205
180
|
if (this.options.debug) {
|
|
206
181
|
// eslint-disable-next-line no-console
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork"
|
|
2
|
+
import { ChannelNetwork } from "./ChannelNetwork"
|
|
3
|
+
import { NotReadyError } from "./errors"
|
|
4
|
+
import {
|
|
5
|
+
createErrorResponseMessage,
|
|
6
|
+
createSuccessResponseMessage,
|
|
7
|
+
isRequestMessage,
|
|
8
|
+
validateMessage,
|
|
9
|
+
} from "./messages"
|
|
1
10
|
import type {
|
|
2
11
|
ExtractSuccessResponseMessage,
|
|
3
12
|
InternalEmitterTransactions,
|
|
@@ -7,26 +16,9 @@ import type {
|
|
|
7
16
|
TransactionsHandlers,
|
|
8
17
|
UnknownRequestMessage,
|
|
9
18
|
UnknownResponseMessage,
|
|
10
|
-
UnknownTransaction
|
|
11
|
-
import {
|
|
12
|
-
InternalEmitterRequestType,
|
|
13
|
-
InternalReceiverRequestType
|
|
19
|
+
UnknownTransaction,
|
|
14
20
|
} from "./types"
|
|
15
|
-
|
|
16
|
-
import { NotReadyError } from "./errors"
|
|
17
|
-
|
|
18
|
-
import type {
|
|
19
|
-
ChannelNetworkOptions,
|
|
20
|
-
PostRequestOptions} from "./ChannelNetwork";
|
|
21
|
-
import {
|
|
22
|
-
ChannelNetwork
|
|
23
|
-
} from "./ChannelNetwork"
|
|
24
|
-
import {
|
|
25
|
-
createErrorResponseMessage,
|
|
26
|
-
createSuccessResponseMessage,
|
|
27
|
-
isRequestMessage,
|
|
28
|
-
validateMessage,
|
|
29
|
-
} from "./messages"
|
|
21
|
+
import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
30
22
|
|
|
31
23
|
export type ChannelReceiverOptions = {
|
|
32
24
|
readyTimeout: number
|
|
@@ -38,19 +30,12 @@ export const channelReceiverDefaultOptions: ChannelReceiverOptions &
|
|
|
38
30
|
requestIDPrefix: "receiver-",
|
|
39
31
|
}
|
|
40
32
|
|
|
41
|
-
export type AllChannelReceiverOptions = ChannelReceiverOptions &
|
|
42
|
-
ChannelNetworkOptions
|
|
33
|
+
export type AllChannelReceiverOptions = ChannelReceiverOptions & ChannelNetworkOptions
|
|
43
34
|
|
|
44
35
|
export abstract class ChannelReceiver<
|
|
45
|
-
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<
|
|
46
|
-
string,
|
|
47
|
-
never
|
|
48
|
-
>,
|
|
36
|
+
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
49
37
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
50
|
-
> extends ChannelNetwork<
|
|
51
|
-
TEmitterTransactions,
|
|
52
|
-
ChannelReceiverOptions & TOptions
|
|
53
|
-
> {
|
|
38
|
+
> extends ChannelNetwork<TEmitterTransactions, ChannelReceiverOptions & TOptions> {
|
|
54
39
|
private _ready = false
|
|
55
40
|
|
|
56
41
|
constructor(
|
|
@@ -72,10 +57,7 @@ export abstract class ChannelReceiver<
|
|
|
72
57
|
|
|
73
58
|
this._ready = false
|
|
74
59
|
|
|
75
|
-
const request = this.createRequestMessage(
|
|
76
|
-
InternalReceiverRequestType.Ready,
|
|
77
|
-
undefined,
|
|
78
|
-
)
|
|
60
|
+
const request = this.createRequestMessage(InternalReceiverRequestType.Ready, undefined)
|
|
79
61
|
|
|
80
62
|
const response = await this.postRequest<
|
|
81
63
|
RequestMessage<InternalReceiverRequestType.Ready>,
|
|
@@ -97,6 +79,22 @@ export abstract class ChannelReceiver<
|
|
|
97
79
|
|
|
98
80
|
/** Handles public messages */
|
|
99
81
|
private _onPublicMessage(event: MessageEvent<unknown>): void {
|
|
82
|
+
if (process.env.NODE_ENV !== "development") {
|
|
83
|
+
if (
|
|
84
|
+
!event.origin.startsWith("https://") ||
|
|
85
|
+
!(
|
|
86
|
+
event.origin.endsWith(".prismic.io") ||
|
|
87
|
+
event.origin.endsWith(".wroom.io") ||
|
|
88
|
+
event.origin.endsWith(".marketing-tools-wroom.com") ||
|
|
89
|
+
event.origin.endsWith(".dev-tools-wroom.com") ||
|
|
90
|
+
event.origin.endsWith(".platform-wroom.com")
|
|
91
|
+
)
|
|
92
|
+
) {
|
|
93
|
+
// Ignore messages from non-allowed origins in non-development environment
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
100
98
|
try {
|
|
101
99
|
const message = validateMessage(event.data)
|
|
102
100
|
|
|
@@ -112,8 +110,7 @@ export abstract class ChannelReceiver<
|
|
|
112
110
|
this.port = event.ports[0]
|
|
113
111
|
|
|
114
112
|
// Update options
|
|
115
|
-
const { data } =
|
|
116
|
-
message as InternalEmitterTransactions["connect"]["request"]
|
|
113
|
+
const { data } = message as InternalEmitterTransactions["connect"]["request"]
|
|
117
114
|
this.options = {
|
|
118
115
|
...this.options,
|
|
119
116
|
...data,
|
|
@@ -123,10 +120,7 @@ export abstract class ChannelReceiver<
|
|
|
123
120
|
readyTimeout: this.options.readyTimeout,
|
|
124
121
|
}
|
|
125
122
|
|
|
126
|
-
const response = createSuccessResponseMessage(
|
|
127
|
-
message.requestID,
|
|
128
|
-
undefined,
|
|
129
|
-
)
|
|
123
|
+
const response = createSuccessResponseMessage(message.requestID, undefined)
|
|
130
124
|
|
|
131
125
|
this.postResponse(response)
|
|
132
126
|
break
|
|
@@ -135,10 +129,7 @@ export abstract class ChannelReceiver<
|
|
|
135
129
|
this.postResponse(
|
|
136
130
|
createErrorResponseMessage(message.requestID, undefined),
|
|
137
131
|
(response) => {
|
|
138
|
-
;(event.source as WindowProxy).postMessage(
|
|
139
|
-
response,
|
|
140
|
-
event.origin,
|
|
141
|
-
)
|
|
132
|
+
;(event.source as WindowProxy).postMessage(response, event.origin)
|
|
142
133
|
},
|
|
143
134
|
)
|
|
144
135
|
break
|
|
@@ -168,15 +159,9 @@ export abstract class ChannelReceiver<
|
|
|
168
159
|
options: PostRequestOptions = {},
|
|
169
160
|
): Promise<ExtractSuccessResponseMessage<TResponse>> {
|
|
170
161
|
if (!this._ready) {
|
|
171
|
-
throw new NotReadyError(
|
|
172
|
-
"Receiver is not ready, use `ChannelReceiver.ready()` first",
|
|
173
|
-
)
|
|
162
|
+
throw new NotReadyError("Receiver is not ready, use `ChannelReceiver.ready()` first")
|
|
174
163
|
}
|
|
175
164
|
|
|
176
|
-
return this.postRequest(
|
|
177
|
-
this.createRequestMessage(type, data),
|
|
178
|
-
undefined,
|
|
179
|
-
options,
|
|
180
|
-
)
|
|
165
|
+
return this.postRequest(this.createRequestMessage(type, data), undefined, options)
|
|
181
166
|
}
|
|
182
167
|
}
|
package/src/channel/errors.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { UnknownErrorResponseMessage } from "."
|
|
2
|
-
|
|
3
2
|
import type { UnknownRequestMessage } from "./types"
|
|
4
3
|
|
|
5
|
-
export class ResponseError<
|
|
6
|
-
TErrorResponse extends UnknownErrorResponseMessage,
|
|
7
|
-
> extends Error {
|
|
4
|
+
export class ResponseError<TErrorResponse extends UnknownErrorResponseMessage> extends Error {
|
|
8
5
|
public response: TErrorResponse
|
|
9
6
|
|
|
10
7
|
constructor(errorResponse: TErrorResponse) {
|
|
@@ -28,9 +25,7 @@ export class TooManyConcurrentRequestsError extends Error {
|
|
|
28
25
|
this.request = request
|
|
29
26
|
}
|
|
30
27
|
}
|
|
31
|
-
export class RequestTimeoutError<
|
|
32
|
-
TRequest extends UnknownRequestMessage,
|
|
33
|
-
> extends Error {
|
|
28
|
+
export class RequestTimeoutError<TRequest extends UnknownRequestMessage> extends Error {
|
|
34
29
|
public request: UnknownRequestMessage
|
|
35
30
|
|
|
36
31
|
constructor(request: TRequest) {
|
package/src/channel/index.ts
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
export { ChannelNetwork, channelNetworkDefaultOptions } from "./ChannelNetwork"
|
|
2
|
-
export type {
|
|
3
|
-
PostRequestOptions,
|
|
4
|
-
ChannelNetworkOptions,
|
|
5
|
-
} from "./ChannelNetwork"
|
|
2
|
+
export type { PostRequestOptions, ChannelNetworkOptions } from "./ChannelNetwork"
|
|
6
3
|
|
|
7
4
|
export { ChannelEmitter, channelEmitterDefaultOptions } from "./ChannelEmitter"
|
|
8
|
-
export type {
|
|
9
|
-
ChannelEmitterOptions,
|
|
10
|
-
AllChannelEmitterOptions,
|
|
11
|
-
} from "./ChannelEmitter"
|
|
5
|
+
export type { ChannelEmitterOptions, AllChannelEmitterOptions } from "./ChannelEmitter"
|
|
12
6
|
|
|
13
|
-
export {
|
|
14
|
-
|
|
15
|
-
channelReceiverDefaultOptions,
|
|
16
|
-
} from "./ChannelReceiver"
|
|
17
|
-
export type {
|
|
18
|
-
ChannelReceiverOptions,
|
|
19
|
-
AllChannelReceiverOptions,
|
|
20
|
-
} from "./ChannelReceiver"
|
|
7
|
+
export { ChannelReceiver, channelReceiverDefaultOptions } from "./ChannelReceiver"
|
|
8
|
+
export type { ChannelReceiverOptions, AllChannelReceiverOptions } from "./ChannelReceiver"
|
|
21
9
|
|
|
22
10
|
export {
|
|
23
11
|
createRequestMessage,
|
|
@@ -40,10 +28,7 @@ export {
|
|
|
40
28
|
ChannelNotSetError,
|
|
41
29
|
} from "./errors"
|
|
42
30
|
|
|
43
|
-
export {
|
|
44
|
-
InternalEmitterRequestType,
|
|
45
|
-
InternalReceiverRequestType,
|
|
46
|
-
} from "./types"
|
|
31
|
+
export { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
47
32
|
export type {
|
|
48
33
|
// Messages
|
|
49
34
|
RequestMessage,
|
package/src/channel/messages.ts
CHANGED
|
@@ -21,10 +21,7 @@ const statuses = {
|
|
|
21
21
|
|
|
22
22
|
let requestID = 0
|
|
23
23
|
|
|
24
|
-
export const createRequestMessage = <
|
|
25
|
-
TType extends string = string,
|
|
26
|
-
TData = undefined,
|
|
27
|
-
>(
|
|
24
|
+
export const createRequestMessage = <TType extends string = string, TData = undefined>(
|
|
28
25
|
type: TType,
|
|
29
26
|
data: TData,
|
|
30
27
|
prefix = "",
|
|
@@ -85,9 +82,7 @@ export const validateMessage = (message: unknown): UnknownMessage => {
|
|
|
85
82
|
)
|
|
86
83
|
) {
|
|
87
84
|
throw new TypeError(`Invalid message received: ${JSON.stringify(message)}`)
|
|
88
|
-
} else if (
|
|
89
|
-
typeof (message as Record<string, unknown>).requestID !== "string"
|
|
90
|
-
) {
|
|
85
|
+
} else if (typeof (message as Record<string, unknown>).requestID !== "string") {
|
|
91
86
|
throw new TypeError(
|
|
92
87
|
`Invalid message received, expected \`message.requestID\` to be of type \`string\`, got \`${typeof (
|
|
93
88
|
message as Record<string, unknown>
|
|
@@ -98,15 +93,11 @@ export const validateMessage = (message: unknown): UnknownMessage => {
|
|
|
98
93
|
return message as UnknownMessage
|
|
99
94
|
}
|
|
100
95
|
|
|
101
|
-
export const isRequestMessage = (
|
|
102
|
-
message: UnknownMessage,
|
|
103
|
-
): message is UnknownRequestMessage => {
|
|
96
|
+
export const isRequestMessage = (message: UnknownMessage): message is UnknownRequestMessage => {
|
|
104
97
|
return "type" in message
|
|
105
98
|
}
|
|
106
99
|
|
|
107
|
-
export const isResponseMessage = (
|
|
108
|
-
message: UnknownMessage,
|
|
109
|
-
): message is UnknownResponseMessage => {
|
|
100
|
+
export const isResponseMessage = (message: UnknownMessage): message is UnknownResponseMessage => {
|
|
110
101
|
return !("type" in message)
|
|
111
102
|
}
|
|
112
103
|
|