request-iframe 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/QUICKSTART.CN.md +269 -0
  2. package/QUICKSTART.md +269 -0
  3. package/README.CN.md +1369 -0
  4. package/README.md +1016 -0
  5. package/library/__tests__/interceptors.test.ts +124 -0
  6. package/library/__tests__/requestIframe.test.ts +2216 -0
  7. package/library/__tests__/stream.test.ts +650 -0
  8. package/library/__tests__/utils.test.ts +433 -0
  9. package/library/api/client.d.ts +16 -0
  10. package/library/api/client.d.ts.map +1 -0
  11. package/library/api/client.js +72 -0
  12. package/library/api/server.d.ts +16 -0
  13. package/library/api/server.d.ts.map +1 -0
  14. package/library/api/server.js +44 -0
  15. package/library/constants/index.d.ts +209 -0
  16. package/library/constants/index.d.ts.map +1 -0
  17. package/library/constants/index.js +260 -0
  18. package/library/constants/messages.d.ts +80 -0
  19. package/library/constants/messages.d.ts.map +1 -0
  20. package/library/constants/messages.js +123 -0
  21. package/library/core/client.d.ts +99 -0
  22. package/library/core/client.d.ts.map +1 -0
  23. package/library/core/client.js +440 -0
  24. package/library/core/message-handler.d.ts +110 -0
  25. package/library/core/message-handler.d.ts.map +1 -0
  26. package/library/core/message-handler.js +320 -0
  27. package/library/core/request-response.d.ts +59 -0
  28. package/library/core/request-response.d.ts.map +1 -0
  29. package/library/core/request-response.js +337 -0
  30. package/library/core/request.d.ts +17 -0
  31. package/library/core/request.d.ts.map +1 -0
  32. package/library/core/request.js +34 -0
  33. package/library/core/response.d.ts +51 -0
  34. package/library/core/response.d.ts.map +1 -0
  35. package/library/core/response.js +323 -0
  36. package/library/core/server-base.d.ts +86 -0
  37. package/library/core/server-base.d.ts.map +1 -0
  38. package/library/core/server-base.js +257 -0
  39. package/library/core/server-client.d.ts +99 -0
  40. package/library/core/server-client.d.ts.map +1 -0
  41. package/library/core/server-client.js +256 -0
  42. package/library/core/server.d.ts +82 -0
  43. package/library/core/server.d.ts.map +1 -0
  44. package/library/core/server.js +338 -0
  45. package/library/index.d.ts +16 -0
  46. package/library/index.d.ts.map +1 -0
  47. package/library/index.js +211 -0
  48. package/library/interceptors/index.d.ts +41 -0
  49. package/library/interceptors/index.d.ts.map +1 -0
  50. package/library/interceptors/index.js +126 -0
  51. package/library/message/channel.d.ts +107 -0
  52. package/library/message/channel.d.ts.map +1 -0
  53. package/library/message/channel.js +184 -0
  54. package/library/message/dispatcher.d.ts +119 -0
  55. package/library/message/dispatcher.d.ts.map +1 -0
  56. package/library/message/dispatcher.js +249 -0
  57. package/library/message/index.d.ts +5 -0
  58. package/library/message/index.d.ts.map +1 -0
  59. package/library/message/index.js +25 -0
  60. package/library/stream/file-stream.d.ts +48 -0
  61. package/library/stream/file-stream.d.ts.map +1 -0
  62. package/library/stream/file-stream.js +240 -0
  63. package/library/stream/index.d.ts +15 -0
  64. package/library/stream/index.d.ts.map +1 -0
  65. package/library/stream/index.js +83 -0
  66. package/library/stream/readable-stream.d.ts +83 -0
  67. package/library/stream/readable-stream.d.ts.map +1 -0
  68. package/library/stream/readable-stream.js +249 -0
  69. package/library/stream/types.d.ts +165 -0
  70. package/library/stream/types.d.ts.map +1 -0
  71. package/library/stream/types.js +5 -0
  72. package/library/stream/writable-stream.d.ts +60 -0
  73. package/library/stream/writable-stream.d.ts.map +1 -0
  74. package/library/stream/writable-stream.js +348 -0
  75. package/library/types/index.d.ts +408 -0
  76. package/library/types/index.d.ts.map +1 -0
  77. package/library/types/index.js +5 -0
  78. package/library/utils/cache.d.ts +19 -0
  79. package/library/utils/cache.d.ts.map +1 -0
  80. package/library/utils/cache.js +83 -0
  81. package/library/utils/cookie.d.ts +117 -0
  82. package/library/utils/cookie.d.ts.map +1 -0
  83. package/library/utils/cookie.js +365 -0
  84. package/library/utils/debug.d.ts +11 -0
  85. package/library/utils/debug.d.ts.map +1 -0
  86. package/library/utils/debug.js +162 -0
  87. package/library/utils/index.d.ts +13 -0
  88. package/library/utils/index.d.ts.map +1 -0
  89. package/library/utils/index.js +132 -0
  90. package/library/utils/path-match.d.ts +17 -0
  91. package/library/utils/path-match.d.ts.map +1 -0
  92. package/library/utils/path-match.js +90 -0
  93. package/library/utils/protocol.d.ts +61 -0
  94. package/library/utils/protocol.d.ts.map +1 -0
  95. package/library/utils/protocol.js +169 -0
  96. package/package.json +58 -0
