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.
Files changed (96) hide show
  1. package/README.CN.md +271 -12
  2. package/README.md +268 -11
  3. package/library/__tests__/channel.test.ts +420 -0
  4. package/library/__tests__/debug.test.ts +588 -0
  5. package/library/__tests__/dispatcher.test.ts +481 -0
  6. package/library/__tests__/interceptors.test.ts +22 -0
  7. package/library/__tests__/requestIframe.test.ts +2317 -99
  8. package/library/__tests__/server.test.ts +738 -0
  9. package/library/api/client.d.js +5 -0
  10. package/library/api/client.d.ts.map +1 -1
  11. package/library/api/client.js +11 -6
  12. package/library/api/server.d.js +5 -0
  13. package/library/api/server.d.ts +4 -3
  14. package/library/api/server.d.ts.map +1 -1
  15. package/library/api/server.js +25 -7
  16. package/library/constants/index.d.js +36 -0
  17. package/library/constants/index.d.ts +14 -4
  18. package/library/constants/index.d.ts.map +1 -1
  19. package/library/constants/index.js +15 -7
  20. package/library/constants/messages.d.js +5 -0
  21. package/library/constants/messages.d.ts +35 -0
  22. package/library/constants/messages.d.ts.map +1 -1
  23. package/library/constants/messages.js +36 -1
  24. package/library/core/client-server.d.ts +101 -0
  25. package/library/core/client-server.d.ts.map +1 -0
  26. package/library/core/client-server.js +266 -0
  27. package/library/core/client.d.js +5 -0
  28. package/library/core/client.d.ts +38 -6
  29. package/library/core/client.d.ts.map +1 -1
  30. package/library/core/client.js +198 -24
  31. package/library/core/request.d.js +5 -0
  32. package/library/core/response.d.js +5 -0
  33. package/library/core/response.d.ts +5 -1
  34. package/library/core/response.d.ts.map +1 -1
  35. package/library/core/response.js +85 -70
  36. package/library/core/server-client.d.js +5 -0
  37. package/library/core/server-client.d.ts +3 -1
  38. package/library/core/server-client.d.ts.map +1 -1
  39. package/library/core/server-client.js +19 -9
  40. package/library/core/server.d.js +5 -0
  41. package/library/core/server.d.ts +11 -3
  42. package/library/core/server.d.ts.map +1 -1
  43. package/library/core/server.js +112 -54
  44. package/library/index.d.ts +1 -1
  45. package/library/index.js +2 -2
  46. package/library/interceptors/index.d.js +5 -0
  47. package/library/interceptors/index.d.ts +4 -0
  48. package/library/interceptors/index.d.ts.map +1 -1
  49. package/library/interceptors/index.js +7 -0
  50. package/library/message/channel.d.js +5 -0
  51. package/library/message/channel.d.ts +3 -1
  52. package/library/message/channel.d.ts.map +1 -1
  53. package/library/message/dispatcher.d.js +5 -0
  54. package/library/message/dispatcher.d.ts +7 -2
  55. package/library/message/dispatcher.d.ts.map +1 -1
  56. package/library/message/dispatcher.js +47 -2
  57. package/library/message/index.d.js +25 -0
  58. package/library/stream/file-stream.d.js +4 -0
  59. package/library/stream/file-stream.d.ts +5 -0
  60. package/library/stream/file-stream.d.ts.map +1 -1
  61. package/library/stream/file-stream.js +41 -12
  62. package/library/stream/index.d.js +58 -0
  63. package/library/stream/readable-stream.d.js +5 -0
  64. package/library/stream/readable-stream.d.ts.map +1 -1
  65. package/library/stream/readable-stream.js +32 -30
  66. package/library/stream/types.d.js +5 -0
  67. package/library/stream/types.d.ts +18 -0
  68. package/library/stream/types.d.ts.map +1 -1
  69. package/library/stream/writable-stream.d.js +5 -0
  70. package/library/stream/writable-stream.d.ts +1 -0
  71. package/library/stream/writable-stream.d.ts.map +1 -1
  72. package/library/stream/writable-stream.js +7 -2
  73. package/library/types/index.d.js +5 -0
  74. package/library/types/index.d.ts +79 -19
  75. package/library/types/index.d.ts.map +1 -1
  76. package/library/utils/cache.d.js +5 -0
  77. package/library/utils/cache.d.ts +24 -0
  78. package/library/utils/cache.d.ts.map +1 -1
  79. package/library/utils/cache.js +76 -0
  80. package/library/utils/cookie.d.js +5 -0
  81. package/library/utils/debug.d.js +5 -0
  82. package/library/utils/debug.d.ts.map +1 -1
  83. package/library/utils/debug.js +382 -20
  84. package/library/utils/index.d.js +94 -0
  85. package/library/utils/index.d.ts +5 -0
  86. package/library/utils/index.d.ts.map +1 -1
  87. package/library/utils/index.js +14 -1
  88. package/library/utils/path-match.d.js +5 -0
  89. package/library/utils/protocol.d.js +5 -0
  90. package/package.json +16 -2
  91. package/react/library/__tests__/index.test.d.ts +2 -0
  92. package/react/library/__tests__/index.test.d.ts.map +1 -0
  93. package/react/library/__tests__/index.test.tsx +770 -0
  94. package/react/library/index.d.ts +118 -0
  95. package/react/library/index.d.ts.map +1 -0
  96. package/react/library/index.js +232 -0
