request-iframe 0.0.2 → 0.0.4

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 (84) hide show
  1. package/QUICKSTART.CN.md +35 -8
  2. package/QUICKSTART.md +35 -8
  3. package/README.CN.md +439 -36
  4. package/README.md +496 -30
  5. package/library/__tests__/channel.test.ts +420 -0
  6. package/library/__tests__/coverage-branches.test.ts +356 -0
  7. package/library/__tests__/debug.test.ts +588 -0
  8. package/library/__tests__/dispatcher.test.ts +481 -0
  9. package/library/__tests__/requestIframe.test.ts +3163 -185
  10. package/library/__tests__/server.test.ts +738 -0
  11. package/library/__tests__/stream.test.ts +46 -15
  12. package/library/api/client.d.ts.map +1 -1
  13. package/library/api/client.js +12 -6
  14. package/library/api/server.d.ts +4 -3
  15. package/library/api/server.d.ts.map +1 -1
  16. package/library/api/server.js +25 -7
  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.ts +37 -0
  21. package/library/constants/messages.d.ts.map +1 -1
  22. package/library/constants/messages.js +38 -1
  23. package/library/core/client-server.d.ts +105 -0
  24. package/library/core/client-server.d.ts.map +1 -0
  25. package/library/core/client-server.js +289 -0
  26. package/library/core/client.d.ts +53 -10
  27. package/library/core/client.d.ts.map +1 -1
  28. package/library/core/client.js +529 -207
  29. package/library/core/request.d.ts +3 -1
  30. package/library/core/request.d.ts.map +1 -1
  31. package/library/core/request.js +2 -1
  32. package/library/core/response.d.ts +30 -4
  33. package/library/core/response.d.ts.map +1 -1
  34. package/library/core/response.js +176 -100
  35. package/library/core/server-client.d.ts +3 -1
  36. package/library/core/server-client.d.ts.map +1 -1
  37. package/library/core/server-client.js +19 -9
  38. package/library/core/server.d.ts +22 -1
  39. package/library/core/server.d.ts.map +1 -1
  40. package/library/core/server.js +304 -55
  41. package/library/index.d.ts +3 -2
  42. package/library/index.d.ts.map +1 -1
  43. package/library/index.js +34 -5
  44. package/library/interceptors/index.d.ts.map +1 -1
  45. package/library/message/channel.d.ts +3 -1
  46. package/library/message/channel.d.ts.map +1 -1
  47. package/library/message/dispatcher.d.ts +7 -2
  48. package/library/message/dispatcher.d.ts.map +1 -1
  49. package/library/message/dispatcher.js +48 -2
  50. package/library/message/index.d.ts.map +1 -1
  51. package/library/stream/file-stream.d.ts +5 -0
  52. package/library/stream/file-stream.d.ts.map +1 -1
  53. package/library/stream/file-stream.js +41 -12
  54. package/library/stream/index.d.ts +11 -1
  55. package/library/stream/index.d.ts.map +1 -1
  56. package/library/stream/index.js +21 -3
  57. package/library/stream/readable-stream.d.ts.map +1 -1
  58. package/library/stream/readable-stream.js +32 -30
  59. package/library/stream/types.d.ts +20 -2
  60. package/library/stream/types.d.ts.map +1 -1
  61. package/library/stream/writable-stream.d.ts +2 -1
  62. package/library/stream/writable-stream.d.ts.map +1 -1
  63. package/library/stream/writable-stream.js +13 -10
  64. package/library/types/index.d.ts +106 -32
  65. package/library/types/index.d.ts.map +1 -1
  66. package/library/utils/cache.d.ts +24 -0
  67. package/library/utils/cache.d.ts.map +1 -1
  68. package/library/utils/cache.js +76 -0
  69. package/library/utils/cookie.d.ts.map +1 -1
  70. package/library/utils/debug.d.ts.map +1 -1
  71. package/library/utils/debug.js +382 -20
  72. package/library/utils/index.d.ts +19 -0
  73. package/library/utils/index.d.ts.map +1 -1
  74. package/library/utils/index.js +113 -2
  75. package/library/utils/path-match.d.ts +16 -0
  76. package/library/utils/path-match.d.ts.map +1 -1
  77. package/library/utils/path-match.js +65 -0
  78. package/library/utils/protocol.d.ts.map +1 -1
  79. package/package.json +4 -1
  80. package/react/library/__tests__/index.test.tsx +274 -281
  81. package/react/library/index.d.ts +4 -3
  82. package/react/library/index.d.ts.map +1 -1
  83. package/react/library/index.js +225 -158
  84. package/react/package.json +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["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,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,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;AAiDjF;;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,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2C;IAEjF,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwD;IAEvF,+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;IAkDxB,qEAAqE;IACrE,OAAO,CAAC,iBAAiB;IAgHzB,OAAO,CAAC,qBAAqB;IAU7B;;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;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwIrB;;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"}
