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.
- package/QUICKSTART.CN.md +269 -0
- package/QUICKSTART.md +269 -0
- package/README.CN.md +1369 -0
- package/README.md +1016 -0
- package/library/__tests__/interceptors.test.ts +124 -0
- package/library/__tests__/requestIframe.test.ts +2216 -0
- package/library/__tests__/stream.test.ts +650 -0
- package/library/__tests__/utils.test.ts +433 -0
- package/library/api/client.d.ts +16 -0
- package/library/api/client.d.ts.map +1 -0
- package/library/api/client.js +72 -0
- package/library/api/server.d.ts +16 -0
- package/library/api/server.d.ts.map +1 -0
- package/library/api/server.js +44 -0
- package/library/constants/index.d.ts +209 -0
- package/library/constants/index.d.ts.map +1 -0
- package/library/constants/index.js +260 -0
- package/library/constants/messages.d.ts +80 -0
- package/library/constants/messages.d.ts.map +1 -0
- package/library/constants/messages.js +123 -0
- package/library/core/client.d.ts +99 -0
- package/library/core/client.d.ts.map +1 -0
- package/library/core/client.js +440 -0
- package/library/core/message-handler.d.ts +110 -0
- package/library/core/message-handler.d.ts.map +1 -0
- package/library/core/message-handler.js +320 -0
- package/library/core/request-response.d.ts +59 -0
- package/library/core/request-response.d.ts.map +1 -0
- package/library/core/request-response.js +337 -0
- package/library/core/request.d.ts +17 -0
- package/library/core/request.d.ts.map +1 -0
- package/library/core/request.js +34 -0
- package/library/core/response.d.ts +51 -0
- package/library/core/response.d.ts.map +1 -0
- package/library/core/response.js +323 -0
- package/library/core/server-base.d.ts +86 -0
- package/library/core/server-base.d.ts.map +1 -0
- package/library/core/server-base.js +257 -0
- package/library/core/server-client.d.ts +99 -0
- package/library/core/server-client.d.ts.map +1 -0
- package/library/core/server-client.js +256 -0
- package/library/core/server.d.ts +82 -0
- package/library/core/server.d.ts.map +1 -0
- package/library/core/server.js +338 -0
- package/library/index.d.ts +16 -0
- package/library/index.d.ts.map +1 -0
- package/library/index.js +211 -0
- package/library/interceptors/index.d.ts +41 -0
- package/library/interceptors/index.d.ts.map +1 -0
- package/library/interceptors/index.js +126 -0
- package/library/message/channel.d.ts +107 -0
- package/library/message/channel.d.ts.map +1 -0
- package/library/message/channel.js +184 -0
- package/library/message/dispatcher.d.ts +119 -0
- package/library/message/dispatcher.d.ts.map +1 -0
- package/library/message/dispatcher.js +249 -0
- package/library/message/index.d.ts +5 -0
- package/library/message/index.d.ts.map +1 -0
- package/library/message/index.js +25 -0
- package/library/stream/file-stream.d.ts +48 -0
- package/library/stream/file-stream.d.ts.map +1 -0
- package/library/stream/file-stream.js +240 -0
- package/library/stream/index.d.ts +15 -0
- package/library/stream/index.d.ts.map +1 -0
- package/library/stream/index.js +83 -0
- package/library/stream/readable-stream.d.ts +83 -0
- package/library/stream/readable-stream.d.ts.map +1 -0
- package/library/stream/readable-stream.js +249 -0
- package/library/stream/types.d.ts +165 -0
- package/library/stream/types.d.ts.map +1 -0
- package/library/stream/types.js +5 -0
- package/library/stream/writable-stream.d.ts +60 -0
- package/library/stream/writable-stream.d.ts.map +1 -0
- package/library/stream/writable-stream.js +348 -0
- package/library/types/index.d.ts +408 -0
- package/library/types/index.d.ts.map +1 -0
- package/library/types/index.js +5 -0
- package/library/utils/cache.d.ts +19 -0
- package/library/utils/cache.d.ts.map +1 -0
- package/library/utils/cache.js +83 -0
- package/library/utils/cookie.d.ts +117 -0
- package/library/utils/cookie.d.ts.map +1 -0
- package/library/utils/cookie.js +365 -0
- package/library/utils/debug.d.ts +11 -0
- package/library/utils/debug.d.ts.map +1 -0
- package/library/utils/debug.js +162 -0
- package/library/utils/index.d.ts +13 -0
- package/library/utils/index.d.ts.map +1 -0
- package/library/utils/index.js +132 -0
- package/library/utils/path-match.d.ts +17 -0
- package/library/utils/path-match.d.ts.map +1 -0
- package/library/utils/path-match.js +90 -0
- package/library/utils/protocol.d.ts +61 -0
- package/library/utils/protocol.d.ts.map +1 -0
- package/library/utils/protocol.js +169 -0
- package/package.json +58 -0
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* RequestIframeClientServer - Client-side message server
|
|
20
|
+
* Only handles responses, not requests
|
|
21
|
+
* Uses shared MessageDispatcher (backed by MessageChannel) to listen for and send messages
|
|
22
|
+
*/
|
|
23
|
+
export declare class RequestIframeClientServer {
|
|
24
|
+
private readonly dispatcher;
|
|
25
|
+
private readonly ackTimeout;
|
|
26
|
+
private readonly versionValidator;
|
|
27
|
+
/** Pending responses awaiting client acknowledgment */
|
|
28
|
+
private readonly pendingAcks;
|
|
29
|
+
/** Pending requests awaiting response */
|
|
30
|
+
private readonly pendingRequests;
|
|
31
|
+
/** Stream message callback */
|
|
32
|
+
private streamCallback?;
|
|
33
|
+
/** List of unregister handler functions */
|
|
34
|
+
private readonly unregisterFns;
|
|
35
|
+
/** Whether opened */
|
|
36
|
+
private _isOpen;
|
|
37
|
+
constructor(options?: ClientServerOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Open message handling (register message handlers)
|
|
40
|
+
*/
|
|
41
|
+
open(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Close message handling (unregister message handlers, but don't release channel)
|
|
44
|
+
*/
|
|
45
|
+
close(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Whether opened
|
|
48
|
+
*/
|
|
49
|
+
get isOpen(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Register message handlers
|
|
52
|
+
*/
|
|
53
|
+
private registerHandlers;
|
|
54
|
+
/**
|
|
55
|
+
* Handle protocol version error
|
|
56
|
+
*/
|
|
57
|
+
private handleVersionError;
|
|
58
|
+
/**
|
|
59
|
+
* Handle client response
|
|
60
|
+
*/
|
|
61
|
+
private handleClientResponse;
|
|
62
|
+
/**
|
|
63
|
+
* Handle received acknowledgment
|
|
64
|
+
*/
|
|
65
|
+
private handleReceived;
|
|
66
|
+
/**
|
|
67
|
+
* Handle pong
|
|
68
|
+
*/
|
|
69
|
+
private handlePong;
|
|
70
|
+
/**
|
|
71
|
+
* Set stream message handler callback
|
|
72
|
+
*/
|
|
73
|
+
setStreamCallback(callback: StreamMessageCallback): void;
|
|
74
|
+
/** Get secretKey */
|
|
75
|
+
get secretKey(): string | undefined;
|
|
76
|
+
/** Get the underlying MessageDispatcher */
|
|
77
|
+
get messageDispatcher(): MessageDispatcher;
|
|
78
|
+
/**
|
|
79
|
+
* Register pending acknowledgment response
|
|
80
|
+
*/
|
|
81
|
+
_registerPendingAck(requestId: string, resolve: (received: boolean) => void, reject: (error: Error) => void): void;
|
|
82
|
+
/**
|
|
83
|
+
* Register pending request awaiting response
|
|
84
|
+
*/
|
|
85
|
+
_registerPendingRequest(requestId: string, resolve: (data: PostMessageData) => void, reject: (error: Error) => void, origin?: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* Cancel pending response
|
|
88
|
+
*/
|
|
89
|
+
_unregisterPendingRequest(requestId: string): void;
|
|
90
|
+
/**
|
|
91
|
+
* Send ping message
|
|
92
|
+
*/
|
|
93
|
+
sendPing(targetWindow: Window, targetOrigin: string, requestId: string): void;
|
|
94
|
+
/**
|
|
95
|
+
* Destroy (close and release channel reference)
|
|
96
|
+
*/
|
|
97
|
+
destroy(): void;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=server-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-client.d.ts","sourceRoot":"","sources":["../../src/core/server-client.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;CACrC;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;IAYhD;;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;IAsExB;;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"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.RequestIframeClientServer = void 0;
|
|
8
|
+
require("core-js/modules/es.array.iterator.js");
|
|
9
|
+
require("core-js/modules/es.map.js");
|
|
10
|
+
require("core-js/modules/es.string.starts-with.js");
|
|
11
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
12
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
var _message = require("../message");
|
|
15
|
+
var _cache = require("../utils/cache");
|
|
16
|
+
var _utils = require("../utils");
|
|
17
|
+
var _constants = require("../constants");
|
|
18
|
+
/**
|
|
19
|
+
* Stream message handler callback
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Pending acknowledgment response
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Pending request awaiting response
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* ClientServer configuration options
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* RequestIframeClientServer - Client-side message server
|
|
36
|
+
* Only handles responses, not requests
|
|
37
|
+
* Uses shared MessageDispatcher (backed by MessageChannel) to listen for and send messages
|
|
38
|
+
*/
|
|
39
|
+
class RequestIframeClientServer {
|
|
40
|
+
constructor(options) {
|
|
41
|
+
var _options$ackTimeout, _options$versionValid;
|
|
42
|
+
/** Pending responses awaiting client acknowledgment */
|
|
43
|
+
(0, _defineProperty2.default)(this, "pendingAcks", new Map());
|
|
44
|
+
/** Pending requests awaiting response */
|
|
45
|
+
(0, _defineProperty2.default)(this, "pendingRequests", new Map());
|
|
46
|
+
/** List of unregister handler functions */
|
|
47
|
+
(0, _defineProperty2.default)(this, "unregisterFns", []);
|
|
48
|
+
/** Whether opened */
|
|
49
|
+
(0, _defineProperty2.default)(this, "_isOpen", false);
|
|
50
|
+
this.ackTimeout = (_options$ackTimeout = options === null || options === void 0 ? void 0 : options.ackTimeout) !== null && _options$ackTimeout !== void 0 ? _options$ackTimeout : _constants.DefaultTimeout.SERVER_ACK;
|
|
51
|
+
this.versionValidator = (_options$versionValid = options === null || options === void 0 ? void 0 : options.versionValidator) !== null && _options$versionValid !== void 0 ? _options$versionValid : _utils.isCompatibleVersion;
|
|
52
|
+
|
|
53
|
+
// Get or create shared channel and create dispatcher
|
|
54
|
+
var channel = (0, _cache.getOrCreateMessageChannel)(options === null || options === void 0 ? void 0 : options.secretKey);
|
|
55
|
+
this.dispatcher = new _message.MessageDispatcher(channel);
|
|
56
|
+
|
|
57
|
+
// Auto-open by default
|
|
58
|
+
this.open();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Open message handling (register message handlers)
|
|
63
|
+
*/
|
|
64
|
+
open() {
|
|
65
|
+
if (this._isOpen) return;
|
|
66
|
+
this._isOpen = true;
|
|
67
|
+
this.registerHandlers();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Close message handling (unregister message handlers, but don't release channel)
|
|
72
|
+
*/
|
|
73
|
+
close() {
|
|
74
|
+
if (!this._isOpen) return;
|
|
75
|
+
this._isOpen = false;
|
|
76
|
+
|
|
77
|
+
// Unregister all handlers
|
|
78
|
+
this.unregisterFns.forEach(fn => fn());
|
|
79
|
+
this.unregisterFns.length = 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Whether opened
|
|
84
|
+
*/
|
|
85
|
+
get isOpen() {
|
|
86
|
+
return this._isOpen;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Register message handlers
|
|
91
|
+
*/
|
|
92
|
+
registerHandlers() {
|
|
93
|
+
var handlerOptions = {
|
|
94
|
+
versionValidator: this.versionValidator,
|
|
95
|
+
onVersionError: this.handleVersionError.bind(this)
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// Handle ACK messages
|
|
99
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.ACK, (data, context) => this.handleClientResponse(data, context), handlerOptions));
|
|
100
|
+
|
|
101
|
+
// Handle ASYNC messages
|
|
102
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.ASYNC, (data, context) => this.handleClientResponse(data, context), handlerOptions));
|
|
103
|
+
|
|
104
|
+
// Handle RESPONSE messages
|
|
105
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.RESPONSE, (data, context) => this.handleClientResponse(data, context), handlerOptions));
|
|
106
|
+
|
|
107
|
+
// Handle ERROR messages
|
|
108
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.ERROR, (data, context) => this.handleClientResponse(data, context), handlerOptions));
|
|
109
|
+
|
|
110
|
+
// Handle RECEIVED messages
|
|
111
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.RECEIVED, data => this.handleReceived(data), handlerOptions));
|
|
112
|
+
|
|
113
|
+
// Handle PONG messages
|
|
114
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(_constants.MessageType.PONG, (data, context) => this.handlePong(data, context), handlerOptions));
|
|
115
|
+
|
|
116
|
+
// Handle stream messages (stream_*)
|
|
117
|
+
this.unregisterFns.push(this.dispatcher.registerHandler(type => type.startsWith('stream_'), (data, context) => {
|
|
118
|
+
var _this$streamCallback;
|
|
119
|
+
return (_this$streamCallback = this.streamCallback) === null || _this$streamCallback === void 0 ? void 0 : _this$streamCallback.call(this, data, context);
|
|
120
|
+
}, handlerOptions));
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Handle protocol version error
|
|
125
|
+
*/
|
|
126
|
+
handleVersionError(data, context, version) {
|
|
127
|
+
// For response messages, we need to notify the waiting request
|
|
128
|
+
var pending = this.pendingRequests.get(data.requestId);
|
|
129
|
+
if (pending) {
|
|
130
|
+
this.pendingRequests.delete(data.requestId);
|
|
131
|
+
pending.reject(new Error((0, _constants.formatMessage)(_constants.Messages.PROTOCOL_VERSION_TOO_LOW, version, _constants.ProtocolVersion.MIN_SUPPORTED)));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Handle client response
|
|
137
|
+
*/
|
|
138
|
+
handleClientResponse(data, context) {
|
|
139
|
+
var pending = this.pendingRequests.get(data.requestId);
|
|
140
|
+
if (pending) {
|
|
141
|
+
// Validate origin
|
|
142
|
+
if (pending.origin && pending.origin !== '*' && context.origin !== pending.origin) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// ack and async don't delete pending
|
|
146
|
+
if (data.type === _constants.MessageType.ACK || data.type === _constants.MessageType.ASYNC) {
|
|
147
|
+
pending.resolve(data);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// response and error delete pending
|
|
151
|
+
this.pendingRequests.delete(data.requestId);
|
|
152
|
+
pending.resolve(data);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Handle received acknowledgment
|
|
158
|
+
*/
|
|
159
|
+
handleReceived(data) {
|
|
160
|
+
var pending = this.pendingAcks.get(data.requestId);
|
|
161
|
+
if (pending) {
|
|
162
|
+
clearTimeout(pending.timeoutId);
|
|
163
|
+
this.pendingAcks.delete(data.requestId);
|
|
164
|
+
pending.resolve(true);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Handle pong
|
|
170
|
+
*/
|
|
171
|
+
handlePong(data, context) {
|
|
172
|
+
var pending = this.pendingRequests.get(data.requestId);
|
|
173
|
+
if (pending) {
|
|
174
|
+
if (pending.origin && pending.origin !== '*' && context.origin !== pending.origin) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
this.pendingRequests.delete(data.requestId);
|
|
178
|
+
pending.resolve(data);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Set stream message handler callback
|
|
184
|
+
*/
|
|
185
|
+
setStreamCallback(callback) {
|
|
186
|
+
this.streamCallback = callback;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Get secretKey */
|
|
190
|
+
get secretKey() {
|
|
191
|
+
return this.dispatcher.secretKey;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** Get the underlying MessageDispatcher */
|
|
195
|
+
get messageDispatcher() {
|
|
196
|
+
return this.dispatcher;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Register pending acknowledgment response
|
|
201
|
+
*/
|
|
202
|
+
_registerPendingAck(requestId, resolve, reject) {
|
|
203
|
+
var timeoutId = setTimeout(() => {
|
|
204
|
+
this.pendingAcks.delete(requestId);
|
|
205
|
+
resolve(false);
|
|
206
|
+
}, this.ackTimeout);
|
|
207
|
+
this.pendingAcks.set(requestId, {
|
|
208
|
+
resolve,
|
|
209
|
+
reject,
|
|
210
|
+
timeoutId
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Register pending request awaiting response
|
|
216
|
+
*/
|
|
217
|
+
_registerPendingRequest(requestId, resolve, reject, origin) {
|
|
218
|
+
this.pendingRequests.set(requestId, {
|
|
219
|
+
resolve,
|
|
220
|
+
reject,
|
|
221
|
+
origin
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Cancel pending response
|
|
227
|
+
*/
|
|
228
|
+
_unregisterPendingRequest(requestId) {
|
|
229
|
+
this.pendingRequests.delete(requestId);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Send ping message
|
|
234
|
+
*/
|
|
235
|
+
sendPing(targetWindow, targetOrigin, requestId) {
|
|
236
|
+
this.dispatcher.sendMessage(targetWindow, targetOrigin, _constants.MessageType.PING, requestId);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Destroy (close and release channel reference)
|
|
241
|
+
*/
|
|
242
|
+
destroy() {
|
|
243
|
+
// Close first
|
|
244
|
+
this.close();
|
|
245
|
+
|
|
246
|
+
// Clear pending
|
|
247
|
+
this.pendingRequests.clear();
|
|
248
|
+
this.pendingAcks.forEach(pending => clearTimeout(pending.timeoutId));
|
|
249
|
+
this.pendingAcks.clear();
|
|
250
|
+
|
|
251
|
+
// Destroy dispatcher and release channel reference
|
|
252
|
+
this.dispatcher.destroy();
|
|
253
|
+
(0, _cache.releaseMessageChannel)(this.dispatcher.getChannel());
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.RequestIframeClientServer = RequestIframeClientServer;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ServerHandler, RequestIframeServer, Middleware, PathMatcher } from '../types';
|
|
2
|
+
import { MessageDispatcher, VersionValidator } from '../message';
|
|
3
|
+
/**
|
|
4
|
+
* Server configuration options
|
|
5
|
+
*/
|
|
6
|
+
export interface ServerOptions {
|
|
7
|
+
/** Message isolation secret key */
|
|
8
|
+
secretKey?: string;
|
|
9
|
+
/** ACK timeout duration */
|
|
10
|
+
ackTimeout?: number;
|
|
11
|
+
/** Protocol version validator (optional, uses built-in validator by default) */
|
|
12
|
+
versionValidator?: VersionValidator;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* RequestIframeServer implementation
|
|
16
|
+
* Uses shared MessageDispatcher (backed by MessageChannel) to listen for and send messages
|
|
17
|
+
*/
|
|
18
|
+
export declare class RequestIframeServerImpl implements RequestIframeServer {
|
|
19
|
+
private readonly dispatcher;
|
|
20
|
+
private readonly ackTimeout;
|
|
21
|
+
private readonly versionValidator;
|
|
22
|
+
private readonly handlers;
|
|
23
|
+
private readonly middlewares;
|
|
24
|
+
/** Responses waiting for client acknowledgment */
|
|
25
|
+
private readonly pendingAcks;
|
|
26
|
+
/** List of functions to unregister handlers */
|
|
27
|
+
private readonly unregisterFns;
|
|
28
|
+
/** Whether it is open */
|
|
29
|
+
private _isOpen;
|
|
30
|
+
constructor(options?: ServerOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Open message processing (register message handlers)
|
|
33
|
+
*/
|
|
34
|
+
open(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Close message processing (unregister message handlers, but don't release channel)
|
|
37
|
+
*/
|
|
38
|
+
close(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Whether it is open
|
|
41
|
+
*/
|
|
42
|
+
get isOpen(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Register message handlers
|
|
45
|
+
*/
|
|
46
|
+
private registerHandlers;
|
|
47
|
+
/**
|
|
48
|
+
* Handle protocol version error
|
|
49
|
+
*/
|
|
50
|
+
private handleVersionError;
|
|
51
|
+
/**
|
|
52
|
+
* Handle ping message
|
|
53
|
+
*/
|
|
54
|
+
private handlePing;
|
|
55
|
+
/**
|
|
56
|
+
* Handle received acknowledgment
|
|
57
|
+
*/
|
|
58
|
+
private handleReceived;
|
|
59
|
+
/** Get secretKey */
|
|
60
|
+
get secretKey(): string | undefined;
|
|
61
|
+
/** Get the underlying MessageDispatcher */
|
|
62
|
+
get messageDispatcher(): MessageDispatcher;
|
|
63
|
+
/**
|
|
64
|
+
* Handle request
|
|
65
|
+
*/
|
|
66
|
+
private handleRequest;
|
|
67
|
+
/**
|
|
68
|
+
* Register pending acknowledgment response
|
|
69
|
+
*/
|
|
70
|
+
private registerPendingAck;
|
|
71
|
+
use(middleware: Middleware): void;
|
|
72
|
+
use(path: PathMatcher, middleware: Middleware): void;
|
|
73
|
+
on(path: string, handler: ServerHandler): void;
|
|
74
|
+
private runMiddlewares;
|
|
75
|
+
off(path: string): void;
|
|
76
|
+
map(handlers: Record<string, ServerHandler>): void;
|
|
77
|
+
/**
|
|
78
|
+
* Destroy (close and release channel reference)
|
|
79
|
+
*/
|
|
80
|
+
destroy(): void;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AA8BjF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IAEpD,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,yBAAyB;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEL,OAAO,CAAC,EAAE,aAAa;IAY1C;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB,oBAAoB;IACpB,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,2CAA2C;IAC3C,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA2HrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAanB,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IACjC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAepD,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD,OAAO,CAAC,cAAc;IA4Cf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI;IAMzD;;OAEG;IACI,OAAO,IAAI,IAAI;CAgBvB"}
|