request-iframe 0.0.4 → 0.0.6

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 (88) hide show
  1. package/README.CN.md +8 -1
  2. package/README.md +8 -1
  3. package/library/constants/index.d.ts +2 -0
  4. package/library/constants/index.d.ts.map +1 -1
  5. package/library/constants/index.js +3 -1
  6. package/library/constants/messages.d.ts +1 -0
  7. package/library/constants/messages.d.ts.map +1 -1
  8. package/library/constants/messages.js +1 -0
  9. package/library/core/client.d.ts +5 -0
  10. package/library/core/client.d.ts.map +1 -1
  11. package/library/core/client.js +54 -18
  12. package/library/core/response.d.ts.map +1 -1
  13. package/library/core/response.js +51 -32
  14. package/library/core/server.d.ts.map +1 -1
  15. package/library/core/server.js +10 -0
  16. package/library/index.d.ts +1 -1
  17. package/library/index.d.ts.map +1 -1
  18. package/library/index.js +7 -0
  19. package/library/message/channel.d.ts +2 -2
  20. package/library/message/channel.d.ts.map +1 -1
  21. package/library/message/channel.js +5 -1
  22. package/library/message/dispatcher.d.ts +2 -2
  23. package/library/message/dispatcher.d.ts.map +1 -1
  24. package/library/message/dispatcher.js +2 -2
  25. package/library/stream/writable-stream.d.ts.map +1 -1
  26. package/library/stream/writable-stream.js +81 -39
  27. package/library/types/index.d.ts +3 -1
  28. package/library/types/index.d.ts.map +1 -1
  29. package/library/utils/debug.d.ts.map +1 -1
  30. package/library/utils/debug.js +6 -2
  31. package/library/utils/error.d.ts +21 -0
  32. package/library/utils/error.d.ts.map +1 -0
  33. package/library/utils/error.js +34 -0
  34. package/library/utils/index.d.ts +7 -0
  35. package/library/utils/index.d.ts.map +1 -1
  36. package/library/utils/index.js +42 -1
  37. package/package.json +5 -4
  38. package/react/library/index.d.ts.map +1 -1
  39. package/react/library/index.js +4 -1
  40. package/library/__tests__/channel.test.ts +0 -420
  41. package/library/__tests__/coverage-branches.test.ts +0 -356
  42. package/library/__tests__/debug.test.ts +0 -588
  43. package/library/__tests__/dispatcher.test.ts +0 -481
  44. package/library/__tests__/interceptors.test.ts +0 -146
  45. package/library/__tests__/requestIframe.test.ts +0 -5384
  46. package/library/__tests__/server.test.ts +0 -738
  47. package/library/__tests__/stream.test.ts +0 -681
  48. package/library/__tests__/utils.test.ts +0 -433
  49. package/library/api/client.d.js +0 -5
  50. package/library/api/server.d.js +0 -5
  51. package/library/constants/index.d.js +0 -36
  52. package/library/constants/messages.d.js +0 -5
  53. package/library/core/client.d.js +0 -5
  54. package/library/core/message-handler.d.ts +0 -110
  55. package/library/core/message-handler.d.ts.map +0 -1
  56. package/library/core/message-handler.js +0 -320
  57. package/library/core/request-response.d.ts +0 -59
  58. package/library/core/request-response.d.ts.map +0 -1
  59. package/library/core/request-response.js +0 -337
  60. package/library/core/request.d.js +0 -5
  61. package/library/core/response.d.js +0 -5
  62. package/library/core/server-base.d.ts +0 -86
  63. package/library/core/server-base.d.ts.map +0 -1
  64. package/library/core/server-base.js +0 -257
  65. package/library/core/server-client.d.js +0 -5
  66. package/library/core/server-client.d.ts +0 -101
  67. package/library/core/server-client.d.ts.map +0 -1
  68. package/library/core/server-client.js +0 -266
  69. package/library/core/server.d.js +0 -5
  70. package/library/interceptors/index.d.js +0 -5
  71. package/library/message/channel.d.js +0 -5
  72. package/library/message/dispatcher.d.js +0 -5
  73. package/library/message/index.d.js +0 -25
  74. package/library/stream/file-stream.d.js +0 -4
  75. package/library/stream/index.d.js +0 -58
  76. package/library/stream/readable-stream.d.js +0 -5
  77. package/library/stream/types.d.js +0 -5
  78. package/library/stream/writable-stream.d.js +0 -5
  79. package/library/types/index.d.js +0 -5
  80. package/library/utils/cache.d.js +0 -5
  81. package/library/utils/cookie.d.js +0 -5
  82. package/library/utils/debug.d.js +0 -5
  83. package/library/utils/index.d.js +0 -94
  84. package/library/utils/path-match.d.js +0 -5
  85. package/library/utils/protocol.d.js +0 -5
  86. package/react/library/__tests__/index.test.d.ts +0 -2
  87. package/react/library/__tests__/index.test.d.ts.map +0 -1
  88. package/react/library/__tests__/index.test.tsx +0 -792