@@ -1,16 +1,29 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.symbol.description.js");
4
+ require("core-js/modules/es.array.filter.js");
5
+ require("core-js/modules/es.array.from.js");
6
+ require("core-js/modules/es.array.slice.js");
7
+ require("core-js/modules/es.object.get-own-property-descriptors.js");
8
+ require("core-js/modules/es.regexp.to-string.js");
3
9
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
10
  Object.defineProperty(exports, "__esModule", {
5
11
  value: true
6
12
  });
7
13
  exports.RequestIframeServerImpl = void 0;
14
+ require("core-js/modules/es.array.includes.js");
8
15
  require("core-js/modules/es.array.iterator.js");
9
16
  require("core-js/modules/es.map.js");
10
17
  require("core-js/modules/es.object.entries.js");
11
18
  require("core-js/modules/es.promise.js");
19
+ require("core-js/modules/es.regexp.exec.js");
20
+ require("core-js/modules/es.string.includes.js");
21
+ require("core-js/modules/es.string.match.js");
22
+ require("core-js/modules/es.string.replace.js");
23
+ require("core-js/modules/es.string.starts-with.js");
12
24
  require("core-js/modules/web.dom-collections.for-each.js");
13
25
  require("core-js/modules/web.dom-collections.iterator.js");
26
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
27
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
28
  var _utils = require("../utils");
16
29
  var _pathMatch = require("../utils/path-match");
@@ -19,6 +32,12 @@ var _response = require("./response");
19
32
  var _message = require("../message");
20
33
  var _cache = require("../utils/cache");
21
34
  var _constants = require("../constants");
35
+ var _stream = require("../stream");
36
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
37
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
38
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
39
+ 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; }
40
+ 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; }
22
41
  /**
23
42
  * Middleware item (contains path matcher and middleware function)
24
43
  */
@@ -27,6 +46,8 @@ var _constants = require("../constants");
27
46
  * Pending acknowledgment
28
47
  */
29
48
 
49
+ /** Pending request waiting for client stream (streamId present) */
50
+
30
51
  /**
31
52
  * Server configuration options
32
53
  */
