@wix/duplexer-js 2.0.5
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.md +239 -0
- package/dist/src/_external-types.d.ts +1 -0
- package/dist/src/authenticator.d.ts +22 -0
- package/dist/src/authenticator.js +42 -0
- package/dist/src/authenticator.js.map +1 -0
- package/dist/src/channels/channel.d.ts +29 -0
- package/dist/src/channels/channel.js +159 -0
- package/dist/src/channels/channel.js.map +1 -0
- package/dist/src/channels/channels.d.ts +13 -0
- package/dist/src/channels/channels.js +41 -0
- package/dist/src/channels/channels.js.map +1 -0
- package/dist/src/channels/subscription-error.d.ts +6 -0
- package/dist/src/channels/subscription-error.js +3 -0
- package/dist/src/channels/subscription-error.js.map +1 -0
- package/dist/src/connection-manager.d.ts +62 -0
- package/dist/src/connection-manager.js +228 -0
- package/dist/src/connection-manager.js.map +1 -0
- package/dist/src/constants.d.ts +5 -0
- package/dist/src/constants.js +9 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/domain.d.ts +3 -0
- package/dist/src/domain.js +3 -0
- package/dist/src/domain.js.map +1 -0
- package/dist/src/duplexer.d.ts +41 -0
- package/dist/src/duplexer.js +125 -0
- package/dist/src/duplexer.js.map +1 -0
- package/dist/src/environments/core/environment.d.ts +13 -0
- package/dist/src/environments/core/environment.js +25 -0
- package/dist/src/environments/core/environment.js.map +1 -0
- package/dist/src/environments/core/network.d.ts +6 -0
- package/dist/src/environments/core/network.js +32 -0
- package/dist/src/environments/core/network.js.map +1 -0
- package/dist/src/environments/react-native/environment.d.ts +7 -0
- package/dist/src/environments/react-native/environment.js +27 -0
- package/dist/src/environments/react-native/environment.js.map +1 -0
- package/dist/src/environments/react-native/network.d.ts +6 -0
- package/dist/src/environments/react-native/network.js +54 -0
- package/dist/src/environments/react-native/network.js.map +1 -0
- package/dist/src/environments/react-native/transports.d.ts +8 -0
- package/dist/src/environments/react-native/transports.js +31 -0
- package/dist/src/environments/react-native/transports.js.map +1 -0
- package/dist/src/environments/web/environment.d.ts +8 -0
- package/dist/src/environments/web/environment.js +19 -0
- package/dist/src/environments/web/environment.js.map +1 -0
- package/dist/src/environments/web/network.d.ts +4 -0
- package/dist/src/environments/web/network.js +38 -0
- package/dist/src/environments/web/network.js.map +1 -0
- package/dist/src/environments/web/transports.d.ts +8 -0
- package/dist/src/environments/web/transports.js +51 -0
- package/dist/src/environments/web/transports.js.map +1 -0
- package/dist/src/errors/is-transport-error.d.ts +1 -0
- package/dist/src/errors/is-transport-error.js +7 -0
- package/dist/src/errors/is-transport-error.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/instance-updater.d.ts +5 -0
- package/dist/src/instance-updater.js +3 -0
- package/dist/src/instance-updater.js.map +1 -0
- package/dist/src/keep-alive.d.ts +18 -0
- package/dist/src/keep-alive.js +66 -0
- package/dist/src/keep-alive.js.map +1 -0
- package/dist/src/ready-state.d.ts +6 -0
- package/dist/src/ready-state.js +10 -0
- package/dist/src/ready-state.js.map +1 -0
- package/dist/src/strategies/strategy-builder.d.ts +11 -0
- package/dist/src/strategies/strategy-builder.js +34 -0
- package/dist/src/strategies/strategy-builder.js.map +1 -0
- package/dist/src/strategies/strategy-presets.d.ts +4 -0
- package/dist/src/strategies/strategy-presets.js +20 -0
- package/dist/src/strategies/strategy-presets.js.map +1 -0
- package/dist/src/strategies/strategy.d.ts +25 -0
- package/dist/src/strategies/strategy.js +153 -0
- package/dist/src/strategies/strategy.js.map +1 -0
- package/dist/src/timeline/noop-timeline.d.ts +5 -0
- package/dist/src/timeline/noop-timeline.js +15 -0
- package/dist/src/timeline/noop-timeline.js.map +1 -0
- package/dist/src/timeline/timeline.d.ts +7 -0
- package/dist/src/timeline/timeline.js +3 -0
- package/dist/src/timeline/timeline.js.map +1 -0
- package/dist/src/transport/http-polling.d.ts +27 -0
- package/dist/src/transport/http-polling.js +245 -0
- package/dist/src/transport/http-polling.js.map +1 -0
- package/dist/src/transport/http.d.ts +14 -0
- package/dist/src/transport/http.js +106 -0
- package/dist/src/transport/http.js.map +1 -0
- package/dist/src/transport/params.d.ts +3 -0
- package/dist/src/transport/params.js +70 -0
- package/dist/src/transport/params.js.map +1 -0
- package/dist/src/transport/transport-error.d.ts +8 -0
- package/dist/src/transport/transport-error.js +3 -0
- package/dist/src/transport/transport-error.js.map +1 -0
- package/dist/src/transport/transport-params.d.ts +3 -0
- package/dist/src/transport/transport-params.js +3 -0
- package/dist/src/transport/transport-params.js.map +1 -0
- package/dist/src/transport/transport.d.ts +50 -0
- package/dist/src/transport/transport.js +120 -0
- package/dist/src/transport/transport.js.map +1 -0
- package/dist/src/transport/transports-manager.d.ts +42 -0
- package/dist/src/transport/transports-manager.js +248 -0
- package/dist/src/transport/transports-manager.js.map +1 -0
- package/dist/src/transport/unrecoverable.d.ts +1 -0
- package/dist/src/transport/unrecoverable.js +8 -0
- package/dist/src/transport/unrecoverable.js.map +1 -0
- package/dist/src/transport/websocket.d.ts +18 -0
- package/dist/src/transport/websocket.js +155 -0
- package/dist/src/transport/websocket.js.map +1 -0
- package/dist/src/utils/assert.d.ts +1 -0
- package/dist/src/utils/assert.js +34 -0
- package/dist/src/utils/assert.js.map +1 -0
- package/dist/src/utils/cancel-token.d.ts +10 -0
- package/dist/src/utils/cancel-token.js +28 -0
- package/dist/src/utils/cancel-token.js.map +1 -0
- package/dist/src/utils/deferred.d.ts +9 -0
- package/dist/src/utils/deferred.js +27 -0
- package/dist/src/utils/deferred.js.map +1 -0
- package/dist/src/utils/event-emitter.d.ts +15 -0
- package/dist/src/utils/event-emitter.js +106 -0
- package/dist/src/utils/event-emitter.js.map +1 -0
- package/dist/src/utils/on.d.ts +4 -0
- package/dist/src/utils/on.js +10 -0
- package/dist/src/utils/on.js.map +1 -0
- package/dist/src/utils/request.d.ts +20 -0
- package/dist/src/utils/request.js +164 -0
- package/dist/src/utils/request.js.map +1 -0
- package/dist/src/utils/timer.d.ts +8 -0
- package/dist/src/utils/timer.js +17 -0
- package/dist/src/utils/timer.js.map +1 -0
- package/dist/src/utils/utils.d.ts +1 -0
- package/dist/src/utils/utils.js +8 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/dist/src/virtual-socket.d.ts +42 -0
- package/dist/src/virtual-socket.js +199 -0
- package/dist/src/virtual-socket.js.map +1 -0
- package/dist/statics/duplexer.bundle.js +982 -0
- package/dist/statics/duplexer.bundle.js.map +1 -0
- package/dist/statics/duplexer.bundle.min.js +2 -0
- package/dist/statics/duplexer.bundle.min.js.map +1 -0
- package/dist/statics/manifest.json +3 -0
- package/dist/statics/manifest.min.json +3 -0
- package/dist/test/_external-types.d.ts +2 -0
- package/dist/test/_global-types.d.ts +10 -0
- package/dist/test/_setup-global-hooks.spec.d.ts +1 -0
- package/dist/test/_setup-global-hooks.spec.js +13 -0
- package/dist/test/_setup-global-hooks.spec.js.map +1 -0
- package/dist/test/client-events.it.d.ts +1 -0
- package/dist/test/client-events.it.js +33 -0
- package/dist/test/client-events.it.js.map +1 -0
- package/dist/test/connect.spec.d.ts +1 -0
- package/dist/test/connect.spec.js +71 -0
- package/dist/test/connect.spec.js.map +1 -0
- package/dist/test/connection-manager.spec.d.ts +1 -0
- package/dist/test/connection-manager.spec.js +523 -0
- package/dist/test/connection-manager.spec.js.map +1 -0
- package/dist/test/duplexer.it.d.ts +1 -0
- package/dist/test/duplexer.it.js +243 -0
- package/dist/test/duplexer.it.js.map +1 -0
- package/dist/test/duplexer.spec.d.ts +1 -0
- package/dist/test/duplexer.spec.js +337 -0
- package/dist/test/duplexer.spec.js.map +1 -0
- package/dist/test/environments/web.it.d.ts +1 -0
- package/dist/test/environments/web.it.js +30 -0
- package/dist/test/environments/web.it.js.map +1 -0
- package/dist/test/environments/web.spec.d.ts +1 -0
- package/dist/test/environments/web.spec.js +92 -0
- package/dist/test/environments/web.spec.js.map +1 -0
- package/dist/test/event-emitter.spec.d.ts +1 -0
- package/dist/test/event-emitter.spec.js +182 -0
- package/dist/test/event-emitter.spec.js.map +1 -0
- package/dist/test/helpers/as-promised.d.ts +7 -0
- package/dist/test/helpers/as-promised.js +38 -0
- package/dist/test/helpers/as-promised.js.map +1 -0
- package/dist/test/helpers/assertions.d.ts +8 -0
- package/dist/test/helpers/assertions.js +43 -0
- package/dist/test/helpers/assertions.js.map +1 -0
- package/dist/test/helpers/auth-server.d.ts +10 -0
- package/dist/test/helpers/auth-server.js +61 -0
- package/dist/test/helpers/auth-server.js.map +1 -0
- package/dist/test/helpers/http-polling-environment.d.ts +2 -0
- package/dist/test/helpers/http-polling-environment.js +20 -0
- package/dist/test/helpers/http-polling-environment.js.map +1 -0
- package/dist/test/helpers/in-memory-environemnt.d.ts +15 -0
- package/dist/test/helpers/in-memory-environemnt.js +39 -0
- package/dist/test/helpers/in-memory-environemnt.js.map +1 -0
- package/dist/test/helpers/in-memory-network.d.ts +5 -0
- package/dist/test/helpers/in-memory-network.js +37 -0
- package/dist/test/helpers/in-memory-network.js.map +1 -0
- package/dist/test/helpers/in-memory-timeline.d.ts +8 -0
- package/dist/test/helpers/in-memory-timeline.js +24 -0
- package/dist/test/helpers/in-memory-timeline.js.map +1 -0
- package/dist/test/helpers/in-memory-transport.d.ts +68 -0
- package/dist/test/helpers/in-memory-transport.js +271 -0
- package/dist/test/helpers/in-memory-transport.js.map +1 -0
- package/dist/test/helpers/server-interceptor.d.ts +10 -0
- package/dist/test/helpers/server-interceptor.js +138 -0
- package/dist/test/helpers/server-interceptor.js.map +1 -0
- package/dist/test/helpers/setup-global-mock-navigator.d.ts +4 -0
- package/dist/test/helpers/setup-global-mock-navigator.js +22 -0
- package/dist/test/helpers/setup-global-mock-navigator.js.map +1 -0
- package/dist/test/helpers/window.d.ts +1 -0
- package/dist/test/helpers/window.js +17 -0
- package/dist/test/helpers/window.js.map +1 -0
- package/dist/test/keep-alive.it.spec.d.ts +1 -0
- package/dist/test/keep-alive.it.spec.js +42 -0
- package/dist/test/keep-alive.it.spec.js.map +1 -0
- package/dist/test/keep-alive.spec.d.ts +1 -0
- package/dist/test/keep-alive.spec.js +140 -0
- package/dist/test/keep-alive.spec.js.map +1 -0
- package/dist/test/ng/channel-support.d.ts +39 -0
- package/dist/test/ng/channel-support.js +178 -0
- package/dist/test/ng/channel-support.js.map +1 -0
- package/dist/test/ng/channels.spec.d.ts +1 -0
- package/dist/test/ng/channels.spec.js +79 -0
- package/dist/test/ng/channels.spec.js.map +1 -0
- package/dist/test/ng/client-events.it.d.ts +1 -0
- package/dist/test/ng/client-events.it.js +75 -0
- package/dist/test/ng/client-events.it.js.map +1 -0
- package/dist/test/ng/connect.it.d.ts +1 -0
- package/dist/test/ng/connect.it.js +128 -0
- package/dist/test/ng/connect.it.js.map +1 -0
- package/dist/test/ng/corvid-environment.d.ts +22 -0
- package/dist/test/ng/corvid-environment.js +44 -0
- package/dist/test/ng/corvid-environment.js.map +1 -0
- package/dist/test/ng/environment.d.ts +49 -0
- package/dist/test/ng/environment.js +250 -0
- package/dist/test/ng/environment.js.map +1 -0
- package/dist/test/ng/setup.d.ts +54 -0
- package/dist/test/ng/setup.js +256 -0
- package/dist/test/ng/setup.js.map +1 -0
- package/dist/test/ng/subscribe.it.d.ts +1 -0
- package/dist/test/ng/subscribe.it.js +354 -0
- package/dist/test/ng/subscribe.it.js.map +1 -0
- package/dist/test/ng/unsubscribe.it.d.ts +1 -0
- package/dist/test/ng/unsubscribe.it.js +73 -0
- package/dist/test/ng/unsubscribe.it.js.map +1 -0
- package/dist/test/ng/util-functions.d.ts +7 -0
- package/dist/test/ng/util-functions.js +73 -0
- package/dist/test/ng/util-functions.js.map +1 -0
- package/dist/test/proto/client/index.d.ts +2852 -0
- package/dist/test/proto/index.d.ts +1421 -0
- package/dist/test/proto/server/index.d.ts +2832 -0
- package/dist/test/restore-overrides.it.d.ts +1 -0
- package/dist/test/restore-overrides.it.js +38 -0
- package/dist/test/restore-overrides.it.js.map +1 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.js +5 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/test/strategy.spec.d.ts +1 -0
- package/dist/test/strategy.spec.js +209 -0
- package/dist/test/strategy.spec.js.map +1 -0
- package/dist/test/subscribe.it.d.ts +1 -0
- package/dist/test/subscribe.it.js +216 -0
- package/dist/test/subscribe.it.js.map +1 -0
- package/dist/test/subscribe.spec.d.ts +1 -0
- package/dist/test/subscribe.spec.js +86 -0
- package/dist/test/subscribe.spec.js.map +1 -0
- package/dist/test/transporters/http-polling.it.d.ts +1 -0
- package/dist/test/transporters/http-polling.it.js +118 -0
- package/dist/test/transporters/http-polling.it.js.map +1 -0
- package/dist/test/transporters/http-polling.spec.d.ts +1 -0
- package/dist/test/transporters/http-polling.spec.js +354 -0
- package/dist/test/transporters/http-polling.spec.js.map +1 -0
- package/dist/test/transporters/transporter.spec.d.ts +1 -0
- package/dist/test/transporters/transporter.spec.js +46 -0
- package/dist/test/transporters/transporter.spec.js.map +1 -0
- package/dist/test/transporters/websocket.spec.d.ts +1 -0
- package/dist/test/transporters/websocket.spec.js +26 -0
- package/dist/test/transporters/websocket.spec.js.map +1 -0
- package/dist/test/transports-manager.spec.d.ts +1 -0
- package/dist/test/transports-manager.spec.js +346 -0
- package/dist/test/transports-manager.spec.js.map +1 -0
- package/dist/test/utils/request.spec.d.ts +1 -0
- package/dist/test/utils/request.spec.js +274 -0
- package/dist/test/utils/request.spec.js.map +1 -0
- package/dist/test/virtual-socket.it.d.ts +1 -0
- package/dist/test/virtual-socket.it.js +153 -0
- package/dist/test/virtual-socket.it.js.map +1 -0
- package/package.json +131 -0
- package/react-native.d.ts +1 -0
- package/react-native.js +1 -0
|
@@ -0,0 +1,982 @@
|
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
|
5
|
+
define("Duplexer", [], factory);
|
|
6
|
+
else if(typeof exports === 'object')
|
|
7
|
+
exports["Duplexer"] = factory();
|
|
8
|
+
else
|
|
9
|
+
root["Duplexer"] = factory();
|
|
10
|
+
})((typeof self !== 'undefined' ? self : this), () => {
|
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
|
12
|
+
/******/ var __webpack_modules__ = ({
|
|
13
|
+
|
|
14
|
+
/***/ 830:
|
|
15
|
+
/*!*********************************************!*\
|
|
16
|
+
!*** ../../../node_modules/backo2/index.js ***!
|
|
17
|
+
\*********************************************/
|
|
18
|
+
/***/ ((module) => {
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Expose `Backoff`.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
module.exports = Backoff;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Initialize backoff timer with `opts`.
|
|
29
|
+
*
|
|
30
|
+
* - `min` initial timeout in milliseconds [100]
|
|
31
|
+
* - `max` max timeout [10000]
|
|
32
|
+
* - `jitter` [0]
|
|
33
|
+
* - `factor` [2]
|
|
34
|
+
*
|
|
35
|
+
* @param {Object} opts
|
|
36
|
+
* @api public
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
function Backoff(opts) {
|
|
40
|
+
opts = opts || {};
|
|
41
|
+
this.ms = opts.min || 100;
|
|
42
|
+
this.max = opts.max || 10000;
|
|
43
|
+
this.factor = opts.factor || 2;
|
|
44
|
+
this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
|
|
45
|
+
this.attempts = 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Return the backoff duration.
|
|
50
|
+
*
|
|
51
|
+
* @return {Number}
|
|
52
|
+
* @api public
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
Backoff.prototype.duration = function(){
|
|
56
|
+
var ms = this.ms * Math.pow(this.factor, this.attempts++);
|
|
57
|
+
if (this.jitter) {
|
|
58
|
+
var rand = Math.random();
|
|
59
|
+
var deviation = Math.floor(rand * this.jitter * ms);
|
|
60
|
+
ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;
|
|
61
|
+
}
|
|
62
|
+
return Math.min(ms, this.max) | 0;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reset the number of attempts.
|
|
67
|
+
*
|
|
68
|
+
* @api public
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
Backoff.prototype.reset = function(){
|
|
72
|
+
this.attempts = 0;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Set the minimum duration
|
|
77
|
+
*
|
|
78
|
+
* @api public
|
|
79
|
+
*/
|
|
80
|
+
|
|
81
|
+
Backoff.prototype.setMin = function(min){
|
|
82
|
+
this.ms = min;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Set the maximum duration
|
|
87
|
+
*
|
|
88
|
+
* @api public
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
Backoff.prototype.setMax = function(max){
|
|
92
|
+
this.max = max;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Set the jitter
|
|
97
|
+
*
|
|
98
|
+
* @api public
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
Backoff.prototype.setJitter = function(jitter){
|
|
102
|
+
this.jitter = jitter;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
/***/ }),
|
|
108
|
+
|
|
109
|
+
/***/ 158:
|
|
110
|
+
/*!************************************************!*\
|
|
111
|
+
!*** ../../../node_modules/process/browser.js ***!
|
|
112
|
+
\************************************************/
|
|
113
|
+
/***/ ((module) => {
|
|
114
|
+
|
|
115
|
+
// shim for using process in browser
|
|
116
|
+
var process = module.exports = {};
|
|
117
|
+
|
|
118
|
+
// cached from whatever global is present so that test runners that stub it
|
|
119
|
+
// don't break things. But we need to wrap it in a try catch in case it is
|
|
120
|
+
// wrapped in strict mode code which doesn't define any globals. It's inside a
|
|
121
|
+
// function because try/catches deoptimize in certain engines.
|
|
122
|
+
|
|
123
|
+
var cachedSetTimeout;
|
|
124
|
+
var cachedClearTimeout;
|
|
125
|
+
|
|
126
|
+
function defaultSetTimout() {
|
|
127
|
+
throw new Error('setTimeout has not been defined');
|
|
128
|
+
}
|
|
129
|
+
function defaultClearTimeout () {
|
|
130
|
+
throw new Error('clearTimeout has not been defined');
|
|
131
|
+
}
|
|
132
|
+
(function () {
|
|
133
|
+
try {
|
|
134
|
+
if (typeof setTimeout === 'function') {
|
|
135
|
+
cachedSetTimeout = setTimeout;
|
|
136
|
+
} else {
|
|
137
|
+
cachedSetTimeout = defaultSetTimout;
|
|
138
|
+
}
|
|
139
|
+
} catch (e) {
|
|
140
|
+
cachedSetTimeout = defaultSetTimout;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
if (typeof clearTimeout === 'function') {
|
|
144
|
+
cachedClearTimeout = clearTimeout;
|
|
145
|
+
} else {
|
|
146
|
+
cachedClearTimeout = defaultClearTimeout;
|
|
147
|
+
}
|
|
148
|
+
} catch (e) {
|
|
149
|
+
cachedClearTimeout = defaultClearTimeout;
|
|
150
|
+
}
|
|
151
|
+
} ())
|
|
152
|
+
function runTimeout(fun) {
|
|
153
|
+
if (cachedSetTimeout === setTimeout) {
|
|
154
|
+
//normal enviroments in sane situations
|
|
155
|
+
return setTimeout(fun, 0);
|
|
156
|
+
}
|
|
157
|
+
// if setTimeout wasn't available but was latter defined
|
|
158
|
+
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
|
159
|
+
cachedSetTimeout = setTimeout;
|
|
160
|
+
return setTimeout(fun, 0);
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
// when when somebody has screwed with setTimeout but no I.E. maddness
|
|
164
|
+
return cachedSetTimeout(fun, 0);
|
|
165
|
+
} catch(e){
|
|
166
|
+
try {
|
|
167
|
+
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
|
168
|
+
return cachedSetTimeout.call(null, fun, 0);
|
|
169
|
+
} catch(e){
|
|
170
|
+
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
|
171
|
+
return cachedSetTimeout.call(this, fun, 0);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
function runClearTimeout(marker) {
|
|
178
|
+
if (cachedClearTimeout === clearTimeout) {
|
|
179
|
+
//normal enviroments in sane situations
|
|
180
|
+
return clearTimeout(marker);
|
|
181
|
+
}
|
|
182
|
+
// if clearTimeout wasn't available but was latter defined
|
|
183
|
+
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
|
184
|
+
cachedClearTimeout = clearTimeout;
|
|
185
|
+
return clearTimeout(marker);
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
// when when somebody has screwed with setTimeout but no I.E. maddness
|
|
189
|
+
return cachedClearTimeout(marker);
|
|
190
|
+
} catch (e){
|
|
191
|
+
try {
|
|
192
|
+
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
|
193
|
+
return cachedClearTimeout.call(null, marker);
|
|
194
|
+
} catch (e){
|
|
195
|
+
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
|
196
|
+
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
|
197
|
+
return cachedClearTimeout.call(this, marker);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
var queue = [];
|
|
205
|
+
var draining = false;
|
|
206
|
+
var currentQueue;
|
|
207
|
+
var queueIndex = -1;
|
|
208
|
+
|
|
209
|
+
function cleanUpNextTick() {
|
|
210
|
+
if (!draining || !currentQueue) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
draining = false;
|
|
214
|
+
if (currentQueue.length) {
|
|
215
|
+
queue = currentQueue.concat(queue);
|
|
216
|
+
} else {
|
|
217
|
+
queueIndex = -1;
|
|
218
|
+
}
|
|
219
|
+
if (queue.length) {
|
|
220
|
+
drainQueue();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function drainQueue() {
|
|
225
|
+
if (draining) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
var timeout = runTimeout(cleanUpNextTick);
|
|
229
|
+
draining = true;
|
|
230
|
+
|
|
231
|
+
var len = queue.length;
|
|
232
|
+
while(len) {
|
|
233
|
+
currentQueue = queue;
|
|
234
|
+
queue = [];
|
|
235
|
+
while (++queueIndex < len) {
|
|
236
|
+
if (currentQueue) {
|
|
237
|
+
currentQueue[queueIndex].run();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
queueIndex = -1;
|
|
241
|
+
len = queue.length;
|
|
242
|
+
}
|
|
243
|
+
currentQueue = null;
|
|
244
|
+
draining = false;
|
|
245
|
+
runClearTimeout(timeout);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
process.nextTick = function (fun) {
|
|
249
|
+
var args = new Array(arguments.length - 1);
|
|
250
|
+
if (arguments.length > 1) {
|
|
251
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
252
|
+
args[i - 1] = arguments[i];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
queue.push(new Item(fun, args));
|
|
256
|
+
if (queue.length === 1 && !draining) {
|
|
257
|
+
runTimeout(drainQueue);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// v8 likes predictible objects
|
|
262
|
+
function Item(fun, array) {
|
|
263
|
+
this.fun = fun;
|
|
264
|
+
this.array = array;
|
|
265
|
+
}
|
|
266
|
+
Item.prototype.run = function () {
|
|
267
|
+
this.fun.apply(null, this.array);
|
|
268
|
+
};
|
|
269
|
+
process.title = 'browser';
|
|
270
|
+
process.browser = true;
|
|
271
|
+
process.env = {};
|
|
272
|
+
process.argv = [];
|
|
273
|
+
process.version = ''; // empty string to avoid regexp issues
|
|
274
|
+
process.versions = {};
|
|
275
|
+
|
|
276
|
+
function noop() {}
|
|
277
|
+
|
|
278
|
+
process.on = noop;
|
|
279
|
+
process.addListener = noop;
|
|
280
|
+
process.once = noop;
|
|
281
|
+
process.off = noop;
|
|
282
|
+
process.removeListener = noop;
|
|
283
|
+
process.removeAllListeners = noop;
|
|
284
|
+
process.emit = noop;
|
|
285
|
+
process.prependListener = noop;
|
|
286
|
+
process.prependOnceListener = noop;
|
|
287
|
+
|
|
288
|
+
process.listeners = function (name) { return [] }
|
|
289
|
+
|
|
290
|
+
process.binding = function (name) {
|
|
291
|
+
throw new Error('process.binding is not supported');
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
process.cwd = function () { return '/' };
|
|
295
|
+
process.chdir = function (dir) {
|
|
296
|
+
throw new Error('process.chdir is not supported');
|
|
297
|
+
};
|
|
298
|
+
process.umask = function() { return 0; };
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
/***/ }),
|
|
302
|
+
|
|
303
|
+
/***/ 102:
|
|
304
|
+
/*!**********************************************************!*\
|
|
305
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/index.js ***!
|
|
306
|
+
\**********************************************************/
|
|
307
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
308
|
+
|
|
309
|
+
"use strict";
|
|
310
|
+
var __webpack_unused_export__;
|
|
311
|
+
|
|
312
|
+
__webpack_unused_export__ = ({ value: true });
|
|
313
|
+
exports.AN = exports.Du = exports.v8 = void 0;
|
|
314
|
+
var RestoreStrategyBuilderFactory_1 = __webpack_require__(/*! ./lib/restore/RestoreStrategyBuilderFactory */ 120);
|
|
315
|
+
exports.v8 = RestoreStrategyBuilderFactory_1.default;
|
|
316
|
+
var PollPayloadBuilder_1 = __webpack_require__(/*! ./lib/PollPayloadBuilder */ 880);
|
|
317
|
+
exports.Du = PollPayloadBuilder_1.default;
|
|
318
|
+
var PollOverrideRestoreStrategyBuilder_1 = __webpack_require__(/*! ./lib/PollOverrideRestoreStrategyBuilder */ 131);
|
|
319
|
+
exports.AN = PollOverrideRestoreStrategyBuilder_1.default;
|
|
320
|
+
//# sourceMappingURL=index.js.map
|
|
321
|
+
|
|
322
|
+
/***/ }),
|
|
323
|
+
|
|
324
|
+
/***/ 131:
|
|
325
|
+
/*!*******************************************************************************************!*\
|
|
326
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/PollOverrideRestoreStrategyBuilder.js ***!
|
|
327
|
+
\*******************************************************************************************/
|
|
328
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
329
|
+
|
|
330
|
+
"use strict";
|
|
331
|
+
|
|
332
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
333
|
+
var PollOverrideRestoreStrategyBuilder = /** @class */ (function () {
|
|
334
|
+
function PollOverrideRestoreStrategyBuilder() {
|
|
335
|
+
}
|
|
336
|
+
PollOverrideRestoreStrategyBuilder.prototype.withNs = function (ns) {
|
|
337
|
+
this.ns = ns;
|
|
338
|
+
return this;
|
|
339
|
+
};
|
|
340
|
+
PollOverrideRestoreStrategyBuilder.prototype.withChannelName = function (channelName) {
|
|
341
|
+
this.channelName = channelName;
|
|
342
|
+
return this;
|
|
343
|
+
};
|
|
344
|
+
PollOverrideRestoreStrategyBuilder.prototype.withRestoreStrategy = function (strategy) {
|
|
345
|
+
this.restore = strategy;
|
|
346
|
+
return this;
|
|
347
|
+
};
|
|
348
|
+
PollOverrideRestoreStrategyBuilder.prototype.build = function () {
|
|
349
|
+
return {
|
|
350
|
+
ns: this.ns,
|
|
351
|
+
channel: this.channelName,
|
|
352
|
+
override: this.restore,
|
|
353
|
+
};
|
|
354
|
+
};
|
|
355
|
+
return PollOverrideRestoreStrategyBuilder;
|
|
356
|
+
}());
|
|
357
|
+
exports["default"] = PollOverrideRestoreStrategyBuilder;
|
|
358
|
+
//# sourceMappingURL=PollOverrideRestoreStrategyBuilder.js.map
|
|
359
|
+
|
|
360
|
+
/***/ }),
|
|
361
|
+
|
|
362
|
+
/***/ 880:
|
|
363
|
+
/*!***************************************************************************!*\
|
|
364
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/PollPayloadBuilder.js ***!
|
|
365
|
+
\***************************************************************************/
|
|
366
|
+
/***/ (function(__unused_webpack_module, exports) {
|
|
367
|
+
|
|
368
|
+
"use strict";
|
|
369
|
+
|
|
370
|
+
var __assign = (this && this.__assign) || function () {
|
|
371
|
+
__assign = Object.assign || function(t) {
|
|
372
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
373
|
+
s = arguments[i];
|
|
374
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
375
|
+
t[p] = s[p];
|
|
376
|
+
}
|
|
377
|
+
return t;
|
|
378
|
+
};
|
|
379
|
+
return __assign.apply(this, arguments);
|
|
380
|
+
};
|
|
381
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
382
|
+
var PollPayloadBuilder = /** @class */ (function () {
|
|
383
|
+
function PollPayloadBuilder() {
|
|
384
|
+
this.overrideRestoreStrategies = [];
|
|
385
|
+
}
|
|
386
|
+
PollPayloadBuilder.prototype.withOverrideRestoreStrategy = function (override) {
|
|
387
|
+
this.overrideRestoreStrategies = this.overrideRestoreStrategies.filter(function (o) { return o.channel !== override.channel || o.ns !== override.ns; });
|
|
388
|
+
this.overrideRestoreStrategies.push(override);
|
|
389
|
+
return this;
|
|
390
|
+
};
|
|
391
|
+
PollPayloadBuilder.prototype.withDefaultRestoreStrategy = function (restoreStrategy) {
|
|
392
|
+
this.defaultRestoreStrategy = restoreStrategy;
|
|
393
|
+
return this;
|
|
394
|
+
};
|
|
395
|
+
PollPayloadBuilder.prototype.build = function () {
|
|
396
|
+
return new PollPayload(this.defaultRestoreStrategy, this.overrideRestoreStrategies).toProtocolFormat();
|
|
397
|
+
};
|
|
398
|
+
return PollPayloadBuilder;
|
|
399
|
+
}());
|
|
400
|
+
exports["default"] = PollPayloadBuilder;
|
|
401
|
+
var PollPayload = /** @class */ (function () {
|
|
402
|
+
function PollPayload(defaultRestoreStrategy, overrideRestoreStrategies) {
|
|
403
|
+
this.defaultRestoreStrategy = defaultRestoreStrategy;
|
|
404
|
+
this.overrideRestoreStrategies = overrideRestoreStrategies;
|
|
405
|
+
}
|
|
406
|
+
PollPayload.prototype.toProtocolFormat = function () {
|
|
407
|
+
var payload = {};
|
|
408
|
+
if (this.defaultRestoreStrategy !== undefined) {
|
|
409
|
+
payload.restore = {
|
|
410
|
+
default: this.defaultRestoreStrategy,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
if (this.hasOverrides()) {
|
|
414
|
+
payload.restore = __assign(__assign({}, payload.restore), { overrides: this.overrideRestoreStrategies });
|
|
415
|
+
}
|
|
416
|
+
return payload;
|
|
417
|
+
};
|
|
418
|
+
PollPayload.prototype.hasOverrides = function () {
|
|
419
|
+
return this.overrideRestoreStrategies.length > 0;
|
|
420
|
+
};
|
|
421
|
+
return PollPayload;
|
|
422
|
+
}());
|
|
423
|
+
//# sourceMappingURL=PollPayloadBuilder.js.map
|
|
424
|
+
|
|
425
|
+
/***/ }),
|
|
426
|
+
|
|
427
|
+
/***/ 277:
|
|
428
|
+
/*!******************************************************************************************!*\
|
|
429
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/restore/AllRestoreStrategyBuilder.js ***!
|
|
430
|
+
\******************************************************************************************/
|
|
431
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
432
|
+
|
|
433
|
+
"use strict";
|
|
434
|
+
|
|
435
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
436
|
+
var RestoreStrategy_1 = __webpack_require__(/*! ./RestoreStrategy */ 89);
|
|
437
|
+
var AllRestoreStrategyBuilder = /** @class */ (function () {
|
|
438
|
+
function AllRestoreStrategyBuilder() {
|
|
439
|
+
}
|
|
440
|
+
AllRestoreStrategyBuilder.prototype.build = function () {
|
|
441
|
+
return new RestoreStrategy_1.default('All');
|
|
442
|
+
};
|
|
443
|
+
return AllRestoreStrategyBuilder;
|
|
444
|
+
}());
|
|
445
|
+
exports["default"] = AllRestoreStrategyBuilder;
|
|
446
|
+
//# sourceMappingURL=AllRestoreStrategyBuilder.js.map
|
|
447
|
+
|
|
448
|
+
/***/ }),
|
|
449
|
+
|
|
450
|
+
/***/ 200:
|
|
451
|
+
/*!************************************************************************************************!*\
|
|
452
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/restore/MessageIdRestoreStrategyBuilder.js ***!
|
|
453
|
+
\************************************************************************************************/
|
|
454
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
455
|
+
|
|
456
|
+
"use strict";
|
|
457
|
+
|
|
458
|
+
var __extends = (this && this.__extends) || (function () {
|
|
459
|
+
var extendStatics = function (d, b) {
|
|
460
|
+
extendStatics = Object.setPrototypeOf ||
|
|
461
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
462
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
463
|
+
return extendStatics(d, b);
|
|
464
|
+
};
|
|
465
|
+
return function (d, b) {
|
|
466
|
+
if (typeof b !== "function" && b !== null)
|
|
467
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
468
|
+
extendStatics(d, b);
|
|
469
|
+
function __() { this.constructor = d; }
|
|
470
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
471
|
+
};
|
|
472
|
+
})();
|
|
473
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
474
|
+
exports.MessageIdRestoreStrategy = void 0;
|
|
475
|
+
var RestoreStrategy_1 = __webpack_require__(/*! ./RestoreStrategy */ 89);
|
|
476
|
+
var MessageIdRestoreStrategyBuilder = /** @class */ (function () {
|
|
477
|
+
function MessageIdRestoreStrategyBuilder() {
|
|
478
|
+
}
|
|
479
|
+
MessageIdRestoreStrategyBuilder.prototype.withId = function (id) {
|
|
480
|
+
this.id = id;
|
|
481
|
+
return this;
|
|
482
|
+
};
|
|
483
|
+
MessageIdRestoreStrategyBuilder.prototype.build = function () {
|
|
484
|
+
return new MessageIdRestoreStrategy(this.id);
|
|
485
|
+
};
|
|
486
|
+
return MessageIdRestoreStrategyBuilder;
|
|
487
|
+
}());
|
|
488
|
+
exports["default"] = MessageIdRestoreStrategyBuilder;
|
|
489
|
+
var MessageIdRestoreStrategy = /** @class */ (function (_super) {
|
|
490
|
+
__extends(MessageIdRestoreStrategy, _super);
|
|
491
|
+
function MessageIdRestoreStrategy(id) {
|
|
492
|
+
var _this = _super.call(this, 'message_id') || this;
|
|
493
|
+
_this.id = id;
|
|
494
|
+
return _this;
|
|
495
|
+
}
|
|
496
|
+
return MessageIdRestoreStrategy;
|
|
497
|
+
}(RestoreStrategy_1.default));
|
|
498
|
+
exports.MessageIdRestoreStrategy = MessageIdRestoreStrategy;
|
|
499
|
+
//# sourceMappingURL=MessageIdRestoreStrategyBuilder.js.map
|
|
500
|
+
|
|
501
|
+
/***/ }),
|
|
502
|
+
|
|
503
|
+
/***/ 89:
|
|
504
|
+
/*!********************************************************************************!*\
|
|
505
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/restore/RestoreStrategy.js ***!
|
|
506
|
+
\********************************************************************************/
|
|
507
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
508
|
+
|
|
509
|
+
"use strict";
|
|
510
|
+
|
|
511
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
512
|
+
var RestoreStrategy = /** @class */ (function () {
|
|
513
|
+
function RestoreStrategy(strategy) {
|
|
514
|
+
this.strategy = strategy;
|
|
515
|
+
}
|
|
516
|
+
return RestoreStrategy;
|
|
517
|
+
}());
|
|
518
|
+
exports["default"] = RestoreStrategy;
|
|
519
|
+
//# sourceMappingURL=RestoreStrategy.js.map
|
|
520
|
+
|
|
521
|
+
/***/ }),
|
|
522
|
+
|
|
523
|
+
/***/ 120:
|
|
524
|
+
/*!**********************************************************************************************!*\
|
|
525
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/restore/RestoreStrategyBuilderFactory.js ***!
|
|
526
|
+
\**********************************************************************************************/
|
|
527
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
528
|
+
|
|
529
|
+
"use strict";
|
|
530
|
+
|
|
531
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
532
|
+
var AllRestoreStrategyBuilder_1 = __webpack_require__(/*! ./AllRestoreStrategyBuilder */ 277);
|
|
533
|
+
var MessageIdRestoreStrategyBuilder_1 = __webpack_require__(/*! ./MessageIdRestoreStrategyBuilder */ 200);
|
|
534
|
+
var TimestampRestoreStrategyBuilder_1 = __webpack_require__(/*! ./TimestampRestoreStrategyBuilder */ 678);
|
|
535
|
+
var RestoreStrategyBuilderFactory = /** @class */ (function () {
|
|
536
|
+
function RestoreStrategyBuilderFactory() {
|
|
537
|
+
}
|
|
538
|
+
RestoreStrategyBuilderFactory.all = function () {
|
|
539
|
+
return new AllRestoreStrategyBuilder_1.default();
|
|
540
|
+
};
|
|
541
|
+
RestoreStrategyBuilderFactory.messageId = function () {
|
|
542
|
+
return new MessageIdRestoreStrategyBuilder_1.default();
|
|
543
|
+
};
|
|
544
|
+
RestoreStrategyBuilderFactory.timestamp = function () {
|
|
545
|
+
return new TimestampRestoreStrategyBuilder_1.default();
|
|
546
|
+
};
|
|
547
|
+
return RestoreStrategyBuilderFactory;
|
|
548
|
+
}());
|
|
549
|
+
exports["default"] = RestoreStrategyBuilderFactory;
|
|
550
|
+
//# sourceMappingURL=RestoreStrategyBuilderFactory.js.map
|
|
551
|
+
|
|
552
|
+
/***/ }),
|
|
553
|
+
|
|
554
|
+
/***/ 678:
|
|
555
|
+
/*!************************************************************************************************!*\
|
|
556
|
+
!*** ../../../utils/wix-duplexer-protocol/dist/lib/restore/TimestampRestoreStrategyBuilder.js ***!
|
|
557
|
+
\************************************************************************************************/
|
|
558
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
559
|
+
|
|
560
|
+
"use strict";
|
|
561
|
+
|
|
562
|
+
var __extends = (this && this.__extends) || (function () {
|
|
563
|
+
var extendStatics = function (d, b) {
|
|
564
|
+
extendStatics = Object.setPrototypeOf ||
|
|
565
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
566
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
567
|
+
return extendStatics(d, b);
|
|
568
|
+
};
|
|
569
|
+
return function (d, b) {
|
|
570
|
+
if (typeof b !== "function" && b !== null)
|
|
571
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
572
|
+
extendStatics(d, b);
|
|
573
|
+
function __() { this.constructor = d; }
|
|
574
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
575
|
+
};
|
|
576
|
+
})();
|
|
577
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
578
|
+
exports.TimestampRestoreStrategy = void 0;
|
|
579
|
+
var RestoreStrategy_1 = __webpack_require__(/*! ./RestoreStrategy */ 89);
|
|
580
|
+
var MessageIdRestoreStrategyBuilder = /** @class */ (function () {
|
|
581
|
+
function MessageIdRestoreStrategyBuilder() {
|
|
582
|
+
}
|
|
583
|
+
MessageIdRestoreStrategyBuilder.prototype.withT = function (t) {
|
|
584
|
+
this.t = t;
|
|
585
|
+
return this;
|
|
586
|
+
};
|
|
587
|
+
MessageIdRestoreStrategyBuilder.prototype.build = function () {
|
|
588
|
+
return new TimestampRestoreStrategy(this.t);
|
|
589
|
+
};
|
|
590
|
+
return MessageIdRestoreStrategyBuilder;
|
|
591
|
+
}());
|
|
592
|
+
exports["default"] = MessageIdRestoreStrategyBuilder;
|
|
593
|
+
var TimestampRestoreStrategy = /** @class */ (function (_super) {
|
|
594
|
+
__extends(TimestampRestoreStrategy, _super);
|
|
595
|
+
function TimestampRestoreStrategy(t) {
|
|
596
|
+
var _this = _super.call(this, 'Timestamp') || this;
|
|
597
|
+
_this.t = t;
|
|
598
|
+
return _this;
|
|
599
|
+
}
|
|
600
|
+
return TimestampRestoreStrategy;
|
|
601
|
+
}(RestoreStrategy_1.default));
|
|
602
|
+
exports.TimestampRestoreStrategy = TimestampRestoreStrategy;
|
|
603
|
+
//# sourceMappingURL=TimestampRestoreStrategyBuilder.js.map
|
|
604
|
+
|
|
605
|
+
/***/ }),
|
|
606
|
+
|
|
607
|
+
/***/ 213:
|
|
608
|
+
/*!**********************************************************************!*\
|
|
609
|
+
!*** ../../../node_modules/@babel/runtime/helpers/defineProperty.js ***!
|
|
610
|
+
\**********************************************************************/
|
|
611
|
+
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
612
|
+
|
|
613
|
+
var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ 174);
|
|
614
|
+
function _defineProperty(e, r, t) {
|
|
615
|
+
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
616
|
+
value: t,
|
|
617
|
+
enumerable: !0,
|
|
618
|
+
configurable: !0,
|
|
619
|
+
writable: !0
|
|
620
|
+
}) : e[r] = t, e;
|
|
621
|
+
}
|
|
622
|
+
module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
623
|
+
|
|
624
|
+
/***/ }),
|
|
625
|
+
|
|
626
|
+
/***/ 662:
|
|
627
|
+
/*!*******************************************************************!*\
|
|
628
|
+
!*** ../../../node_modules/@babel/runtime/helpers/toPrimitive.js ***!
|
|
629
|
+
\*******************************************************************/
|
|
630
|
+
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
631
|
+
|
|
632
|
+
var _typeof = (__webpack_require__(/*! ./typeof.js */ 114)["default"]);
|
|
633
|
+
function toPrimitive(t, r) {
|
|
634
|
+
if ("object" != _typeof(t) || !t) return t;
|
|
635
|
+
var e = t[Symbol.toPrimitive];
|
|
636
|
+
if (void 0 !== e) {
|
|
637
|
+
var i = e.call(t, r || "default");
|
|
638
|
+
if ("object" != _typeof(i)) return i;
|
|
639
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
640
|
+
}
|
|
641
|
+
return ("string" === r ? String : Number)(t);
|
|
642
|
+
}
|
|
643
|
+
module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
644
|
+
|
|
645
|
+
/***/ }),
|
|
646
|
+
|
|
647
|
+
/***/ 174:
|
|
648
|
+
/*!*********************************************************************!*\
|
|
649
|
+
!*** ../../../node_modules/@babel/runtime/helpers/toPropertyKey.js ***!
|
|
650
|
+
\*********************************************************************/
|
|
651
|
+
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
652
|
+
|
|
653
|
+
var _typeof = (__webpack_require__(/*! ./typeof.js */ 114)["default"]);
|
|
654
|
+
var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ 662);
|
|
655
|
+
function toPropertyKey(t) {
|
|
656
|
+
var i = toPrimitive(t, "string");
|
|
657
|
+
return "symbol" == _typeof(i) ? i : i + "";
|
|
658
|
+
}
|
|
659
|
+
module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
660
|
+
|
|
661
|
+
/***/ }),
|
|
662
|
+
|
|
663
|
+
/***/ 114:
|
|
664
|
+
/*!**************************************************************!*\
|
|
665
|
+
!*** ../../../node_modules/@babel/runtime/helpers/typeof.js ***!
|
|
666
|
+
\**************************************************************/
|
|
667
|
+
/***/ ((module) => {
|
|
668
|
+
|
|
669
|
+
function _typeof(o) {
|
|
670
|
+
"@babel/helpers - typeof";
|
|
671
|
+
|
|
672
|
+
return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
673
|
+
return typeof o;
|
|
674
|
+
} : function (o) {
|
|
675
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
676
|
+
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
|
|
677
|
+
}
|
|
678
|
+
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
679
|
+
|
|
680
|
+
/***/ })
|
|
681
|
+
|
|
682
|
+
/******/ });
|
|
683
|
+
/************************************************************************/
|
|
684
|
+
/******/ // The module cache
|
|
685
|
+
/******/ var __webpack_module_cache__ = {};
|
|
686
|
+
/******/
|
|
687
|
+
/******/ // The require function
|
|
688
|
+
/******/ function __webpack_require__(moduleId) {
|
|
689
|
+
/******/ // Check if module is in cache
|
|
690
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
691
|
+
/******/ if (cachedModule !== undefined) {
|
|
692
|
+
/******/ return cachedModule.exports;
|
|
693
|
+
/******/ }
|
|
694
|
+
/******/ // Create a new module (and put it into the cache)
|
|
695
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
696
|
+
/******/ // no module.id needed
|
|
697
|
+
/******/ // no module.loaded needed
|
|
698
|
+
/******/ exports: {}
|
|
699
|
+
/******/ };
|
|
700
|
+
/******/
|
|
701
|
+
/******/ // Execute the module function
|
|
702
|
+
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
703
|
+
/******/
|
|
704
|
+
/******/ // Return the exports of the module
|
|
705
|
+
/******/ return module.exports;
|
|
706
|
+
/******/ }
|
|
707
|
+
/******/
|
|
708
|
+
/************************************************************************/
|
|
709
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
710
|
+
/******/ (() => {
|
|
711
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
712
|
+
/******/ __webpack_require__.n = (module) => {
|
|
713
|
+
/******/ var getter = module && module.__esModule ?
|
|
714
|
+
/******/ () => (module['default']) :
|
|
715
|
+
/******/ () => (module);
|
|
716
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
717
|
+
/******/ return getter;
|
|
718
|
+
/******/ };
|
|
719
|
+
/******/ })();
|
|
720
|
+
/******/
|
|
721
|
+
/******/ /* webpack/runtime/define property getters */
|
|
722
|
+
/******/ (() => {
|
|
723
|
+
/******/ // define getter functions for harmony exports
|
|
724
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
725
|
+
/******/ for(var key in definition) {
|
|
726
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
727
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
728
|
+
/******/ }
|
|
729
|
+
/******/ }
|
|
730
|
+
/******/ };
|
|
731
|
+
/******/ })();
|
|
732
|
+
/******/
|
|
733
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
734
|
+
/******/ (() => {
|
|
735
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
736
|
+
/******/ })();
|
|
737
|
+
/******/
|
|
738
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
739
|
+
/******/ (() => {
|
|
740
|
+
/******/ // define __esModule on exports
|
|
741
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
742
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
743
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
744
|
+
/******/ }
|
|
745
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
746
|
+
/******/ };
|
|
747
|
+
/******/ })();
|
|
748
|
+
/******/
|
|
749
|
+
/************************************************************************/
|
|
750
|
+
var __webpack_exports__ = {};
|
|
751
|
+
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
|
752
|
+
(() => {
|
|
753
|
+
"use strict";
|
|
754
|
+
/*!**********************************!*\
|
|
755
|
+
!*** ./duplexer.ts + 32 modules ***!
|
|
756
|
+
\**********************************/
|
|
757
|
+
// ESM COMPAT FLAG
|
|
758
|
+
__webpack_require__.r(__webpack_exports__);
|
|
759
|
+
|
|
760
|
+
// EXPORTS
|
|
761
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
762
|
+
Duplexer: () => (/* binding */ Duplexer)
|
|
763
|
+
});
|
|
764
|
+
|
|
765
|
+
// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/defineProperty.js
|
|
766
|
+
var defineProperty = __webpack_require__(213);
|
|
767
|
+
var defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty);
|
|
768
|
+
;// CONCATENATED MODULE: ./utils/event-emitter.ts
|
|
769
|
+
/*
|
|
770
|
+
Base on: https://github.com/component/emitter/blob/master/index.js
|
|
771
|
+
*/class Emitter{constructor(){defineProperty_default()(this,"_callbacks",void 0);}on(event,fn){return this._on(event,fn);}addEventListener(event,fn){return this._on(event,fn);}once(event,fn){function on(){this.off(event,on);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}fn.apply(this,args);}on.fn=fn;this.on(event,on);return this;}off(event,fn){return this._off(event,fn);}removeEventListener(event,fn){return this._off(event,fn);}removeListener(event){return this._off(event);}removeAllListeners(){return this._off();}emit(event){this._callbacks=this._callbacks||{};let callbacks=this._callbacks['$'+event];if(callbacks){callbacks=callbacks.slice(0);for(var _len2=arguments.length,args=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){args[_key2-1]=arguments[_key2];}for(let i=0,len=callbacks.length;i<len;++i){callbacks[i].apply(this,args);}}return this;}listeners(event){this._callbacks=this._callbacks||{};return this._callbacks['$'+event]||[];}hasListeners(event){return!!this.listeners(event).length;}_on(event,fn){this._callbacks=this._callbacks||{};(this._callbacks['$'+event]=this._callbacks['$'+event]||[]).push(fn);return this;}_off(event,fn){this._callbacks=this._callbacks||{};// all
|
|
772
|
+
if(!event&&!fn){this._callbacks={};return this;}// specific event
|
|
773
|
+
const callbacks=this._callbacks['$'+event];if(!callbacks){return this;}// remove all handlers
|
|
774
|
+
if(!fn){// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
775
|
+
delete this._callbacks['$'+event];return this;}// remove specific handler
|
|
776
|
+
let cb;for(let i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break;}}// Remove event specific arrays for event types that no
|
|
777
|
+
// one is subscribed for to avoid memory leak.
|
|
778
|
+
if(callbacks.length===0){// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
779
|
+
delete this._callbacks['$'+event];}return this;}}
|
|
780
|
+
// EXTERNAL MODULE: ../../../utils/wix-duplexer-protocol/dist/index.js
|
|
781
|
+
var dist = __webpack_require__(102);
|
|
782
|
+
;// CONCATENATED MODULE: ./utils/deferred.ts
|
|
783
|
+
class Deferred{constructor(){defineProperty_default()(this,"_promise",void 0);defineProperty_default()(this,"_resolve",void 0);defineProperty_default()(this,"_reject",void 0);this._promise=new Promise((resolve,reject)=>{this._resolve=resolve;this._reject=reject;});}resolve(value){this._resolve(value);}reject(error){this._reject(error);}get promise(){return this._promise;}}
|
|
784
|
+
;// CONCATENATED MODULE: ./ready-state.ts
|
|
785
|
+
var ReadyState=/*#__PURE__*/function(ReadyState){ReadyState[ReadyState["CLOSED"]=0]="CLOSED";ReadyState[ReadyState["OPENING"]=1]="OPENING";ReadyState[ReadyState["OPEN"]=2]="OPEN";return ReadyState;}(ReadyState||{});/* harmony default export */ const ready_state = (ReadyState);
|
|
786
|
+
;// CONCATENATED MODULE: ./channels/channel.ts
|
|
787
|
+
var SubscribingState=/*#__PURE__*/function(SubscribingState){SubscribingState[SubscribingState["SUBSCRIBED"]=0]="SUBSCRIBED";SubscribingState[SubscribingState["UNSUBSCRIBED"]=1]="UNSUBSCRIBED";SubscribingState[SubscribingState["SUBSCRIBING"]=2]="SUBSCRIBING";return SubscribingState;}(SubscribingState||{});class Channel extends Emitter{constructor(virtualSocket,name,resourceId,info){super();defineProperty_default()(this,"name",void 0);defineProperty_default()(this,"resourceId",void 0);defineProperty_default()(this,"virtualSocket",void 0);defineProperty_default()(this,"info",void 0);defineProperty_default()(this,"restore",void 0);defineProperty_default()(this,"subscribingState",SubscribingState.UNSUBSCRIBED);this.name=name;this.virtualSocket=virtualSocket;this.resourceId=resourceId;this.info=info;}setMessageIdRestore(messageId){this.restore=dist/* RestoreStrategyBuilderFactory */.v8.messageId().withId(messageId).build();return this.restore;}async subscribe(opts){if(opts===void 0){opts={};}if(this.subscribingState===SubscribingState.SUBSCRIBED){setTimeout(()=>this.emitSubscriptionSucceeded(true),0);return;}if(this.subscribingState===SubscribingState.SUBSCRIBING){return;}this.subscribingState=SubscribingState.SUBSCRIBING;await this.sendSubscribe(opts);}setUnsubscribe(){this.subscribingState=SubscribingState.UNSUBSCRIBED;}async sendSubscribe(opts){const res=await this.virtualSocket.send({type:'subscribe',channel:this.name,resourceId:this.resourceId,auth:'',restore:opts.restoreStrategy||this.restore,info:this.info});if(res.type==='error'){this.emit('@duplexer:subscription_failed',res);}else{this.subscribingState=SubscribingState.SUBSCRIBED;this.emitSubscriptionSucceeded(res.isSynced);}}async unsubscribe(){await this.virtualSocket.send({type:'unsubscribe',channel:this.name,resourceId:this.resourceId});this.subscribingState=SubscribingState.UNSUBSCRIBED;this.emit('@duplexer:unsubscribe_succeeded');}send(event,payload){return this.virtualSocket.send({type:'client_message',channel:this.name,resourceId:this.resourceId,event,payload},{affectState:false});}emitSubscriptionSucceeded(isSynced){this.emit('@duplexer:subscription_succeeded',{isSynced});}}
|
|
788
|
+
;// CONCATENATED MODULE: ./channels/channels.ts
|
|
789
|
+
class Channels{constructor(virtualSocket){this.virtualSocket=virtualSocket;defineProperty_default()(this,"channelsList",[]);}add(name,resourceId,info){const maybeChannel=this.find(name,resourceId);if(maybeChannel){return maybeChannel;}const channel=new Channel(this.virtualSocket,name,resourceId,info);this.channelsList.push(channel);return channel;}remove(name,resourceId){const channel=this.find(name,resourceId);this.channelsList=this.channelsList.filter(c=>c.name!==name||c.resourceId!==resourceId);return channel;}find(name,resourceId){return this.channelsList.find(c=>c.name===name&&c.resourceId===resourceId);}all(){return this.channelsList;}subscribeAll(){this.all().forEach(c=>c.subscribe());}setUnsubscribeAll(){this.all().forEach(c=>c.setUnsubscribe());}}
|
|
790
|
+
;// CONCATENATED MODULE: ./utils/on.ts
|
|
791
|
+
function on(emitter,event,fn){emitter.on(event,fn);return{destroy:()=>emitter.off(event,fn)};}
|
|
792
|
+
;// CONCATENATED MODULE: ./constants.ts
|
|
793
|
+
const WixArtifactIdHeader='x-wix-artifact-id';const wsClient='ws.manager';const userChannel='@user-inbox';const wsVs='ws.vs';const DuplexerSocketArtifactId='com.wixpress.infra.wix-duplexer-sockets-server';
|
|
794
|
+
;// CONCATENATED MODULE: ./virtual-socket.ts
|
|
795
|
+
class VirtualSocket extends Emitter{constructor(duplexer,_ref){let{appDefId,apiKey}=_ref;super();this.duplexer=duplexer;defineProperty_default()(this,"channels",void 0);defineProperty_default()(this,"appDefId",void 0);defineProperty_default()(this,"acks",{});defineProperty_default()(this,"ids",1);defineProperty_default()(this,"connected",false);defineProperty_default()(this,"sendBuffer",[]);defineProperty_default()(this,"socketListeners",[]);this.channels=new Channels(this);this.appDefId=appDefId||apiKey;this.restoreState();this.listen();this.open();}subscribe(channelName,opts){if(opts===void 0){opts={};}const channel=this.channels.add(channelName,opts.resourceId,opts.info);channel.subscribe(opts);return channel;}subscribeToUserChannel(){return this.subscribe(userChannel);}unsubscribe(channelName,resourceId){const channel=this.channels.remove(channelName,resourceId);channel.unsubscribe();}unsubscribeFromUserChannel(){this.unsubscribe(userChannel);}/** @internal */open(){const readyState=this.duplexer.connection.readyState;if(readyState===ready_state.CLOSED){// this.onConnect will be called after connection established,
|
|
796
|
+
this.duplexer.connection.connect();}else if(readyState===ready_state.OPEN){setTimeout(()=>this.onConnect(),0);}}disconnect(){this.send({type:'disconnect'});this.socketListeners.forEach(l=>l.destroy());this.socketListeners=[];this.onClose();this.duplexer.closeVirtualSocket(this);}/** @internal */send(message,opts){return new Promise(resolve=>{if(this.connected){const id=this.issueAckId();this.acks[id]=resolve;message.id=id;this.packet(message,opts);}else{this.sendBuffer.push({message,resolve});}});}/** @internal */whenConnected(){return new Promise(resolve=>{this.duplexer.connection.readyState===ready_state.OPEN?resolve():this.once('@duplexer:connected',resolve);});}onClose(error){this.restoreState();this.emit('@duplexer:disconnected',error);}listen(){this.socketListeners=[on(this.duplexer,'open',this.onConnect.bind(this)),on(this.duplexer,'packet',this.onPacket.bind(this)),on(this.duplexer,'close',this.onClose.bind(this)),on(this.duplexer.connection,'connect_error',this.onConnectError.bind(this))];}onConnectError(error){this.emit('@duplexer:connect_error',error);}onPacket(packet){if(packet.ns!==this.appDefId){return;}switch(packet.type){case'ack':case'error':this.onAck(packet);break;case'message':this.onMessage(packet);break;default:break;}}onConnect(){this.channels.subscribeAll();this.connected=true;this.emit('@duplexer:connected');this.emitBuffered();}onMessage(message){const channel=this.channels.find(message.channel,message.resourceId);if(channel!==undefined){const restore=channel.setMessageIdRestore(message.id);const override=new dist/* PollOverrideRestoreStrategyBuilder */.AN().withNs(this.appDefId).withChannelName(channel.name).withRestoreStrategy(restore).build();this.duplexer.addRestoreOverride(override);try{channel.emit(message.event,message.payload,createAttachments(message));}catch{// not duplexer's responsibility to handle app-level errors
|
|
797
|
+
}}}onAck(packet){const ack=this.acks[packet.id];if(typeof ack==='function'){ack(packet);// eslint-disable-next-line
|
|
798
|
+
delete this.acks[packet.id];}}packet(packet,opts){packet.ns=this.appDefId;this.duplexer.packet(packet,opts);}emitBuffered(){this.sendBuffer.forEach(msg=>{const{message,resolve}=msg;this.send(message).then(resolve);});this.sendBuffer=[];}issueAckId(){const id=this.ids++;return id.toString();}restoreState(){this.connected=false;this.channels.setUnsubscribeAll();this.sendBuffer=[];this.acks={};}}function createAttachments(_ref2){let{user,publisher}=_ref2;return{user,publisher};}
|
|
799
|
+
;// CONCATENATED MODULE: ./environments/core/environment.ts
|
|
800
|
+
class Environment{constructor(opts){defineProperty_default()(this,"_transportsManager",void 0);defineProperty_default()(this,"_network",void 0);this._transportsManager=opts.transportsManager;this._network=opts.network;}get network(){return this._network;}get transportsManager(){return this._transportsManager;}}
|
|
801
|
+
;// CONCATENATED MODULE: ./environments/core/network.ts
|
|
802
|
+
class Network extends Emitter{constructor(){super();this.listenConnectionStateChanges();}connectionIsOnline(){this.emit('online');}}
|
|
803
|
+
;// CONCATENATED MODULE: ./environments/web/network.ts
|
|
804
|
+
class WebNetwork extends Network{listenConnectionStateChanges(){// bad. should create node environment.
|
|
805
|
+
if(typeof window==='undefined'){return;}window.addEventListener('online',()=>this.connectionIsOnline());}}
|
|
806
|
+
;// CONCATENATED MODULE: ./transport/transport.ts
|
|
807
|
+
/* eslint-disable no-shadow *//**
|
|
808
|
+
* Transport responsibilities:
|
|
809
|
+
*
|
|
810
|
+
* - Open/close connection
|
|
811
|
+
* - Encode/decode packets and pass through
|
|
812
|
+
* - Mark connection as open by waiting for connection_established packet, dealing with session id
|
|
813
|
+
* - Todo: handling packets queue (move from virtual socket)
|
|
814
|
+
*
|
|
815
|
+
* Events:
|
|
816
|
+
*
|
|
817
|
+
* - "open" - on "connection_established" packet from connectioon.
|
|
818
|
+
* - "close" - on close either from transport side or client one, error might be attached.
|
|
819
|
+
* - "packet" - pass through packets coming from connection.
|
|
820
|
+
*/class Transport extends Emitter{constructor(opts){super();defineProperty_default()(this,"keepAlive",void 0);defineProperty_default()(this,"payload",void 0);defineProperty_default()(this,"readyState",ready_state.CLOSED);defineProperty_default()(this,"sessionId",void 0);this.restoreState();this.keepAlive=opts.keepAlive;}get keepAliveEnabled(){return this.keepAlive;}send(packet,opts){this.write(packet,opts);}updatePayload(params){this.payload=params;}close(error){const transportError=error?this.transportError(error):undefined;this.closeClient();this.onTransportClose(transportError);}transportError(error){return{...error,transport:this.name};}onData(packet){if(!Array.isArray(packet)){this.handlePacket(packet);}else{packet.forEach(packet=>this.handlePacket(packet));}}/**
|
|
821
|
+
* this function should be called by transport when it decides to close - for whatever
|
|
822
|
+
* reason (usually unexpected on such as network error or invalid request). then it
|
|
823
|
+
* propagaes to the client until it reaches virtual socket.
|
|
824
|
+
*/onTransportClose(error){if(this.readyState!==ready_state.CLOSED){this.restoreState();this.emit('close',error);}else{this.emit('connect_error',error);}}restoreState(){this.readyState=ready_state.CLOSED;this.sessionId='';}handlePacket(packet){switch(packet.type){case'connection_established':this.sessionId=packet.sessionId;this.readyState=ready_state.OPEN;this.emit('open',packet);break;default:this.emit('packet',packet);}}}
|
|
825
|
+
;// CONCATENATED MODULE: ./transport/params.ts
|
|
826
|
+
async function createParams(instanceUpdater,siteRevision){const params=new URLSearchParams();if(instanceUpdater){const instance=await instanceUpdater.getInstance();params.append('v','2');params.append('instance',instance);}if(siteRevision){params.append('siteRevision',siteRevision);}return params;}function withParams(url,params){const rawParams=params.toString();const qs=rawParams===''?'':`?${rawParams}`;return`${url}${qs}`;}
|
|
827
|
+
;// CONCATENATED MODULE: ./utils/request.ts
|
|
828
|
+
class ResponseError extends Error{constructor(reason,response){super(reason);// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
|
|
829
|
+
this.reason=reason;this.response=response;Object.setPrototypeOf(this,ResponseError.prototype);}getStatus(){return this.response&&this.response.status||-1;}}function isCancel(error){return error.reason==='canceled';}async function post(url,payload,config){var _config$cancelToken;if(config===void 0){config={};}const headers={...config.headers};if(payload!==undefined){headers['Content-Type']='application/json;charset=utf-8';}const xsrf=readCookie('XSRF-TOKEN');if(xsrf!==undefined){headers['X-XSRF-TOKEN']=xsrf;}const body=payload===undefined?null:JSON.stringify(payload);const fetchOptions={method:'POST',headers,body,signal:(_config$cancelToken=config.cancelToken)==null?void 0:_config$cancelToken.signal,credentials:config.withCredentials?'include':'same-origin'};let fetchResponse;try{fetchResponse=await fetch(url,fetchOptions);}catch(e){if(e.name==='AbortError'){throw new ResponseError('canceled');}throw new ResponseError('network error');}const status=fetchResponse.status;let text;try{text=await fetchResponse.text();}catch(e){throw new ResponseError('network error',{data:undefined,status});}const data=maybeJSON(text);const response={data,status};if(!verifyStatus(status)){throw new ResponseError('server error',response);}return response;}function readCookie(name){const match=typeof window!=='undefined'&&window.document&&window.document.cookie.match(new RegExp('(^|;\\s*)('+name+')=([^;]*)'));return match?decodeURIComponent(match[3]):undefined;}function verifyStatus(status){return status>=200&&status<300;}function maybeJSON(data){try{return JSON.parse(data);}catch{return data;}}
|
|
830
|
+
;// CONCATENATED MODULE: ./transport/http.ts
|
|
831
|
+
async function longHttp(req){try{const{data}=await req;return{continuable:true,data};}catch(e){/**
|
|
832
|
+
* requests are canceled in the following cases:
|
|
833
|
+
*
|
|
834
|
+
* - before we start a new poll, we clean the current one by cancelling it.
|
|
835
|
+
* - when we close the connection (so we can then reconnect).
|
|
836
|
+
*/if(isCancel(e)){return{continuable:false};}if(isGatewayTimeout(e)){// This way we support gateways/proxies with a lower timeout than our sockets server.
|
|
837
|
+
// If we don't do this, we'll create a different session on every poll.
|
|
838
|
+
// In the future we can detect such cases and fallback to polling transport.
|
|
839
|
+
return{continuable:true};}// in any other case, we throw a response error that should trigger close & reconnect.
|
|
840
|
+
throw e;}}function resolveHeaders(instanceUpdater){const xWixArtifactHeaders={[WixArtifactIdHeader]:DuplexerSocketArtifactId};const maybeInstanceHeaders=maybeHeaders(instanceUpdater);return{...xWixArtifactHeaders,...maybeInstanceHeaders};}function maybeHeaders(instanceUpdater){return(instanceUpdater==null||instanceUpdater.getHeaders==null?void 0:instanceUpdater.getHeaders())??{};}function isGatewayTimeout(e){return e.getStatus()===504;}
|
|
841
|
+
;// CONCATENATED MODULE: ./transport/websocket.ts
|
|
842
|
+
/* provided dependency */ var process = __webpack_require__(/*! process */ 158);
|
|
843
|
+
class WS extends Transport{constructor(url,instanceUpdater,siteRevision){if(instanceUpdater===void 0){instanceUpdater=null;}super({keepAlive:true});this.url=url;this.instanceUpdater=instanceUpdater;this.siteRevision=siteRevision;defineProperty_default()(this,"ws",void 0);}static isSupported(){return typeof WebSocket!=='undefined';}get name(){return'websocket';}async open(){const params=await createParams(this.instanceUpdater,this.siteRevision);const url=withParams(this.url,params);const opts=typeof process!=='undefined'&&process.env.DUPLEXER_NODE_ENV==='true'?{headers:resolveHeaders(this.instanceUpdater)}:undefined;this.closeClient();this.ws=new WebSocket(url,opts);this.listen();}closeClient(){if(this.ws){this.cleanWebSocketHooks();/**
|
|
844
|
+
* normal closure, the connection successfully completed whatever purpose
|
|
845
|
+
* for which it was created.
|
|
846
|
+
* more info here: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
|
|
847
|
+
*/this.ws.close(1000);}}write(packet){const normalized=JSON.stringify(packet);this.ws.send(normalized);}listen(){this.ws.onclose=event=>{/**
|
|
848
|
+
* event is not clean when it's closed unexpectedly, usually during a network
|
|
849
|
+
* error that the client experiences (but not only - it happens on service GA for
|
|
850
|
+
* instace).
|
|
851
|
+
*
|
|
852
|
+
* error will be clean, but unrecoverable, when sockets service initiates it:
|
|
853
|
+
*
|
|
854
|
+
* - in case connection is idle (no subscribes).
|
|
855
|
+
* - in case signed instance is invalid.
|
|
856
|
+
*
|
|
857
|
+
* note: when client decides to close the connection proactivly, this handler will
|
|
858
|
+
* not be invoked, this.we.onclose becomes noop before we call this.ws.close.
|
|
859
|
+
*/const isRecoverable=!event.wasClean;const error=this.transportError({status:event.code,message:event.reason,recoverable:isRecoverable});this.cleanWebSocketHooks();this.onTransportClose(error);};this.ws.onmessage=ev=>{const normalized=JSON.parse(ev.data);this.onData(normalized);};this.ws.onerror=()=>{};}cleanWebSocketHooks(){if(this.ws){this.ws.onmessage=()=>{};this.ws.onclose=()=>{};}}}
|
|
860
|
+
;// CONCATENATED MODULE: ./utils/cancel-token.ts
|
|
861
|
+
const CANCEL_OP={};function cancel_token_isCancel(maybeCancelOp){return maybeCancelOp===CANCEL_OP;}function createCancelTokenSource(){const deferred=new Deferred();const abortController=new AbortController();return{cancel:()=>{abortController.abort();deferred.resolve(CANCEL_OP);},token:{promise:deferred.promise,signal:abortController.signal}};}
|
|
862
|
+
;// CONCATENATED MODULE: ./utils/utils.ts
|
|
863
|
+
function omitEndingSlashIfExists(str){return str.replace(/\/+$/,'');}
|
|
864
|
+
;// CONCATENATED MODULE: ./transport/unrecoverable.ts
|
|
865
|
+
function isRecoverableCode(code){return[401].every(unrecoverableStatus=>unrecoverableStatus!==code);}
|
|
866
|
+
;// CONCATENATED MODULE: ./transport/http-polling.ts
|
|
867
|
+
class HttpPolling extends Transport{constructor(baseUrl,instanceUpdater,siteRevision){if(instanceUpdater===void 0){instanceUpdater=null;}super({keepAlive:false});this.baseUrl=baseUrl;this.instanceUpdater=instanceUpdater;this.siteRevision=siteRevision;defineProperty_default()(this,"commandsCancelTokens",[]);defineProperty_default()(this,"pollCancelToken",void 0);this.baseUrl=omitEndingSlashIfExists(this.baseUrl);}get name(){return'http_long_polling';}async open(){/**
|
|
868
|
+
* first poll has no session id, it should retrieve "connection_established" packet.
|
|
869
|
+
* then, when someone tries to subscribe, he sends a subscribe command and only then
|
|
870
|
+
* the whole long polling interval starts.
|
|
871
|
+
*/await this.poll();}closeClient(){this.commandsCancelTokens.forEach(c=>c.cancel());this.abortOngoingPollInterval();}async write(packet,_temp){let{affectState=true}=_temp===void 0?{}:_temp;try{const cancelToken=createCancelTokenSource();this.commandsCancelTokens.push(cancelToken);const url=await this.buildUrl('http-command');const{data}=await post(url,packet,{cancelToken:cancelToken.token,headers:maybeHeaders(this.instanceUpdater)});this.removeCancelToken(cancelToken);this.onData(data);if(affectState){this.startPollInterval();}}catch(e){/**
|
|
872
|
+
* we close the connection in case of:
|
|
873
|
+
*
|
|
874
|
+
* - generic network issues.
|
|
875
|
+
* - validation issues (session expired, invalid signed instance, ...)
|
|
876
|
+
*
|
|
877
|
+
* note: in case command failed we still return 200 but error is attached
|
|
878
|
+
* to request payload.
|
|
879
|
+
*/if(!isCancel(e)){this.closeOnTransportFailure(e);}}}abortOngoingPollInterval(){this.pollCancelToken&&this.pollCancelToken.cancel();this.pollCancelToken=null;}async startPollInterval(){this.abortOngoingPollInterval();if(this.readyState===ready_state.OPEN){const{continuable}=await this.poll();if(continuable){this.startPollInterval();}}}async poll(){const url=await this.buildUrl('http');this.pollCancelToken=createCancelTokenSource();const pollReq=post(url,this.payload,{cancelToken:this.pollCancelToken.token,headers:maybeHeaders(this.instanceUpdater)});try{const res=await longHttp(pollReq);if(res.data){this.onData(res.data);}return res;}catch(e){this.closeOnTransportFailure(e);return{continuable:false};}}async buildUrl(url){const params=await createParams(this.instanceUpdater,this.siteRevision);if(this.sessionId){params.append('sessionId',this.sessionId);}const urlWithParams=withParams(url,params);return`${this.baseUrl}/${urlWithParams}`;}closeOnTransportFailure(e){const status=e.getStatus();const err=this.transportError({status,message:e.message,recoverable:isRecoverableCode(status)});this.onTransportClose(err);}removeCancelToken(cancelToken){const idx=this.commandsCancelTokens.indexOf(cancelToken);this.commandsCancelTokens.splice(idx,1);}}
|
|
880
|
+
;// CONCATENATED MODULE: ./transport/transports-manager.ts
|
|
881
|
+
/**
|
|
882
|
+
* TransportsManager responsibilities:
|
|
883
|
+
*
|
|
884
|
+
* - Initizlize "first to connect" (according given strategies)
|
|
885
|
+
* - Close active connection or connection process
|
|
886
|
+
*
|
|
887
|
+
* Events:
|
|
888
|
+
* - "close" - in case (1) connected trasnport closed or (2) connect canceled
|
|
889
|
+
* - "connect_error" - passes through "close" events coming from trasnports during connection
|
|
890
|
+
* phase, may occurs several times during the connect tries.
|
|
891
|
+
* - "message" - pass through packets coming from open transport.
|
|
892
|
+
*/class TransportsManager extends Emitter{constructor(strategies){super();this.strategies=strategies;defineProperty_default()(this,"_transport",void 0);defineProperty_default()(this,"disposables",[]);defineProperty_default()(this,"cancelToken",void 0);defineProperty_default()(this,"readyState",ready_state.CLOSED);}get transport(){return this._transport;}async connect(){let connectionEstablishedPacket;if(this.readyState!==ready_state.CLOSED){return connectCanceled();}this.cancelToken=new Deferred();this.readyState=ready_state.OPENING;this.listenAndEmitConnectErrorsInAllTransportsOnConnecting();try{connectionEstablishedPacket=await this.connectToFirstToRespondStrategy();}catch(e){return connectCanceled();}this.cancelToken=null;this.removeListeners();this.abortStrategiesWithNoOpenTransport();this.listenEventsOfActiveTransport();return connectSuccess(connectionEstablishedPacket);}close(){if(this.isOpen()){// transport emits 'close' event, so this.onClose() will be called later on
|
|
893
|
+
this.transport.close();}else if(this.isOpening()){this.cancelToken&&this.cancelToken.reject();this.onClose();this.strategies.forEach(s=>s.abort());}}isOpen(){return this.readyState===ready_state.OPEN;}isClosed(){return this.readyState===ready_state.CLOSED;}isOpening(){return this.readyState===ready_state.OPENING;}async connectToFirstToRespondStrategy(){const{transport,connectionEstablishedPacket}=await Promise.race([...this.strategies.map(s=>s.connect()),this.cancelToken.promise]);this._transport=transport;this.readyState=ready_state.OPEN;return connectionEstablishedPacket;}onClose(error){this.readyState=ready_state.CLOSED;this._transport=null;this.cancelToken=null;this.removeListeners();/**
|
|
894
|
+
* the reason we always propagaes 'close' event is that some entities in the system
|
|
895
|
+
* have to make a clean up or just react, for instance:
|
|
896
|
+
*
|
|
897
|
+
* - connection manager MAY reconnect.
|
|
898
|
+
* - vritual socket must notify to its user (disconnected event).
|
|
899
|
+
*
|
|
900
|
+
* so it doesn't matter WHY close happened - everyone should always get notified.
|
|
901
|
+
*/this.emit('close',error);}abortStrategiesWithNoOpenTransport(){this.strategies.filter(s=>s.transport.readyState!==ready_state.OPEN).forEach(s=>s.abort());}listenAndEmitConnectErrorsInAllTransportsOnConnecting(){this.disposables=this.strategies.map(s=>on(s,'connect_error',error=>{if(error.recoverable){this.emit('connect_error',error);}else{this.close();}}));}listenEventsOfActiveTransport(){this.disposables=[/**
|
|
902
|
+
* might be called either because transport got error or due to a side-effect
|
|
903
|
+
* when someone calls TransportsManager.close().
|
|
904
|
+
*/on(this.transport,'close',error=>{this.onClose(error);}),on(this.transport,'packet',packet=>{this.onData(packet);})];}removeListeners(){this.disposables.forEach(l=>l.destroy());this.disposables=[];}// todo: rewrite this method, it looks ugly
|
|
905
|
+
onData(packet){switch(packet.type){case'message':case'ack':case'error':case'UpdateRestoreStrategyOverrides':this.emit('message',packet);break;default:break;}}}function connectSuccess(connectionEstablishedPacket){return{success:true,connectionEstablishedPacket};}function connectCanceled(){return{success:false};}
|
|
906
|
+
// EXTERNAL MODULE: ../../../node_modules/backo2/index.js
|
|
907
|
+
var backo2 = __webpack_require__(830);
|
|
908
|
+
var backo2_default = /*#__PURE__*/__webpack_require__.n(backo2);
|
|
909
|
+
;// CONCATENATED MODULE: ./strategies/strategy.ts
|
|
910
|
+
const ONE_MINUTE_IN_MILLIS=1000*60;class Strategy extends Emitter{constructor(_transport,opts){super();this._transport=_transport;this.opts=opts;defineProperty_default()(this,"connectDelayTimeoutId",void 0);defineProperty_default()(this,"disposables",[]);defineProperty_default()(this,"backoff",new (backo2_default())({max:ONE_MINUTE_IN_MILLIS}));defineProperty_default()(this,"cancelToken",void 0);}get transport(){return this._transport;}async connect(){this.cancelToken=new Deferred();if(this.opts.delay>0){await Promise.race([delay(this.opts.delay),this.cancelToken.promise]);}const connectionEstablishedPacket=await Promise.race([this.connectWithBackoff(),this.cancelToken.promise]);return{transport:this.transport,connectionEstablishedPacket};}abort(){clearTimeout(this.connectDelayTimeoutId);this.cancelToken&&this.cancelToken.reject();this.cancelToken=null;this.removeListeners();this.backoff.reset();this.transport.close();}async connectWithBackoff(){this.backoff.reset();return new Promise(resolve=>{this.disposables=[on(this.transport,'open',packet=>{this.removeListeners();resolve(packet);}),/**
|
|
911
|
+
* this handler will be CLEANED when one of the following happens:
|
|
912
|
+
*
|
|
913
|
+
* - transport connected ('open' handler).
|
|
914
|
+
* - another transport connected, so this one will be cleaned when
|
|
915
|
+
* the strategy aborts.
|
|
916
|
+
*/on(this.transport,'connect_error',error=>{clearTimeout(this.connectDelayTimeoutId);if(error.recoverable){this.connectDelayTimeoutId=setTimeout(()=>this.transport.open(),this.backoff.duration());}this.emit('connect_error',error);})];this.transport.open();});}removeListeners(){this.disposables.forEach(d=>d.destroy());this.disposables=[];}}function delay(ms){return new Promise(resolve=>setTimeout(resolve,ms));}
|
|
917
|
+
;// CONCATENATED MODULE: ./strategies/strategy-builder.ts
|
|
918
|
+
class StrategyBuilder{constructor(transport){this.transport=transport;defineProperty_default()(this,"opts",{delay:0,backoff:0});}withDelay(delay){this.opts.delay=delay;return this;}withBackoff(backoff){this.opts.backoff=backoff;return this;}build(){return new Strategy(this.transport,this.opts);}}function aStrategyBuilder(transport){return new StrategyBuilder(transport);}
|
|
919
|
+
;// CONCATENATED MODULE: ./strategies/strategy-presets.ts
|
|
920
|
+
const BACKOFF_INITIAL=150;function primaryPreset(transport){return aStrategyBuilder(transport).withBackoff(BACKOFF_INITIAL).build();}function secondaryPreset(transport){return aStrategyBuilder(transport).withDelay(4000).withBackoff(BACKOFF_INITIAL).build();}
|
|
921
|
+
;// CONCATENATED MODULE: ./environments/web/transports.ts
|
|
922
|
+
/* provided dependency */ var transports_process = __webpack_require__(/*! process */ 158);
|
|
923
|
+
function transports(opts){var _process$env;let strategies=[];const ws=createWebSocket(opts);const httpLongPolling=createHttpLongPolling(opts);// tests purposes only
|
|
924
|
+
const forcedTransport=typeof transports_process!=='undefined'&&typeof((_process$env=transports_process.env)==null?void 0:_process$env.DUPLEXER_FORCED_TRANSPORT)==='string'?transports_process.env.DUPLEXER_FORCED_TRANSPORT:undefined;if(forcedTransport==='websocket'){strategies=[primaryPreset(ws)];}else if(forcedTransport==='http'){strategies=[primaryPreset(httpLongPolling)];}else if(WS.isSupported()){strategies=[primaryPreset(ws),secondaryPreset(httpLongPolling)];}else{strategies=[primaryPreset(httpLongPolling)];}return new TransportsManager(strategies);}function createWebSocket(opts){const protocol=isSSL()?'wss://':'ws://';const url=`${protocol}${opts.baseUrl}`;return new WS(url,opts.instanceUpdater,opts.siteRevision);}function createHttpLongPolling(opts){const url=httpUrl(opts.baseUrl);return new HttpPolling(url,opts.instanceUpdater,opts.siteRevision);}function httpUrl(baseUrl){const protocol=isSSL()?'https://':'http://';return`${protocol}${baseUrl}`;}function isSSL(){return typeof self!=='undefined'&&self.location.protocol!=='http:';}
|
|
925
|
+
;// CONCATENATED MODULE: ./environments/web/environment.ts
|
|
926
|
+
function aWebEnvironment(opts){const network=new WebNetwork();const transportsManager=transports({baseUrl:opts.url,instanceUpdater:opts.instanceUpdater,siteRevision:opts.siteRevision});return new Environment({transportsManager,network});}
|
|
927
|
+
;// CONCATENATED MODULE: ./utils/timer.ts
|
|
928
|
+
class Timer{constructor(timeout,handler){this.timeout=timeout;this.handler=handler;defineProperty_default()(this,"timer",void 0);}schedule(){this.timer=setTimeout(this.handler,this.timeout);}cancel(){clearTimeout(this.timer);}}
|
|
929
|
+
;// CONCATENATED MODULE: ./keep-alive.ts
|
|
930
|
+
class KeepAlive extends Emitter{constructor(transport,opts){super();this.transport=transport;this.opts=opts;defineProperty_default()(this,"timeoutTimer",void 0);defineProperty_default()(this,"intervalTimer",void 0);defineProperty_default()(this,"started",false);on(this.transport,'packet',()=>this.started&&this.schedule());}schedule(){this.dispose();this.started=true;this.intervalTimer=new Timer(this.opts.pingInterval,()=>this.sendHeartbeat());this.intervalTimer.schedule();}dispose(){this.started=false;this.intervalTimer&&this.intervalTimer.cancel();this.timeoutTimer&&this.timeoutTimer.cancel();}sendHeartbeat(){this.ping();this.timeoutTimer=new Timer(this.opts.pingTimeout,()=>{this.transport.close({status:0,message:'keep alive has not recieved pong in defined timeframe',recoverable:true});});this.timeoutTimer.schedule();}ping(){this.transport.send({type:'ping'},{affectState:false});}}
|
|
931
|
+
;// CONCATENATED MODULE: ./utils/assert.ts
|
|
932
|
+
class AssertionError extends Error{constructor(message){super(message);this.name=this.constructor.name;}}function defined(target,message){if(target===undefined){throw new AssertionError(message);}}
|
|
933
|
+
;// CONCATENATED MODULE: ./errors/is-transport-error.ts
|
|
934
|
+
function isTransportError(error){return error!==undefined&&error.transport!==undefined;}
|
|
935
|
+
;// CONCATENATED MODULE: ./connection-manager.ts
|
|
936
|
+
/**
|
|
937
|
+
* ConnectionManager responsibilities:
|
|
938
|
+
* - Auto reconnections on abrupt disconnections and environment state changes
|
|
939
|
+
* - Keep alive (in relevant transports only)
|
|
940
|
+
* - Network state changes (on online hints)
|
|
941
|
+
* - Dealing with TransportsManager
|
|
942
|
+
*
|
|
943
|
+
* Events:
|
|
944
|
+
* - "open" - on connection open, depends on result from TransportsManager#connect
|
|
945
|
+
* - "close" - passed through from TransportsManager
|
|
946
|
+
* - "connect_error" - passed through from TransportsManager
|
|
947
|
+
* - "message" - passed through from TransportsManager
|
|
948
|
+
*/class ConnectionManager extends Emitter{constructor(opts){super();this.opts=opts;defineProperty_default()(this,"keepAlive",void 0);defineProperty_default()(this,"autoConnect",void 0);defineProperty_default()(this,"environment",void 0);defineProperty_default()(this,"timeline",void 0);defineProperty_default()(this,"autoConnectEnabled",void 0);this.environment=opts.environment;this.timeline=opts.timeline;this.autoConnectEnabled=opts.autoConnectEnabed;this.listenNeworkStateChanges();this.listenTransportEvents();}get sessionId(){return this.transport.sessionId;}updatePayload(payload){this.transport.updatePayload(payload);}send(packet,opts){this.transport.send(packet,opts);}close(){this.autoConnect=false;this.environment.transportsManager.close();this.dispose();}get readyState(){return this.environment.transportsManager.readyState;}async connect(){this.autoConnect=this.autoConnectEnabled;const result=await this.environment.transportsManager.connect();if(result.success){this.keepAlive=new KeepAlive(this.transport,this.opts);this.transport.keepAliveEnabled&&this.keepAlive.schedule();this.timeline.log({type:'connect_succeeded',data:{transport:this.transport.name}});this.emit('open',result.connectionEstablishedPacket);}}isClosed(){return this.environment.transportsManager.isClosed();}isOpen(){return this.environment.transportsManager.isOpen();}get transport(){defined(this.environment.transportsManager.transport,'transport was not initialized yet');return this.environment.transportsManager.transport;}/**
|
|
949
|
+
* we reconnect in the following scenarios only:
|
|
950
|
+
*
|
|
951
|
+
* - unexpected close, due to command that errored out or any other unexpected
|
|
952
|
+
* network error.
|
|
953
|
+
* - keep alive failed to return a pong during the defined timeout/timeframe.
|
|
954
|
+
* - sessions expired.
|
|
955
|
+
*
|
|
956
|
+
* note: invalid signed instance is currently an error we do not recover, it's a todo.
|
|
957
|
+
* basically we can recover it, because instance updater provided by the user should
|
|
958
|
+
* always return a valid signed instance, so we can retry multiple times.
|
|
959
|
+
*/shouldReconnect(error){return this.autoConnect&&(error==null?void 0:error.recoverable);}listenNeworkStateChanges(){this.environment.network.on('online',()=>{/**
|
|
960
|
+
* the ONLY responsibility of "online" hook is to speed up reconnections
|
|
961
|
+
* in case our backoff reached top intervals (10s between reconnections),
|
|
962
|
+
* it should restart it. hence, we MUST NOT close connection in case it
|
|
963
|
+
* is considered ESTABLISHED one (yes - although it MAY be an half-open one).
|
|
964
|
+
* in case of half-open connection, it's keep alive responsibility to
|
|
965
|
+
* disconnect us (and reconnect will happen automatically).
|
|
966
|
+
*/if(this.autoConnect&&!this.isOpen()){this.timeline.log({type:'network_state_changed',data:'online'});// cleanup strategies and reconnect faster
|
|
967
|
+
this.close();this.connect();}});}listenTransportEvents(){on(this.environment.transportsManager,'connect_error',error=>{this.timeline.log({type:'connect_error',data:error});// eventually, it is propagaed to client as "@duplexer:connect_error" event,
|
|
968
|
+
// by VirtualSocket, error is attached.
|
|
969
|
+
this.emit('connect_error',error);});on(this.environment.transportsManager,'close',error=>{this.dispose();this.maybeLogDisconnectionError(error);if(this.shouldReconnect(error)){this.connect();}// eventually, it is propagaed to client as "@duplexer:disconnected" event,
|
|
970
|
+
// by VirtualSocket, error is attached in case it exists.
|
|
971
|
+
this.emit('close',error);});on(this.environment.transportsManager,'message',message=>{this.emit('message',message);});}dispose(){this.keepAlive&&this.keepAlive.dispose();}maybeLogDisconnectionError(error){if(isTransportError(error)){this.timeline.log({type:'disconnect_error',data:error});}}}
|
|
972
|
+
;// CONCATENATED MODULE: ./timeline/noop-timeline.ts
|
|
973
|
+
class NoopTimeline{log(){}}function aNoopTimeline(){return new NoopTimeline();}
|
|
974
|
+
;// CONCATENATED MODULE: ./duplexer.ts
|
|
975
|
+
class Duplexer extends Emitter{constructor(urlOrEnvironment,_temp){let{pingInterval=30000,pingTimeout=5000,timeline=aNoopTimeline(),autoConnect=true,instanceUpdater,siteRevision}=_temp===void 0?{}:_temp;super();defineProperty_default()(this,"virtualSockets",[]);defineProperty_default()(this,"environment",void 0);defineProperty_default()(this,"payloadBuilder",new dist/* PollPayloadBuilder */.Du());defineProperty_default()(this,"connectionServerTimeDeferred",new Deferred());/** @internal */defineProperty_default()(this,"connection",void 0);this.environment=typeof urlOrEnvironment==='string'?aWebEnvironment({url:urlOrEnvironment,instanceUpdater,siteRevision}):urlOrEnvironment;this.connection=new ConnectionManager({pingTimeout,pingInterval,environment:this.environment,timeline,autoConnectEnabed:autoConnect});this.listen();}triggerInstanceChanged(){this.close();this.connection.connect();}connect(opts){const vSocket=new VirtualSocket(this,opts);this.virtualSockets.push(vSocket);return vSocket;}getConnectionServerTime(){return this.connectionServerTimeDeferred.promise;}close(){this.connection.close();}/** @internal */addRestoreOverride(override){const payload=this.payloadBuilder.withOverrideRestoreStrategy(override).build();this.connection.updatePayload(payload);}/** @internal */closeVirtualSocket(virtualSocket){this.virtualSockets=this.virtualSockets.filter(vs=>vs!==virtualSocket);if(this.virtualSockets.length===0){this.close();}}/** @internal */packet(packet,opts){this.connection.send(packet,opts);}listen(){this.connection.on('open',packet=>{const timestampRestoreStrategy=dist/* RestoreStrategyBuilderFactory */.v8.timestamp().withT(packet.t).build();this.payloadBuilder.withDefaultRestoreStrategy(timestampRestoreStrategy);this.connection.updatePayload(this.payloadBuilder.build());this.emit('open');this.connectionServerTimeDeferred.resolve(packet.t);});this.connection.on('message',message=>{switch(message.type){case'UpdateRestoreStrategyOverrides':this.overwriteRestoreOverrides(message.overrides);break;default:this.emit('packet',message);}});this.connection.on('close',this.onClose.bind(this));}onClose(error){this.emit('close',error);this.connectionServerTimeDeferred=new Deferred();}overwriteRestoreOverrides(overrides){this.payloadBuilder=new dist/* PollPayloadBuilder */.Du();overrides.forEach(override=>this.payloadBuilder.withOverrideRestoreStrategy(override));const payload=this.payloadBuilder.build();this.connection.updatePayload(payload);}}
|
|
976
|
+
})();
|
|
977
|
+
|
|
978
|
+
/******/ return __webpack_exports__;
|
|
979
|
+
/******/ })()
|
|
980
|
+
;
|
|
981
|
+
});
|
|
982
|
+
//# sourceMappingURL=duplexer.bundle.js.map
|