@@ -1,8 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/es.array.filter.js");
4
- require("core-js/modules/es.object.get-own-property-descriptors.js");
5
- require("core-js/modules/web.dom-collections.for-each.js");
6
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
7
4
  Object.defineProperty(exports, "__esModule", {
8
5
  value: true
@@ -18,8 +15,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
18
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
16
  var _utils = require("../utils");
20
17
  var _constants = require("../constants");
21
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
+ var _stream = require("../stream");
23
19
  /**
24
20
  * Callback waiting for client acknowledgment
25
21
  */
@@ -28,7 +24,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
28
24
  * ServerResponse implementation
29
25
  */
30
26
  class ServerResponseImpl {
31
- constructor(requestId, path, secretKey, targetWindow, targetOrigin, channel) {
27
+ constructor(requestId, path, secretKey, targetWindow, targetOrigin, channel, serverId, targetId) {
32
28
  (0, _defineProperty2.default)(this, "statusCode", _constants.HttpStatus.OK);
33
29
  (0, _defineProperty2.default)(this, "headers", {});
34
30
  (0, _defineProperty2.default)(this, "_sent", false);
@@ -38,6 +34,8 @@ class ServerResponseImpl {
38
34
  this.targetWindow = targetWindow;
39
35
  this.targetOrigin = targetOrigin;
40
36
  this.channel = channel;
37
+ this.serverId = serverId;
38
+ this.targetId = targetId;
41
39
  }
42
40
 
43
41
  /**
@@ -82,7 +80,10 @@ class ServerResponseImpl {
82
80
  status: this.statusCode,
83
81
  statusText: (0, _constants.getStatusText)(this.statusCode),
84
82
  headers: this.headers,
85
- requireAck: false
83
+ requireAck: false,
84
+ role: _constants.MessageRole.SERVER,
85
+ creatorId: this.serverId,
86
+ targetId: this.targetId
86
87
  }));
87
88
  return Promise.resolve(true);
88
89
  }
@@ -97,7 +98,10 @@ class ServerResponseImpl {
97
98
  status: this.statusCode,
98
99
  statusText: (0, _constants.getStatusText)(this.statusCode),
99
100
  headers: this.headers,
100
- requireAck: true
101
+ requireAck: true,
102
+ role: _constants.MessageRole.SERVER,
103
+ creatorId: this.serverId,
104
+ targetId: this.targetId
101
105
  }));
102
106
  });
103
107
  }
@@ -107,83 +111,92 @@ class ServerResponseImpl {
107
111
  }
108
112
  sendFile(content, options) {
109
113
  var _this = this;
110
- return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
111
- var _options$requireAck2;
112
- var requireAck, base64Content, mimeType, fileName, fileHeaders, messageData;
113
- return _regenerator.default.wrap(function (_context) {
114
- while (1) switch (_context.prev = _context.next) {
114
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
115
+ var mimeType, fileName, fileContent, stream;
116
+ return _regenerator.default.wrap(function (_context2) {
117
+ while (1) switch (_context2.prev = _context2.next) {
115
118
  case 0:
116
119
  if (!_this._sent) {
117
- _context.next = 1;
120
+ _context2.next = 1;
118
121
  break;
119
122
  }
120
- return _context.abrupt("return", false);
123
+ return _context2.abrupt("return", false);
121
124
  case 1:
122
- _this._sent = true;
123
- requireAck = (_options$requireAck2 = options === null || options === void 0 ? void 0 : options.requireAck) !== null && _options$requireAck2 !== void 0 ? _options$requireAck2 : false;
124
125
  mimeType = (options === null || options === void 0 ? void 0 : options.mimeType) || 'application/octet-stream';
125
126
  fileName = options === null || options === void 0 ? void 0 : options.fileName;
126
127
  if (!(typeof content === 'string')) {
127
- _context.next = 2;
128
+ _context2.next = 2;
128
129
  break;
129
130
  }
130
131
  // If it's a plain string, convert to base64
131
- base64Content = btoa(unescape(encodeURIComponent(content)));
132
- _context.next = 6;
132
+ fileContent = btoa(unescape(encodeURIComponent(content)));
133
+ _context2.next = 6;
133
134
  break;
134
135
  case 2:
135
136
  if (!(content instanceof File)) {
136
- _context.next = 4;
137
+ _context2.next = 4;
137
138
  break;
138
139
  }
139
140
  mimeType = content.type || mimeType;
140
141
  fileName = fileName || content.name;
141
- _context.next = 3;
142
+ _context2.next = 3;
142
143
  return _this.blobToBase64(content);
143
144
  case 3:
144
- base64Content = _context.sent;
145
- _context.next = 6;
145
+ fileContent = _context2.sent;
146
+ _context2.next = 6;
146
147
  break;
147
148
  case 4:
148
- _context.next = 5;
149
+ _context2.next = 5;
149
150
  return _this.blobToBase64(content);
150
151
  case 5:
151
- base64Content = _context.sent;
152
+ fileContent = _context2.sent;
152
153
  case 6:
153
- // Merge file-related headers
154
- fileHeaders = _objectSpread(_objectSpread({}, _this.headers), {}, {
155
- [_constants.HttpHeader.CONTENT_TYPE]: mimeType,
156
- [_constants.HttpHeader.CONTENT_DISPOSITION]: fileName ? `attachment; filename="${fileName}"` : 'attachment'
157
- });
158
- messageData = (0, _utils.createPostMessage)(_constants.MessageType.RESPONSE, _this.requestId, {
159
- path: _this.path,
160
- secretKey: _this.secretKey,
161
- status: _this.statusCode,
162
- statusText: (0, _constants.getStatusText)(_this.statusCode),
163
- headers: fileHeaders,
164
- fileData: {
165
- content: base64Content,
166
- mimeType,
167
- fileName
168
- },
169
- requireAck
170
- }); // If acknowledgment not required, send directly and return true
171
- if (requireAck) {
172
- _context.next = 7;
173
- break;
154
+ // Set file-related headers
155
+ _this.setHeader(_constants.HttpHeader.CONTENT_TYPE, mimeType);
156
+ if (fileName) {
157
+ _this.setHeader(_constants.HttpHeader.CONTENT_DISPOSITION, `attachment; filename="${fileName}"`);
158
+ } else {
159
+ _this.setHeader(_constants.HttpHeader.CONTENT_DISPOSITION, 'attachment');
174
160
  }
175
- _this.sendMessage(messageData);
176
- return _context.abrupt("return", true);
161
+
162
+ // Create file stream with autoResolve enabled
163
+ stream = new _stream.IframeFileWritableStream({
164
+ filename: fileName || 'file',
165
+ mimeType,
166
+ chunked: false,
167
+ // File is sent in one chunk
168
+ autoResolve: true,
169
+ // Client will automatically resolve to fileData
170
+ next: function () {
171
+ var _next = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
172
+ return _regenerator.default.wrap(function (_context) {
173
+ while (1) switch (_context.prev = _context.next) {
174
+ case 0:
175
+ return _context.abrupt("return", {
176
+ data: fileContent,
177
+ done: true
178
+ });
179
+ case 1:
180
+ case "end":
181
+ return _context.stop();
182
+ }
183
+ }, _callee);
184
+ }));
185
+ function next() {
186
+ return _next.apply(this, arguments);
187
+ }
188
+ return next;
189
+ }()
190
+ }); // Send stream (this will handle the requireAck logic internally and set _sent)
191
+ _context2.next = 7;
192
+ return _this.sendStream(stream);
177
193
  case 7:
178
- return _context.abrupt("return", new Promise(resolve => {
179
- _this._setOnAckCallback(resolve);
180
- _this.sendMessage(messageData);
181
- }));
194
+ return _context2.abrupt("return", true);
182
195
  case 8:
183
196
  case "end":
184
- return _context.stop();
197
+ return _context2.stop();
185
198
  }
186
- }, _callee);
199
+ }, _callee2);
187
200
  }))();
188
201
  }
189
202
 
@@ -193,15 +206,15 @@ class ServerResponseImpl {
193
206
  */
194
207
  sendStream(stream) {
195
208
  var _this2 = this;
196
- return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
197
- return _regenerator.default.wrap(function (_context2) {
198
- while (1) switch (_context2.prev = _context2.next) {
209
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
210
+ return _regenerator.default.wrap(function (_context3) {
211
+ while (1) switch (_context3.prev = _context3.next) {
199
212
  case 0:
200
213
  if (!_this2._sent) {
201
- _context2.next = 1;
214
+ _context3.next = 1;
202
215
  break;
203
216
  }
204
- return _context2.abrupt("return");
217
+ return _context3.abrupt("return");
205
218
  case 1:
206
219
  _this2._sent = true;
207
220
 
@@ -211,17 +224,19 @@ class ServerResponseImpl {
211
224
  targetWindow: _this2.targetWindow,
212
225
  targetOrigin: _this2.targetOrigin,
213
226
  secretKey: _this2.secretKey,
214
- channel: _this2.channel
227
+ channel: _this2.channel,
228
+ serverId: _this2.serverId,
229
+ targetId: _this2.targetId
215
230
  });
216
231
 
217
232
  // Start stream transmission
218
- _context2.next = 2;
233
+ _context3.next = 2;
219
234
  return stream.start();
220
235
  case 2:
221
236
  case "end":
222
- return _context2.stop();
237
+ return _context3.stop();
223
238
  }
224
- }, _callee2);
239
+ }, _callee3);
225
240
  }))();
226
241
  }
227
242
  status(code) {
@@ -297,11 +312,11 @@ class ServerResponseImpl {
297
312
  return this;
298
313
  }
299
314
  blobToBase64(blob) {
300
- return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
301
- return _regenerator.default.wrap(function (_context3) {
302
- while (1) switch (_context3.prev = _context3.next) {
315
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
316
+ return _regenerator.default.wrap(function (_context4) {
317
+ while (1) switch (_context4.prev = _context4.next) {
303
318
  case 0:
304
- return _context3.abrupt("return", new Promise((resolve, reject) => {
319
+ return _context4.abrupt("return", new Promise((resolve, reject) => {
305
320
  var reader = new FileReader();
306
321
  reader.onloadend = () => {
307
322
  var result = reader.result;
@@ -314,9 +329,9 @@ class ServerResponseImpl {
314
329
  }));
315
330
  case 1:
316
331
  case "end":
317
- return _context3.stop();
332
+ return _context4.stop();
318
333
  }
319
- }, _callee3);
334
+ }, _callee4);
320
335
  }))();
321
336
  }
322
337
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -14,6 +14,8 @@ export interface ClientServerOptions {
14
14
  ackTimeout?: number;
15
15
  /** Protocol version validator (optional, uses built-in validation by default) */
16
16
  versionValidator?: VersionValidator;
17
+ /** Whether to automatically open when creating the client server. Default is true. */
18
+ autoOpen?: boolean;
17
19
  }
18
20
  /**
19
21
  * RequestIframeClientServer - Client-side message server
@@ -34,7 +36,7 @@ export declare class RequestIframeClientServer {
34
36
  private readonly unregisterFns;
35
37
  /** Whether opened */
36
38
  private _isOpen;
37
- constructor(options?: ClientServerOptions);
39
+ constructor(options?: ClientServerOptions, instanceId?: string);
38
40
  /**
39
41
  * Open message handling (register message handlers)
40
42
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server-client.d.ts","sourceRoot":"","sources":["../../src/core/server-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAoB7F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,8BAA8B;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAwB;IAE/C,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,qBAAqB;IACrB,OAAO,CAAC,OAAO,CAAS;gBAEL,OAAO,CAAC,EAAE,mBAAmB;IAYhD;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsExB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAI/D,oBAAoB;IACpB,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,2CAA2C;IAC3C,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED;;OAEG;IACI,mBAAmB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,EACpC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC7B,IAAI;IASP;;OAEG;IACI,uBAAuB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,EACxC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAC9B,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACI,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACI,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIpF;;OAEG;IACI,OAAO,IAAI,IAAI;CAavB"}
1
+ {"version":3,"file":"server-client.d.ts","sourceRoot":"","sources":["../../src/core/server-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAoB7F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,8BAA8B;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAwB;IAE/C,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,qBAAqB;IACrB,OAAO,CAAC,OAAO,CAAS;gBAEL,OAAO,CAAC,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,MAAM;IAcrE;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoFxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAI/D,oBAAoB;IACpB,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,2CAA2C;IAC3C,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED;;OAEG;IACI,mBAAmB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,EACpC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC7B,IAAI;IASP;;OAEG;IACI,uBAAuB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,EACxC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAC9B,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACI,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACI,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIpF;;OAEG;IACI,OAAO,IAAI,IAAI;CAavB"}
@@ -37,7 +37,7 @@ var _constants = require("../constants");
37
37
  * Uses shared MessageDispatcher (backed by MessageChannel) to listen for and send messages
38
38
  */
39
39
  class RequestIframeClientServer {
40
- constructor(options) {
40
+ constructor(options, instanceId) {
41
41
  var _options$ackTimeout, _options$versionValid;
42
42
  /** Pending responses awaiting client acknowledgment */
43
43
  (0, _defineProperty2.default)(this, "pendingAcks", new Map());
@@ -47,15 +47,17 @@ class RequestIframeClientServer {
47
47
  (0, _defineProperty2.default)(this, "unregisterFns", []);
48
48
  /** Whether opened */
49
49
  (0, _defineProperty2.default)(this, "_isOpen", false);
50
- this.ackTimeout = (_options$ackTimeout = options === null || options === void 0 ? void 0 : options.ackTimeout) !== null && _options$ackTimeout !== void 0 ? _options$ackTimeout : _constants.DefaultTimeout.SERVER_ACK;
50
+ this.ackTimeout = (_options$ackTimeout = options === null || options === void 0 ? void 0 : options.ackTimeout) !== null && _options$ackTimeout !== void 0 ? _options$ackTimeout : _constants.DefaultTimeout.ACK;
51
51
  this.versionValidator = (_options$versionValid = options === null || options === void 0 ? void 0 : options.versionValidator) !== null && _options$versionValid !== void 0 ? _options$versionValid : _utils.isCompatibleVersion;
52
52
 
53
53
  // Get or create shared channel and create dispatcher
54
54
  var channel = (0, _cache.getOrCreateMessageChannel)(options === null || options === void 0 ? void 0 : options.secretKey);
55
- this.dispatcher = new _message.MessageDispatcher(channel);
55
+ this.dispatcher = new _message.MessageDispatcher(channel, _constants.MessageRole.CLIENT, instanceId);
56
56
 
57
- // Auto-open by default
58
- this.open();
57
+ // Auto-open by default (unless explicitly set to false)
58
+ if ((options === null || options === void 0 ? void 0 : options.autoOpen) !== false) {
59
+ this.open();
60
+ }
59
61
  }
60
62
 
61
63
  /**
@@ -113,8 +115,16 @@ class RequestIframeClientServer {
113
115
  // Handle PONG messages
114
116
  this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.PONG, (data, context) => this.handlePong(data, context), handlerOptions));
115
117
 
116
- // Handle stream messages (stream_*)
117
- this.unregisterFns.push(this.dispatcher.registerHandler(type => type.startsWith('stream_'), (data, context) => {
118
+ // Handle stream_start messages (route to handleClientResponse so it reaches send callback)
119
+ // Note: stream_start is handled in send callback, not through streamCallback
120
+ this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.STREAM_START, (data, context) => {
121
+ // Route to handleClientResponse so it reaches send callback
122
+ this.handleClientResponse(data, context);
123
+ // Don't call streamCallback here - stream_start is handled in send callback
124
+ }, handlerOptions));
125
+
126
+ // Handle other stream messages (stream_data, stream_end, etc.)
127
+ this.unregisterFns.push(this.dispatcher.registerHandler(type => type.startsWith('stream_') && type !== _constants.MessageType.STREAM_START, (data, context) => {
118
128
  var _this$streamCallback;
119
129
  return (_this$streamCallback = this.streamCallback) === null || _this$streamCallback === void 0 ? void 0 : _this$streamCallback.call(this, data, context);
120
130
  }, handlerOptions));
@@ -142,8 +152,8 @@ class RequestIframeClientServer {
142
152
  if (pending.origin && pending.origin !== '*' && context.origin !== pending.origin) {
143
153
  return;
144
154
  }
145
- // ack and async don't delete pending
146
- if (data.type === _constants.MessageType.ACK || data.type === _constants.MessageType.ASYNC) {
155
+ // ack, async, and stream_start don't delete pending (stream_start needs to keep pending for stream_data/stream_end)
156
+ if (data.type === _constants.MessageType.ACK || data.type === _constants.MessageType.ASYNC || data.type === _constants.MessageType.STREAM_START) {
147
157
  pending.resolve(data);
148
158
  return;
149
159
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -6,16 +6,22 @@ import { MessageDispatcher, VersionValidator } from '../message';
6
6
  export interface ServerOptions {
7
7
  /** Message isolation secret key */
8
8
  secretKey?: string;
9
+ /** Custom server instance ID (if specified, server will use this ID instead of generating one) */
10
+ id?: string;
9
11
  /** ACK timeout duration */
10
12
  ackTimeout?: number;
11
13
  /** Protocol version validator (optional, uses built-in validator by default) */
12
14
  versionValidator?: VersionValidator;
15
+ /** Whether to automatically open when creating the server. Default is true. */
16
+ autoOpen?: boolean;
13
17
  }
14
18
  /**
15
19
  * RequestIframeServer implementation
16
20
  * Uses shared MessageDispatcher (backed by MessageChannel) to listen for and send messages
17
21
  */
18
22
  export declare class RequestIframeServerImpl implements RequestIframeServer {
23
+ /** Unique instance ID */
24
+ readonly id: string;
19
25
  private readonly dispatcher;
20
26
  private readonly ackTimeout;
21
27
  private readonly versionValidator;
@@ -60,6 +66,8 @@ export declare class RequestIframeServerImpl implements RequestIframeServer {
60
66
  get secretKey(): string | undefined;
61
67
  /** Get the underlying MessageDispatcher */
62
68
  get messageDispatcher(): MessageDispatcher;
69
+ private handleRequestError;
70
+ private handleRequestResult;
63
71
  /**
64
72
  * Handle request
65
73
  */
@@ -70,10 +78,10 @@ export declare class RequestIframeServerImpl implements RequestIframeServer {
70
78
  private registerPendingAck;
71
79
  use(middleware: Middleware): void;
72
80
  use(path: PathMatcher, middleware: Middleware): void;
73
- on(path: string, handler: ServerHandler): void;
81
+ on(path: string, handler: ServerHandler): () => void;
74
82
  private runMiddlewares;
75
- off(path: string): void;
76
- map(handlers: Record<string, ServerHandler>): void;
83
+ off(path: string | string[]): void;
84
+ map(handlers: Record<string, ServerHandler>): (() => void);
77
85
  /**
78
86
  * Destroy (close and release channel reference)
79
87
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AA8BjF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IAEpD,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,yBAAyB;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEL,OAAO,CAAC,EAAE,aAAa;IAY1C;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB,oBAAoB;IACpB,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,2CAA2C;IAC3C,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA2HrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAanB,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IACjC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAepD,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD,OAAO,CAAC,cAAc;IA4Cf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI;IAMzD;;OAEG;IACI,OAAO,IAAI,IAAI;CAgBvB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AAiCjF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,yBAAyB;IACzB,SAAgB,EAAE,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IAEpD,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,yBAAyB;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEL,OAAO,CAAC,EAAE,aAAa;IAgB1C;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB,oBAAoB;IACpB,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,2CAA2C;IAC3C,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAoHrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAanB,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IACjC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAepD,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,IAAI;IAU3D,OAAO,CAAC,cAAc;IA4Cf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAYlC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC;IAUjE;;OAEG;IACI,OAAO,IAAI,IAAI;CAgBvB"}