@@ -38,23 +59,32 @@ var _constants = require("../constants");
38
59
  class RequestIframeServerImpl {
39
60
  constructor(options) {
40
61
  var _options$ackTimeout, _options$versionValid;
62
+ /** Unique instance ID */
41
63
  (0, _defineProperty2.default)(this, "handlers", new Map());
42
64
  (0, _defineProperty2.default)(this, "middlewares", []);
43
65
  /** Responses waiting for client acknowledgment */
44
66
  (0, _defineProperty2.default)(this, "pendingAcks", new Map());
67
+ /** Pending requests waiting for client stream_start (streamId present) */
68
+ (0, _defineProperty2.default)(this, "pendingStreamRequests", new Map());
69
+ /** Stream message handlers (streamId -> handler) for client→server streams */
70
+ (0, _defineProperty2.default)(this, "streamHandlers", new Map());
45
71
  /** List of functions to unregister handlers */
46
72
  (0, _defineProperty2.default)(this, "unregisterFns", []);
47
73
  /** Whether it is open */
48
74
  (0, _defineProperty2.default)(this, "_isOpen", false);
49
- this.ackTimeout = (_options$ackTimeout = options === null || options === void 0 ? void 0 : options.ackTimeout) !== null && _options$ackTimeout !== void 0 ? _options$ackTimeout : _constants.DefaultTimeout.SERVER_ACK;
75
+ // Use custom id if provided, otherwise generate one
76
+ this.id = (options === null || options === void 0 ? void 0 : options.id) || (0, _utils.generateInstanceId)();
77
+ this.ackTimeout = (_options$ackTimeout = options === null || options === void 0 ? void 0 : options.ackTimeout) !== null && _options$ackTimeout !== void 0 ? _options$ackTimeout : _constants.DefaultTimeout.ACK;
50
78
  this.versionValidator = (_options$versionValid = options === null || options === void 0 ? void 0 : options.versionValidator) !== null && _options$versionValid !== void 0 ? _options$versionValid : _utils.isCompatibleVersion;
51
79
 
52
80
  // Get or create shared channel and create dispatcher
53
81
  var channel = (0, _cache.getOrCreateMessageChannel)(options === null || options === void 0 ? void 0 : options.secretKey);
54
- this.dispatcher = new _message.MessageDispatcher(channel);
82
+ this.dispatcher = new _message.MessageDispatcher(channel, _constants.MessageRole.SERVER, this.id);
55
83
 
56
- // Auto-open by default
57
- this.open();
84
+ // Auto-open by default (unless explicitly set to false)
85
+ if ((options === null || options === void 0 ? void 0 : options.autoOpen) !== false) {
86
+ this.open();
87
+ }
58
88
  }
59
89
 
60
90
  /**
@@ -102,6 +132,122 @@ class RequestIframeServerImpl {
102
132
 
103
133
  // Handle RECEIVED messages (for confirming response delivery)
104
134
  this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.RECEIVED, data => this.handleReceived(data), handlerOptions));
135
+
136
+ // Handle stream_* messages (client→server stream)
137
+ this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.STREAM_START, (data, ctx) => this.handleStreamStart(data, ctx), handlerOptions));
138
+ this.unregisterFns.push(this.dispatcher.registerHandler(type => type.startsWith('stream_') && type !== _constants.MessageType.STREAM_START, (data, _context) => this.dispatchStreamMessage(data), handlerOptions));
139
+ }
140
+
141
+ /** Handle stream_start from client (stream request with streamId) */
142
+ handleStreamStart(data, _context) {
143
+ var _body$chunked;
144
+ if (data.role !== _constants.MessageRole.CLIENT) return;
145
+ var body = data.body;
146
+ if (!(body !== null && body !== void 0 && body.streamId)) return;
147
+ var pending = this.pendingStreamRequests.get(data.requestId);
148
+ if (!pending || pending.streamId !== body.streamId) return;
149
+ this.pendingStreamRequests.delete(data.requestId);
150
+ var targetWindow = pending.targetWindow,
151
+ targetOrigin = pending.targetOrigin,
152
+ res = pending.res,
153
+ reqData = pending.data,
154
+ reqContext = pending.context,
155
+ handlerFn = pending.handlerFn;
156
+ var streamHandler = {
157
+ registerStreamHandler: (streamId, handler) => {
158
+ this.streamHandlers.set(streamId, handler);
159
+ },
160
+ unregisterStreamHandler: streamId => {
161
+ this.streamHandlers.delete(streamId);
162
+ },
163
+ postMessage: message => {
164
+ this.dispatcher.send(targetWindow, message, targetOrigin);
165
+ }
166
+ };
167
+ var streamType = body.type || _constants.StreamType.DATA;
168
+ var streamChunked = (_body$chunked = body.chunked) !== null && _body$chunked !== void 0 ? _body$chunked : true;
169
+ var streamMetadata = body.metadata;
170
+ var req = new _request.ServerRequestImpl(reqData, reqContext, res, pending.params);
171
+
172
+ // File stream: optionally auto-resolve to File/Blob before calling handler
173
+ if (streamType === _constants.StreamType.FILE) {
174
+ var _body$autoResolve;
175
+ var fileStream = new _stream.IframeFileReadableStream(body.streamId, data.requestId, streamHandler, {
176
+ chunked: streamChunked,
177
+ metadata: streamMetadata,
178
+ filename: streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.filename,
179
+ mimeType: streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.mimeType,
180
+ size: streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.size
181
+ });
182
+ var autoResolve = (_body$autoResolve = body.autoResolve) !== null && _body$autoResolve !== void 0 ? _body$autoResolve : false;
183
+ if (autoResolve) {
184
+ var name = fileStream.filename || (streamMetadata === null || streamMetadata === void 0 ? void 0 : streamMetadata.filename);
185
+ var promise = name ? fileStream.readAsFile(name) : fileStream.readAsBlob();
186
+ promise.then(fileData => {
187
+ req.body = fileData;
188
+ req.stream = undefined;
189
+ this.runMiddlewares(req, res, () => {
190
+ try {
191
+ var result = handlerFn(req, res);
192
+ if ((0, _utils.isPromise)(result)) {
193
+ this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ASYNC, data.requestId, {
194
+ path: reqData.path,
195
+ targetId: data.creatorId
196
+ });
197
+ result.then(this.handleRequestResult.bind(this, res, targetWindow, targetOrigin, reqData)).catch(this.handleRequestError.bind(this, res, targetWindow, targetOrigin, reqData));
198
+ } else {
199
+ this.handleRequestResult(res, targetWindow, targetOrigin, reqData, result);
200
+ }
201
+ } catch (error) {
202
+ this.handleRequestError(res, targetWindow, targetOrigin, reqData, error);
203
+ }
204
+ });
205
+ }).catch(error => {
206
+ this.handleRequestError(res, targetWindow, targetOrigin, reqData, error);
207
+ });
208
+ return;
209
+ }
210
+
211
+ // Non-autoResolve: expose stream directly
212
+ req.body = fileStream;
213
+ req.stream = fileStream;
214
+ } else {
215
+ // Non-file stream
216
+ var readableStream = new _stream.IframeReadableStream(body.streamId, data.requestId, streamHandler, {
217
+ type: streamType,
218
+ chunked: streamChunked,
219
+ metadata: streamMetadata
220
+ });
221
+ req.body = undefined;
222
+ req.stream = readableStream;
223
+ }
224
+ this.runMiddlewares(req, res, () => {
225
+ try {
226
+ var result = handlerFn(req, res);
227
+ if ((0, _utils.isPromise)(result)) {
228
+ this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ASYNC, data.requestId, {
229
+ path: reqData.path,
230
+ targetId: data.creatorId
231
+ });
232
+ result.then(this.handleRequestResult.bind(this, res, targetWindow, targetOrigin, reqData)).catch(this.handleRequestError.bind(this, res, targetWindow, targetOrigin, reqData));
233
+ } else {
234
+ this.handleRequestResult(res, targetWindow, targetOrigin, reqData, result);
235
+ }
236
+ } catch (error) {
237
+ this.handleRequestError(res, targetWindow, targetOrigin, reqData, error);
238
+ }
239
+ });
240
+ }
241
+ dispatchStreamMessage(data) {
242
+ var body = data.body;
243
+ if (!(body !== null && body !== void 0 && body.streamId)) return;
244
+ var handler = this.streamHandlers.get(body.streamId);
245
+ if (handler) {
246
+ var messageType = data.type.replace('stream_', '');
247
+ handler(_objectSpread(_objectSpread({}, body), {}, {
248
+ type: messageType
249
+ }));
250
+ }
105
251
  }
