@prismicio/simulator 0.1.4 → 0.2.0-pr.22.b846d30
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 +36 -46
- package/dist/SimulatorAPI.cjs.map +1 -1
- package/dist/SimulatorAPI.d.cts +18 -0
- package/dist/SimulatorAPI.d.cts.map +1 -0
- package/dist/SimulatorAPI.d.ts +16 -10
- package/dist/SimulatorAPI.d.ts.map +1 -0
- package/dist/SimulatorAPI.js +35 -46
- package/dist/SimulatorAPI.js.map +1 -1
- package/dist/SimulatorClient.cjs +39 -51
- package/dist/SimulatorClient.cjs.map +1 -1
- package/dist/SimulatorClient.d.cts +16 -0
- package/dist/SimulatorClient.d.cts.map +1 -0
- package/dist/SimulatorClient.d.ts +15 -9
- package/dist/SimulatorClient.d.ts.map +1 -0
- package/dist/SimulatorClient.js +39 -52
- package/dist/SimulatorClient.js.map +1 -1
- package/dist/channel/ChannelEmitter.cjs +109 -143
- package/dist/channel/ChannelEmitter.cjs.map +1 -1
- package/dist/channel/ChannelEmitter.d.cts +36 -0
- package/dist/channel/ChannelEmitter.d.cts.map +1 -0
- package/dist/channel/ChannelEmitter.d.ts +34 -36
- package/dist/channel/ChannelEmitter.d.ts.map +1 -0
- package/dist/channel/ChannelEmitter.js +107 -141
- package/dist/channel/ChannelEmitter.js.map +1 -1
- package/dist/channel/ChannelNetwork.cjs +80 -109
- package/dist/channel/ChannelNetwork.cjs.map +1 -1
- package/dist/channel/ChannelNetwork.d.cts +28 -0
- package/dist/channel/ChannelNetwork.d.cts.map +1 -0
- package/dist/channel/ChannelNetwork.d.ts +25 -21
- package/dist/channel/ChannelNetwork.d.ts.map +1 -0
- package/dist/channel/ChannelNetwork.js +80 -109
- package/dist/channel/ChannelNetwork.js.map +1 -1
- package/dist/channel/ChannelReceiver.cjs +68 -92
- package/dist/channel/ChannelReceiver.cjs.map +1 -1
- package/dist/channel/ChannelReceiver.d.cts +20 -0
- package/dist/channel/ChannelReceiver.d.cts.map +1 -0
- package/dist/channel/ChannelReceiver.d.ts +18 -18
- package/dist/channel/ChannelReceiver.d.ts.map +1 -0
- package/dist/channel/ChannelReceiver.js +66 -90
- package/dist/channel/ChannelReceiver.js.map +1 -1
- package/dist/channel/errors.cjs +40 -46
- package/dist/channel/errors.cjs.map +1 -1
- package/dist/channel/errors.d.cts +28 -0
- package/dist/channel/errors.d.cts.map +1 -0
- package/dist/channel/errors.d.ts +22 -19
- package/dist/channel/errors.d.ts.map +1 -0
- package/dist/channel/errors.js +40 -52
- package/dist/channel/errors.js.map +1 -1
- package/dist/channel/messages.cjs +47 -43
- package/dist/channel/messages.cjs.map +1 -1
- package/dist/channel/messages.d.cts +11 -0
- package/dist/channel/messages.d.cts.map +1 -0
- package/dist/channel/messages.d.ts +11 -10
- package/dist/channel/messages.d.ts.map +1 -0
- package/dist/channel/messages.js +50 -53
- package/dist/channel/messages.js.map +1 -1
- package/dist/channel/types.cjs +14 -11
- package/dist/channel/types.cjs.map +1 -1
- package/dist/channel/types.d.cts +53 -0
- package/dist/channel/types.d.cts.map +1 -0
- package/dist/channel/types.d.ts +42 -50
- package/dist/channel/types.d.ts.map +1 -0
- 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.cts.map +1 -0
- package/dist/globalExtensions.d.ts +14 -11
- package/dist/globalExtensions.d.ts.map +1 -0
- package/dist/index.cjs +23 -32
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -8
- package/dist/index.js +3 -24
- package/dist/kit/SimulatorManager.cjs +103 -137
- package/dist/kit/SimulatorManager.cjs.map +1 -1
- package/dist/kit/SimulatorManager.d.cts +19 -0
- package/dist/kit/SimulatorManager.d.cts.map +1 -0
- package/dist/kit/SimulatorManager.d.ts +16 -12
- package/dist/kit/SimulatorManager.d.ts.map +1 -0
- package/dist/kit/SimulatorManager.js +101 -135
- package/dist/kit/SimulatorManager.js.map +1 -1
- package/dist/kit/State.cjs +81 -80
- package/dist/kit/State.cjs.map +1 -1
- package/dist/kit/State.d.cts +29 -0
- package/dist/kit/State.d.cts.map +1 -0
- package/dist/kit/State.d.ts +26 -22
- package/dist/kit/State.d.ts.map +1 -0
- package/dist/kit/State.js +80 -79
- package/dist/kit/State.js.map +1 -1
- package/dist/kit/domHelpers.cjs +24 -37
- package/dist/kit/domHelpers.cjs.map +1 -1
- package/dist/kit/domHelpers.d.cts +11 -0
- package/dist/kit/domHelpers.d.cts.map +1 -0
- package/dist/kit/domHelpers.d.ts +10 -8
- package/dist/kit/domHelpers.d.ts.map +1 -0
- package/dist/kit/domHelpers.js +25 -43
- package/dist/kit/domHelpers.js.map +1 -1
- package/dist/kit/eventHandlers.cjs +10 -9
- package/dist/kit/eventHandlers.cjs.map +1 -1
- package/dist/kit/eventHandlers.d.cts +8 -0
- package/dist/kit/eventHandlers.d.cts.map +1 -0
- package/dist/kit/eventHandlers.d.ts +7 -3
- package/dist/kit/eventHandlers.d.ts.map +1 -0
- package/dist/kit/eventHandlers.js +11 -11
- package/dist/kit/eventHandlers.js.map +1 -1
- package/dist/kit/getDefault.cjs +8 -7
- package/dist/kit/getDefault.cjs.map +1 -1
- package/dist/kit/getDefault.d.cts +10 -0
- package/dist/kit/getDefault.d.cts.map +1 -0
- package/dist/kit/getDefault.d.ts +10 -8
- package/dist/kit/getDefault.d.ts.map +1 -0
- package/dist/kit/getDefault.js +9 -10
- package/dist/kit/getDefault.js.map +1 -1
- package/dist/kit/messages.cjs +7 -24
- package/dist/kit/messages.cjs.map +1 -1
- package/dist/kit/messages.d.cts +5 -0
- package/dist/kit/messages.d.cts.map +1 -0
- package/dist/kit/messages.d.ts +5 -1
- package/dist/kit/messages.d.ts.map +1 -0
- package/dist/kit/messages.js +8 -25
- package/dist/kit/messages.js.map +1 -1
- package/dist/kit/types.cjs +11 -9
- package/dist/kit/types.cjs.map +1 -1
- package/dist/kit/types.d.cts +28 -0
- package/dist/kit/types.d.cts.map +1 -0
- package/dist/kit/types.d.ts +24 -19
- package/dist/kit/types.d.ts.map +1 -0
- package/dist/kit/types.js +11 -10
- package/dist/kit/types.js.map +1 -1
- package/dist/kit.cjs +20 -25
- package/dist/kit.d.cts +8 -0
- package/dist/kit.d.ts +8 -0
- package/dist/kit.js +5 -20
- package/dist/lib/EventEmitter.cjs +15 -25
- package/dist/lib/EventEmitter.cjs.map +1 -1
- package/dist/lib/EventEmitter.d.cts +12 -0
- package/dist/lib/EventEmitter.d.cts.map +1 -0
- package/dist/lib/EventEmitter.d.ts +11 -9
- package/dist/lib/EventEmitter.d.ts.map +1 -0
- package/dist/lib/EventEmitter.js +16 -26
- package/dist/lib/EventEmitter.js.map +1 -1
- package/dist/lib/throttle.cjs +20 -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 +17 -14
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +39 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +32 -27
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -16
- package/dist/types.js.map +1 -1
- package/package.json +44 -87
- package/src/SimulatorAPI.ts +26 -40
- package/src/SimulatorClient.ts +25 -43
- package/src/channel/ChannelEmitter.ts +75 -110
- package/src/channel/ChannelNetwork.ts +71 -98
- package/src/channel/ChannelReceiver.ts +45 -78
- package/src/channel/errors.ts +16 -21
- package/src/channel/index.ts +10 -25
- package/src/channel/messages.ts +43 -44
- package/src/channel/types.ts +51 -67
- package/src/globalExtensions.ts +6 -6
- package/src/index.ts +8 -16
- package/src/kit/SimulatorManager.ts +66 -78
- package/src/kit/State.ts +45 -49
- package/src/kit/domHelpers.ts +25 -27
- package/src/kit/eventHandlers.ts +8 -13
- package/src/kit/getDefault.ts +8 -8
- package/src/kit/index.ts +8 -12
- package/src/kit/messages.ts +5 -6
- package/src/kit/types.ts +13 -14
- package/src/lib/EventEmitter.ts +10 -16
- package/src/lib/__PRODUCTION__.ts +3 -4
- 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,20 +1,9 @@
|
|
|
1
|
-
import {
|
|
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
|
-
} from "./errors"
|
|
17
|
-
|
|
6
|
+
} from "./errors"
|
|
18
7
|
import {
|
|
19
8
|
createErrorResponseMessage,
|
|
20
9
|
createRequestMessage,
|
|
@@ -22,133 +11,125 @@ import {
|
|
|
22
11
|
isRequestMessage,
|
|
23
12
|
isSuccessResponseMessage,
|
|
24
13
|
validateMessage,
|
|
25
|
-
} from "./messages"
|
|
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
|
-
timeout?: number
|
|
29
|
-
}
|
|
26
|
+
timeout?: number
|
|
27
|
+
}
|
|
30
28
|
|
|
31
29
|
export type ChannelNetworkOptions = {
|
|
32
|
-
debug: boolean
|
|
33
|
-
maximumRequestConcurrency: number
|
|
34
|
-
defaultTimeout: number
|
|
35
|
-
requestIDPrefix: string
|
|
36
|
-
}
|
|
30
|
+
debug: boolean
|
|
31
|
+
maximumRequestConcurrency: number
|
|
32
|
+
defaultTimeout: number
|
|
33
|
+
requestIDPrefix: string
|
|
34
|
+
}
|
|
37
35
|
|
|
38
36
|
export const channelNetworkDefaultOptions: ChannelNetworkOptions = {
|
|
39
37
|
debug: false,
|
|
40
38
|
maximumRequestConcurrency: 20,
|
|
41
39
|
defaultTimeout: 5000,
|
|
42
40
|
requestIDPrefix: "channel-",
|
|
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
|
-
public requestHandlers: TransactionsHandlers<TPartnerTransactions
|
|
53
|
-
public options: ChannelNetworkOptions & TOptions
|
|
47
|
+
public requestHandlers: TransactionsHandlers<TPartnerTransactions>
|
|
48
|
+
public options: ChannelNetworkOptions & TOptions
|
|
54
49
|
|
|
55
|
-
private _port: MessagePort | null = null
|
|
50
|
+
private _port: MessagePort | null = null
|
|
56
51
|
protected get port(): MessagePort {
|
|
57
52
|
if (!this._port) {
|
|
58
|
-
throw new PortNotSetError()
|
|
53
|
+
throw new PortNotSetError()
|
|
59
54
|
}
|
|
60
55
|
|
|
61
|
-
return this._port
|
|
56
|
+
return this._port
|
|
62
57
|
}
|
|
63
58
|
protected set port(port: MessagePort | null) {
|
|
64
59
|
// Destroy old port
|
|
65
60
|
if (this._port) {
|
|
66
|
-
this._port.onmessage = null
|
|
61
|
+
this._port.onmessage = null
|
|
67
62
|
}
|
|
68
63
|
|
|
69
|
-
this._port = port
|
|
64
|
+
this._port = port
|
|
70
65
|
if (this._port) {
|
|
71
|
-
this._port.onmessage = this.onMessage.bind(this)
|
|
66
|
+
this._port.onmessage = this.onMessage.bind(this)
|
|
72
67
|
}
|
|
73
68
|
}
|
|
74
69
|
|
|
75
70
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
-
private _pendingRequests: Map<string, (response: any) => void> = new Map()
|
|
71
|
+
private _pendingRequests: Map<string, (response: any) => void> = new Map()
|
|
77
72
|
|
|
78
73
|
constructor(
|
|
79
74
|
requestHandlers: TransactionsHandlers<TPartnerTransactions>,
|
|
80
75
|
options: Partial<ChannelNetworkOptions> & TOptions,
|
|
81
76
|
) {
|
|
82
|
-
this.requestHandlers = requestHandlers
|
|
83
|
-
this.options = { ...channelNetworkDefaultOptions, ...options }
|
|
77
|
+
this.requestHandlers = requestHandlers
|
|
78
|
+
this.options = { ...channelNetworkDefaultOptions, ...options }
|
|
84
79
|
}
|
|
85
80
|
|
|
86
81
|
public createRequestMessage<TType extends string = string, TData = undefined>(
|
|
87
82
|
type: TType,
|
|
88
83
|
data: TData,
|
|
89
84
|
): RequestMessage<TType, TData> {
|
|
90
|
-
return createRequestMessage(type, data, this.options.requestIDPrefix)
|
|
85
|
+
return createRequestMessage(type, data, this.options.requestIDPrefix)
|
|
91
86
|
}
|
|
92
87
|
|
|
93
88
|
protected async onMessage(event: MessageEvent<unknown>): Promise<void> {
|
|
94
89
|
if (this.options.debug) {
|
|
95
90
|
// eslint-disable-next-line no-console
|
|
96
|
-
console.debug(event.data)
|
|
91
|
+
console.debug(event.data)
|
|
97
92
|
}
|
|
98
93
|
|
|
99
94
|
try {
|
|
100
|
-
const message = validateMessage(event.data)
|
|
95
|
+
const message = validateMessage(event.data)
|
|
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
|
-
this.postResponse(response)
|
|
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
|
|
142
|
-
this._pendingRequests.get(message.requestID)!(message)
|
|
143
|
-
this._pendingRequests.delete(message.requestID)
|
|
123
|
+
this._pendingRequests.get(message.requestID)!(message)
|
|
124
|
+
this._pendingRequests.delete(message.requestID)
|
|
144
125
|
}
|
|
145
126
|
}
|
|
146
127
|
} catch (error) {
|
|
147
128
|
if (error instanceof TypeError) {
|
|
148
|
-
console.warn(error.message)
|
|
129
|
+
console.warn(error.message)
|
|
149
130
|
} else {
|
|
150
131
|
// Should not be possible, but who knows :shrug:
|
|
151
|
-
throw error
|
|
132
|
+
throw error
|
|
152
133
|
}
|
|
153
134
|
}
|
|
154
135
|
}
|
|
@@ -163,54 +144,46 @@ export abstract class ChannelNetwork<
|
|
|
163
144
|
): Promise<ExtractSuccessResponseMessage<TResponse>> {
|
|
164
145
|
if (this.options.debug) {
|
|
165
146
|
// eslint-disable-next-line no-console
|
|
166
|
-
console.debug(request)
|
|
147
|
+
console.debug(request)
|
|
167
148
|
}
|
|
168
149
|
|
|
169
150
|
if (this._pendingRequests.size >= this.options.maximumRequestConcurrency) {
|
|
170
|
-
throw new TooManyConcurrentRequestsError(request)
|
|
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
|
-
);
|
|
196
|
-
|
|
197
|
-
postMessage(request);
|
|
198
|
-
},
|
|
199
|
-
);
|
|
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
|
+
})
|
|
200
174
|
}
|
|
201
175
|
|
|
202
176
|
protected postResponse<TResponse extends UnknownResponseMessage>(
|
|
203
177
|
response: TResponse,
|
|
204
|
-
postMessage = (response: TResponse): void =>
|
|
205
|
-
this.port.postMessage(response),
|
|
178
|
+
postMessage = (response: TResponse): void => this.port.postMessage(response),
|
|
206
179
|
): TResponse {
|
|
207
180
|
if (this.options.debug) {
|
|
208
181
|
// eslint-disable-next-line no-console
|
|
209
|
-
console.debug(response)
|
|
182
|
+
console.debug(response)
|
|
210
183
|
}
|
|
211
184
|
|
|
212
|
-
postMessage(response)
|
|
185
|
+
postMessage(response)
|
|
213
186
|
|
|
214
|
-
return response
|
|
187
|
+
return response
|
|
215
188
|
}
|
|
216
189
|
}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import type { ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork"
|
|
2
|
+
import { ChannelNetwork } from "./ChannelNetwork"
|
|
3
|
+
import { NotReadyError } from "./errors"
|
|
1
4
|
import {
|
|
5
|
+
createErrorResponseMessage,
|
|
6
|
+
createSuccessResponseMessage,
|
|
7
|
+
isRequestMessage,
|
|
8
|
+
validateMessage,
|
|
9
|
+
} from "./messages"
|
|
10
|
+
import type {
|
|
2
11
|
ExtractSuccessResponseMessage,
|
|
3
|
-
InternalEmitterRequestType,
|
|
4
12
|
InternalEmitterTransactions,
|
|
5
|
-
InternalReceiverRequestType,
|
|
6
13
|
RequestMessage,
|
|
7
14
|
ResponseMessage,
|
|
8
15
|
SuccessResponseMessage,
|
|
@@ -10,72 +17,47 @@ import {
|
|
|
10
17
|
UnknownRequestMessage,
|
|
11
18
|
UnknownResponseMessage,
|
|
12
19
|
UnknownTransaction,
|
|
13
|
-
} from "./types"
|
|
14
|
-
|
|
15
|
-
import { NotReadyError } from "./errors";
|
|
16
|
-
|
|
17
|
-
import {
|
|
18
|
-
ChannelNetwork,
|
|
19
|
-
ChannelNetworkOptions,
|
|
20
|
-
PostRequestOptions,
|
|
21
|
-
} from "./ChannelNetwork";
|
|
22
|
-
import {
|
|
23
|
-
createErrorResponseMessage,
|
|
24
|
-
createSuccessResponseMessage,
|
|
25
|
-
isRequestMessage,
|
|
26
|
-
validateMessage,
|
|
27
|
-
} from "./messages";
|
|
20
|
+
} from "./types"
|
|
21
|
+
import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
28
22
|
|
|
29
23
|
export type ChannelReceiverOptions = {
|
|
30
|
-
readyTimeout: number
|
|
31
|
-
}
|
|
24
|
+
readyTimeout: number
|
|
25
|
+
}
|
|
32
26
|
|
|
33
27
|
export const channelReceiverDefaultOptions: ChannelReceiverOptions &
|
|
34
28
|
Partial<ChannelNetworkOptions> = {
|
|
35
29
|
readyTimeout: 20000,
|
|
36
30
|
requestIDPrefix: "receiver-",
|
|
37
|
-
}
|
|
31
|
+
}
|
|
38
32
|
|
|
39
|
-
export type AllChannelReceiverOptions = ChannelReceiverOptions &
|
|
40
|
-
ChannelNetworkOptions;
|
|
33
|
+
export type AllChannelReceiverOptions = ChannelReceiverOptions & ChannelNetworkOptions
|
|
41
34
|
|
|
42
35
|
export abstract class ChannelReceiver<
|
|
43
|
-
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<
|
|
44
|
-
string,
|
|
45
|
-
never
|
|
46
|
-
>,
|
|
36
|
+
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
47
37
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
48
|
-
> extends ChannelNetwork<
|
|
49
|
-
|
|
50
|
-
ChannelReceiverOptions & TOptions
|
|
51
|
-
> {
|
|
52
|
-
private _ready = false;
|
|
38
|
+
> extends ChannelNetwork<TEmitterTransactions, ChannelReceiverOptions & TOptions> {
|
|
39
|
+
private _ready = false
|
|
53
40
|
|
|
54
41
|
constructor(
|
|
55
42
|
requestHandlers: TransactionsHandlers<TEmitterTransactions>,
|
|
56
43
|
options: Partial<AllChannelReceiverOptions> & TOptions,
|
|
57
44
|
) {
|
|
58
|
-
super(requestHandlers, { ...channelReceiverDefaultOptions, ...options })
|
|
45
|
+
super(requestHandlers, { ...channelReceiverDefaultOptions, ...options })
|
|
59
46
|
|
|
60
47
|
window.addEventListener("message", (event) => {
|
|
61
|
-
this._onPublicMessage(event)
|
|
62
|
-
})
|
|
48
|
+
this._onPublicMessage(event)
|
|
49
|
+
})
|
|
63
50
|
}
|
|
64
51
|
|
|
65
|
-
/**
|
|
66
|
-
* Tells the emitter that receiver is ready
|
|
67
|
-
*/
|
|
52
|
+
/** Tells the emitter that receiver is ready */
|
|
68
53
|
public async ready(): Promise<SuccessResponseMessage> {
|
|
69
54
|
if (window.parent === window) {
|
|
70
|
-
throw new Error("Receiver is currently not embedded as an iframe")
|
|
55
|
+
throw new Error("Receiver is currently not embedded as an iframe")
|
|
71
56
|
}
|
|
72
57
|
|
|
73
|
-
this._ready = false
|
|
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>,
|
|
@@ -83,39 +65,36 @@ export abstract class ChannelReceiver<
|
|
|
83
65
|
>(
|
|
84
66
|
request,
|
|
85
67
|
(request) => {
|
|
86
|
-
window.parent.postMessage(request, "*")
|
|
68
|
+
window.parent.postMessage(request, "*")
|
|
87
69
|
},
|
|
88
70
|
{
|
|
89
71
|
timeout: this.options.readyTimeout,
|
|
90
72
|
},
|
|
91
|
-
)
|
|
73
|
+
)
|
|
92
74
|
|
|
93
|
-
this._ready = true
|
|
75
|
+
this._ready = true
|
|
94
76
|
|
|
95
|
-
return response
|
|
77
|
+
return response
|
|
96
78
|
}
|
|
97
79
|
|
|
98
|
-
/**
|
|
99
|
-
* Handles public messages
|
|
100
|
-
*/
|
|
80
|
+
/** Handles public messages */
|
|
101
81
|
private _onPublicMessage(event: MessageEvent<unknown>): void {
|
|
102
82
|
try {
|
|
103
|
-
const message = validateMessage(event.data)
|
|
83
|
+
const message = validateMessage(event.data)
|
|
104
84
|
|
|
105
85
|
if (isRequestMessage(message)) {
|
|
106
86
|
if (this.options.debug) {
|
|
107
87
|
// eslint-disable-next-line no-console
|
|
108
|
-
console.debug(event.data)
|
|
88
|
+
console.debug(event.data)
|
|
109
89
|
}
|
|
110
90
|
|
|
111
91
|
switch (message.type) {
|
|
112
92
|
case InternalEmitterRequestType.Connect:
|
|
113
93
|
// Set port
|
|
114
|
-
this.port = event.ports[0]
|
|
94
|
+
this.port = event.ports[0]
|
|
115
95
|
|
|
116
96
|
// Update options
|
|
117
|
-
const { data } =
|
|
118
|
-
message as InternalEmitterTransactions["connect"]["request"];
|
|
97
|
+
const { data } = message as InternalEmitterTransactions["connect"]["request"]
|
|
119
98
|
this.options = {
|
|
120
99
|
...this.options,
|
|
121
100
|
...data,
|
|
@@ -123,32 +102,26 @@ export abstract class ChannelReceiver<
|
|
|
123
102
|
debug: this.options.debug,
|
|
124
103
|
requestIDPrefix: this.options.requestIDPrefix,
|
|
125
104
|
readyTimeout: this.options.readyTimeout,
|
|
126
|
-
}
|
|
105
|
+
}
|
|
127
106
|
|
|
128
|
-
const response = createSuccessResponseMessage(
|
|
129
|
-
message.requestID,
|
|
130
|
-
undefined,
|
|
131
|
-
);
|
|
107
|
+
const response = createSuccessResponseMessage(message.requestID, undefined)
|
|
132
108
|
|
|
133
|
-
this.postResponse(response)
|
|
134
|
-
break
|
|
109
|
+
this.postResponse(response)
|
|
110
|
+
break
|
|
135
111
|
|
|
136
112
|
default:
|
|
137
113
|
this.postResponse(
|
|
138
114
|
createErrorResponseMessage(message.requestID, undefined),
|
|
139
115
|
(response) => {
|
|
140
|
-
(event.source as WindowProxy).postMessage(
|
|
141
|
-
response,
|
|
142
|
-
event.origin,
|
|
143
|
-
);
|
|
116
|
+
;(event.source as WindowProxy).postMessage(response, event.origin)
|
|
144
117
|
},
|
|
145
|
-
)
|
|
146
|
-
break
|
|
118
|
+
)
|
|
119
|
+
break
|
|
147
120
|
}
|
|
148
121
|
} else {
|
|
149
122
|
// Forward response messages to default message handler if necessary
|
|
150
123
|
if (!this._ready) {
|
|
151
|
-
this.onMessage(event)
|
|
124
|
+
this.onMessage(event)
|
|
152
125
|
}
|
|
153
126
|
}
|
|
154
127
|
} catch (error) {
|
|
@@ -156,7 +129,7 @@ export abstract class ChannelReceiver<
|
|
|
156
129
|
// Ignore unknown messages
|
|
157
130
|
} else {
|
|
158
131
|
// Should not be possible, but who knows :shrug:
|
|
159
|
-
throw error
|
|
132
|
+
throw error
|
|
160
133
|
}
|
|
161
134
|
}
|
|
162
135
|
}
|
|
@@ -170,15 +143,9 @@ export abstract class ChannelReceiver<
|
|
|
170
143
|
options: PostRequestOptions = {},
|
|
171
144
|
): Promise<ExtractSuccessResponseMessage<TResponse>> {
|
|
172
145
|
if (!this._ready) {
|
|
173
|
-
throw new NotReadyError(
|
|
174
|
-
"Receiver is not ready, use `ChannelReceiver.ready()` first",
|
|
175
|
-
);
|
|
146
|
+
throw new NotReadyError("Receiver is not ready, use `ChannelReceiver.ready()` first")
|
|
176
147
|
}
|
|
177
148
|
|
|
178
|
-
return this.postRequest(
|
|
179
|
-
this.createRequestMessage(type, data),
|
|
180
|
-
undefined,
|
|
181
|
-
options,
|
|
182
|
-
);
|
|
149
|
+
return this.postRequest(this.createRequestMessage(type, data), undefined, options)
|
|
183
150
|
}
|
|
184
151
|
}
|
package/src/channel/errors.ts
CHANGED
|
@@ -1,53 +1,48 @@
|
|
|
1
|
-
import { UnknownErrorResponseMessage } from "."
|
|
1
|
+
import type { UnknownErrorResponseMessage } from "."
|
|
2
|
+
import type { UnknownRequestMessage } from "./types"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export class ResponseError<
|
|
6
|
-
TErrorResponse extends UnknownErrorResponseMessage,
|
|
7
|
-
> extends Error {
|
|
8
|
-
public response: TErrorResponse;
|
|
4
|
+
export class ResponseError<TErrorResponse extends UnknownErrorResponseMessage> extends Error {
|
|
5
|
+
public response: TErrorResponse
|
|
9
6
|
|
|
10
7
|
constructor(errorResponse: TErrorResponse) {
|
|
11
|
-
super(errorResponse.msg)
|
|
8
|
+
super(errorResponse.msg)
|
|
12
9
|
|
|
13
|
-
this.response = errorResponse
|
|
10
|
+
this.response = errorResponse
|
|
14
11
|
}
|
|
15
12
|
}
|
|
16
13
|
|
|
17
14
|
export class ConnectionTimeoutError extends Error {
|
|
18
15
|
constructor() {
|
|
19
|
-
super("Connection timed out")
|
|
16
|
+
super("Connection timed out")
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
export class TooManyConcurrentRequestsError extends Error {
|
|
23
|
-
public request: UnknownRequestMessage
|
|
20
|
+
public request: UnknownRequestMessage
|
|
24
21
|
|
|
25
22
|
constructor(request: UnknownRequestMessage) {
|
|
26
|
-
super(`Too many concurrent requests`)
|
|
23
|
+
super(`Too many concurrent requests`)
|
|
27
24
|
|
|
28
|
-
this.request = request
|
|
25
|
+
this.request = request
|
|
29
26
|
}
|
|
30
27
|
}
|
|
31
|
-
export class RequestTimeoutError<
|
|
32
|
-
|
|
33
|
-
> extends Error {
|
|
34
|
-
public request: UnknownRequestMessage;
|
|
28
|
+
export class RequestTimeoutError<TRequest extends UnknownRequestMessage> extends Error {
|
|
29
|
+
public request: UnknownRequestMessage
|
|
35
30
|
|
|
36
31
|
constructor(request: TRequest) {
|
|
37
|
-
super(`Request \`${request.requestID}\` timed out`)
|
|
32
|
+
super(`Request \`${request.requestID}\` timed out`)
|
|
38
33
|
|
|
39
|
-
this.request = request
|
|
34
|
+
this.request = request
|
|
40
35
|
}
|
|
41
36
|
}
|
|
42
37
|
|
|
43
38
|
export class NotReadyError extends Error {}
|
|
44
39
|
export class PortNotSetError extends Error {
|
|
45
40
|
constructor() {
|
|
46
|
-
super("Port is not set")
|
|
41
|
+
super("Port is not set")
|
|
47
42
|
}
|
|
48
43
|
}
|
|
49
44
|
export class ChannelNotSetError extends Error {
|
|
50
45
|
constructor() {
|
|
51
|
-
super("Channel is not set")
|
|
46
|
+
super("Channel is not set")
|
|
52
47
|
}
|
|
53
48
|
}
|
package/src/channel/index.ts
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
export { ChannelNetwork, channelNetworkDefaultOptions } from "./ChannelNetwork"
|
|
2
|
-
export type {
|
|
3
|
-
PostRequestOptions,
|
|
4
|
-
ChannelNetworkOptions,
|
|
5
|
-
} from "./ChannelNetwork";
|
|
1
|
+
export { ChannelNetwork, channelNetworkDefaultOptions } from "./ChannelNetwork"
|
|
2
|
+
export type { PostRequestOptions, ChannelNetworkOptions } from "./ChannelNetwork"
|
|
6
3
|
|
|
7
|
-
export { ChannelEmitter, channelEmitterDefaultOptions } from "./ChannelEmitter"
|
|
8
|
-
export type {
|
|
9
|
-
ChannelEmitterOptions,
|
|
10
|
-
AllChannelEmitterOptions,
|
|
11
|
-
} from "./ChannelEmitter";
|
|
4
|
+
export { ChannelEmitter, channelEmitterDefaultOptions } 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,
|
|
@@ -28,7 +16,7 @@ export {
|
|
|
28
16
|
isResponseMessage,
|
|
29
17
|
isSuccessResponseMessage,
|
|
30
18
|
isErrorResponseMessage,
|
|
31
|
-
} from "./messages"
|
|
19
|
+
} from "./messages"
|
|
32
20
|
|
|
33
21
|
export {
|
|
34
22
|
ResponseError,
|
|
@@ -38,12 +26,9 @@ export {
|
|
|
38
26
|
NotReadyError,
|
|
39
27
|
PortNotSetError,
|
|
40
28
|
ChannelNotSetError,
|
|
41
|
-
} from "./errors"
|
|
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,
|
|
@@ -72,4 +57,4 @@ export type {
|
|
|
72
57
|
InternalEmitterTransactions,
|
|
73
58
|
// Receiver
|
|
74
59
|
InternalReceiverTransactions,
|
|
75
|
-
} from "./types"
|
|
60
|
+
} from "./types"
|