request-iframe 0.0.1 → 0.0.3
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.CN.md +271 -12
- package/README.md +268 -11
- package/library/__tests__/channel.test.ts +420 -0
- package/library/__tests__/debug.test.ts +588 -0
- package/library/__tests__/dispatcher.test.ts +481 -0
- package/library/__tests__/interceptors.test.ts +22 -0
- package/library/__tests__/requestIframe.test.ts +2317 -99
- package/library/__tests__/server.test.ts +738 -0
- package/library/api/client.d.js +5 -0
- package/library/api/client.d.ts.map +1 -1
- package/library/api/client.js +11 -6
- package/library/api/server.d.js +5 -0
- package/library/api/server.d.ts +4 -3
- package/library/api/server.d.ts.map +1 -1
- package/library/api/server.js +25 -7
- package/library/constants/index.d.js +36 -0
- package/library/constants/index.d.ts +14 -4
- package/library/constants/index.d.ts.map +1 -1
- package/library/constants/index.js +15 -7
- package/library/constants/messages.d.js +5 -0
- package/library/constants/messages.d.ts +35 -0
- package/library/constants/messages.d.ts.map +1 -1
- package/library/constants/messages.js +36 -1
- package/library/core/client-server.d.ts +101 -0
- package/library/core/client-server.d.ts.map +1 -0
- package/library/core/client-server.js +266 -0
- package/library/core/client.d.js +5 -0
- package/library/core/client.d.ts +38 -6
- package/library/core/client.d.ts.map +1 -1
- package/library/core/client.js +198 -24
- package/library/core/request.d.js +5 -0
- package/library/core/response.d.js +5 -0
- package/library/core/response.d.ts +5 -1
- package/library/core/response.d.ts.map +1 -1
- package/library/core/response.js +85 -70
- package/library/core/server-client.d.js +5 -0
- package/library/core/server-client.d.ts +3 -1
- package/library/core/server-client.d.ts.map +1 -1
- package/library/core/server-client.js +19 -9
- package/library/core/server.d.js +5 -0
- package/library/core/server.d.ts +11 -3
- package/library/core/server.d.ts.map +1 -1
- package/library/core/server.js +112 -54
- package/library/index.d.ts +1 -1
- package/library/index.js +2 -2
- package/library/interceptors/index.d.js +5 -0
- package/library/interceptors/index.d.ts +4 -0
- package/library/interceptors/index.d.ts.map +1 -1
- package/library/interceptors/index.js +7 -0
- package/library/message/channel.d.js +5 -0
- package/library/message/channel.d.ts +3 -1
- package/library/message/channel.d.ts.map +1 -1
- package/library/message/dispatcher.d.js +5 -0
- package/library/message/dispatcher.d.ts +7 -2
- package/library/message/dispatcher.d.ts.map +1 -1
- package/library/message/dispatcher.js +47 -2
- package/library/message/index.d.js +25 -0
- package/library/stream/file-stream.d.js +4 -0
- package/library/stream/file-stream.d.ts +5 -0
- package/library/stream/file-stream.d.ts.map +1 -1
- package/library/stream/file-stream.js +41 -12
- package/library/stream/index.d.js +58 -0
- package/library/stream/readable-stream.d.js +5 -0
- package/library/stream/readable-stream.d.ts.map +1 -1
- package/library/stream/readable-stream.js +32 -30
- package/library/stream/types.d.js +5 -0
- package/library/stream/types.d.ts +18 -0
- package/library/stream/types.d.ts.map +1 -1
- package/library/stream/writable-stream.d.js +5 -0
- package/library/stream/writable-stream.d.ts +1 -0
- package/library/stream/writable-stream.d.ts.map +1 -1
- package/library/stream/writable-stream.js +7 -2
- package/library/types/index.d.js +5 -0
- package/library/types/index.d.ts +79 -19
- package/library/types/index.d.ts.map +1 -1
- package/library/utils/cache.d.js +5 -0
- package/library/utils/cache.d.ts +24 -0
- package/library/utils/cache.d.ts.map +1 -1
- package/library/utils/cache.js +76 -0
- package/library/utils/cookie.d.js +5 -0
- package/library/utils/debug.d.js +5 -0
- package/library/utils/debug.d.ts.map +1 -1
- package/library/utils/debug.js +382 -20
- package/library/utils/index.d.js +94 -0
- package/library/utils/index.d.ts +5 -0
- package/library/utils/index.d.ts.map +1 -1
- package/library/utils/index.js +14 -1
- package/library/utils/path-match.d.js +5 -0
- package/library/utils/protocol.d.js +5 -0
- package/package.json +16 -2
- package/react/library/__tests__/index.test.d.ts +2 -0
- package/react/library/__tests__/index.test.d.ts.map +1 -0
- package/react/library/__tests__/index.test.tsx +770 -0
- package/react/library/index.d.ts +118 -0
- package/react/library/index.d.ts.map +1 -0
- package/react/library/index.js +232 -0
package/library/core/client.js
CHANGED
|
@@ -6,7 +6,6 @@ require("core-js/modules/es.array.from.js");
|
|
|
6
6
|
require("core-js/modules/es.array.slice.js");
|
|
7
7
|
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
8
8
|
require("core-js/modules/es.regexp.to-string.js");
|
|
9
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
10
9
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
11
10
|
Object.defineProperty(exports, "__esModule", {
|
|
12
11
|
value: true
|
|
@@ -15,12 +14,16 @@ exports.RequestIframeClientImpl = void 0;
|
|
|
15
14
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
16
15
|
require("core-js/modules/es.array.iterator.js");
|
|
17
16
|
require("core-js/modules/es.map.js");
|
|
17
|
+
require("core-js/modules/es.object.entries.js");
|
|
18
18
|
require("core-js/modules/es.promise.js");
|
|
19
19
|
require("core-js/modules/es.regexp.exec.js");
|
|
20
|
+
require("core-js/modules/es.string.match.js");
|
|
20
21
|
require("core-js/modules/es.string.replace.js");
|
|
21
22
|
require("core-js/modules/es.string.starts-with.js");
|
|
23
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
22
24
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
23
25
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
26
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
24
27
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
28
|
var _utils = require("../utils");
|
|
26
29
|
var _interceptors = require("../interceptors");
|
|
@@ -39,8 +42,14 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
39
42
|
* RequestIframeClient implementation (only responsible for initiating requests, reuses server's listener)
|
|
40
43
|
*/
|
|
41
44
|
class RequestIframeClientImpl {
|
|
42
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Target server ID (remembered from responses)
|
|
47
|
+
* When a response is received, we remember the server's creatorId as the targetId for future requests
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
constructor(targetWindow, targetOrigin, server, options, instanceId) {
|
|
43
51
|
var _options$ackTimeout, _options$timeout, _options$asyncTimeout;
|
|
52
|
+
/** Unique instance ID */
|
|
44
53
|
(0, _defineProperty2.default)(this, "interceptors", {
|
|
45
54
|
request: new _interceptors.RequestInterceptorManager(),
|
|
46
55
|
response: new _interceptors.ResponseInterceptorManager()
|
|
@@ -57,6 +66,7 @@ class RequestIframeClientImpl {
|
|
|
57
66
|
* value: stream message handler function
|
|
58
67
|
*/
|
|
59
68
|
(0, _defineProperty2.default)(this, "streamHandlers", new Map());
|
|
69
|
+
this.id = instanceId || (0, _utils.generateInstanceId)();
|
|
60
70
|
this.targetWindow = targetWindow;
|
|
61
71
|
this.targetOrigin = targetOrigin;
|
|
62
72
|
this.server = server;
|
|
@@ -67,6 +77,9 @@ class RequestIframeClientImpl {
|
|
|
67
77
|
this.defaultTimeout = (_options$timeout = options === null || options === void 0 ? void 0 : options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : _constants.DefaultTimeout.REQUEST;
|
|
68
78
|
this.defaultAsyncTimeout = (_options$asyncTimeout = options === null || options === void 0 ? void 0 : options.asyncTimeout) !== null && _options$asyncTimeout !== void 0 ? _options$asyncTimeout : _constants.DefaultTimeout.ASYNC;
|
|
69
79
|
|
|
80
|
+
// Save initial headers configuration
|
|
81
|
+
this.initialHeaders = options === null || options === void 0 ? void 0 : options.headers;
|
|
82
|
+
|
|
70
83
|
// Register stream message processing callback
|
|
71
84
|
this.server.setStreamCallback(data => {
|
|
72
85
|
this.dispatchStreamMessage(data);
|
|
@@ -87,8 +100,8 @@ class RequestIframeClientImpl {
|
|
|
87
100
|
this.streamHandlers.delete(streamId);
|
|
88
101
|
}
|
|
89
102
|
|
|
90
|
-
|
|
91
|
-
|
|
103
|
+
/*
|
|
104
|
+
Send message (StreamMessageHandler interface implementation)
|
|
92
105
|
*/
|
|
93
106
|
postMessage(message) {
|
|
94
107
|
this.server.messageDispatcher.send(this.targetWindow, message, this.targetOrigin);
|
|
@@ -110,6 +123,45 @@ class RequestIframeClientImpl {
|
|
|
110
123
|
}
|
|
111
124
|
}
|
|
112
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Resolve header value (handle function type headers)
|
|
128
|
+
*/
|
|
129
|
+
resolveHeaderValue(value, config) {
|
|
130
|
+
if (typeof value === 'function') {
|
|
131
|
+
return value(config);
|
|
132
|
+
}
|
|
133
|
+
return value;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Merge and resolve headers (initial headers + request headers)
|
|
138
|
+
* Request headers take precedence over initial headers
|
|
139
|
+
*/
|
|
140
|
+
mergeHeaders(config) {
|
|
141
|
+
var resolvedHeaders = {};
|
|
142
|
+
|
|
143
|
+
// First, resolve initial headers
|
|
144
|
+
if (this.initialHeaders) {
|
|
145
|
+
for (var _i = 0, _Object$entries = Object.entries(this.initialHeaders); _i < _Object$entries.length; _i++) {
|
|
146
|
+
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
147
|
+
key = _Object$entries$_i[0],
|
|
148
|
+
value = _Object$entries$_i[1];
|
|
149
|
+
resolvedHeaders[key] = this.resolveHeaderValue(value, config);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Then, merge request headers (request headers take precedence)
|
|
154
|
+
if (config.headers) {
|
|
155
|
+
for (var _i2 = 0, _Object$entries2 = Object.entries(config.headers); _i2 < _Object$entries2.length; _i2++) {
|
|
156
|
+
var _Object$entries2$_i = (0, _slicedToArray2.default)(_Object$entries2[_i2], 2),
|
|
157
|
+
_key = _Object$entries2$_i[0],
|
|
158
|
+
_value = _Object$entries2$_i[1];
|
|
159
|
+
resolvedHeaders[_key] = this.resolveHeaderValue(_value, config);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return resolvedHeaders;
|
|
163
|
+
}
|
|
164
|
+
|
|
113
165
|
/**
|
|
114
166
|
* Check if server is reachable
|
|
115
167
|
*/
|
|
@@ -149,7 +201,7 @@ class RequestIframeClientImpl {
|
|
|
149
201
|
send(path, body, options) {
|
|
150
202
|
var _this = this;
|
|
151
203
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
152
|
-
var config, processedConfig, processedPath, processedBody,
|
|
204
|
+
var config, processedConfig, mergedHeaders, processedPath, processedBody, processedCookies, userTargetId, _processedConfig$ackT, ackTimeout, _processedConfig$time, timeout, _processedConfig$asyn, asyncTimeout, _processedConfig$requ, requestId, targetId;
|
|
153
205
|
return _regenerator.default.wrap(function (_context) {
|
|
154
206
|
while (1) switch (_context.prev = _context.next) {
|
|
155
207
|
case 0:
|
|
@@ -161,7 +213,10 @@ class RequestIframeClientImpl {
|
|
|
161
213
|
return (0, _interceptors.runRequestInterceptors)(_this.interceptors.request, config);
|
|
162
214
|
case 1:
|
|
163
215
|
processedConfig = _context.sent;
|
|
164
|
-
|
|
216
|
+
// Merge and resolve headers (initial headers + request headers)
|
|
217
|
+
mergedHeaders = _this.mergeHeaders(processedConfig);
|
|
218
|
+
processedPath = processedConfig.path, processedBody = processedConfig.body, processedCookies = processedConfig.cookies, userTargetId = processedConfig.targetId, _processedConfig$ackT = processedConfig.ackTimeout, ackTimeout = _processedConfig$ackT === void 0 ? _this.defaultAckTimeout : _processedConfig$ackT, _processedConfig$time = processedConfig.timeout, timeout = _processedConfig$time === void 0 ? _this.defaultTimeout : _processedConfig$time, _processedConfig$asyn = processedConfig.asyncTimeout, asyncTimeout = _processedConfig$asyn === void 0 ? _this.defaultAsyncTimeout : _processedConfig$asyn, _processedConfig$requ = processedConfig.requestId, requestId = _processedConfig$requ === void 0 ? (0, _utils.generateRequestId)() : _processedConfig$requ; // Use user-specified targetId, or remembered target server ID, or undefined
|
|
219
|
+
targetId = userTargetId || _this._targetServerId;
|
|
165
220
|
return _context.abrupt("return", new Promise((resolve, reject) => {
|
|
166
221
|
var prefixedPath = _this.prefixPath(processedPath);
|
|
167
222
|
var done = false;
|
|
@@ -174,7 +229,23 @@ class RequestIframeClientImpl {
|
|
|
174
229
|
if (done) return;
|
|
175
230
|
done = true;
|
|
176
231
|
cleanup();
|
|
177
|
-
|
|
232
|
+
// Run response interceptors to allow error logging
|
|
233
|
+
Promise.reject(error).catch(err => {
|
|
234
|
+
// Run through response interceptors' rejected callbacks
|
|
235
|
+
var promise = Promise.reject(err);
|
|
236
|
+
_this.interceptors.response.forEach(interceptor => {
|
|
237
|
+
promise = promise.catch(e => {
|
|
238
|
+
if (interceptor.rejected) {
|
|
239
|
+
return interceptor.rejected(e);
|
|
240
|
+
}
|
|
241
|
+
return Promise.reject(e);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
return promise;
|
|
245
|
+
}).catch(() => {
|
|
246
|
+
// After interceptors, reject with original error
|
|
247
|
+
reject(error);
|
|
248
|
+
});
|
|
178
249
|
};
|
|
179
250
|
var setAckTimeout = () => {
|
|
180
251
|
if (timeoutId) clearTimeout(timeoutId);
|
|
@@ -216,6 +287,10 @@ class RequestIframeClientImpl {
|
|
|
216
287
|
|
|
217
288
|
// Received ACK: server has received request
|
|
218
289
|
if (data.type === _constants.MessageType.ACK) {
|
|
290
|
+
// Remember server's creatorId as target server ID for future requests
|
|
291
|
+
if (data.creatorId && !_this._targetServerId) {
|
|
292
|
+
_this._targetServerId = data.creatorId;
|
|
293
|
+
}
|
|
219
294
|
// Switch to request timeout
|
|
220
295
|
setRequestTimeout();
|
|
221
296
|
return;
|
|
@@ -223,6 +298,10 @@ class RequestIframeClientImpl {
|
|
|
223
298
|
|
|
224
299
|
// Received ASYNC notification: this is an async task
|
|
225
300
|
if (data.type === _constants.MessageType.ASYNC) {
|
|
301
|
+
// Remember server's creatorId as target server ID for future requests
|
|
302
|
+
if (data.creatorId && !_this._targetServerId) {
|
|
303
|
+
_this._targetServerId = data.creatorId;
|
|
304
|
+
}
|
|
226
305
|
// Switch to async timeout
|
|
227
306
|
setAsyncTimeout();
|
|
228
307
|
return;
|
|
@@ -230,7 +309,7 @@ class RequestIframeClientImpl {
|
|
|
230
309
|
|
|
231
310
|
// Received stream start message
|
|
232
311
|
if (data.type === _constants.MessageType.STREAM_START) {
|
|
233
|
-
var _streamBody$chunked;
|
|
312
|
+
var _streamBody$chunked, _streamBody$autoResol;
|
|
234
313
|
done = true;
|
|
235
314
|
cleanup();
|
|
236
315
|
var streamBody = data.body;
|
|
@@ -238,24 +317,68 @@ class RequestIframeClientImpl {
|
|
|
238
317
|
var streamType = streamBody.type || _constants.StreamType.DATA;
|
|
239
318
|
var streamChunked = (_streamBody$chunked = streamBody.chunked) !== null && _streamBody$chunked !== void 0 ? _streamBody$chunked : true;
|
|
240
319
|
var streamMetadata = streamBody.metadata;
|
|
320
|
+
var autoResolve = (_streamBody$autoResol = streamBody.autoResolve) !== null && _streamBody$autoResol !== void 0 ? _streamBody$autoResol : false;
|
|
241
321
|
|
|
242
322
|
// Create corresponding readable stream based on stream type
|
|
243
|
-
var readableStream;
|
|
244
323
|
if (streamType === _constants.StreamType.FILE) {
|
|
245
|
-
|
|
324
|
+
var _readableStream = new _stream.IframeFileReadableStream(streamId, requestId, _this, {
|
|
246
325
|
chunked: streamChunked,
|
|
247
326
|
metadata: streamMetadata,
|
|
248
327
|
filename: streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.filename,
|
|
249
328
|
mimeType: streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.mimeType,
|
|
250
329
|
size: streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.size
|
|
251
330
|
});
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
331
|
+
|
|
332
|
+
// If autoResolve is enabled, automatically read and convert to File/Blob
|
|
333
|
+
if (autoResolve) {
|
|
334
|
+
var _data$headers;
|
|
335
|
+
// Extract fileName from headers if available
|
|
336
|
+
var contentDisposition = (_data$headers = data.headers) === null || _data$headers === void 0 ? void 0 : _data$headers[_constants.HttpHeader.CONTENT_DISPOSITION];
|
|
337
|
+
var fileName;
|
|
338
|
+
if (contentDisposition) {
|
|
339
|
+
var disposition = typeof contentDisposition === 'string' ? contentDisposition : contentDisposition[0];
|
|
340
|
+
var filenameMatch = disposition.match(/filename="?([^"]+)"?/i);
|
|
341
|
+
if (filenameMatch) {
|
|
342
|
+
fileName = filenameMatch[1];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Fallback to stream metadata if not found in headers
|
|
346
|
+
fileName = fileName || (streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.filename) || _readableStream.filename;
|
|
347
|
+
|
|
348
|
+
// Use stream's readAsFile or readAsBlob method
|
|
349
|
+
var fileDataPromise = fileName ? _readableStream.readAsFile(fileName) : _readableStream.readAsBlob();
|
|
350
|
+
fileDataPromise.then(fileData => {
|
|
351
|
+
var resp = {
|
|
352
|
+
data: fileData,
|
|
353
|
+
status: data.status || _constants.HttpStatus.OK,
|
|
354
|
+
statusText: data.statusText || _constants.HttpStatusText[_constants.HttpStatus.OK],
|
|
355
|
+
requestId,
|
|
356
|
+
headers: data.headers
|
|
357
|
+
};
|
|
358
|
+
return (0, _interceptors.runResponseInterceptors)(_this.interceptors.response, resp);
|
|
359
|
+
}).then(resolve).catch(reject);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Non-autoResolve: return file stream directly
|
|
364
|
+
var _resp = {
|
|
365
|
+
data: undefined,
|
|
366
|
+
status: data.status || _constants.HttpStatus.OK,
|
|
367
|
+
statusText: data.statusText || _constants.HttpStatusText[_constants.HttpStatus.OK],
|
|
368
|
+
requestId,
|
|
369
|
+
headers: data.headers,
|
|
370
|
+
stream: _readableStream
|
|
371
|
+
};
|
|
372
|
+
(0, _interceptors.runResponseInterceptors)(_this.interceptors.response, _resp).then(resolve).catch(reject);
|
|
373
|
+
return;
|
|
258
374
|
}
|
|
375
|
+
|
|
376
|
+
// Non-file stream: create regular readable stream
|
|
377
|
+
var readableStream = new _stream.IframeReadableStream(streamId, requestId, _this, {
|
|
378
|
+
type: streamType,
|
|
379
|
+
chunked: streamChunked,
|
|
380
|
+
metadata: streamMetadata
|
|
381
|
+
});
|
|
259
382
|
var resp = {
|
|
260
383
|
data: undefined,
|
|
261
384
|
status: data.status || _constants.HttpStatus.OK,
|
|
@@ -279,10 +402,16 @@ class RequestIframeClientImpl {
|
|
|
279
402
|
done = true;
|
|
280
403
|
cleanup();
|
|
281
404
|
|
|
405
|
+
// Remember server's creatorId as target server ID for future requests
|
|
406
|
+
if (data.creatorId && !_this._targetServerId) {
|
|
407
|
+
_this._targetServerId = data.creatorId;
|
|
408
|
+
}
|
|
409
|
+
|
|
282
410
|
// If server requires acknowledgment, send received message
|
|
283
411
|
if (data.requireAck) {
|
|
284
412
|
_this.server.messageDispatcher.sendMessage(_this.targetWindow, _this.targetOrigin, _constants.MessageType.RECEIVED, requestId, {
|
|
285
|
-
path: prefixedPath
|
|
413
|
+
path: prefixedPath,
|
|
414
|
+
targetId: data.creatorId
|
|
286
415
|
});
|
|
287
416
|
}
|
|
288
417
|
|
|
@@ -303,25 +432,30 @@ class RequestIframeClientImpl {
|
|
|
303
432
|
_iterator.f();
|
|
304
433
|
}
|
|
305
434
|
}
|
|
306
|
-
var
|
|
435
|
+
var _resp2 = {
|
|
307
436
|
data: data.data,
|
|
308
437
|
status: data.status || _constants.HttpStatus.OK,
|
|
309
438
|
statusText: data.statusText || _constants.HttpStatusText[_constants.HttpStatus.OK],
|
|
310
439
|
requestId,
|
|
311
|
-
headers: data.headers
|
|
312
|
-
fileData: data.fileData
|
|
440
|
+
headers: data.headers
|
|
313
441
|
};
|
|
314
|
-
(0, _interceptors.runResponseInterceptors)(_this.interceptors.response,
|
|
442
|
+
(0, _interceptors.runResponseInterceptors)(_this.interceptors.response, _resp2).then(resolve).catch(reject);
|
|
315
443
|
return;
|
|
316
444
|
}
|
|
317
445
|
|
|
318
446
|
// Received error
|
|
319
447
|
if (data.type === _constants.MessageType.ERROR) {
|
|
320
448
|
var _data$error, _data$error2;
|
|
449
|
+
// Remember server's creatorId as target server ID for future requests
|
|
450
|
+
if (data.creatorId && !_this._targetServerId) {
|
|
451
|
+
_this._targetServerId = data.creatorId;
|
|
452
|
+
}
|
|
453
|
+
|
|
321
454
|
// If server requires acknowledgment, send received message
|
|
322
455
|
if (data.requireAck) {
|
|
323
456
|
_this.server.messageDispatcher.sendMessage(_this.targetWindow, _this.targetOrigin, _constants.MessageType.RECEIVED, requestId, {
|
|
324
|
-
path: prefixedPath
|
|
457
|
+
path: prefixedPath,
|
|
458
|
+
targetId: data.creatorId
|
|
325
459
|
});
|
|
326
460
|
}
|
|
327
461
|
var err = {
|
|
@@ -357,8 +491,9 @@ class RequestIframeClientImpl {
|
|
|
357
491
|
_this.server.messageDispatcher.sendMessage(_this.targetWindow, _this.targetOrigin, _constants.MessageType.REQUEST, requestId, {
|
|
358
492
|
path: prefixedPath,
|
|
359
493
|
body: processedBody,
|
|
360
|
-
headers:
|
|
361
|
-
cookies: mergedCookies
|
|
494
|
+
headers: mergedHeaders,
|
|
495
|
+
cookies: mergedCookies,
|
|
496
|
+
targetId
|
|
362
497
|
});
|
|
363
498
|
}));
|
|
364
499
|
case 2:
|
|
@@ -379,6 +514,45 @@ class RequestIframeClientImpl {
|
|
|
379
514
|
return this.server;
|
|
380
515
|
}
|
|
381
516
|
|
|
517
|
+
/**
|
|
518
|
+
* Whether message handling is enabled
|
|
519
|
+
*/
|
|
520
|
+
get isOpen() {
|
|
521
|
+
return this.server.isOpen;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Enable message handling (register message handlers)
|
|
526
|
+
*/
|
|
527
|
+
open() {
|
|
528
|
+
this.server.open();
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Disable message handling (unregister message handlers, but don't release resources)
|
|
533
|
+
*/
|
|
534
|
+
close() {
|
|
535
|
+
this.server.close();
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Destroy client (close and release all resources)
|
|
540
|
+
*/
|
|
541
|
+
destroy() {
|
|
542
|
+
// Clear cookies
|
|
543
|
+
this._cookieStore.clear();
|
|
544
|
+
|
|
545
|
+
// Clear stream handlers
|
|
546
|
+
this.streamHandlers.clear();
|
|
547
|
+
|
|
548
|
+
// Clear interceptors
|
|
549
|
+
this.interceptors.request.clear();
|
|
550
|
+
this.interceptors.response.clear();
|
|
551
|
+
|
|
552
|
+
// Destroy server (this will also release the message channel)
|
|
553
|
+
this.server.destroy();
|
|
554
|
+
}
|
|
555
|
+
|
|
382
556
|
/**
|
|
383
557
|
* Get all cookies matching specified path
|
|
384
558
|
* @param path Request path, returns all cookies if not provided
|
|
@@ -17,9 +17,13 @@ export declare class ServerResponseImpl implements ServerResponse {
|
|
|
17
17
|
private readonly targetWindow;
|
|
18
18
|
private readonly targetOrigin;
|
|
19
19
|
private readonly channel?;
|
|
20
|
+
/** Target client ID (usually the creatorId of the original request) */
|
|
21
|
+
private readonly targetId?;
|
|
22
|
+
/** Server instance ID (for creatorId in responses) */
|
|
23
|
+
private readonly serverId?;
|
|
20
24
|
private onAckCallback?;
|
|
21
25
|
_sent: boolean;
|
|
22
|
-
constructor(requestId: string, path: string, secretKey: string | undefined, targetWindow: Window, targetOrigin: string, channel?: MessageChannel);
|
|
26
|
+
constructor(requestId: string, path: string, secretKey: string | undefined, targetWindow: Window, targetOrigin: string, channel?: MessageChannel, serverId?: string, targetId?: string);
|
|
23
27
|
/**
|
|
24
28
|
* Send message via channel or direct postMessage
|
|
25
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/core/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGvF,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/core/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGvF,OAAO,EAAE,oBAAoB,EAA4B,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/C;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAChD,UAAU,EAAE,MAAM,CAAiB;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAM;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB;IAC1C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,aAAa,CAAC,CAAc;IAC7B,KAAK,UAAS;gBAGnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIrD;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAOpC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA8CxD,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD,QAAQ,CACnB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,CAAC;IAoDnB;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAKpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAwBhE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc;IAMpE,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc;IA4BV,WAAW,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc;YAkBH,YAAY;CAa3B"}
|