106
252
 
107
253
  /**
@@ -151,22 +297,112 @@ class RequestIframeServerImpl {
151
297
  get messageDispatcher() {
152
298
  return this.dispatcher;
153
299
  }
300
+ handleRequestError(res, targetWindow, targetOrigin, data, err) {
301
+ if (!res._sent) {
302
+ /**
303
+ * Use INTERNAL_SERVER_ERROR (500) for handler errors unless a different error status code was explicitly set.
304
+ * If statusCode is still the default OK (200), override it to INTERNAL_SERVER_ERROR.
305
+ */
306
+ var errorStatus = res.statusCode === _constants.HttpStatus.OK ? _constants.HttpStatus.INTERNAL_SERVER_ERROR : res.statusCode;
307
+ this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ERROR, data.requestId, {
308
+ path: data.path,
309
+ error: {
310
+ message: err && err.message || _constants.Messages.REQUEST_FAILED,
311
+ code: err && err.code || _constants.ErrorCode.REQUEST_ERROR
312
+ },
313
+ status: errorStatus,
314
+ statusText: _constants.HttpStatusText[errorStatus] || _constants.HttpStatusText[_constants.HttpStatus.INTERNAL_SERVER_ERROR],
315
+ headers: res.headers,
316
+ targetId: data.creatorId
317
+ });
318
+ }
319
+ }
320
+ handleRequestResult(res, targetWindow, targetOrigin, data, result) {
321
+ if (!res._sent && result !== undefined) {
322
+ res.send(result);
323
+ } else if (!res._sent) {
324
+ this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ERROR, data.requestId, {
325
+ path: data.path,
326
+ error: {
327
+ message: _constants.Messages.NO_RESPONSE_SENT,
328
+ code: _constants.ErrorCode.NO_RESPONSE
329
+ },
330
+ status: _constants.HttpStatus.INTERNAL_SERVER_ERROR,
331
+ statusText: _constants.HttpStatusText[_constants.HttpStatus.INTERNAL_SERVER_ERROR],
332
+ headers: res.headers
333
+ });
334
+ }
335
+ }
336
+
337
+ /**
338
+ * Find matching handler and extract path parameters
339
+ * @param requestPath The actual request path
340
+ * @returns Handler function and extracted parameters, or null if not found
341
+ */
342
+ findHandler(requestPath) {
343
+ var prefixedRequestPath = this.dispatcher.prefixPath(requestPath);
344
+
345
+ // First try exact match (for backward compatibility and performance)
346
+ var exactHandler = this.handlers.get(prefixedRequestPath);
347
+ if (exactHandler) {
348
+ return {
349
+ handler: exactHandler,
350
+ params: {}
351
+ };
352
+ }
353
+
354
+ // Then try parameter matching (e.g., '/api/users/:id' matches '/api/users/123')
355
+ var _iterator = _createForOfIteratorHelper(this.handlers.entries()),
356
+ _step;
357
+ try {
358
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
359
+ var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
360
+ registeredPath = _step$value[0],
361
+ handler = _step$value[1];
362
+ // Check if registered path contains parameters
363
+ if (registeredPath.includes(':')) {
364
+ var matchResult = (0, _pathMatch.matchPathWithParams)(prefixedRequestPath, registeredPath);
365
+ if (matchResult.match) {
366
+ return {
367
+ handler,
368
+ params: matchResult.params
369
+ };
370
+ }
371
+ }
372
+ }
373
+ } catch (err) {
374
+ _iterator.e(err);
375
+ } finally {
376
+ _iterator.f();
377
+ }
378
+ return null;
379
+ }
154
380
 