@@ -1,320 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.array.filter.js");
4
- require("core-js/modules/es.object.get-own-property-descriptors.js");
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
- Object.defineProperty(exports, "__esModule", {
7
- value: true
8
- });
9
- exports.IframeMessageHandler = void 0;
10
- require("core-js/modules/es.array.iterator.js");
11
- require("core-js/modules/es.map.js");
12
- require("core-js/modules/es.set.js");
13
- require("core-js/modules/es.string.starts-with.js");
14
- require("core-js/modules/web.dom-collections.for-each.js");
15
- require("core-js/modules/web.dom-collections.iterator.js");
16
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
- var _utils = require("../utils");
18
- var _constants = require("../constants");
19
- 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; }
20
- 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; }
21
- /**
22
- * 消息处理器配置
23
- */
24
-
25
- /**
26
- * 消息处理回调
27
- */
28
-
29
- /**
30
- * 事件监听器集合
31
- */
32
-
33
- /**
34
- * 等待确认的响应
35
- */
36
-
37
- /**
38
- * 等待响应的请求
39
- */
40
-
41
- /**
42
- * IframeMessageHandler - 底层消息处理器
43
- * 负责 postMessage 监听、协议验证、uniqueKey 隔离、事件分发
44
- */
45
- class IframeMessageHandler {
46
- /** 消息监听函数(绑定 this) */
47
-
48
- constructor(options) {
49
- var _options$ackTimeout;
50
- (0, _defineProperty2.default)(this, "listeners", {
51
- request: new Set(),
52
- ack: new Set(),
53
- async: new Set(),
54
- response: new Set(),
55
- error: new Set(),
56
- received: new Set(),
57
- ping: new Set(),
58
- pong: new Set()
59
- });
60
- /** 等待客户端确认的响应 */
61
- (0, _defineProperty2.default)(this, "pendingAcks", new Map());
62
- /** 等待响应的请求 */
63
- (0, _defineProperty2.default)(this, "pendingRequests", new Map());
64
- /** 消息处理回调 */
65
- (0, _defineProperty2.default)(this, "callbacks", {});
66
- this.uniqueKey = options === null || options === void 0 ? void 0 : options.uniqueKey;
67
- this.ackTimeout = (_options$ackTimeout = options === null || options === void 0 ? void 0 : options.ackTimeout) !== null && _options$ackTimeout !== void 0 ? _options$ackTimeout : _constants.DefaultTimeout.SERVER_ACK;
68
- this.boundOnMessage = this.onMessage.bind(this);
69
- window.addEventListener('message', this.boundOnMessage);
70
- }
71
-
72
- /**
73
- * 设置消息处理回调
74
- */
75
- setCallbacks(callbacks) {
76
- this.callbacks = _objectSpread(_objectSpread({}, this.callbacks), callbacks);
77
- }
78
-
79
- /**
80
- * 消息处理入口
81
- */
82
- onMessage(event) {
83
- var data = event.data;
84
-
85
- // 检查是否是 request-iframe 框架的消息
86
- if (!(0, _utils.isValidPostMessage)(data)) {
87
- return;
88
- }
89
-
90
- // 检查协议版本兼容性
91
- var version = (0, _utils.getProtocolVersion)(data);
92
- if (version !== undefined && !(0, _utils.isCompatibleVersion)(version)) {
93
- this.sendProtocolError(data, event, version);
94
- return;
95
- }
96
-
97
- // uniqueKey 隔离
98
- if (this.uniqueKey) {
99
- if (data.uniqueKey !== this.uniqueKey) return;
100
- } else {
101
- if (data.uniqueKey) return;
102
- }
103
-
104
- // 触发事件监听器
105
- this.emit(data.type, data, event);
106
-
107
- // 分发到具体处理器
108
- this.dispatchMessage(data, event);
109
- }
110
-
111
- /**
112
- * 分发消息到具体处理器
113
- */
114
- dispatchMessage(data, event) {
115
- var type = data.type;
116
-
117
- // 请求
118
- if (type === _constants.MessageType.REQUEST) {
119
- var _this$callbacks$onReq, _this$callbacks;
120
- (_this$callbacks$onReq = (_this$callbacks = this.callbacks).onRequest) === null || _this$callbacks$onReq === void 0 || _this$callbacks$onReq.call(_this$callbacks, data, event);
121
- return;
122
- }
123
-
124
- // 客户端响应
125
- if (type === _constants.MessageType.RESPONSE || type === _constants.MessageType.ERROR || type === _constants.MessageType.ACK || type === _constants.MessageType.ASYNC) {
126
- var _this$callbacks$onCli, _this$callbacks2;
127
- this.handleClientResponse(data, event);
128
- (_this$callbacks$onCli = (_this$callbacks2 = this.callbacks).onClientResponse) === null || _this$callbacks$onCli === void 0 || _this$callbacks$onCli.call(_this$callbacks2, data, event);
129
- return;
130
- }
131
-
132
- // received 确认
133
- if (type === _constants.MessageType.RECEIVED) {
134
- var _this$callbacks$onRec, _this$callbacks3;
135
- this.handleReceived(data);
136
- (_this$callbacks$onRec = (_this$callbacks3 = this.callbacks).onReceived) === null || _this$callbacks$onRec === void 0 || _this$callbacks$onRec.call(_this$callbacks3, data, event);
137
- return;
138
- }
139
-
140
- // ping
141
- if (type === _constants.MessageType.PING) {
142
- var _this$callbacks$onPin, _this$callbacks4;
143
- this.handlePing(data, event);
144
- (_this$callbacks$onPin = (_this$callbacks4 = this.callbacks).onPing) === null || _this$callbacks$onPin === void 0 || _this$callbacks$onPin.call(_this$callbacks4, data, event);
145
- return;
146
- }
147
-
148
- // pong
149
- if (type === _constants.MessageType.PONG) {
150
- var _this$callbacks$onPon, _this$callbacks5;
151
- this.handlePong(data, event);
152
- (_this$callbacks$onPon = (_this$callbacks5 = this.callbacks).onPong) === null || _this$callbacks$onPon === void 0 || _this$callbacks$onPon.call(_this$callbacks5, data, event);
153
- return;
154
- }
155
-
156
- // 流消息(stream_start, stream_data, stream_end, stream_error, stream_cancel)
157
- if (type.startsWith('stream_')) {
158
- var _this$callbacks$onStr, _this$callbacks6;
159
- (_this$callbacks$onStr = (_this$callbacks6 = this.callbacks).onStream) === null || _this$callbacks$onStr === void 0 || _this$callbacks$onStr.call(_this$callbacks6, data, event);
160
- return;
161
- }
162
- }
163
-
164
- /**
165
- * 处理客户端响应
166
- */
167
- handleClientResponse(data, event) {
168
- var pending = this.pendingRequests.get(data.requestId);
169
- if (pending) {
170
- // 验证 origin
171
- if (pending.origin && pending.origin !== '*' && event.origin !== pending.origin) {
172
- return;
173
- }
174
- // ack 和 async 不删除 pending
175
- if (data.type === _constants.MessageType.ACK || data.type === _constants.MessageType.ASYNC) {
176
- pending.resolve(data);
177
- return;
178
- }
179
- // response 和 error 删除 pending
180
- this.pendingRequests.delete(data.requestId);
181
- pending.resolve(data);
182
- }
183
- }
184
-
185
- /**
186
- * 处理 received 确认
187
- */
188
- handleReceived(data) {
189
- var pending = this.pendingAcks.get(data.requestId);
190
- if (pending) {
191
- clearTimeout(pending.timeoutId);
192
- this.pendingAcks.delete(data.requestId);
193
- pending.resolve(true);
194
- }
195
- }
196
-
197
- /**
198
- * 处理 ping
199
- */
200
- handlePing(data, event) {
201
- if (!event.source) return;
202
- event.source.postMessage((0, _utils.createPostMessage)(_constants.MessageType.PONG, data.requestId, {
203
- uniqueKey: data.uniqueKey
204
- }), event.origin);
205
- }
206
-
207
- /**
208
- * 处理 pong
209
- */
210
- handlePong(data, event) {
211
- var pending = this.pendingRequests.get(data.requestId);
212
- if (pending) {
213
- if (pending.origin && pending.origin !== '*' && event.origin !== pending.origin) {
214
- return;
215
- }
216
- this.pendingRequests.delete(data.requestId);
217
- pending.resolve(data);
218
- }
219
- }
220
-
221
- /**
222
- * 注册等待确认的响应
223
- */
224
- registerPendingAck(requestId, resolve, reject) {
225
- var timeoutId = setTimeout(() => {
226
- this.pendingAcks.delete(requestId);
227
- resolve(false);
228
- }, this.ackTimeout);
229
- this.pendingAcks.set(requestId, {
230
- resolve,
231
- reject,
232
- timeoutId
233
- });
234
- }
235
-
236
- /**
237
- * 注册等待响应的请求
238
- */
239
- registerPendingRequest(requestId, resolve, reject, origin) {
240
- this.pendingRequests.set(requestId, {
241
- resolve,
242
- reject,
243
- origin
244
- });
245
- }
246
-
247
- /**
248
- * 取消等待响应
249
- */
250
- unregisterPendingRequest(requestId) {
251
- this.pendingRequests.delete(requestId);
252
- }
253
-
254
- /**
255
- * 监听事件
256
- */
257
- on(event, fn) {
258
- this.listeners[event].add(fn);
259
- }
260
-
261
- /**
262
- * 取消监听
263
- */
264
- off(event, fn) {
265
- if (!fn) {
266
- this.listeners[event].clear();
267
- return;
268
- }
269
- this.listeners[event].delete(fn);
270
- }
271
-
272
- /**
273
- * 触发事件
274
- */
275
- emit(event, payload, messageEvent) {
276
- this.listeners[event].forEach(fn => {
277
- try {
278
- fn(payload, messageEvent);
279
- } catch (e) {
280
- // 忽略监听器异常
281
- }
282
- });
283
- }
284
-
285
- /**
286
- * 添加 path 前缀
287
- */
288
- prefixPath(path) {
289
- return this.uniqueKey ? `${this.uniqueKey}:${path}` : path;
290
- }
291
-
292
- /**
293
- * 发送协议版本错误
294
- */
295
- sendProtocolError(data, event, remoteVersion) {
296
- if (!event.source) return;
297
- event.source.postMessage((0, _utils.createPostMessage)(_constants.MessageType.ERROR, data.requestId, {
298
- path: data.path,
299
- uniqueKey: data.uniqueKey,
300
- status: _constants.HttpStatus.BAD_REQUEST,
301
- statusText: _constants.Messages.PROTOCOL_VERSION_UNSUPPORTED,
302
- error: {
303
- message: (0, _constants.formatMessage)(_constants.Messages.PROTOCOL_VERSION_TOO_LOW, remoteVersion, _constants.ProtocolVersion.MIN_SUPPORTED),
304
- code: _constants.ErrorCode.PROTOCOL_UNSUPPORTED
305
- }
306
- }), event.origin);
307
- }
308
-
309
- /**
310
- * 销毁
311
- */
312
- destroy() {
313
- window.removeEventListener('message', this.boundOnMessage);
314
- this.pendingRequests.clear();
315
- this.pendingAcks.forEach(pending => clearTimeout(pending.timeoutId));
316
- this.pendingAcks.clear();
317
- Object.keys(this.listeners).forEach(k => this.listeners[k].clear());
318
- }
319
- }
320
- exports.IframeMessageHandler = IframeMessageHandler;
@@ -1,59 +0,0 @@
1
- import { ServerRequest, ServerResponse, PostMessageData, CookieOptions, SendOptions, SendFileOptions } from '../types';
2
- import { IframeWritableStream } from '../stream';
3
- /**
4
- * ServerRequest 实现
5
- */
6
- export declare class ServerRequestImpl implements ServerRequest {
7
- body: any;
8
- headers: Record<string, string>;
9
- cookies: Record<string, string>;
10
- path: string;
11
- requestId: string;
12
- origin: string;
13
- source: Window;
14
- res: ServerResponse;
15
- constructor(data: PostMessageData, event: MessageEvent, response: ServerResponse);
16
- }
17
- /**
18
- * 等待客户端确认收到的回调
19
- */
20
- type AckCallback = (received: boolean) => void;
21
- /**
22
- * ServerResponse 实现
23
- */
24
- export declare class ServerResponseImpl implements ServerResponse {
25
- statusCode: number;
26
- headers: Record<string, string | string[]>;
27
- private readonly requestId;
28
- private readonly path;
29
- private readonly uniqueKey?;
30
- private readonly targetWindow;
31
- private readonly targetOrigin;
32
- private onAckCallback?;
33
- _sent: boolean;
34
- constructor(requestId: string, path: string, uniqueKey: string | undefined, targetWindow: Window, targetOrigin: string);
35
- /**
36
- * 设置等待客户端确认的回调
37
- */
38
- _setOnAckCallback(callback: AckCallback): void;
39
- /**
40
- * 触发客户端确认回调
41
- */
42
- _triggerAck(received: boolean): void;
43
- send(data: any, options?: SendOptions): Promise<boolean>;
44
- json(data: any, options?: SendOptions): Promise<boolean>;
45
- sendFile(content: string | Blob | File, options?: SendFileOptions): Promise<boolean>;
46
- /**
47
- * 发送流响应
48
- * 将流绑定到当前请求上下文并启动流传输
49
- */
50
- sendStream(stream: IframeWritableStream): Promise<void>;
51
- status(code: number): ServerResponse;
52
- setHeader(name: string, value: string | number | string[]): void;
53
- set(name: string, value: string | number | string[]): ServerResponse;
54
- cookie(name: string, value: string, options?: CookieOptions): ServerResponse;
55
- clearCookie(name: string, options?: CookieOptions): ServerResponse;
56
- private blobToBase64;
57
- }
58
- export {};
59
- //# sourceMappingURL=request-response.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-response.d.ts","sourceRoot":"","sources":["../../src/core/request-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGvH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IAC9C,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,cAAc,CAAC;gBAGzB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,cAAc;CAiB3B;AAED;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/C;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAChD,UAAU,EAAE,MAAM,CAAiB;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAM;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,aAAa,CAAC,CAAc;IAC7B,KAAK,UAAS;gBAGnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM;IAStB;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIrD;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAOpC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA0CxD,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD,QAAQ,CACnB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,CAAC;IAyDnB;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAKpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAwBhE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc;IAMpE,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc;IA4BV,WAAW,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc;YAkBH,YAAY;CAa3B"}