request-iframe 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.CN.md +271 -12
- package/README.md +268 -11
- package/library/__tests__/channel.test.ts +420 -0
- package/library/__tests__/debug.test.ts +588 -0
- package/library/__tests__/dispatcher.test.ts +481 -0
- package/library/__tests__/interceptors.test.ts +22 -0
- package/library/__tests__/requestIframe.test.ts +2317 -99
- package/library/__tests__/server.test.ts +738 -0
- package/library/api/client.d.js +5 -0
- package/library/api/client.d.ts.map +1 -1
- package/library/api/client.js +11 -6
- package/library/api/server.d.js +5 -0
- package/library/api/server.d.ts +4 -3
- package/library/api/server.d.ts.map +1 -1
- package/library/api/server.js +25 -7
- package/library/constants/index.d.js +36 -0
- package/library/constants/index.d.ts +14 -4
- package/library/constants/index.d.ts.map +1 -1
- package/library/constants/index.js +15 -7
- package/library/constants/messages.d.js +5 -0
- package/library/constants/messages.d.ts +35 -0
- package/library/constants/messages.d.ts.map +1 -1
- package/library/constants/messages.js +36 -1
- package/library/core/client-server.d.ts +101 -0
- package/library/core/client-server.d.ts.map +1 -0
- package/library/core/client-server.js +266 -0
- package/library/core/client.d.js +5 -0
- package/library/core/client.d.ts +38 -6
- package/library/core/client.d.ts.map +1 -1
- package/library/core/client.js +198 -24
- package/library/core/request.d.js +5 -0
- package/library/core/response.d.js +5 -0
- package/library/core/response.d.ts +5 -1
- package/library/core/response.d.ts.map +1 -1
- package/library/core/response.js +85 -70
- package/library/core/server-client.d.js +5 -0
- package/library/core/server-client.d.ts +3 -1
- package/library/core/server-client.d.ts.map +1 -1
- package/library/core/server-client.js +19 -9
- package/library/core/server.d.js +5 -0
- package/library/core/server.d.ts +11 -3
- package/library/core/server.d.ts.map +1 -1
- package/library/core/server.js +112 -54
- package/library/index.d.ts +1 -1
- package/library/index.js +2 -2
- package/library/interceptors/index.d.js +5 -0
- package/library/interceptors/index.d.ts +4 -0
- package/library/interceptors/index.d.ts.map +1 -1
- package/library/interceptors/index.js +7 -0
- package/library/message/channel.d.js +5 -0
- package/library/message/channel.d.ts +3 -1
- package/library/message/channel.d.ts.map +1 -1
- package/library/message/dispatcher.d.js +5 -0
- package/library/message/dispatcher.d.ts +7 -2
- package/library/message/dispatcher.d.ts.map +1 -1
- package/library/message/dispatcher.js +47 -2
- package/library/message/index.d.js +25 -0
- package/library/stream/file-stream.d.js +4 -0
- package/library/stream/file-stream.d.ts +5 -0
- package/library/stream/file-stream.d.ts.map +1 -1
- package/library/stream/file-stream.js +41 -12
- package/library/stream/index.d.js +58 -0
- package/library/stream/readable-stream.d.js +5 -0
- package/library/stream/readable-stream.d.ts.map +1 -1
- package/library/stream/readable-stream.js +32 -30
- package/library/stream/types.d.js +5 -0
- package/library/stream/types.d.ts +18 -0
- package/library/stream/types.d.ts.map +1 -1
- package/library/stream/writable-stream.d.js +5 -0
- package/library/stream/writable-stream.d.ts +1 -0
- package/library/stream/writable-stream.d.ts.map +1 -1
- package/library/stream/writable-stream.js +7 -2
- package/library/types/index.d.js +5 -0
- package/library/types/index.d.ts +79 -19
- package/library/types/index.d.ts.map +1 -1
- package/library/utils/cache.d.js +5 -0
- package/library/utils/cache.d.ts +24 -0
- package/library/utils/cache.d.ts.map +1 -1
- package/library/utils/cache.js +76 -0
- package/library/utils/cookie.d.js +5 -0
- package/library/utils/debug.d.js +5 -0
- package/library/utils/debug.d.ts.map +1 -1
- package/library/utils/debug.js +382 -20
- package/library/utils/index.d.js +94 -0
- package/library/utils/index.d.ts +5 -0
- package/library/utils/index.d.ts.map +1 -1
- package/library/utils/index.js +14 -1
- package/library/utils/path-match.d.js +5 -0
- package/library/utils/protocol.d.js +5 -0
- package/package.json +16 -2
- package/react/library/__tests__/index.test.d.ts +2 -0
- package/react/library/__tests__/index.test.d.ts.map +1 -0
- package/react/library/__tests__/index.test.tsx +770 -0
- package/react/library/index.d.ts +118 -0
- package/react/library/index.d.ts.map +1 -0
- package/react/library/index.js +232 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAO1F;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAClC,OAAO,CAAC,EAAE,0BAA0B,GACnC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAO1F;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAClC,OAAO,CAAC,EAAE,0BAA0B,GACnC,mBAAmB,CA+CrB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAKtE"}
|
package/library/api/client.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.clearRequestIframeClientCache = clearRequestIframeClientCache;
|
|
7
7
|
exports.requestIframeClient = requestIframeClient;
|
|
8
8
|
var _utils = require("../utils");
|
|
9
|
-
var
|
|
9
|
+
var _clientServer = require("../core/client-server");
|
|
10
10
|
var _client = require("../core/client");
|
|
11
11
|
var _debug = require("../utils/debug");
|
|
12
12
|
var _constants = require("../constants");
|
|
@@ -39,19 +39,24 @@ function requestIframeClient(target, options) {
|
|
|
39
39
|
// Determine secretKey
|
|
40
40
|
var secretKey = options === null || options === void 0 ? void 0 : options.secretKey;
|
|
41
41
|
|
|
42
|
+
// Generate instance ID first (will be used by both client and server)
|
|
43
|
+
var instanceId = (0, _utils.generateInstanceId)();
|
|
44
|
+
|
|
42
45
|
// Create ClientServer (internally obtains or creates a shared MessageChannel)
|
|
43
|
-
var server = new
|
|
46
|
+
var server = new _clientServer.RequestIframeClientServer({
|
|
44
47
|
secretKey,
|
|
45
|
-
ackTimeout: options === null || options === void 0 ? void 0 : options.ackTimeout
|
|
46
|
-
|
|
48
|
+
ackTimeout: options === null || options === void 0 ? void 0 : options.ackTimeout,
|
|
49
|
+
autoOpen: options === null || options === void 0 ? void 0 : options.autoOpen
|
|
50
|
+
}, instanceId);
|
|
47
51
|
|
|
48
52
|
// Create client instance
|
|
49
53
|
var client = new _client.RequestIframeClientImpl(targetWindow, targetOrigin, server, {
|
|
50
54
|
secretKey,
|
|
51
55
|
ackTimeout: options === null || options === void 0 ? void 0 : options.ackTimeout,
|
|
52
56
|
timeout: options === null || options === void 0 ? void 0 : options.timeout,
|
|
53
|
-
asyncTimeout: options === null || options === void 0 ? void 0 : options.asyncTimeout
|
|
54
|
-
|
|
57
|
+
asyncTimeout: options === null || options === void 0 ? void 0 : options.asyncTimeout,
|
|
58
|
+
headers: options === null || options === void 0 ? void 0 : options.headers
|
|
59
|
+
}, instanceId);
|
|
55
60
|
|
|
56
61
|
// If trace mode is enabled, register debug interceptors
|
|
57
62
|
if (options !== null && options !== void 0 && options.trace) {
|
package/library/api/server.d.ts
CHANGED
|
@@ -4,13 +4,14 @@ import { RequestIframeServer, RequestIframeServerOptions } from '../types';
|
|
|
4
4
|
*
|
|
5
5
|
* Note:
|
|
6
6
|
* - MessageChannel is cached at the window level by secretKey (ensures unique message listener)
|
|
7
|
-
* -
|
|
7
|
+
* - If options.id is specified, the server will be cached and reused (singleton pattern)
|
|
8
|
+
* - If options.id is not specified, a new instance is created on each call
|
|
8
9
|
* - This allows different versions of the library to coexist
|
|
9
10
|
*/
|
|
10
11
|
export declare function requestIframeServer(options?: RequestIframeServerOptions): RequestIframeServer;
|
|
11
12
|
/**
|
|
12
|
-
* Clear
|
|
13
|
-
* Note: This clears the
|
|
13
|
+
* Clear server cache (for testing or reset)
|
|
14
|
+
* Note: This clears the cached server instances
|
|
14
15
|
*/
|
|
15
16
|
export declare function clearRequestIframeServerCache(secretKey?: string): void;
|
|
16
17
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAK3E;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,0BAA0B,GACnC,mBAAmB,CAgCrB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAKtE"}
|
package/library/api/server.js
CHANGED
|
@@ -7,38 +7,56 @@ exports.clearRequestIframeServerCache = clearRequestIframeServerCache;
|
|
|
7
7
|
exports.requestIframeServer = requestIframeServer;
|
|
8
8
|
var _server = require("../core/server");
|
|
9
9
|
var _debug = require("../utils/debug");
|
|
10
|
+
var _cache = require("../utils/cache");
|
|
10
11
|
/**
|
|
11
12
|
* Create a server (for receiving and handling requests)
|
|
12
13
|
*
|
|
13
14
|
* Note:
|
|
14
15
|
* - MessageChannel is cached at the window level by secretKey (ensures unique message listener)
|
|
15
|
-
* -
|
|
16
|
+
* - If options.id is specified, the server will be cached and reused (singleton pattern)
|
|
17
|
+
* - If options.id is not specified, a new instance is created on each call
|
|
16
18
|
* - This allows different versions of the library to coexist
|
|
17
19
|
*/
|
|
18
20
|
function requestIframeServer(options) {
|
|
19
|
-
// Determine secretKey
|
|
21
|
+
// Determine secretKey and id
|
|
20
22
|
var secretKey = options === null || options === void 0 ? void 0 : options.secretKey;
|
|
23
|
+
var id = options === null || options === void 0 ? void 0 : options.id;
|
|
24
|
+
|
|
25
|
+
// If id is specified, check cache first
|
|
26
|
+
if (id) {
|
|
27
|
+
var cached = (0, _cache.getCachedServer)(secretKey, id);
|
|
28
|
+
if (cached) {
|
|
29
|
+
return cached;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
21
32
|
|
|
22
33
|
// Create server (internally obtains or creates a shared MessageChannel)
|
|
23
34
|
var server = new _server.RequestIframeServerImpl({
|
|
24
35
|
secretKey,
|
|
25
|
-
|
|
36
|
+
id,
|
|
37
|
+
ackTimeout: options === null || options === void 0 ? void 0 : options.ackTimeout,
|
|
38
|
+
autoOpen: options === null || options === void 0 ? void 0 : options.autoOpen
|
|
26
39
|
});
|
|
27
40
|
|
|
28
41
|
// If trace mode is enabled, register debug listeners
|
|
29
42
|
if (options !== null && options !== void 0 && options.trace) {
|
|
30
43
|
(0, _debug.setupServerDebugListeners)(server);
|
|
31
44
|
}
|
|
45
|
+
|
|
46
|
+
// Cache server if id is specified
|
|
47
|
+
if (id) {
|
|
48
|
+
(0, _cache.cacheServer)(server, secretKey, id);
|
|
49
|
+
}
|
|
32
50
|
return server;
|
|
33
51
|
}
|
|
34
52
|
|
|
35
53
|
/**
|
|
36
|
-
* Clear
|
|
37
|
-
* Note: This clears the
|
|
54
|
+
* Clear server cache (for testing or reset)
|
|
55
|
+
* Note: This clears the cached server instances
|
|
38
56
|
*/
|
|
39
57
|
function clearRequestIframeServerCache(secretKey) {
|
|
40
|
-
//
|
|
58
|
+
// Clear server cache
|
|
59
|
+
(0, _cache.clearServerCache)();
|
|
41
60
|
// MessageChannel cleanup is handled by clearMessageChannelCache in cache.ts
|
|
42
|
-
// Empty implementation kept here to maintain API compatibility
|
|
43
61
|
void secretKey;
|
|
44
62
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "Messages", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _messages.Messages;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "formatMessage", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _messages.formatMessage;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "getMessages", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _messages.getMessages;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "resetMessages", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _messages.resetMessages;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "setMessages", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _messages.setMessages;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
var _messages = require("./messages");
|
|
@@ -111,18 +111,28 @@ export declare const MessageType: {
|
|
|
111
111
|
/** Stream cancel */
|
|
112
112
|
readonly STREAM_CANCEL: "stream_cancel";
|
|
113
113
|
};
|
|
114
|
+
export declare const MessageRole: {
|
|
115
|
+
/** Server role */
|
|
116
|
+
readonly SERVER: "server";
|
|
117
|
+
/** Client role */
|
|
118
|
+
readonly CLIENT: "client";
|
|
119
|
+
};
|
|
120
|
+
export type MessageRoleValue = typeof MessageRole[keyof typeof MessageRole];
|
|
114
121
|
/**
|
|
115
122
|
* Default timeout configuration (milliseconds)
|
|
116
123
|
*/
|
|
117
124
|
export declare const DefaultTimeout: {
|
|
118
|
-
/**
|
|
119
|
-
|
|
125
|
+
/**
|
|
126
|
+
* ACK confirmation timeout: 1000ms (1s)
|
|
127
|
+
* Used for both client waiting for server ACK and server waiting for client RECEIVED.
|
|
128
|
+
* Increased from 500ms to accommodate slower environments or busy browsers where postMessage
|
|
129
|
+
* serialization/deserialization may take longer.
|
|
130
|
+
*/
|
|
131
|
+
readonly ACK: 1000;
|
|
120
132
|
/** Request timeout: 5s */
|
|
121
133
|
readonly REQUEST: 5000;
|
|
122
134
|
/** Async request timeout: 120s */
|
|
123
135
|
readonly ASYNC: 120000;
|
|
124
|
-
/** Server waiting for client confirmation timeout: 5s (server waiting for client to confirm response received) */
|
|
125
|
-
readonly SERVER_ACK: 5000;
|
|
126
136
|
};
|
|
127
137
|
/**
|
|
128
138
|
* HTTP Header name constants
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe;IAC1B,+BAA+B;;IAE/B,wFAAwF;;CAEhF,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oBAAoB;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;CAClD;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;CAWb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB,+BAA+B;;IAE/B,oCAAoC;;IAEpC,4BAA4B;;IAE5B,oBAAoB;;IAEpB,uBAAuB;;IAEvB,kBAAkB;;IAElB,qCAAqC;;IAErC,uBAAuB;;IAEvB,mBAAmB;;IAEnB,uBAAuB;;IAEvB,uBAAuB;;CAEf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,sBAAsB;;IAEtB,mCAAmC;;IAEnC,8BAA8B;;IAE9B,uBAAuB;;IAEvB,oBAAoB;;IAEpB,wCAAwC;;IAExC,8CAA8C;;IAE9C,8CAA8C;;IAE9C,mBAAmB;;IAEnB,wBAAwB;;IAExB,iBAAiB;;IAEjB,mBAAmB;;IAEnB,oBAAoB;;CAEZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.MessageType = exports.HttpStatusText = exports.HttpStatus = exports.HttpHeader = exports.ErrorCode = exports.DefaultTimeout = void 0;
|
|
6
|
+
exports.MessageType = exports.MessageRole = exports.HttpStatusText = exports.HttpStatus = exports.HttpHeader = exports.ErrorCode = exports.DefaultTimeout = void 0;
|
|
7
7
|
Object.defineProperty(exports, "Messages", {
|
|
8
8
|
enumerable: true,
|
|
9
9
|
get: function get() {
|
|
@@ -159,19 +159,27 @@ var MessageType = exports.MessageType = {
|
|
|
159
159
|
/** Stream cancel */
|
|
160
160
|
STREAM_CANCEL: 'stream_cancel'
|
|
161
161
|
};
|
|
162
|
-
|
|
162
|
+
var MessageRole = exports.MessageRole = {
|
|
163
|
+
/** Server role */
|
|
164
|
+
SERVER: 'server',
|
|
165
|
+
/** Client role */
|
|
166
|
+
CLIENT: 'client'
|
|
167
|
+
};
|
|
163
168
|
/**
|
|
164
169
|
* Default timeout configuration (milliseconds)
|
|
165
170
|
*/
|
|
166
171
|
var DefaultTimeout = exports.DefaultTimeout = {
|
|
167
|
-
/**
|
|
168
|
-
|
|
172
|
+
/**
|
|
173
|
+
* ACK confirmation timeout: 1000ms (1s)
|
|
174
|
+
* Used for both client waiting for server ACK and server waiting for client RECEIVED.
|
|
175
|
+
* Increased from 500ms to accommodate slower environments or busy browsers where postMessage
|
|
176
|
+
* serialization/deserialization may take longer.
|
|
177
|
+
*/
|
|
178
|
+
ACK: 1000,
|
|
169
179
|
/** Request timeout: 5s */
|
|
170
180
|
REQUEST: 5000,
|
|
171
181
|
/** Async request timeout: 120s */
|
|
172
|
-
ASYNC: 120000
|
|
173
|
-
/** Server waiting for client confirmation timeout: 5s (server waiting for client to confirm response received) */
|
|
174
|
-
SERVER_ACK: 5000
|
|
182
|
+
ASYNC: 120000
|
|
175
183
|
};
|
|
176
184
|
|
|
177
185
|
/**
|
|
@@ -40,6 +40,41 @@ declare const defaultMessages: {
|
|
|
40
40
|
readonly STREAM_ERROR: "Stream error: {0}";
|
|
41
41
|
readonly STREAM_ENDED: "Stream has ended";
|
|
42
42
|
readonly STREAM_READ_ERROR: "Failed to read stream data";
|
|
43
|
+
/** Debug messages - Client */
|
|
44
|
+
readonly DEBUG_CLIENT_REQUEST_START: "📤 [Client] Request Start";
|
|
45
|
+
readonly DEBUG_CLIENT_REQUEST_SUCCESS: "✅ [Client] Request Success";
|
|
46
|
+
readonly DEBUG_CLIENT_REQUEST_SUCCESS_FILE: "✅ [Client] Request Success (File)";
|
|
47
|
+
readonly DEBUG_CLIENT_REQUEST_SUCCESS_STREAM: "✅ [Client] Request Success (Stream)";
|
|
48
|
+
readonly DEBUG_CLIENT_REQUEST_FAILED: "❌ [Client] Request Failed";
|
|
49
|
+
readonly DEBUG_CLIENT_RECEIVED_ACK: "📥 [Client] Received ACK";
|
|
50
|
+
readonly DEBUG_CLIENT_RECEIVED_ASYNC: "⏳ [Client] Received ASYNC Notification";
|
|
51
|
+
readonly DEBUG_CLIENT_RECEIVED_STREAM_START: "🌊 [Client] Received Stream Start";
|
|
52
|
+
readonly DEBUG_CLIENT_RECEIVED_STREAM_DATA: "🌊 [Client] Received Stream Data";
|
|
53
|
+
readonly DEBUG_CLIENT_RECEIVED_STREAM_END: "🌊 [Client] Received Stream End";
|
|
54
|
+
readonly DEBUG_CLIENT_RECEIVED_RESPONSE: "📥 [Client] Received Response";
|
|
55
|
+
readonly DEBUG_CLIENT_RECEIVED_ERROR: "📥 [Client] Received Error";
|
|
56
|
+
readonly DEBUG_CLIENT_REQUEST_TIMEOUT: "⏱️ [Client] Request Timeout";
|
|
57
|
+
readonly DEBUG_CLIENT_SENDING_REQUEST: "📤 [Client] Sending Request";
|
|
58
|
+
readonly DEBUG_CLIENT_SENDING_PING: "📤 [Client] Sending Ping";
|
|
59
|
+
readonly DEBUG_CLIENT_SENDING_RECEIVED_ACK: "📤 [Client] Sending Received ACK";
|
|
60
|
+
/** Debug messages - Server */
|
|
61
|
+
readonly DEBUG_SERVER_RECEIVED_REQUEST: "📥 [Server] Received Request";
|
|
62
|
+
readonly DEBUG_SERVER_SETTING_STATUS_CODE: "📝 [Server] Setting Status Code";
|
|
63
|
+
readonly DEBUG_SERVER_SETTING_HEADER: "📝 [Server] Setting Header";
|
|
64
|
+
readonly DEBUG_SERVER_SENDING_RESPONSE: "📤 [Server] Sending Response";
|
|
65
|
+
readonly DEBUG_SERVER_SENDING_JSON_RESPONSE: "📤 [Server] Sending JSON Response";
|
|
66
|
+
readonly DEBUG_SERVER_SENDING_FILE: "📤 [Server] Sending File";
|
|
67
|
+
readonly DEBUG_SERVER_SENDING_STREAM: "📤 [Server] Sending Stream";
|
|
68
|
+
readonly DEBUG_SERVER_SENDING_ACK: "📤 [Server] Sending ACK";
|
|
69
|
+
readonly DEBUG_SERVER_SENDING_ASYNC: "📤 [Server] Sending ASYNC Notification";
|
|
70
|
+
readonly DEBUG_SERVER_SENDING_STREAM_START: "🌊 [Server] Sending Stream Start";
|
|
71
|
+
readonly DEBUG_SERVER_SENDING_STREAM_DATA: "🌊 [Server] Sending Stream Data";
|
|
72
|
+
readonly DEBUG_SERVER_SENDING_STREAM_END: "🌊 [Server] Sending Stream End";
|
|
73
|
+
readonly DEBUG_SERVER_SENDING_ERROR: "📤 [Server] Sending Error";
|
|
74
|
+
readonly DEBUG_SERVER_SENDING_RESPONSE_VIA_DISPATCHER: "📤 [Server] Sending Response (via dispatcher)";
|
|
75
|
+
readonly DEBUG_SERVER_HANDLING_REQUEST: "📥 [Server] Handling Request";
|
|
76
|
+
readonly DEBUG_SERVER_EXECUTING_MIDDLEWARE_CHAIN: "⚙️ [Server] Executing Middleware Chain";
|
|
77
|
+
readonly DEBUG_SERVER_MIDDLEWARE_CHAIN_COMPLETED: "✅ [Server] Middleware Chain Completed";
|
|
43
78
|
};
|
|
44
79
|
/**
|
|
45
80
|
* Message type
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/constants/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,QAAA,MAAM,eAAe;IACnB,8BAA8B;;;;IAK9B,4BAA4B;;;;;IAM5B,qBAAqB;;;;IAKrB,8BAA8B;;;;;;IAO9B,oBAAoB;;IAGpB,8BAA8B;;;;;;;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/constants/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,QAAA,MAAM,eAAe;IACnB,8BAA8B;;;;IAK9B,4BAA4B;;;;;IAM5B,qBAAqB;;;;IAKrB,8BAA8B;;;;;;IAO9B,oBAAoB;;IAGpB,8BAA8B;;;;;;;IAQ9B,8BAA8B;;;;;;;;;;;;;;;;;IAkB9B,8BAA8B;;;;;;;;;;;;;;;;;;CAkBtB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,eAAe,CAAC;AAOtD;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAIxD,CAAC;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAE/E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAKpF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAElE"}
|
|
@@ -59,7 +59,42 @@ var defaultMessages = {
|
|
|
59
59
|
STREAM_CANCELLED: 'Stream was cancelled: {0}',
|
|
60
60
|
STREAM_ERROR: 'Stream error: {0}',
|
|
61
61
|
STREAM_ENDED: 'Stream has ended',
|
|
62
|
-
STREAM_READ_ERROR: 'Failed to read stream data'
|
|
62
|
+
STREAM_READ_ERROR: 'Failed to read stream data',
|
|
63
|
+
/** Debug messages - Client */
|
|
64
|
+
DEBUG_CLIENT_REQUEST_START: '📤 [Client] Request Start',
|
|
65
|
+
DEBUG_CLIENT_REQUEST_SUCCESS: '✅ [Client] Request Success',
|
|
66
|
+
DEBUG_CLIENT_REQUEST_SUCCESS_FILE: '✅ [Client] Request Success (File)',
|
|
67
|
+
DEBUG_CLIENT_REQUEST_SUCCESS_STREAM: '✅ [Client] Request Success (Stream)',
|
|
68
|
+
DEBUG_CLIENT_REQUEST_FAILED: '❌ [Client] Request Failed',
|
|
69
|
+
DEBUG_CLIENT_RECEIVED_ACK: '📥 [Client] Received ACK',
|
|
70
|
+
DEBUG_CLIENT_RECEIVED_ASYNC: '⏳ [Client] Received ASYNC Notification',
|
|
71
|
+
DEBUG_CLIENT_RECEIVED_STREAM_START: '🌊 [Client] Received Stream Start',
|
|
72
|
+
DEBUG_CLIENT_RECEIVED_STREAM_DATA: '🌊 [Client] Received Stream Data',
|
|
73
|
+
DEBUG_CLIENT_RECEIVED_STREAM_END: '🌊 [Client] Received Stream End',
|
|
74
|
+
DEBUG_CLIENT_RECEIVED_RESPONSE: '📥 [Client] Received Response',
|
|
75
|
+
DEBUG_CLIENT_RECEIVED_ERROR: '📥 [Client] Received Error',
|
|
76
|
+
DEBUG_CLIENT_REQUEST_TIMEOUT: '⏱️ [Client] Request Timeout',
|
|
77
|
+
DEBUG_CLIENT_SENDING_REQUEST: '📤 [Client] Sending Request',
|
|
78
|
+
DEBUG_CLIENT_SENDING_PING: '📤 [Client] Sending Ping',
|
|
79
|
+
DEBUG_CLIENT_SENDING_RECEIVED_ACK: '📤 [Client] Sending Received ACK',
|
|
80
|
+
/** Debug messages - Server */
|
|
81
|
+
DEBUG_SERVER_RECEIVED_REQUEST: '📥 [Server] Received Request',
|
|
82
|
+
DEBUG_SERVER_SETTING_STATUS_CODE: '📝 [Server] Setting Status Code',
|
|
83
|
+
DEBUG_SERVER_SETTING_HEADER: '📝 [Server] Setting Header',
|
|
84
|
+
DEBUG_SERVER_SENDING_RESPONSE: '📤 [Server] Sending Response',
|
|
85
|
+
DEBUG_SERVER_SENDING_JSON_RESPONSE: '📤 [Server] Sending JSON Response',
|
|
86
|
+
DEBUG_SERVER_SENDING_FILE: '📤 [Server] Sending File',
|
|
87
|
+
DEBUG_SERVER_SENDING_STREAM: '📤 [Server] Sending Stream',
|
|
88
|
+
DEBUG_SERVER_SENDING_ACK: '📤 [Server] Sending ACK',
|
|
89
|
+
DEBUG_SERVER_SENDING_ASYNC: '📤 [Server] Sending ASYNC Notification',
|
|
90
|
+
DEBUG_SERVER_SENDING_STREAM_START: '🌊 [Server] Sending Stream Start',
|
|
91
|
+
DEBUG_SERVER_SENDING_STREAM_DATA: '🌊 [Server] Sending Stream Data',
|
|
92
|
+
DEBUG_SERVER_SENDING_STREAM_END: '🌊 [Server] Sending Stream End',
|
|
93
|
+
DEBUG_SERVER_SENDING_ERROR: '📤 [Server] Sending Error',
|
|
94
|
+
DEBUG_SERVER_SENDING_RESPONSE_VIA_DISPATCHER: '📤 [Server] Sending Response (via dispatcher)',
|
|
95
|
+
DEBUG_SERVER_HANDLING_REQUEST: '📥 [Server] Handling Request',
|
|
96
|
+
DEBUG_SERVER_EXECUTING_MIDDLEWARE_CHAIN: '⚙️ [Server] Executing Middleware Chain',
|
|
97
|
+
DEBUG_SERVER_MIDDLEWARE_CHAIN_COMPLETED: '✅ [Server] Middleware Chain Completed'
|
|
63
98
|
};
|
|
64
99
|
|
|
65
100
|
/**
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { PostMessageData } from '../types';
|
|
2
|
+
import { MessageDispatcher, VersionValidator, MessageContext } from '../message';
|
|
3
|
+
/**
|
|
4
|
+
* Stream message handler callback
|
|
5
|
+
*/
|
|
6
|
+
export type StreamMessageCallback = (data: PostMessageData, context: MessageContext) => void;
|
|
7
|
+
/**
|
|
8
|
+
* ClientServer configuration options
|
|
9
|
+
*/
|
|
10
|
+
export interface ClientServerOptions {
|
|
11
|
+
/** Message isolation key */
|
|
12
|
+
secretKey?: string;
|
|
13
|
+
/** ACK timeout */
|
|
14
|
+
ackTimeout?: number;
|
|
15
|
+
/** Protocol version validator (optional, uses built-in validation by default) */
|
|
16
|
+
versionValidator?: VersionValidator;
|
|
17
|
+
/** Whether to automatically open when creating the client server. Default is true. */
|
|
18
|
+
autoOpen?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* RequestIframeClientServer - Client-side message server
|
|
22
|
+
* Only handles responses, not requests
|
|
23
|
+
* Uses shared MessageDispatcher (backed by MessageChannel) to listen for and send messages
|
|
24
|
+
*/
|
|
25
|
+
export declare class RequestIframeClientServer {
|
|
26
|
+
private readonly dispatcher;
|
|
27
|
+
private readonly ackTimeout;
|
|
28
|
+
private readonly versionValidator;
|
|
29
|
+
/** Pending responses awaiting client acknowledgment */
|
|
30
|
+
private readonly pendingAcks;
|
|
31
|
+
/** Pending requests awaiting response */
|
|
32
|
+
private readonly pendingRequests;
|
|
33
|
+
/** Stream message callback */
|
|
34
|
+
private streamCallback?;
|
|
35
|
+
/** List of unregister handler functions */
|
|
36
|
+
private readonly unregisterFns;
|
|
37
|
+
/** Whether opened */
|
|
38
|
+
private _isOpen;
|
|
39
|
+
constructor(options?: ClientServerOptions, instanceId?: string);
|
|
40
|
+
/**
|
|
41
|
+
* Open message handling (register message handlers)
|
|
42
|
+
*/
|
|
43
|
+
open(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Close message handling (unregister message handlers, but don't release channel)
|
|
46
|
+
*/
|
|
47
|
+
close(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Whether opened
|
|
50
|
+
*/
|
|
51
|
+
get isOpen(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Register message handlers
|
|
54
|
+
*/
|
|
55
|
+
private registerHandlers;
|
|
56
|
+
/**
|
|
57
|
+
* Handle protocol version error
|
|
58
|
+
*/
|
|
59
|
+
private handleVersionError;
|
|
60
|
+
/**
|
|
61
|
+
* Handle client response
|
|
62
|
+
*/
|
|
63
|
+
private handleClientResponse;
|
|
64
|
+
/**
|
|
65
|
+
* Handle received acknowledgment
|
|
66
|
+
*/
|
|
67
|
+
private handleReceived;
|
|
68
|
+
/**
|
|
69
|
+
* Handle pong
|
|
70
|
+
*/
|
|
71
|
+
private handlePong;
|
|
72
|
+
/**
|
|
73
|
+
* Set stream message handler callback
|
|
74
|
+
*/
|
|
75
|
+
setStreamCallback(callback: StreamMessageCallback): void;
|
|
76
|
+
/** Get secretKey */
|
|
77
|
+
get secretKey(): string | undefined;
|
|
78
|
+
/** Get the underlying MessageDispatcher */
|
|
79
|
+
get messageDispatcher(): MessageDispatcher;
|
|
80
|
+
/**
|
|
81
|
+
* Register pending acknowledgment response
|
|
82
|
+
*/
|
|
83
|
+
_registerPendingAck(requestId: string, resolve: (received: boolean) => void, reject: (error: Error) => void): void;
|
|
84
|
+
/**
|
|
85
|
+
* Register pending request awaiting response
|
|
86
|
+
*/
|
|
87
|
+
_registerPendingRequest(requestId: string, resolve: (data: PostMessageData) => void, reject: (error: Error) => void, origin?: string): void;
|
|
88
|
+
/**
|
|
89
|
+
* Cancel pending response
|
|
90
|
+
*/
|
|
91
|
+
_unregisterPendingRequest(requestId: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* Send ping message
|
|
94
|
+
*/
|
|
95
|
+
sendPing(targetWindow: Window, targetOrigin: string, requestId: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* Destroy (close and release channel reference)
|
|
98
|
+
*/
|
|
99
|
+
destroy(): void;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=client-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-server.d.ts","sourceRoot":"","sources":["../../src/core/client-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAoB7F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,8BAA8B;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAwB;IAE/C,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,qBAAqB;IACrB,OAAO,CAAC,OAAO,CAAS;gBAEL,OAAO,CAAC,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,MAAM;IAcrE;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoFxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAI/D,oBAAoB;IACpB,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,2CAA2C;IAC3C,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED;;OAEG;IACI,mBAAmB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,EACpC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC7B,IAAI;IASP;;OAEG;IACI,uBAAuB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,EACxC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAC9B,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACI,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACI,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIpF;;OAEG;IACI,OAAO,IAAI,IAAI;CAavB"}
|