155
381
  /**
156
382
  * Handle request
157
383
  */
158
384
  handleRequest(data, context) {
159
- if (!data.path) return;
385
+ // If targetId is specified, only process if it matches this server's id
386
+ if (!data.path || data.targetId && data.targetId !== this.id) return;
160
387
  if (!context.source) return;
388
+
389
+ // If message has already been handled by another server instance, skip processing
390
+ if (context.handledBy) {
391
+ return;
392
+ }
161
393
  var targetWindow = context.source;
162
394
  var targetOrigin = context.origin;
163
395
 
164
- // Send ACK immediately via dispatcher
165
- this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ACK, data.requestId, {
166
- path: data.path
167
- });
168
- var handlerFn = this.handlers.get(data.path);
169
- if (!handlerFn) {
396
+ // Find matching handler and extract path parameters
397
+ var handlerMatch = this.findHandler(data.path);
398
+ if (!handlerMatch) {
399
+ // No handler found in this instance
400
+ // Mark as handled by this instance (using special marker) to prevent other instances from processing
401
+ // This ensures only one instance sends the error response
402
+ context.handledBy = this.id;
403
+
404
+ // Send METHOD_NOT_FOUND error
405
+ // Use request's creatorId as targetId to route back to the correct client
170
406
  this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ERROR, data.requestId, {
171
407
  path: data.path,
172
408
  error: {
@@ -174,13 +410,27 @@ class RequestIframeServerImpl {
174
410
  code: _constants.ErrorCode.METHOD_NOT_FOUND
175
411
  },
176
412
  status: _constants.HttpStatus.NOT_FOUND,
177
- statusText: _constants.HttpStatusText[_constants.HttpStatus.NOT_FOUND]
413
+ statusText: _constants.HttpStatusText[_constants.HttpStatus.NOT_FOUND],
414
+ targetId: data.creatorId
178
415
  });
179
416
  return;
180
417
  }
418
+ var handlerFn = handlerMatch.handler,
419
+ params = handlerMatch.params;
420
+
421
+ // Mark message as handled by this server instance to prevent other server instances from processing it
422
+ context.handledBy = this.id;
423
+
424
+ // Send ACK immediately via dispatcher
425
+ // Use request's creatorId as targetId to route back to the correct client
426
+ this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ACK, data.requestId, {
427
+ path: data.path,
428
+ targetId: data.creatorId
429
+ });
181
430
 
182
431
  // Create response object with channel reference
183
- var res = new _response.ServerResponseImpl(data.requestId, data.path || '', data.secretKey, targetWindow, targetOrigin, this.dispatcher.getChannel());
432
+ // Pass request's creatorId as targetId so responses are routed back to the correct client
433
+ var res = new _response.ServerResponseImpl(data.requestId, data.path || '', data.secretKey, targetWindow, targetOrigin, this.dispatcher.getChannel(), this.id, data.creatorId);
184
434
 
185
435
  // Register callback waiting for client acknowledgment
