request-iframe 0.1.0 → 0.1.1
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 +174 -22
- package/README.md +166 -22
- package/esm/api/client.js +6 -5
- package/esm/api/server.js +3 -1
- package/esm/constants/index.js +38 -6
- package/esm/constants/messages.js +3 -1
- package/esm/core/client-server.js +8 -43
- package/esm/core/client.js +7 -7
- package/esm/core/response.js +16 -8
- package/esm/core/server.js +18 -9
- package/esm/message/channel.js +2 -1
- package/esm/message/dispatcher.js +63 -25
- package/esm/stream/readable-stream.js +57 -18
- package/esm/stream/stream-core.js +115 -2
- package/esm/stream/writable-stream.js +281 -27
- package/esm/utils/ack.js +36 -0
- package/esm/utils/debug.js +1 -1
- package/esm/utils/index.js +5 -3
- package/esm/utils/origin.js +3 -1
- package/library/api/client.d.ts.map +1 -1
- package/library/api/client.js +5 -4
- package/library/api/server.d.ts.map +1 -1
- package/library/api/server.js +3 -1
- package/library/constants/index.d.ts +36 -5
- package/library/constants/index.d.ts.map +1 -1
- package/library/constants/index.js +41 -8
- package/library/constants/messages.d.ts +3 -1
- package/library/constants/messages.d.ts.map +1 -1
- package/library/constants/messages.js +3 -1
- package/library/core/client-server.d.ts +4 -13
- package/library/core/client-server.d.ts.map +1 -1
- package/library/core/client-server.js +7 -42
- package/library/core/client.d.ts.map +1 -1
- package/library/core/client.js +6 -6
- package/library/core/response.d.ts +2 -2
- package/library/core/response.d.ts.map +1 -1
- package/library/core/response.js +15 -7
- package/library/core/server.d.ts +6 -2
- package/library/core/server.d.ts.map +1 -1
- package/library/core/server.js +18 -9
- package/library/message/channel.d.ts +1 -1
- package/library/message/channel.d.ts.map +1 -1
- package/library/message/channel.js +2 -1
- package/library/message/dispatcher.d.ts +10 -0
- package/library/message/dispatcher.d.ts.map +1 -1
- package/library/message/dispatcher.js +62 -24
- package/library/stream/readable-stream.d.ts.map +1 -1
- package/library/stream/readable-stream.js +56 -17
- package/library/stream/stream-core.d.ts +22 -1
- package/library/stream/stream-core.d.ts.map +1 -1
- package/library/stream/stream-core.js +114 -1
- package/library/stream/types.d.ts +115 -2
- package/library/stream/types.d.ts.map +1 -1
- package/library/stream/writable-stream.d.ts +20 -2
- package/library/stream/writable-stream.d.ts.map +1 -1
- package/library/stream/writable-stream.js +277 -23
- package/library/types/index.d.ts +3 -4
- package/library/types/index.d.ts.map +1 -1
- package/library/utils/ack.d.ts +2 -0
- package/library/utils/ack.d.ts.map +1 -0
- package/library/utils/ack.js +44 -0
- package/library/utils/debug.js +1 -1
- package/library/utils/index.d.ts.map +1 -1
- package/library/utils/index.js +4 -3
- package/library/utils/origin.d.ts.map +1 -1
- package/library/utils/origin.js +2 -1
- package/package.json +1 -1
- package/esm/utils/ack-meta.js +0 -53
- package/library/utils/ack-meta.d.ts +0 -2
- package/library/utils/ack-meta.d.ts.map +0 -1
- package/library/utils/ack-meta.js +0 -59
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.array.filter.js");
|
|
4
4
|
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
5
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
6
5
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
7
6
|
Object.defineProperty(exports, "__esModule", {
|
|
8
7
|
value: true
|
|
@@ -11,10 +10,14 @@ exports.IframeWritableStream = void 0;
|
|
|
11
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
require("core-js/modules/es.array.iterator.js");
|
|
14
14
|
require("core-js/modules/es.array.slice.js");
|
|
15
|
+
require("core-js/modules/es.map.js");
|
|
15
16
|
require("core-js/modules/es.promise.js");
|
|
16
17
|
require("core-js/modules/es.promise.finally.js");
|
|
17
18
|
require("core-js/modules/es.regexp.to-string.js");
|
|
19
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
20
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
18
21
|
var _utils = require("../utils");
|
|
19
22
|
var _constants = require("../constants");
|
|
20
23
|
var _streamCore = require("./stream-core");
|
|
@@ -29,7 +32,11 @@ function generateStreamId() {
|
|
|
29
32
|
|
|
30
33
|
/**
|
|
31
34
|
* IframeWritableStream - Server-side writable stream
|
|
32
|
-
*
|
|
35
|
+
*
|
|
36
|
+
* Writer/producer stream.
|
|
37
|
+
* It can be created on either side:
|
|
38
|
+
* - Server → Client: used as response stream (via `res.sendStream(stream)`)
|
|
39
|
+
* - Client → Server: used as request body stream (via `client.sendStream(path, stream)`)
|
|
33
40
|
*/
|
|
34
41
|
class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
35
42
|
constructor(options = {}) {
|
|
@@ -46,11 +53,14 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
46
53
|
/** pull/ack protocol */
|
|
47
54
|
(0, _defineProperty2.default)(this, "pullCredit", 0);
|
|
48
55
|
(0, _defineProperty2.default)(this, "seq", 0);
|
|
56
|
+
(0, _defineProperty2.default)(this, "pendingBytes", 0);
|
|
49
57
|
(0, _defineProperty2.default)(this, "pendingQueue", []);
|
|
50
58
|
(0, _defineProperty2.default)(this, "pumping", false);
|
|
51
59
|
(0, _defineProperty2.default)(this, "completionPromise", null);
|
|
52
60
|
(0, _defineProperty2.default)(this, "resolveCompletion", null);
|
|
53
61
|
(0, _defineProperty2.default)(this, "rejectCompletion", null);
|
|
62
|
+
(0, _defineProperty2.default)(this, "ackWaiters", new Map());
|
|
63
|
+
(0, _defineProperty2.default)(this, "ackReceiverRegistered", false);
|
|
54
64
|
this.mode = (_options$mode = options.mode) !== null && _options$mode !== void 0 ? _options$mode : _constants.StreamMode.PULL;
|
|
55
65
|
this.iterator = options.iterator;
|
|
56
66
|
this.nextFn = options.next;
|
|
@@ -58,6 +68,72 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
58
68
|
// Default to async-timeout length to avoid leaking long-lived streams
|
|
59
69
|
this.expireTimeout = (_options$expireTimeou = options.expireTimeout) !== null && _options$expireTimeou !== void 0 ? _options$expireTimeou : _constants.DefaultTimeout.ASYNC;
|
|
60
70
|
this.streamTimeout = options.streamTimeout;
|
|
71
|
+
this.maxPendingChunks = options.maxPendingChunks;
|
|
72
|
+
this.maxPendingBytes = options.maxPendingBytes;
|
|
73
|
+
}
|
|
74
|
+
enqueue(item) {
|
|
75
|
+
var max = this.maxPendingChunks;
|
|
76
|
+
if (typeof max === 'number' && max > 0 && this.pendingQueue.length >= max) {
|
|
77
|
+
throw new Error((0, _constants.formatMessage)(_constants.Messages.STREAM_PENDING_QUEUE_OVERFLOW, max));
|
|
78
|
+
}
|
|
79
|
+
var bytes = this.estimateChunkBytes(item.data);
|
|
80
|
+
var maxBytes = this.maxPendingBytes;
|
|
81
|
+
if (typeof maxBytes === 'number' && maxBytes > 0) {
|
|
82
|
+
var next = this.pendingBytes + bytes;
|
|
83
|
+
if (!Number.isFinite(next) || next > maxBytes) {
|
|
84
|
+
throw new Error((0, _constants.formatMessage)(_constants.Messages.STREAM_PENDING_BYTES_OVERFLOW, maxBytes));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
this.pendingQueue.push(_objectSpread(_objectSpread({}, item), {}, {
|
|
88
|
+
bytes
|
|
89
|
+
}));
|
|
90
|
+
this.pendingBytes += bytes;
|
|
91
|
+
}
|
|
92
|
+
estimateChunkBytes(data) {
|
|
93
|
+
if (data === null || data === undefined) return 0;
|
|
94
|
+
if (typeof data === 'string') return this.utf8ByteLength(data);
|
|
95
|
+
try {
|
|
96
|
+
// ArrayBuffer
|
|
97
|
+
if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {
|
|
98
|
+
return data.byteLength;
|
|
99
|
+
}
|
|
100
|
+
// TypedArray / DataView
|
|
101
|
+
if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView && ArrayBuffer.isView(data)) {
|
|
102
|
+
return data.byteLength;
|
|
103
|
+
}
|
|
104
|
+
} catch (_unused) {
|
|
105
|
+
/** ignore */
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
// Blob / File
|
|
109
|
+
if (typeof Blob !== 'undefined' && data instanceof Blob) {
|
|
110
|
+
return data.size;
|
|
111
|
+
}
|
|
112
|
+
} catch (_unused2) {
|
|
113
|
+
/** ignore */
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Strategy C: only count well-defined types; other values are not counted.
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
utf8ByteLength(text) {
|
|
120
|
+
try {
|
|
121
|
+
if (typeof TextEncoder !== 'undefined') {
|
|
122
|
+
return new TextEncoder().encode(text).length;
|
|
123
|
+
}
|
|
124
|
+
} catch (_unused3) {
|
|
125
|
+
/** ignore */
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
// eslint-disable-next-line no-undef
|
|
129
|
+
if (typeof Buffer !== 'undefined') {
|
|
130
|
+
// eslint-disable-next-line no-undef
|
|
131
|
+
return Buffer.byteLength(text, 'utf8');
|
|
132
|
+
}
|
|
133
|
+
} catch (_unused4) {
|
|
134
|
+
/** ignore */
|
|
135
|
+
}
|
|
136
|
+
return text.length;
|
|
61
137
|
}
|
|
62
138
|
|
|
63
139
|
/** Get stream state */
|
|
@@ -90,14 +166,19 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
90
166
|
{
|
|
91
167
|
var credit = typeof data.credit === 'number' && data.credit > 0 ? data.credit : 1;
|
|
92
168
|
this.pullCredit += credit;
|
|
169
|
+
this.emit(_constants.StreamEvent.PULL, {
|
|
170
|
+
credit,
|
|
171
|
+
totalCredit: this.pullCredit
|
|
172
|
+
});
|
|
93
173
|
// Try flushing buffered chunks or pumping generator
|
|
94
174
|
this.flush();
|
|
95
175
|
break;
|
|
96
176
|
}
|
|
97
|
-
case _constants.StreamInternalMessageType.ACK:
|
|
98
|
-
// Ack is treated as heartbeat; no further action required
|
|
99
|
-
break;
|
|
100
177
|
case _constants.StreamInternalMessageType.CANCEL:
|
|
178
|
+
this.emit(_constants.StreamEvent.CANCEL, {
|
|
179
|
+
reason: data.reason,
|
|
180
|
+
remote: true
|
|
181
|
+
});
|
|
101
182
|
this.cancel(data.reason);
|
|
102
183
|
break;
|
|
103
184
|
default:
|
|
@@ -172,8 +253,11 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
172
253
|
return _context2.abrupt("return");
|
|
173
254
|
case 4:
|
|
174
255
|
try {
|
|
256
|
+
_this2.emit(_constants.StreamEvent.TIMEOUT, {
|
|
257
|
+
timeout
|
|
258
|
+
});
|
|
175
259
|
_this2.error((0, _constants.formatMessage)(_constants.Messages.STREAM_TIMEOUT, timeout));
|
|
176
|
-
} catch (
|
|
260
|
+
} catch (_unused5) {
|
|
177
261
|
/** ignore */
|
|
178
262
|
}
|
|
179
263
|
case 5:
|
|
@@ -214,6 +298,54 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
214
298
|
}
|
|
215
299
|
return true;
|
|
216
300
|
}
|
|
301
|
+
ensureAckReceiver() {
|
|
302
|
+
if (this.ackReceiverRegistered) return;
|
|
303
|
+
if (!this.context) return;
|
|
304
|
+
var ch = this.context.channel;
|
|
305
|
+
if (typeof ch.addReceiver !== 'function' || typeof ch.removeReceiver !== 'function') return;
|
|
306
|
+
this.ackReceiver = (data, context) => {
|
|
307
|
+
if (!data || data.type !== _constants.MessageType.ACK) return;
|
|
308
|
+
var pending = this.ackWaiters.get(data.requestId);
|
|
309
|
+
if (!pending) return;
|
|
310
|
+
if (context && !context.handledBy) {
|
|
311
|
+
context.handledBy = `stream:${this.streamId}`;
|
|
312
|
+
}
|
|
313
|
+
clearTimeout(pending.timeoutId);
|
|
314
|
+
this.ackWaiters.delete(data.requestId);
|
|
315
|
+
pending.resolve(true);
|
|
316
|
+
};
|
|
317
|
+
ch.addReceiver(this.ackReceiver);
|
|
318
|
+
this.ackReceiverRegistered = true;
|
|
319
|
+
}
|
|
320
|
+
cleanupAckWaiters() {
|
|
321
|
+
this.ackWaiters.forEach(p => {
|
|
322
|
+
clearTimeout(p.timeoutId);
|
|
323
|
+
p.resolve(false);
|
|
324
|
+
});
|
|
325
|
+
this.ackWaiters.clear();
|
|
326
|
+
if (this.ackReceiverRegistered && this.ackReceiver && this.context) {
|
|
327
|
+
var ch = this.context.channel;
|
|
328
|
+
if (typeof ch.removeReceiver === 'function') {
|
|
329
|
+
try {
|
|
330
|
+
ch.removeReceiver(this.ackReceiver);
|
|
331
|
+
} catch (_unused6) {
|
|
332
|
+
/** ignore */
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
this.ackReceiverRegistered = false;
|
|
337
|
+
this.ackReceiver = undefined;
|
|
338
|
+
}
|
|
339
|
+
registerAckWaiter(requestId, timeoutMs, resolve) {
|
|
340
|
+
var timeoutId = setTimeout(() => {
|
|
341
|
+
this.ackWaiters.delete(requestId);
|
|
342
|
+
resolve(false);
|
|
343
|
+
}, timeoutMs);
|
|
344
|
+
this.ackWaiters.set(requestId, {
|
|
345
|
+
resolve,
|
|
346
|
+
timeoutId
|
|
347
|
+
});
|
|
348
|
+
}
|
|
217
349
|
clearExpireTimer() {
|
|
218
350
|
if (this.expireTimer) {
|
|
219
351
|
clearTimeout(this.expireTimer);
|
|
@@ -227,8 +359,11 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
227
359
|
this.expireTimer = setTimeout(() => {
|
|
228
360
|
if (this._state !== _constants.StreamState.STREAMING) return;
|
|
229
361
|
try {
|
|
362
|
+
this.emit(_constants.StreamEvent.EXPIRED, {
|
|
363
|
+
timeout: expireTimeout
|
|
364
|
+
});
|
|
230
365
|
this.error((0, _constants.formatMessage)(_constants.Messages.STREAM_EXPIRED, expireTimeout));
|
|
231
|
-
} catch (
|
|
366
|
+
} catch (_unused7) {
|
|
232
367
|
/** ignore timer-triggered send failures */
|
|
233
368
|
}
|
|
234
369
|
}, expireTimeout);
|
|
@@ -274,6 +409,13 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
274
409
|
metadata: _this3.metadata,
|
|
275
410
|
autoResolve: _this3.autoResolve
|
|
276
411
|
});
|
|
412
|
+
_this3.emit(_constants.StreamEvent.START, {
|
|
413
|
+
streamId: _this3.streamId,
|
|
414
|
+
type: _this3.type,
|
|
415
|
+
chunked: _this3.chunked,
|
|
416
|
+
mode: _this3.mode,
|
|
417
|
+
metadata: _this3.metadata
|
|
418
|
+
});
|
|
277
419
|
_context3.prev = 3;
|
|
278
420
|
if (!(_this3.mode === _constants.StreamMode.PUSH)) {
|
|
279
421
|
_context3.next = 5;
|
|
@@ -316,7 +458,9 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
316
458
|
/**
|
|
317
459
|
* Push a chunk manually (mode === 'push').
|
|
318
460
|
*/
|
|
319
|
-
|
|
461
|
+
|
|
462
|
+
write(data, doneOrOptions = false, options) {
|
|
463
|
+
var _opts$ackTimeout;
|
|
320
464
|
if (this.mode !== _constants.StreamMode.PUSH) {
|
|
321
465
|
throw new Error(_constants.Messages.STREAM_WRITE_ONLY_IN_PUSH_MODE);
|
|
322
466
|
}
|
|
@@ -329,12 +473,39 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
329
473
|
if (this._state !== _constants.StreamState.STREAMING) {
|
|
330
474
|
throw new Error(_constants.Messages.STREAM_ENDED);
|
|
331
475
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
476
|
+
var done = typeof doneOrOptions === 'boolean' ? doneOrOptions : false;
|
|
477
|
+
var opts = typeof doneOrOptions === 'object' ? doneOrOptions : options;
|
|
478
|
+
var requireAck = (opts === null || opts === void 0 ? void 0 : opts.requireAck) === true;
|
|
479
|
+
var ackTimeout = (_opts$ackTimeout = opts === null || opts === void 0 ? void 0 : opts.ackTimeout) !== null && _opts$ackTimeout !== void 0 ? _opts$ackTimeout : _constants.DefaultTimeout.ACK;
|
|
480
|
+
if (!requireAck) {
|
|
481
|
+
// push mode now buffers and sends based on pull credit
|
|
482
|
+
this.enqueue({
|
|
483
|
+
data,
|
|
484
|
+
done
|
|
485
|
+
});
|
|
486
|
+
this.emit(_constants.StreamEvent.WRITE, {
|
|
487
|
+
data,
|
|
488
|
+
done
|
|
489
|
+
});
|
|
490
|
+
this.flush();
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
return new Promise(resolve => {
|
|
494
|
+
var ackRequestId = (0, _utils.generateRequestId)();
|
|
495
|
+
this.enqueue({
|
|
496
|
+
data,
|
|
497
|
+
done,
|
|
498
|
+
requireAck: true,
|
|
499
|
+
ackRequestId,
|
|
500
|
+
ackTimeout,
|
|
501
|
+
resolveAck: resolve
|
|
502
|
+
});
|
|
503
|
+
this.emit(_constants.StreamEvent.WRITE, {
|
|
504
|
+
data,
|
|
505
|
+
done
|
|
506
|
+
});
|
|
507
|
+
this.flush();
|
|
336
508
|
});
|
|
337
|
-
this.flush();
|
|
338
509
|
}
|
|
339
510
|
|
|
340
511
|
/**
|
|
@@ -349,7 +520,7 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
349
520
|
// In push mode, end means enqueue a terminal marker if nothing queued
|
|
350
521
|
if (this.mode === _constants.StreamMode.PUSH) {
|
|
351
522
|
if (this.pendingQueue.length === 0) {
|
|
352
|
-
this.
|
|
523
|
+
this.enqueue({
|
|
353
524
|
data: undefined,
|
|
354
525
|
done: true
|
|
355
526
|
});
|
|
@@ -409,7 +580,7 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
409
580
|
_this4.endInternal();
|
|
410
581
|
return _context4.abrupt("continue", 7);
|
|
411
582
|
case 6:
|
|
412
|
-
_this4.
|
|
583
|
+
_this4.enqueue({
|
|
413
584
|
data: r.value,
|
|
414
585
|
done: false
|
|
415
586
|
});
|
|
@@ -439,7 +610,7 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
439
610
|
return Promise.resolve(_this4.nextFn());
|
|
440
611
|
case 11:
|
|
441
612
|
result = _context4.sent;
|
|
442
|
-
_this4.
|
|
613
|
+
_this4.enqueue({
|
|
443
614
|
data: result.data,
|
|
444
615
|
done: result.done
|
|
445
616
|
});
|
|
@@ -484,11 +655,46 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
484
655
|
/**
|
|
485
656
|
* Send data chunk
|
|
486
657
|
*/
|
|
487
|
-
sendData(data, done = false) {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
658
|
+
sendData(data, done = false, options) {
|
|
659
|
+
var _this$context$serverI2, _options$requestId;
|
|
660
|
+
if (!this.context) {
|
|
661
|
+
throw new Error(_constants.Messages.STREAM_NOT_BOUND);
|
|
662
|
+
}
|
|
663
|
+
var seq = this.seq++;
|
|
664
|
+
var isClientStream = this.context.clientId !== undefined && this.context.serverId === undefined;
|
|
665
|
+
var role = isClientStream ? _constants.MessageRole.CLIENT : _constants.MessageRole.SERVER;
|
|
666
|
+
var creatorId = (_this$context$serverI2 = this.context.serverId) !== null && _this$context$serverI2 !== void 0 ? _this$context$serverI2 : this.context.clientId;
|
|
667
|
+
var message = (0, _utils.createPostMessage)(_constants.MessageType.STREAM_DATA, (_options$requestId = options === null || options === void 0 ? void 0 : options.requestId) !== null && _options$requestId !== void 0 ? _options$requestId : this.context.requestId, {
|
|
668
|
+
secretKey: this.context.secretKey,
|
|
669
|
+
requireAck: options === null || options === void 0 ? void 0 : options.requireAck,
|
|
670
|
+
/**
|
|
671
|
+
* When per-frame requireAck is enabled, include a unique identifier in ack.
|
|
672
|
+
* - seq is the stream frame sequence number.
|
|
673
|
+
*
|
|
674
|
+
* NOTE: ack is an internal reserved field (not part of public API).
|
|
675
|
+
*/
|
|
676
|
+
ack: options !== null && options !== void 0 && options.requireAck ? {
|
|
677
|
+
id: `${this.streamId}:${seq}`
|
|
678
|
+
} : undefined,
|
|
679
|
+
body: {
|
|
680
|
+
streamId: this.streamId,
|
|
681
|
+
data: this.encodeData(data),
|
|
682
|
+
done,
|
|
683
|
+
seq
|
|
684
|
+
},
|
|
685
|
+
role,
|
|
686
|
+
creatorId,
|
|
687
|
+
targetId: this.context.targetId
|
|
688
|
+
});
|
|
689
|
+
var ok = this.context.channel.send(this.context.targetWindow, message, this.context.targetOrigin);
|
|
690
|
+
if (!ok) {
|
|
691
|
+
this._state = _constants.StreamState.CANCELLED;
|
|
692
|
+
this.clearExpireTimer();
|
|
693
|
+
throw new Error((0, _constants.formatMessage)(_constants.Messages.STREAM_CANCELLED, 'Target window closed'));
|
|
694
|
+
}
|
|
695
|
+
this.emit(_constants.StreamEvent.SEND, {
|
|
696
|
+
seq,
|
|
697
|
+
done
|
|
492
698
|
});
|
|
493
699
|
}
|
|
494
700
|
flush() {
|
|
@@ -500,9 +706,25 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
500
706
|
}
|
|
501
707
|
while (this.pullCredit > 0 && this.pendingQueue.length > 0 && this._state === _constants.StreamState.STREAMING) {
|
|
502
708
|
var item = this.pendingQueue.shift();
|
|
709
|
+
this.pendingBytes -= item.bytes;
|
|
503
710
|
this.pullCredit--;
|
|
504
711
|
try {
|
|
505
|
-
|
|
712
|
+
if (item.requireAck && item.ackRequestId && item.resolveAck) {
|
|
713
|
+
this.ensureAckReceiver();
|
|
714
|
+
if (this.ackReceiverRegistered) {
|
|
715
|
+
var _item$ackTimeout;
|
|
716
|
+
this.registerAckWaiter(item.ackRequestId, (_item$ackTimeout = item.ackTimeout) !== null && _item$ackTimeout !== void 0 ? _item$ackTimeout : _constants.DefaultTimeout.ACK, item.resolveAck);
|
|
717
|
+
this.sendData(item.data, item.done, {
|
|
718
|
+
requestId: item.ackRequestId,
|
|
719
|
+
requireAck: true
|
|
720
|
+
});
|
|
721
|
+
} else {
|
|
722
|
+
item.resolveAck(false);
|
|
723
|
+
this.sendData(item.data, item.done);
|
|
724
|
+
}
|
|
725
|
+
} else {
|
|
726
|
+
this.sendData(item.data, item.done);
|
|
727
|
+
}
|
|
506
728
|
} catch (e) {
|
|
507
729
|
var _this$rejectCompletio;
|
|
508
730
|
// send failure treated as cancellation
|
|
@@ -510,6 +732,9 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
510
732
|
this.clearExpireTimer();
|
|
511
733
|
this.clearIdleTimer();
|
|
512
734
|
this.unregisterControlHandler();
|
|
735
|
+
this.pendingQueue.length = 0;
|
|
736
|
+
this.pendingBytes = 0;
|
|
737
|
+
this.cleanupAckWaiters();
|
|
513
738
|
(_this$rejectCompletio = this.rejectCompletion) === null || _this$rejectCompletio === void 0 || _this$rejectCompletio.call(this, e instanceof Error ? e : new Error(String(e)));
|
|
514
739
|
throw e;
|
|
515
740
|
}
|
|
@@ -537,7 +762,15 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
537
762
|
this.clearExpireTimer();
|
|
538
763
|
this.clearIdleTimer();
|
|
539
764
|
this.unregisterControlHandler();
|
|
765
|
+
this.pendingQueue.length = 0;
|
|
766
|
+
this.pendingBytes = 0;
|
|
540
767
|
this.sendMessage(_constants.MessageType.STREAM_END);
|
|
768
|
+
this.emit(_constants.StreamEvent.END);
|
|
769
|
+
this.emit(_constants.StreamEvent.STATE, {
|
|
770
|
+
state: this._state
|
|
771
|
+
});
|
|
772
|
+
this.cleanupAckWaiters();
|
|
773
|
+
this.clearAllListeners();
|
|
541
774
|
(_this$resolveCompleti = this.resolveCompletion) === null || _this$resolveCompleti === void 0 || _this$resolveCompleti.call(this);
|
|
542
775
|
}
|
|
543
776
|
|
|
@@ -551,9 +784,19 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
551
784
|
this.clearExpireTimer();
|
|
552
785
|
this.clearIdleTimer();
|
|
553
786
|
this.unregisterControlHandler();
|
|
787
|
+
this.pendingQueue.length = 0;
|
|
788
|
+
this.pendingBytes = 0;
|
|
554
789
|
this.sendMessage(_constants.MessageType.STREAM_ERROR, {
|
|
555
790
|
error: message
|
|
556
791
|
});
|
|
792
|
+
this.emit(_constants.StreamEvent.ERROR, {
|
|
793
|
+
error: new Error(message)
|
|
794
|
+
});
|
|
795
|
+
this.emit(_constants.StreamEvent.STATE, {
|
|
796
|
+
state: this._state
|
|
797
|
+
});
|
|
798
|
+
this.cleanupAckWaiters();
|
|
799
|
+
this.clearAllListeners();
|
|
557
800
|
(_this$resolveCompleti2 = this.resolveCompletion) === null || _this$resolveCompleti2 === void 0 || _this$resolveCompleti2.call(this);
|
|
558
801
|
}
|
|
559
802
|
|
|
@@ -574,15 +817,26 @@ class IframeWritableStream extends _streamCore.IframeStreamCore {
|
|
|
574
817
|
this.clearExpireTimer();
|
|
575
818
|
this.clearIdleTimer();
|
|
576
819
|
this.unregisterControlHandler();
|
|
820
|
+
this.pendingQueue.length = 0;
|
|
821
|
+
this.pendingBytes = 0;
|
|
822
|
+
this.emit(_constants.StreamEvent.CANCEL, {
|
|
823
|
+
reason,
|
|
824
|
+
remote: false
|
|
825
|
+
});
|
|
826
|
+
this.emit(_constants.StreamEvent.STATE, {
|
|
827
|
+
state: this._state
|
|
828
|
+
});
|
|
577
829
|
if (this.context) {
|
|
578
830
|
try {
|
|
579
831
|
this.sendMessage(_constants.MessageType.STREAM_CANCEL, {
|
|
580
832
|
reason
|
|
581
833
|
});
|
|
582
|
-
} catch (
|
|
834
|
+
} catch (_unused8) {
|
|
583
835
|
// ignore send failures on cancel
|
|
584
836
|
}
|
|
585
837
|
}
|
|
838
|
+
this.cleanupAckWaiters();
|
|
839
|
+
this.clearAllListeners();
|
|
586
840
|
(_this$resolveCompleti3 = this.resolveCompletion) === null || _this$resolveCompleti3 === void 0 || _this$resolveCompleti3.call(this);
|
|
587
841
|
}
|
|
588
842
|
}
|
package/library/types/index.d.ts
CHANGED
|
@@ -159,7 +159,7 @@ export interface PostMessageData {
|
|
|
159
159
|
/** Message isolation key (used to isolate different businesses/instances) */
|
|
160
160
|
secretKey?: string;
|
|
161
161
|
/** Message type */
|
|
162
|
-
type: 'request' | 'ack' | 'async' | 'response' | 'error' | '
|
|
162
|
+
type: 'request' | 'ack' | 'async' | 'response' | 'error' | 'ping' | 'pong' | 'stream_start' | 'stream_data' | 'stream_end' | 'stream_error' | 'stream_cancel' | 'stream_pull' | 'stream_ack';
|
|
163
163
|
/** Request ID */
|
|
164
164
|
requestId: string;
|
|
165
165
|
/** Request path */
|
|
@@ -193,8 +193,7 @@ export interface PostMessageData {
|
|
|
193
193
|
* Whether the sender requires the receiver to send back a confirmation message.
|
|
194
194
|
*
|
|
195
195
|
* Typical usage:
|
|
196
|
-
* -
|
|
197
|
-
* - RESPONSE / ERROR: receiver sends RECEIVED to confirm it received the result
|
|
196
|
+
* - Any message: receiver sends ACK to confirm it accepted the message (ACK-only workflow)
|
|
198
197
|
*/
|
|
199
198
|
requireAck?: boolean;
|
|
200
199
|
/**
|
|
@@ -357,7 +356,7 @@ export type ServerHandler = (req: ServerRequest, res: ServerResponse) => any | P
|
|
|
357
356
|
/**
|
|
358
357
|
* server.on/off event names (low-level)
|
|
359
358
|
*/
|
|
360
|
-
export type ServerEventName = 'request' | 'ack' | 'async' | 'response' | 'error' | '
|
|
359
|
+
export type ServerEventName = 'request' | 'ack' | 'async' | 'response' | 'error' | 'ping' | 'pong';
|
|
361
360
|
/**
|
|
362
361
|
* Client interface
|
|
363
362
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../src/utils/ack.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAckId = getAckId;
|
|
7
|
+
exports.getAckMeta = getAckMeta;
|
|
8
|
+
exports.isAckMatch = isAckMatch;
|
|
9
|
+
/**
|
|
10
|
+
* ack is an internal reserved protocol field (previously named ackMeta).
|
|
11
|
+
*
|
|
12
|
+
* Semantics (ACK-only workflow):
|
|
13
|
+
* - If `ack` exists, it should contain a required `id` (string|number) for matching.
|
|
14
|
+
* - Fixed shape: { id, meta?: string } (meta is optional and must be a string if present).
|
|
15
|
+
* - Matching is by `id` only; never deep-compare other fields.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
function getAckId(ack) {
|
|
20
|
+
if (!ack || typeof ack !== 'object') return undefined;
|
|
21
|
+
var id = ack.id;
|
|
22
|
+
return typeof id === 'string' || typeof id === 'number' ? id : undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
function getAckMeta(ack) {
|
|
29
|
+
if (!ack || typeof ack !== 'object') return undefined;
|
|
30
|
+
var meta = ack.meta;
|
|
31
|
+
return typeof meta === 'string' ? meta : undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Match ack by `id` only.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
function isAckMatch(expected, received) {
|
|
39
|
+
if (expected === undefined) return true;
|
|
40
|
+
var expectedId = getAckId(expected);
|
|
41
|
+
var receivedId = getAckId(received);
|
|
42
|
+
if (expectedId === undefined || receivedId === undefined) return false;
|
|
43
|
+
return expectedId === receivedId;
|
|
44
|
+
}
|
package/library/utils/debug.js
CHANGED
|
@@ -229,7 +229,7 @@ function setupClientMessageDebugging(clientImpl) {
|
|
|
229
229
|
log('info', _constants.Messages.DEBUG_CLIENT_SENDING_PING, {
|
|
230
230
|
requestId
|
|
231
231
|
});
|
|
232
|
-
} else if (type === _constants.MessageType.
|
|
232
|
+
} else if (type === _constants.MessageType.ACK) {
|
|
233
233
|
log('info', _constants.Messages.DEBUG_CLIENT_SENDING_RECEIVED_ACK, {
|
|
234
234
|
requestId
|
|
235
235
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CASvE;AAGD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAuBlF;AAED,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,UAAU,CAAC;AAKzB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAA;CAAE,GACpF,MAAM,GAAG,IAAI,CAkEf;AAED,oCAAoC;AACpC,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAWxD"}
|
package/library/utils/index.js
CHANGED
|
@@ -85,6 +85,7 @@ require("core-js/modules/web.dom-collections.iterator.js");
|
|
|
85
85
|
require("core-js/modules/web.url.js");
|
|
86
86
|
require("core-js/modules/web.url.to-json.js");
|
|
87
87
|
require("core-js/modules/web.url-search-params.js");
|
|
88
|
+
var _constants = require("../constants");
|
|
88
89
|
var _protocol = require("./protocol");
|
|
89
90
|
var _cache = require("./cache");
|
|
90
91
|
Object.keys(_cache).forEach(function (key) {
|
|
@@ -154,12 +155,12 @@ function generateInstanceId() {
|
|
|
154
155
|
*/
|
|
155
156
|
function getIframeTargetOrigin(iframe) {
|
|
156
157
|
if (!iframe.src) {
|
|
157
|
-
return
|
|
158
|
+
return _constants.OriginConstant.ANY;
|
|
158
159
|
}
|
|
159
160
|
try {
|
|
160
161
|
return new URL(iframe.src).origin;
|
|
161
162
|
} catch (e) {
|
|
162
|
-
return
|
|
163
|
+
return _constants.OriginConstant.ANY;
|
|
163
164
|
}
|
|
164
165
|
}
|
|
165
166
|
function isPromise(value) {
|
|
@@ -202,7 +203,7 @@ function isWindowAvailable(targetWindow) {
|
|
|
202
203
|
|
|
203
204
|
// Export origin matching functions
|
|
204
205
|
|
|
205
|
-
//
|
|
206
|
+
// ack is a reserved protocol field (internal). Do not export helpers publicly.
|
|
206
207
|
|
|
207
208
|
// Export Cookie-related functions
|
|
208
209
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/utils/origin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/utils/origin.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAErE;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAa3E"}
|
package/library/utils/origin.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.matchOrigin = matchOrigin;
|
|
|
7
7
|
require("core-js/modules/es.regexp.constructor.js");
|
|
8
8
|
require("core-js/modules/es.regexp.exec.js");
|
|
9
9
|
require("core-js/modules/es.regexp.to-string.js");
|
|
10
|
+
var _constants = require("../constants");
|
|
10
11
|
/**
|
|
11
12
|
* Origin matcher type (supports string, RegExp, Array)
|
|
12
13
|
*/
|
|
@@ -20,7 +21,7 @@ require("core-js/modules/es.regexp.to-string.js");
|
|
|
20
21
|
* - Array: any item matches.
|
|
21
22
|
*/
|
|
22
23
|
function matchOrigin(origin, matcher) {
|
|
23
|
-
if (matcher ===
|
|
24
|
+
if (matcher === _constants.OriginConstant.ANY) return true;
|
|
24
25
|
if (typeof matcher === 'string') {
|
|
25
26
|
return origin === matcher;
|
|
26
27
|
}
|