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,83 @@
1
+ import { StreamType, StreamState, ReadableStreamOptions, IIframeReadableStream, StreamMessageData } from './types';
2
+ /**
3
+ * Stream message handler interface
4
+ */
5
+ export interface StreamMessageHandler {
6
+ /** Register stream message handler */
7
+ registerStreamHandler(streamId: string, handler: (data: StreamMessageData) => void): void;
8
+ /** Unregister handler */
9
+ unregisterStreamHandler(streamId: string): void;
10
+ /** Post message */
11
+ postMessage(message: any): void;
12
+ }
13
+ /**
14
+ * IframeReadableStream - Client-side readable stream
15
+ * Used to receive stream data sent from the server
16
+ */
17
+ export declare class IframeReadableStream<T = any> implements IIframeReadableStream<T> {
18
+ readonly streamId: string;
19
+ readonly type: StreamType;
20
+ readonly chunked: boolean;
21
+ readonly metadata?: Record<string, any>;
22
+ private _state;
23
+ private readonly chunks;
24
+ private resolveRead?;
25
+ private rejectRead?;
26
+ private onEndCallback?;
27
+ private onErrorCallback?;
28
+ private readonly messageHandler;
29
+ private readonly requestId;
30
+ private readonly secretKey?;
31
+ constructor(streamId: string, requestId: string, messageHandler: StreamMessageHandler, options?: ReadableStreamOptions);
32
+ /** Get stream state */
33
+ get state(): StreamState;
34
+ /**
35
+ * Handle stream message
36
+ */
37
+ private handleStreamMessage;
38
+ /**
39
+ * Handle data chunk (internal method)
40
+ */
41
+ private handleData;
42
+ /**
43
+ * Decode data (subclasses can override, e.g., FileStream needs Base64 decoding)
44
+ */
45
+ protected decodeData(data: any): T;
46
+ /**
47
+ * Stream ended (internal handling)
48
+ */
49
+ private handleEnd;
50
+ /**
51
+ * Merge data chunks (subclasses can override)
52
+ */
53
+ protected mergeChunks(): T;
54
+ /**
55
+ * Stream error (internal method)
56
+ */
57
+ private handleError;
58
+ /**
59
+ * Stream cancelled (internal method)
60
+ */
61
+ private handleCancel;
62
+ /**
63
+ * Read all data
64
+ */
65
+ read(): Promise<T>;
66
+ /**
67
+ * Async iterator
68
+ */
69
+ [Symbol.asyncIterator](): AsyncIterator<T>;
70
+ /**
71
+ * Cancel stream
72
+ */
73
+ cancel(reason?: string): void;
74
+ /**
75
+ * Listen for stream end
76
+ */
77
+ onEnd(callback: () => void): void;
78
+ /**
79
+ * Listen for stream error
80
+ */
81
+ onError(callback: (error: Error) => void): void;
82
+ }
83
+ //# sourceMappingURL=readable-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readable-stream.d.ts","sourceRoot":"","sources":["../../src/stream/readable-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1F,yBAAyB;IACzB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,mBAAmB;IACnB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,oBAAoB,CAAC,CAAC,GAAG,GAAG,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAC5E,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/C,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,WAAW,CAAC,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAyB;IAC5C,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAGlC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,oBAAoB,EACpC,OAAO,GAAE,qBAA0B;IAcrC,uBAAuB;IACvB,IAAW,KAAK,IAAI,WAAW,CAE9B;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC;IAIlC;;OAEG;IACH,OAAO,CAAC,SAAS;IAiBjB;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,CAAC;IAW1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAiBzB;;OAEG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAoBjD;;OAEG;IACI,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBpC;;OAEG;IACI,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAOxC;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;CAGvD"}
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.IframeReadableStream = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ require("core-js/modules/es.symbol.async-iterator.js");
10
+ require("core-js/modules/es.promise.js");
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+ var _utils = require("../utils");
14
+ var _constants = require("../constants");
15
+ /**
16
+ * Stream message handler interface
17
+ */
18
+
19
+ /**
20
+ * IframeReadableStream - Client-side readable stream
21
+ * Used to receive stream data sent from the server
22
+ */
23
+ class IframeReadableStream {
24
+ constructor(streamId, requestId, messageHandler, options = {}) {
25
+ var _options$type, _options$chunked;
26
+ (0, _defineProperty2.default)(this, "_state", _constants.StreamState.PENDING);
27
+ (0, _defineProperty2.default)(this, "chunks", []);
28
+ this.streamId = streamId;
29
+ this.requestId = requestId;
30
+ this.messageHandler = messageHandler;
31
+ this.type = (_options$type = options.type) !== null && _options$type !== void 0 ? _options$type : _constants.StreamType.DATA;
32
+ this.chunked = (_options$chunked = options.chunked) !== null && _options$chunked !== void 0 ? _options$chunked : true;
33
+ this.metadata = options.metadata;
34
+ this.secretKey = options.secretKey;
35
+
36
+ // Register stream message handler
37
+ this.messageHandler.registerStreamHandler(streamId, this.handleStreamMessage.bind(this));
38
+ }
39
+
40
+ /** Get stream state */
41
+ get state() {
42
+ return this._state;
43
+ }
44
+
45
+ /**
46
+ * Handle stream message
47
+ */
48
+ handleStreamMessage(data) {
49
+ switch (data.type) {
50
+ case _constants.StreamInternalMessageType.DATA:
51
+ this.handleData(data.data, data.done);
52
+ break;
53
+ case _constants.StreamInternalMessageType.END:
54
+ this.handleEnd();
55
+ break;
56
+ case _constants.StreamInternalMessageType.ERROR:
57
+ this.handleError(new Error(data.error || _constants.Messages.STREAM_ERROR));
58
+ break;
59
+ case _constants.StreamInternalMessageType.CANCEL:
60
+ this.handleCancel(data.reason);
61
+ break;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Handle data chunk (internal method)
67
+ */
68
+ handleData(data, done) {
69
+ if (this._state !== _constants.StreamState.PENDING && this._state !== _constants.StreamState.STREAMING) return;
70
+ this._state = _constants.StreamState.STREAMING;
71
+ var decoded = this.decodeData(data);
72
+ this.chunks.push(decoded);
73
+ if (done) {
74
+ this.handleEnd();
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Decode data (subclasses can override, e.g., FileStream needs Base64 decoding)
80
+ */
81
+ decodeData(data) {
82
+ return data;
83
+ }
84
+
85
+ /**
86
+ * Stream ended (internal handling)
87
+ */
88
+ handleEnd() {
89
+ var _this$onEndCallback;
90
+ if (this._state === _constants.StreamState.ENDED) return;
91
+ this._state = _constants.StreamState.ENDED;
92
+ this.messageHandler.unregisterStreamHandler(this.streamId);
93
+ if (this.resolveRead) {
94
+ // Merge all data chunks
95
+ var result = this.mergeChunks();
96
+ this.resolveRead(result);
97
+ this.resolveRead = undefined;
98
+ this.rejectRead = undefined;
99
+ }
100
+ (_this$onEndCallback = this.onEndCallback) === null || _this$onEndCallback === void 0 || _this$onEndCallback.call(this);
101
+ }
102
+
103
+ /**
104
+ * Merge data chunks (subclasses can override)
105
+ */
106
+ mergeChunks() {
107
+ if (this.chunks.length === 0) {
108
+ return undefined;
109
+ }
110
+ if (this.chunks.length === 1) {
111
+ return this.chunks[0];
112
+ }
113
+ // Default returns array
114
+ return this.chunks;
115
+ }
116
+
117
+ /**
118
+ * Stream error (internal method)
119
+ */
120
+ handleError(error) {
121
+ var _this$onErrorCallback;
122
+ if (this._state === _constants.StreamState.ENDED || this._state === _constants.StreamState.ERROR) return;
123
+ this._state = _constants.StreamState.ERROR;
124
+ this.messageHandler.unregisterStreamHandler(this.streamId);
125
+ if (this.rejectRead) {
126
+ this.rejectRead(error);
127
+ this.resolveRead = undefined;
128
+ this.rejectRead = undefined;
129
+ }
130
+ (_this$onErrorCallback = this.onErrorCallback) === null || _this$onErrorCallback === void 0 || _this$onErrorCallback.call(this, error);
131
+ }
132
+
133
+ /**
134
+ * Stream cancelled (internal method)
135
+ */
136
+ handleCancel(reason) {
137
+ var _this$onErrorCallback2;
138
+ if (this._state === _constants.StreamState.ENDED || this._state === _constants.StreamState.ERROR || this._state === _constants.StreamState.CANCELLED) return;
139
+ this._state = _constants.StreamState.CANCELLED;
140
+ this.messageHandler.unregisterStreamHandler(this.streamId);
141
+ var error = new Error(reason || _constants.Messages.STREAM_CANCELLED);
142
+ if (this.rejectRead) {
143
+ this.rejectRead(error);
144
+ this.resolveRead = undefined;
145
+ this.rejectRead = undefined;
146
+ }
147
+ (_this$onErrorCallback2 = this.onErrorCallback) === null || _this$onErrorCallback2 === void 0 || _this$onErrorCallback2.call(this, error);
148
+ }
149
+
150
+ /**
151
+ * Read all data
152
+ */
153
+ read() {
154
+ return new Promise((resolve, reject) => {
155
+ if (this._state === _constants.StreamState.ENDED) {
156
+ resolve(this.mergeChunks());
157
+ return;
158
+ }
159
+ if (this._state === _constants.StreamState.ERROR || this._state === _constants.StreamState.CANCELLED) {
160
+ reject(new Error(_constants.Messages.STREAM_READ_ERROR));
161
+ return;
162
+ }
163
+ this.resolveRead = resolve;
164
+ this.rejectRead = reject;
165
+ });
166
+ }
167
+
168
+ /**
169
+ * Async iterator
170
+ */
171
+ [Symbol.asyncIterator]() {
172
+ var index = 0;
173
+ var stream = this;
174
+ return {
175
+ next() {
176
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
177
+ return _regenerator.default.wrap(function (_context) {
178
+ while (1) switch (_context.prev = _context.next) {
179
+ case 0:
180
+ if (!(index >= stream.chunks.length)) {
181
+ _context.next = 3;
182
+ break;
183
+ }
184
+ if (!(stream._state === _constants.StreamState.ENDED || stream._state === _constants.StreamState.ERROR || stream._state === _constants.StreamState.CANCELLED)) {
185
+ _context.next = 1;
186
+ break;
187
+ }
188
+ return _context.abrupt("return", {
189
+ done: true,
190
+ value: undefined
191
+ });
192
+ case 1:
193
+ _context.next = 2;
194
+ return new Promise(resolve => setTimeout(resolve, 10));
195
+ case 2:
196
+ _context.next = 0;
197
+ break;
198
+ case 3:
199
+ return _context.abrupt("return", {
200
+ done: false,
201
+ value: stream.chunks[index++]
202
+ });
203
+ case 4:
204
+ case "end":
205
+ return _context.stop();
206
+ }
207
+ }, _callee);
208
+ }))();
209
+ }
210
+ };
211
+ }
212
+
213
+ /**
214
+ * Cancel stream
215
+ */
216
+ cancel(reason) {
217
+ if (this._state !== _constants.StreamState.PENDING && this._state !== _constants.StreamState.STREAMING) return;
218
+ this._state = _constants.StreamState.CANCELLED;
219
+
220
+ // Notify server to cancel
221
+ var message = (0, _utils.createPostMessage)(_constants.MessageType.STREAM_CANCEL, this.requestId, {
222
+ secretKey: this.secretKey,
223
+ body: {
224
+ streamId: this.streamId,
225
+ reason
226
+ }
227
+ });
228
+ this.messageHandler.postMessage(message);
229
+ this.messageHandler.unregisterStreamHandler(this.streamId);
230
+ }
231
+
232
+ /**
233
+ * Listen for stream end
234
+ */
235
+ onEnd(callback) {
236
+ this.onEndCallback = callback;
237
+ if (this._state === _constants.StreamState.ENDED) {
238
+ callback();
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Listen for stream error
244
+ */
245
+ onError(callback) {
246
+ this.onErrorCallback = callback;
247
+ }
248
+ }
249
+ exports.IframeReadableStream = IframeReadableStream;
@@ -0,0 +1,165 @@
1
+ import { StreamType as StreamTypeConstant, StreamState as StreamStateConstant } from '../constants';
2
+ import type { MessageChannel } from '../message';
3
+ /**
4
+ * Stream type
5
+ */
6
+ export type StreamType = typeof StreamTypeConstant[keyof typeof StreamTypeConstant];
7
+ /**
8
+ * Stream data chunk
9
+ */
10
+ export interface StreamChunk {
11
+ /** Chunk data */
12
+ data: any;
13
+ /** Whether this is the last chunk */
14
+ done: boolean;
15
+ }
16
+ /**
17
+ * Writable stream configuration options
18
+ */
19
+ export interface WritableStreamOptions {
20
+ /** Stream type: data for regular data, file for files */
21
+ type?: StreamType;
22
+ /** Whether to use chunked transfer (true: multiple transfers, false: single transfer) */
23
+ chunked?: boolean;
24
+ /** Data generator iterator (higher priority than next) */
25
+ iterator?: () => AsyncGenerator<any, void, unknown>;
26
+ /** Data generator function (returns next chunk on each call) */
27
+ next?: () => Promise<StreamChunk> | StreamChunk;
28
+ /** Stream metadata */
29
+ metadata?: Record<string, any>;
30
+ }
31
+ /**
32
+ * Readable stream configuration options
33
+ */
34
+ export interface ReadableStreamOptions {
35
+ /** Stream type */
36
+ type?: StreamType;
37
+ /** Whether to use chunked transfer */
38
+ chunked?: boolean;
39
+ /** Stream metadata */
40
+ metadata?: Record<string, any>;
41
+ }
42
+ /**
43
+ * File writable stream configuration options
44
+ */
45
+ export interface FileWritableStreamOptions extends Omit<WritableStreamOptions, 'type'> {
46
+ /** Filename */
47
+ filename: string;
48
+ /** MIME type */
49
+ mimeType?: string;
50
+ /** File size (optional, used for progress calculation) */
51
+ size?: number;
52
+ }
53
+ /**
54
+ * File readable stream configuration options
55
+ */
56
+ export interface FileReadableStreamOptions extends Omit<ReadableStreamOptions, 'type'> {
57
+ /** Filename */
58
+ filename?: string;
59
+ /** MIME type */
60
+ mimeType?: string;
61
+ /** File size */
62
+ size?: number;
63
+ }
64
+ /**
65
+ * Stream bind context (associates request information)
66
+ */
67
+ export interface StreamBindContext {
68
+ /** Request ID */
69
+ requestId: string;
70
+ /** Target window */
71
+ targetWindow: Window;
72
+ /** Target origin */
73
+ targetOrigin: string;
74
+ /** secretKey */
75
+ secretKey?: string;
76
+ /** MessageChannel for sending messages (optional, uses direct postMessage if not provided) */
77
+ channel?: MessageChannel;
78
+ }
79
+ /**
80
+ * Stream state
81
+ */
82
+ export type StreamState = typeof StreamStateConstant[keyof typeof StreamStateConstant];
83
+ /**
84
+ * Writable stream interface (server-side)
85
+ */
86
+ export interface IIframeWritableStream {
87
+ /** Stream ID */
88
+ readonly streamId: string;
89
+ /** Stream type */
90
+ readonly type: StreamType;
91
+ /** Whether chunked */
92
+ readonly chunked: boolean;
93
+ /** Stream state */
94
+ readonly state: StreamState;
95
+ /** Bind to request context */
96
+ _bind(context: StreamBindContext): void;
97
+ /** Start stream transfer */
98
+ start(): Promise<void>;
99
+ /** Cancel stream transfer */
100
+ cancel(reason?: string): void;
101
+ }
102
+ /**
103
+ * Readable stream interface (client-side)
104
+ */
105
+ export interface IIframeReadableStream<T = any> {
106
+ /** Stream ID */
107
+ readonly streamId: string;
108
+ /** Stream type */
109
+ readonly type: StreamType;
110
+ /** Whether chunked */
111
+ readonly chunked: boolean;
112
+ /** Stream state */
113
+ readonly state: StreamState;
114
+ /** Stream metadata */
115
+ readonly metadata?: Record<string, any>;
116
+ /** Read all data (for non-chunked streams or wait for chunked stream to complete) */
117
+ read(): Promise<T>;
118
+ /** Async iterator (for chunked streams) */
119
+ [Symbol.asyncIterator](): AsyncIterator<T>;
120
+ /** Cancel stream */
121
+ cancel(reason?: string): void;
122
+ /** Listen for stream end */
123
+ onEnd(callback: () => void): void;
124
+ /** Listen for stream error */
125
+ onError(callback: (error: Error) => void): void;
126
+ }
127
+ /**
128
+ * File readable stream interface
129
+ */
130
+ export interface IIframeFileReadableStream extends IIframeReadableStream<Uint8Array> {
131
+ /** Filename */
132
+ readonly filename?: string;
133
+ /** MIME type */
134
+ readonly mimeType?: string;
135
+ /** File size */
136
+ readonly size?: number;
137
+ /** Read as Blob */
138
+ readAsBlob(): Promise<Blob>;
139
+ /** Read as ArrayBuffer */
140
+ readAsArrayBuffer(): Promise<ArrayBuffer>;
141
+ /** Read as Data URL */
142
+ readAsDataURL(): Promise<string>;
143
+ }
144
+ /**
145
+ * Stream message data
146
+ */
147
+ export interface StreamMessageData {
148
+ /** Stream ID */
149
+ streamId: string;
150
+ /** Stream type */
151
+ type?: StreamType;
152
+ /** Whether chunked */
153
+ chunked?: boolean;
154
+ /** Data chunk */
155
+ data?: any;
156
+ /** Whether this is the last chunk */
157
+ done?: boolean;
158
+ /** Error message */
159
+ error?: string;
160
+ /** Cancel reason */
161
+ reason?: string;
162
+ /** Metadata */
163
+ metadata?: Record<string, any>;
164
+ }
165
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/stream/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,60 @@
1
+ import { StreamType, StreamState, StreamBindContext, WritableStreamOptions, IIframeWritableStream } from './types';
2
+ /**
3
+ * IframeWritableStream - Server-side writable stream
4
+ * Used to send stream data to the client
5
+ */
6
+ export declare class IframeWritableStream implements IIframeWritableStream {
7
+ readonly streamId: string;
8
+ readonly type: StreamType;
9
+ readonly chunked: boolean;
10
+ private _state;
11
+ private context;
12
+ private readonly iterator?;
13
+ private readonly nextFn?;
14
+ private readonly metadata?;
15
+ constructor(options?: WritableStreamOptions);
16
+ /** Get stream state */
17
+ get state(): StreamState;
18
+ /**
19
+ * Bind to request context
20
+ * Called during res.sendStream()
21
+ */
22
+ _bind(context: StreamBindContext): void;
23
+ /**
24
+ * Send message to client
25
+ */
26
+ private sendMessage;
27
+ /**
28
+ * Start stream transfer
29
+ */
30
+ start(): Promise<void>;
31
+ /**
32
+ * Generate data from iterator
33
+ */
34
+ private streamFromIterator;
35
+ /**
36
+ * Generate data from next function
37
+ */
38
+ private streamFromNext;
39
+ /**
40
+ * Send data chunk
41
+ */
42
+ private sendData;
43
+ /**
44
+ * Encode data (subclasses can override, e.g., FileStream needs Base64 encoding)
45
+ */
46
+ protected encodeData(data: any): any;
47
+ /**
48
+ * End stream
49
+ */
50
+ private end;
51
+ /**
52
+ * Send error
53
+ */
54
+ private error;
55
+ /**
56
+ * Cancel stream transfer
57
+ */
58
+ cancel(reason?: string): void;
59
+ }
60
+ //# sourceMappingURL=writable-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/stream/writable-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAWjB;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,qBAAqB;IAChE,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA2C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAsB;gBAE7B,OAAO,GAAE,qBAA0B;IAStD,uBAAuB;IACvB,IAAW,KAAK,IAAI,WAAW,CAE9B;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI9C;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCnC;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;YACW,cAAc;IAsB5B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;IAIpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACH,OAAO,CAAC,KAAK;IASb;;OAEG;IACI,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAWrC"}