186
436
  this.registerPendingAck(data.requestId, received => {
@@ -189,51 +439,46 @@ class RequestIframeServerImpl {
189
439
  res._triggerAck(false);
190
440
  });
191
441
 
192
- // Create request object
193
- var req = new _request.ServerRequestImpl(data, context, res);
442
+ // Client sends body as stream: wait for stream_start, then create readable stream and call handler
443
+ // If streamId is present, this is a stream request
444
+ var streamId = data.streamId;
445
+ if (streamId) {
446
+ this.pendingStreamRequests.set(data.requestId, {
447
+ path: data.path || '',
448
+ requestId: data.requestId,
449
+ streamId,
450
+ handlerFn,
451
+ targetWindow,
452
+ targetOrigin,
453
+ res,
454
+ data,
455
+ context,
456
+ params
457
+ });
458
+ return;
459
+ }
460
+
461
+ // Create request object with path parameters
462
+ var req = new _request.ServerRequestImpl(data, context, res, params);
194
463
 
195
464
  // Execute middleware chain
196
465
  this.runMiddlewares(req, res, () => {
197
- var result = handlerFn(req, res);
198
- if (result instanceof Promise) {
199
- // Async task
200
- this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ASYNC, data.requestId, {
201
- path: data.path
202
- });
203
- result.then(value => {
204
- if (!res._sent && value !== undefined) {
205
- res.send(value);
206
- } else if (!res._sent) {
207
- this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ERROR, data.requestId, {
208
- path: data.path,
209
- error: {
210
- message: _constants.Messages.NO_RESPONSE_SENT,
211
- code: _constants.ErrorCode.NO_RESPONSE
212
- },
213
- status: _constants.HttpStatus.INTERNAL_SERVER_ERROR,
214
- statusText: _constants.HttpStatusText[_constants.HttpStatus.INTERNAL_SERVER_ERROR],
215
- headers: res.headers
216
- });
217
- }
218
- }).catch(err => {
219
- if (!res._sent) {
220
- this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ERROR, data.requestId, {
221
- path: data.path,
222
- error: {
223
- message: err && err.message || _constants.Messages.REQUEST_FAILED,
224
- code: err && err.code || _constants.ErrorCode.REQUEST_ERROR
225
- },
226
- status: res.statusCode || _constants.HttpStatus.INTERNAL_SERVER_ERROR,
227
- statusText: _constants.HttpStatusText[_constants.HttpStatus.INTERNAL_SERVER_ERROR],
228
- headers: res.headers
229
- });
230
- }
231
- });
232
- } else {
233
- // Synchronous processing
234
- if (!res._sent && result !== undefined) {
235
- res.send(result);
466
+ try {
467
+ var result = handlerFn(req, res);
468
+ if ((0, _utils.isPromise)(result)) {
469
+ // Async task
470
+ // Use request's creatorId as targetId to route back to the correct client
471
+ this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.ASYNC, data.requestId, {
472
+ path: data.path,
473
+ targetId: data.creatorId
474
+ });
475
+ result.then(this.handleRequestResult.bind(this, res, targetWindow, targetOrigin, data)).catch(this.handleRequestError.bind(this, res, targetWindow, targetOrigin, data));
476
+ } else {
477
+ // Synchronous processing
478
+ this.handleRequestResult(res, targetWindow, targetOrigin, data, result);
236
479
  }
480
+ } catch (error) {
481
+ this.handleRequestError(res, targetWindow, targetOrigin, data, error);
237
482
  }
238
483
  });
239
484
  }
@@ -324,9 +569,13 @@ class RequestIframeServerImpl {
324
569
  }
325
570
  }
326
571
  map(handlers) {
572
+ var unregisterFns = [];
327
573
  Object.entries(handlers).forEach(([path, h]) => {
328
- this.on(path, h);
574
+ unregisterFns.push(this.on(path, h));
329
575
  });
576
+ return () => {
577
+ unregisterFns.forEach(fn => fn());
578
+ };
330
579
  }
331
580
 