@@ -0,0 +1,337 @@
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
+ require("core-js/modules/web.dom-collections.for-each.js");
6
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.ServerResponseImpl = exports.ServerRequestImpl = void 0;
11
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ require("core-js/modules/es.array.includes.js");
16
+ require("core-js/modules/es.array.iterator.js");
17
+ require("core-js/modules/es.object.entries.js");
18
+ require("core-js/modules/es.promise.js");
19
+ require("core-js/modules/es.string.includes.js");
20
+ require("core-js/modules/web.dom-collections.iterator.js");
21
+ var _utils = require("../utils");
22
+ var _constants = require("../constants");
23
+ 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; }
24
+ 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; }
25
+ /**
26
+ * ServerRequest 实现
27
+ */
28
+ class ServerRequestImpl {
29
+ constructor(data, event, response) {
30
+ this.body = data.body;
31
+ // headers 可能包含数组值(如 Set-Cookie),这里简化为 string
32
+ this.headers = {};
33
+ if (data.headers) {
34
+ for (var _i = 0, _Object$entries = Object.entries(data.headers); _i < _Object$entries.length; _i++) {
35
+ var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
36
+ key = _Object$entries$_i[0],
37
+ value = _Object$entries$_i[1];
38
+ this.headers[key] = Array.isArray(value) ? value.join(', ') : value;
39
+ }
40
+ }
41
+ this.cookies = data.cookies || {};
42
+ this.path = data.path || '';
43
+ this.requestId = data.requestId;
44
+ this.origin = event.origin;
45
+ this.source = event.source;
46
+ this.res = response;
47
+ }
48
+ }
49
+
50
+ /**
51
+ * 等待客户端确认收到的回调
52
+ */
53
+ exports.ServerRequestImpl = ServerRequestImpl;
54
+ /**
55
+ * ServerResponse 实现
56
+ */
57
+ class ServerResponseImpl {
58
+ constructor(requestId, path, uniqueKey, targetWindow, targetOrigin) {
59
+ (0, _defineProperty2.default)(this, "statusCode", _constants.HttpStatus.OK);
60
+ (0, _defineProperty2.default)(this, "headers", {});
61
+ (0, _defineProperty2.default)(this, "_sent", false);
62
+ this.requestId = requestId;
63
+ this.path = path;
64
+ this.uniqueKey = uniqueKey;
65
+ this.targetWindow = targetWindow;
66
+ this.targetOrigin = targetOrigin;
67
+ }
68
+
69
+ /**
70
+ * 设置等待客户端确认的回调
71
+ */
72
+ _setOnAckCallback(callback) {
73
+ this.onAckCallback = callback;
74
+ }
75
+
76
+ /**
77
+ * 触发客户端确认回调
78
+ */
79
+ _triggerAck(received) {
80
+ if (this.onAckCallback) {
81
+ this.onAckCallback(received);
82
+ this.onAckCallback = undefined;
83
+ }
84
+ }
85
+ send(data, options) {
86
+ var _options$requireAck;
87
+ if (this._sent) return Promise.resolve(false);
88
+ this._sent = true;
89
+ var requireAck = (_options$requireAck = options === null || options === void 0 ? void 0 : options.requireAck) !== null && _options$requireAck !== void 0 ? _options$requireAck : false;
90
+
91
+ // 如果不需要确认,直接发送并返回 true
92
+ if (!requireAck) {
93
+ this.targetWindow.postMessage((0, _utils.createPostMessage)(_constants.MessageType.RESPONSE, this.requestId, {
94
+ path: this.path,
95
+ uniqueKey: this.uniqueKey,
96
+ data,
97
+ status: this.statusCode,
98
+ statusText: (0, _constants.getStatusText)(this.statusCode),
99
+ headers: this.headers,
100
+ requireAck: false
101
+ }), this.targetOrigin);
102
+ return Promise.resolve(true);
103
+ }
104
+
105
+ // 需要确认,等待客户端回复
106
+ return new Promise(resolve => {
107
+ this._setOnAckCallback(resolve);
108
+ this.targetWindow.postMessage((0, _utils.createPostMessage)(_constants.MessageType.RESPONSE, this.requestId, {
109
+ path: this.path,
110
+ uniqueKey: this.uniqueKey,
111
+ data,
112
+ status: this.statusCode,
113
+ statusText: (0, _constants.getStatusText)(this.statusCode),
114
+ headers: this.headers,
115
+ requireAck: true
116
+ }), this.targetOrigin);
117
+ });
118
+ }
119
+ json(data, options) {
120
+ this.setHeader(_constants.HttpHeader.CONTENT_TYPE, 'application/json');
121
+ return this.send(data, options);
122
+ }
123
+ sendFile(content, options) {
124
+ var _this = this;
125
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
126
+ var _options$requireAck2;
127
+ var requireAck, base64Content, mimeType, fileName, fileHeaders, messageData;
128
+ return _regenerator.default.wrap(function (_context) {
129
+ while (1) switch (_context.prev = _context.next) {
130
+ case 0:
131
+ if (!_this._sent) {
132
+ _context.next = 1;
133
+ break;
134
+ }
135
+ return _context.abrupt("return", false);
136
+ case 1:
137
+ _this._sent = true;
138
+ requireAck = (_options$requireAck2 = options === null || options === void 0 ? void 0 : options.requireAck) !== null && _options$requireAck2 !== void 0 ? _options$requireAck2 : false;
139
+ mimeType = (options === null || options === void 0 ? void 0 : options.mimeType) || 'application/octet-stream';
140
+ fileName = options === null || options === void 0 ? void 0 : options.fileName;
141
+ if (!(typeof content === 'string')) {
142
+ _context.next = 2;
143
+ break;
144
+ }
145
+ // 如果是普通字符串,转换为 base64
146
+ base64Content = btoa(unescape(encodeURIComponent(content)));
147
+ _context.next = 6;
148
+ break;
149
+ case 2:
150
+ if (!(content instanceof File)) {
151
+ _context.next = 4;
152
+ break;
153
+ }
154
+ mimeType = content.type || mimeType;
155
+ fileName = fileName || content.name;
156
+ _context.next = 3;
157
+ return _this.blobToBase64(content);
158
+ case 3:
159
+ base64Content = _context.sent;
160
+ _context.next = 6;
161
+ break;
162
+ case 4:
163
+ _context.next = 5;
164
+ return _this.blobToBase64(content);
165
+ case 5:
166
+ base64Content = _context.sent;
167
+ case 6:
168
+ // 合并文件相关的 headers
169
+ fileHeaders = _objectSpread(_objectSpread({}, _this.headers), {}, {
170
+ [_constants.HttpHeader.CONTENT_TYPE]: mimeType,
171
+ [_constants.HttpHeader.CONTENT_DISPOSITION]: fileName ? `attachment; filename="${fileName}"` : 'attachment'
172
+ });
173
+ messageData = (0, _utils.createPostMessage)(_constants.MessageType.RESPONSE, _this.requestId, {
174
+ path: _this.path,
175
+ uniqueKey: _this.uniqueKey,
176
+ status: _this.statusCode,
177
+ statusText: (0, _constants.getStatusText)(_this.statusCode),
178
+ headers: fileHeaders,
179
+ fileData: {
180
+ content: base64Content,
181
+ mimeType,
182
+ fileName
183
+ },
184
+ requireAck
185
+ }); // 如果不需要确认,直接发送并返回 true
186
+ if (requireAck) {
187
+ _context.next = 7;
188
+ break;
189
+ }
190
+ _this.targetWindow.postMessage(messageData, _this.targetOrigin);
191
+ return _context.abrupt("return", true);
192
+ case 7:
193
+ return _context.abrupt("return", new Promise(resolve => {
194
+ _this._setOnAckCallback(resolve);
195
+ _this.targetWindow.postMessage(messageData, _this.targetOrigin);
196
+ }));
197
+ case 8:
198
+ case "end":
199
+ return _context.stop();
200
+ }
201
+ }, _callee);
202
+ }))();
203
+ }
204
+
205
+ /**
206
+ * 发送流响应
207
+ * 将流绑定到当前请求上下文并启动流传输
208
+ */
209
+ sendStream(stream) {
210
+ var _this2 = this;
211
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
212
+ return _regenerator.default.wrap(function (_context2) {
213
+ while (1) switch (_context2.prev = _context2.next) {
214
+ case 0:
215
+ if (!_this2._sent) {
216
+ _context2.next = 1;
217
+ break;
218
+ }
219
+ return _context2.abrupt("return");
220
+ case 1:
221
+ _this2._sent = true;
222
+
223
+ // 绑定流到请求上下文
224
+ stream._bind({
225
+ requestId: _this2.requestId,
226
+ targetWindow: _this2.targetWindow,
227
+ targetOrigin: _this2.targetOrigin,
228
+ uniqueKey: _this2.uniqueKey
229
+ });
230
+
231
+ // 启动流传输
232
+ _context2.next = 2;
233
+ return stream.start();
234
+ case 2:
235
+ case "end":
236
+ return _context2.stop();
237
+ }
238
+ }, _callee2);
239
+ }))();
240
+ }
241
+ status(code) {
242
+ this.statusCode = code;
243
+ return this;
244
+ }
245
+ setHeader(name, value) {
246
+ // 与 Express 一致,返回 void
247
+ // Set-Cookie 特殊处理,保持为数组
248
+ if (name.toLowerCase() === _constants.HttpHeader.SET_COOKIE.toLowerCase()) {
249
+ var existing = this.headers[_constants.HttpHeader.SET_COOKIE];
250
+ if (Array.isArray(value)) {
251
+ this.headers[_constants.HttpHeader.SET_COOKIE] = Array.isArray(existing) ? [...existing, ...value] : value;
252
+ } else {
253
+ var newValue = String(value);
254
+ if (Array.isArray(existing)) {
255
+ existing.push(newValue);
256
+ } else {
257
+ this.headers[_constants.HttpHeader.SET_COOKIE] = [newValue];
258
+ }
259
+ }
260
+ } else if (Array.isArray(value)) {
261
+ this.headers[name] = value.join(', ');
262
+ } else {
263
+ this.headers[name] = String(value);
264
+ }
265
+ }
266
+ set(name, value) {
267
+ // 链式调用版本,兼容 Express res.set
268
+ this.setHeader(name, value);
269
+ return this;
270
+ }
271
+ cookie(name, value, options) {
272
+ /**
273
+ * 设置 Cookie(类似 HTTP Set-Cookie)
274
+ * 生成 Set-Cookie 字符串并添加到 headers[HttpHeader.SET_COOKIE] 数组中
275
+ * 客户端收到后会解析并保存到 Cookie 存储中
276
+ */
277
+ var setCookieStr = (0, _utils.createSetCookie)(name, value, {
278
+ path: options === null || options === void 0 ? void 0 : options.path,
279
+ expires: options === null || options === void 0 ? void 0 : options.expires,
280
+ maxAge: options === null || options === void 0 ? void 0 : options.maxAge,
281
+ httpOnly: options === null || options === void 0 ? void 0 : options.httpOnly,
282
+ secure: options === null || options === void 0 ? void 0 : options.secure,
283
+ sameSite: (options === null || options === void 0 ? void 0 : options.sameSite) === true ? 'Strict' : (options === null || options === void 0 ? void 0 : options.sameSite) === false ? undefined : options === null || options === void 0 ? void 0 : options.sameSite
284
+ });
285
+
286
+ // 添加到 Set-Cookie header 数组
287
+ var existing = this.headers[_constants.HttpHeader.SET_COOKIE];
288
+ if (Array.isArray(existing)) {
289
+ existing.push(setCookieStr);
290
+ } else {
291
+ this.headers[_constants.HttpHeader.SET_COOKIE] = [setCookieStr];
292
+ }
293
+ return this;
294
+ }
295
+ clearCookie(name, options) {
296
+ /**
297
+ * 清除指定的 Cookie
298
+ * 生成一个过期的 Set-Cookie 字符串,客户端收到后会删除该 Cookie
299
+ */
300
+ var setCookieStr = (0, _utils.createClearCookie)(name, {
301
+ path: options === null || options === void 0 ? void 0 : options.path
302
+ });
303
+
304
+ // 添加到 Set-Cookie header 数组
305
+ var existing = this.headers[_constants.HttpHeader.SET_COOKIE];
306
+ if (Array.isArray(existing)) {
307
+ existing.push(setCookieStr);
308
+ } else {
309
+ this.headers[_constants.HttpHeader.SET_COOKIE] = [setCookieStr];
310
+ }
311
+ return this;
312
+ }
313
+ blobToBase64(blob) {
314
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
315
+ return _regenerator.default.wrap(function (_context3) {
316
+ while (1) switch (_context3.prev = _context3.next) {
317
+ case 0:
318
+ return _context3.abrupt("return", new Promise((resolve, reject) => {
319
+ var reader = new FileReader();
320
+ reader.onloadend = () => {
321
+ var result = reader.result;
322
+ // 移除 data URL 前缀(如 "data:image/png;base64,")
323
+ var base64 = result.includes(',') ? result.split(',')[1] : result;
324
+ resolve(base64);
325
+ };
326
+ reader.onerror = reject;
327
+ reader.readAsDataURL(blob);
328
+ }));
329
+ case 1:
330
+ case "end":
331
+ return _context3.stop();
332
+ }
333
+ }, _callee3);
334
+ }))();
335
+ }
336
+ }
337
+ exports.ServerResponseImpl = ServerResponseImpl;
@@ -0,0 +1,17 @@
1
+ import { ServerRequest, ServerResponse, PostMessageData } from '../types';
2
+ import { MessageContext } from '../message';
3
+ /**
4
+ * ServerRequest implementation
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, context: MessageContext, response: ServerResponse);
16
+ }
17
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/core/request.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,eAAe,EAC/C,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;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,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,cAAc;CAiB3B"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ServerRequestImpl = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ require("core-js/modules/es.object.entries.js");
10
+ /**
11
+ * ServerRequest implementation
12
+ */
13
+ class ServerRequestImpl {
14
+ constructor(data, context, response) {
15
+ this.body = data.body;
16
+ // headers may contain array values (e.g., Set-Cookie), simplified to string here
17
+ this.headers = {};
18
+ if (data.headers) {
19
+ for (var _i = 0, _Object$entries = Object.entries(data.headers); _i < _Object$entries.length; _i++) {
20
+ var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
21
+ key = _Object$entries$_i[0],
22
+ value = _Object$entries$_i[1];
23
+ this.headers[key] = Array.isArray(value) ? value.join(', ') : value;
24
+ }
25
+ }
26
+ this.cookies = data.cookies || {};
27
+ this.path = data.path || '';
28
+ this.requestId = data.requestId;
29
+ this.origin = context.origin;
30
+ this.source = context.source;
31
+ this.res = response;
32
+ }
33
+ }
34
+ exports.ServerRequestImpl = ServerRequestImpl;
@@ -0,0 +1,51 @@
1
+ import { ServerResponse, CookieOptions, SendOptions, SendFileOptions } from '../types';
2
+ import { IframeWritableStream } from '../stream';
3
+ import { MessageChannel } from '../message';
4
+ /**
5
+ * Callback waiting for client acknowledgment
6
+ */
7
+ type AckCallback = (received: boolean) => void;
8
+ /**
9
+ * ServerResponse implementation
10
+ */
11
+ export declare class ServerResponseImpl implements ServerResponse {
12
+ statusCode: number;
13
+ headers: Record<string, string | string[]>;
14
+ private readonly requestId;
15
+ private readonly path;
16
+ private readonly secretKey?;
17
+ private readonly targetWindow;
18
+ private readonly targetOrigin;
19
+ private readonly channel?;
20
+ private onAckCallback?;
21
+ _sent: boolean;
22
+ constructor(requestId: string, path: string, secretKey: string | undefined, targetWindow: Window, targetOrigin: string, channel?: MessageChannel);
23
+ /**
24
+ * Send message via channel or direct postMessage
25
+ */
26
+ private sendMessage;
27
+ /**
28
+ * Set callback waiting for client acknowledgment
29
+ */
30
+ _setOnAckCallback(callback: AckCallback): void;
31
+ /**
32
+ * Trigger client acknowledgment callback
33
+ */
34
+ _triggerAck(received: boolean): void;
35
+ send(data: any, options?: SendOptions): Promise<boolean>;
36
+ json(data: any, options?: SendOptions): Promise<boolean>;
37
+ sendFile(content: string | Blob | File, options?: SendFileOptions): Promise<boolean>;
38
+ /**
39
+ * Send stream response
40
+ * Bind stream to current request context and start stream transmission
41
+ */
42
+ sendStream(stream: IframeWritableStream): Promise<void>;
43
+ status(code: number): ServerResponse;
44
+ setHeader(name: string, value: string | number | string[]): void;
45
+ set(name: string, value: string | number | string[]): ServerResponse;
46
+ cookie(name: string, value: string, options?: CookieOptions): ServerResponse;
47
+ clearCookie(name: string, options?: CookieOptions): ServerResponse;
48
+ private blobToBase64;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/core/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/C;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAChD,UAAU,EAAE,MAAM,CAAiB;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAM;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAc;IAC7B,KAAK,UAAS;gBAGnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,cAAc;IAU1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIrD;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAOpC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAwCxD,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;IAiB7D,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"}