332
581
  /**
@@ -2,15 +2,16 @@ export { requestIframeClient, clearRequestIframeClientCache } from './api/client
2
2
  export { requestIframeServer, clearRequestIframeServerCache } from './api/server';
3
3
  export { RequestIframeClientImpl } from './core/client';
4
4
  export { RequestIframeServerImpl } from './core/server';
5
- export { RequestIframeClientServer } from './core/server-client';
5
+ export { RequestIframeClientServer } from './core/client-server';
6
6
  export { MessageChannel, ChannelType, MessageDispatcher } from './message';
7
7
  export type { MessageContext, MessageHandlerFn, MessageTypeMatcher, VersionValidator, HandlerOptions, ChannelType as ChannelTypeValue } from './message';
8
8
  export { getOrCreateMessageChannel, releaseMessageChannel, clearMessageChannelCache, } from './utils/cache';
9
9
  export { ServerRequestImpl } from './core/request';
10
10
  export { ServerResponseImpl } from './core/response';
11
- export { IframeWritableStream, IframeReadableStream, IframeFileWritableStream, IframeFileReadableStream, isIframeReadableStream, isIframeFileStream } from './stream';
11
+ export { IframeWritableStream, IframeReadableStream, IframeFileWritableStream, IframeFileReadableStream, isIframeReadableStream, isIframeFileReadableStream, isIframeFileWritableStream, isIframeWritableStream } from './stream';
12
12
  export type { StreamType, StreamState, StreamChunk, WritableStreamOptions, ReadableStreamOptions, FileWritableStreamOptions, FileReadableStreamOptions, StreamBindContext, IIframeWritableStream, IIframeReadableStream, IIframeFileReadableStream, StreamMessageData } from './stream';
13
13
  export * from './types';
14
+ export { detectContentType, blobToBase64 } from './utils';
14
15
  export { InterceptorManager, RequestInterceptorManager, ResponseInterceptorManager } from './interceptors';
15
16
  export * from './constants';
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,WAAW,IAAI,gBAAgB,EAChC,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE3G,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,WAAW,IAAI,gBAAgB,EAChC,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE3G,cAAc,aAAa,CAAC"}
package/library/index.js CHANGED
@@ -25,7 +25,11 @@ var _exportNames = {
25
25
  IframeFileWritableStream: true,
26
26
  IframeFileReadableStream: true,
27
27
  isIframeReadableStream: true,
28
- isIframeFileStream: true,
28
+ isIframeFileReadableStream: true,
29
+ isIframeFileWritableStream: true,
30
+ isIframeWritableStream: true,
31
+ detectContentType: true,
32
+ blobToBase64: true,
29
33
  InterceptorManager: true,
30
34
  RequestInterceptorManager: true,
31
35
  ResponseInterceptorManager: true
@@ -87,7 +91,7 @@ Object.defineProperty(exports, "RequestIframeClientImpl", {
87
91
  Object.defineProperty(exports, "RequestIframeClientServer", {
88
92
  enumerable: true,
89
93
  get: function get() {
90
- return _serverClient.RequestIframeClientServer;
94
+ return _clientServer.RequestIframeClientServer;
91
95
  }
92
96
  });
93
97
  Object.defineProperty(exports, "RequestIframeServerImpl", {
@@ -120,6 +124,12 @@ Object.defineProperty(exports, "ServerResponseImpl", {
120
124
  return _response.ServerResponseImpl;
121
125
  }
122
126
  });
127
+ Object.defineProperty(exports, "blobToBase64", {
128
+ enumerable: true,
129
+ get: function get() {
130
+ return _utils.blobToBase64;
131
+ }
132
+ });
123
133
  Object.defineProperty(exports, "clearMessageChannelCache", {
124
134
  enumerable: true,
125
135
  get: function get() {
@@ -138,16 +148,28 @@ Object.defineProperty(exports, "clearRequestIframeServerCache", {
138
148
  return _server.clearRequestIframeServerCache;
139
149
  }
140
150
  });
151
+ Object.defineProperty(exports, "detectContentType", {
152
+ enumerable: true,
153
+ get: function get() {
154
+ return _utils.detectContentType;
155
+ }
156
+ });
141
157
  Object.defineProperty(exports, "getOrCreateMessageChannel", {
142
158
  enumerable: true,
143
159
  get: function get() {
144
160
  return _cache.getOrCreateMessageChannel;
145
161
  }
146
162
  });
147
- Object.defineProperty(exports, "isIframeFileStream", {
163
+ Object.defineProperty(exports, "isIframeFileReadableStream", {
148
164
  enumerable: true,
149
165
  get: function get() {
150
- return _stream.isIframeFileStream;
166
+ return _stream.isIframeFileReadableStream;
167
+ }
168
+ });
169
+ Object.defineProperty(exports, "isIframeFileWritableStream", {
170
+ enumerable: true,
171
+ get: function get() {
172
+ return _stream.isIframeFileWritableStream;
151
173
  }
152
174
  });
153
175
  Object.defineProperty(exports, "isIframeReadableStream", {
@@ -156,6 +178,12 @@ Object.defineProperty(exports, "isIframeReadableStream", {
156
178
  return _stream.isIframeReadableStream;
157
179
  }
158
180
  });
181
+ Object.defineProperty(exports, "isIframeWritableStream", {
182
+ enumerable: true,
183
+ get: function get() {
184
+ return _stream.isIframeWritableStream;
185
+ }
186
+ });
159
187
  Object.defineProperty(exports, "releaseMessageChannel", {
160
188
  enumerable: true,
161
189
  get: function get() {
@@ -178,7 +206,7 @@ var _client = require("./api/client");
178
206
  var _server = require("./api/server");
179
207
  var _client2 = require("./core/client");
180
208
  var _server2 = require("./core/server");
181
- var _serverClient = require("./core/server-client");
209
+ var _clientServer = require("./core/client-server");
182
210
  var _message = require("./message");
183
211
  var _cache = require("./utils/cache");
184
212
  var _request = require("./core/request");
@@ -196,6 +224,7 @@ Object.keys(_types).forEach(function (key) {
196
224
  }
197
225
  });
198
226
  });
227
+ var _utils = require("./utils");
199
228
  var _interceptors = require("./interceptors");
200
229
  var _constants = require("./constants");
201
230
  Object.keys(_constants).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,QAAQ,EACR,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,kBAAkB,CAAC,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAGR;IAER;;OAEG;IACH,GAAG,CACD,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,EACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,GAC7B,MAAM;IAKT;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;CAO5G;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB,CAAC,aAAa,CAAC;CAAG;AAEnF;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,kBAAkB,CAAC,QAAQ,CAAC;CAAG;AAE/E;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,yBAAyB,EACvC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,0BAA0B,EACxC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC,CAgBnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,QAAQ,EACR,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,kBAAkB,CAAC,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAGR;IAER;;OAEG;IACH,GAAG,CACD,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,EACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,GAC7B,MAAM;IAKT;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;CAO5G;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB,CAAC,aAAa,CAAC;CAAG;AAEnF;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,kBAAkB,CAAC,QAAQ,CAAC;CAAG;AAE/E;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,yBAAyB,EACvC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,0BAA0B,EACxC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC,CAgBnB"}
@@ -7,6 +7,8 @@ export interface MessageContext {
7
7
  source?: Window;
8
8
  /** Origin of the message */
9
9
  origin: string;
10
+ /** ID of the instance that handled this message (if handled) */
11
+ handledBy?: string;
10
12
  }
11
13
  /**
12
14
  * Message receiver callback
@@ -94,7 +96,7 @@ export declare class MessageChannel {
94
96
  * @param requestId request ID
95
97
  * @param data additional data
96
98
  */
97
- sendMessage(target: Window, targetOrigin: string, type: PostMessageData['type'], requestId: string, data?: Partial<Omit<PostMessageData, '__requestIframe__' | 'type' | 'requestId' | 'timestamp'>>): void;
99
+ sendMessage(target: Window, targetOrigin: string, type: PostMessageData['type'], requestId: string, data?: Partial<Omit<PostMessageData, '__requestIframe__' | 'type' | 'requestId' | 'timestamp' | 'role'>>): void;
98
100
  /**
99
101
  * Add path prefix (for secretKey isolation)
100
102
  */
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAChB,MAAM,UAAU,CAAC;AAGlB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAEvF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,+BAA+B;;CAEvB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,8CAA8C;IAC9C,SAAgB,IAAI,EAAE,WAAW,CAAC;IAElC,uCAAuC;IACvC,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnC,8DAA8D;IAC9D,OAAO,CAAC,SAAS,CAAmC;IAEpD,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAE/D,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAK;gBAEF,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,WAAsC;IAOnF;;;OAGG;IACI,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD;;OAEG;IACI,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAItD;;OAEG;IACI,MAAM,IAAI,IAAI;IAIrB;;;OAGG;IACI,OAAO,IAAI,MAAM;IAIxB;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,SAAS;IA4BjB;;;;;OAKG;IACI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,GAAE,MAAY,GAAG,IAAI;IAIvF;;;;;;;OAOG;IACI,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAC9F,IAAI;IAQP;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACI,OAAO,IAAI,IAAI;CAIvB"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/message/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAChB,MAAM,UAAU,CAAC;AAGlB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAEvF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,+BAA+B;;CAEvB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,8CAA8C;IAC9C,SAAgB,IAAI,EAAE,WAAW,CAAC;IAElC,uCAAuC;IACvC,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnC,8DAA8D;IAC9D,OAAO,CAAC,SAAS,CAAmC;IAEpD,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAE/D,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAK;gBAEF,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,WAAsC;IAOnF;;;OAGG;IACI,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD;;OAEG;IACI,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAItD;;OAEG;IACI,MAAM,IAAI,IAAI;IAIrB;;;OAGG;IACI,OAAO,IAAI,MAAM;IAIxB;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,SAAS;IA4BjB;;;;;OAKG;IACI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,GAAE,MAAY,GAAG,IAAI;IAIvF;;;;;;;OAOG;IACI,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,GACvG,IAAI;IAQP;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACI,OAAO,IAAI,IAAI;CAIvB"}