@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.
Files changed (280) hide show
  1. package/README.md +239 -0
  2. package/dist/src/_external-types.d.ts +1 -0
  3. package/dist/src/authenticator.d.ts +22 -0
  4. package/dist/src/authenticator.js +42 -0
  5. package/dist/src/authenticator.js.map +1 -0
  6. package/dist/src/channels/channel.d.ts +29 -0
  7. package/dist/src/channels/channel.js +159 -0
  8. package/dist/src/channels/channel.js.map +1 -0
  9. package/dist/src/channels/channels.d.ts +13 -0
  10. package/dist/src/channels/channels.js +41 -0
  11. package/dist/src/channels/channels.js.map +1 -0
  12. package/dist/src/channels/subscription-error.d.ts +6 -0
  13. package/dist/src/channels/subscription-error.js +3 -0
  14. package/dist/src/channels/subscription-error.js.map +1 -0
  15. package/dist/src/connection-manager.d.ts +62 -0
  16. package/dist/src/connection-manager.js +228 -0
  17. package/dist/src/connection-manager.js.map +1 -0
  18. package/dist/src/constants.d.ts +5 -0
  19. package/dist/src/constants.js +9 -0
  20. package/dist/src/constants.js.map +1 -0
  21. package/dist/src/domain.d.ts +3 -0
  22. package/dist/src/domain.js +3 -0
  23. package/dist/src/domain.js.map +1 -0
  24. package/dist/src/duplexer.d.ts +41 -0
  25. package/dist/src/duplexer.js +125 -0
  26. package/dist/src/duplexer.js.map +1 -0
  27. package/dist/src/environments/core/environment.d.ts +13 -0
  28. package/dist/src/environments/core/environment.js +25 -0
  29. package/dist/src/environments/core/environment.js.map +1 -0
  30. package/dist/src/environments/core/network.d.ts +6 -0
  31. package/dist/src/environments/core/network.js +32 -0
  32. package/dist/src/environments/core/network.js.map +1 -0
  33. package/dist/src/environments/react-native/environment.d.ts +7 -0
  34. package/dist/src/environments/react-native/environment.js +27 -0
  35. package/dist/src/environments/react-native/environment.js.map +1 -0
  36. package/dist/src/environments/react-native/network.d.ts +6 -0
  37. package/dist/src/environments/react-native/network.js +54 -0
  38. package/dist/src/environments/react-native/network.js.map +1 -0
  39. package/dist/src/environments/react-native/transports.d.ts +8 -0
  40. package/dist/src/environments/react-native/transports.js +31 -0
  41. package/dist/src/environments/react-native/transports.js.map +1 -0
  42. package/dist/src/environments/web/environment.d.ts +8 -0
  43. package/dist/src/environments/web/environment.js +19 -0
  44. package/dist/src/environments/web/environment.js.map +1 -0
  45. package/dist/src/environments/web/network.d.ts +4 -0
  46. package/dist/src/environments/web/network.js +38 -0
  47. package/dist/src/environments/web/network.js.map +1 -0
  48. package/dist/src/environments/web/transports.d.ts +8 -0
  49. package/dist/src/environments/web/transports.js +51 -0
  50. package/dist/src/environments/web/transports.js.map +1 -0
  51. package/dist/src/errors/is-transport-error.d.ts +1 -0
  52. package/dist/src/errors/is-transport-error.js +7 -0
  53. package/dist/src/errors/is-transport-error.js.map +1 -0
  54. package/dist/src/index.d.ts +11 -0
  55. package/dist/src/index.js +25 -0
  56. package/dist/src/index.js.map +1 -0
  57. package/dist/src/instance-updater.d.ts +5 -0
  58. package/dist/src/instance-updater.js +3 -0
  59. package/dist/src/instance-updater.js.map +1 -0
  60. package/dist/src/keep-alive.d.ts +18 -0
  61. package/dist/src/keep-alive.js +66 -0
  62. package/dist/src/keep-alive.js.map +1 -0
  63. package/dist/src/ready-state.d.ts +6 -0
  64. package/dist/src/ready-state.js +10 -0
  65. package/dist/src/ready-state.js.map +1 -0
  66. package/dist/src/strategies/strategy-builder.d.ts +11 -0
  67. package/dist/src/strategies/strategy-builder.js +34 -0
  68. package/dist/src/strategies/strategy-builder.js.map +1 -0
  69. package/dist/src/strategies/strategy-presets.d.ts +4 -0
  70. package/dist/src/strategies/strategy-presets.js +20 -0
  71. package/dist/src/strategies/strategy-presets.js.map +1 -0
  72. package/dist/src/strategies/strategy.d.ts +25 -0
  73. package/dist/src/strategies/strategy.js +153 -0
  74. package/dist/src/strategies/strategy.js.map +1 -0
  75. package/dist/src/timeline/noop-timeline.d.ts +5 -0
  76. package/dist/src/timeline/noop-timeline.js +15 -0
  77. package/dist/src/timeline/noop-timeline.js.map +1 -0
  78. package/dist/src/timeline/timeline.d.ts +7 -0
  79. package/dist/src/timeline/timeline.js +3 -0
  80. package/dist/src/timeline/timeline.js.map +1 -0
  81. package/dist/src/transport/http-polling.d.ts +27 -0
  82. package/dist/src/transport/http-polling.js +245 -0
  83. package/dist/src/transport/http-polling.js.map +1 -0
  84. package/dist/src/transport/http.d.ts +14 -0
  85. package/dist/src/transport/http.js +106 -0
  86. package/dist/src/transport/http.js.map +1 -0
  87. package/dist/src/transport/params.d.ts +3 -0
  88. package/dist/src/transport/params.js +70 -0
  89. package/dist/src/transport/params.js.map +1 -0
  90. package/dist/src/transport/transport-error.d.ts +8 -0
  91. package/dist/src/transport/transport-error.js +3 -0
  92. package/dist/src/transport/transport-error.js.map +1 -0
  93. package/dist/src/transport/transport-params.d.ts +3 -0
  94. package/dist/src/transport/transport-params.js +3 -0
  95. package/dist/src/transport/transport-params.js.map +1 -0
  96. package/dist/src/transport/transport.d.ts +50 -0
  97. package/dist/src/transport/transport.js +120 -0
  98. package/dist/src/transport/transport.js.map +1 -0
  99. package/dist/src/transport/transports-manager.d.ts +42 -0
  100. package/dist/src/transport/transports-manager.js +248 -0
  101. package/dist/src/transport/transports-manager.js.map +1 -0
  102. package/dist/src/transport/unrecoverable.d.ts +1 -0
  103. package/dist/src/transport/unrecoverable.js +8 -0
  104. package/dist/src/transport/unrecoverable.js.map +1 -0
  105. package/dist/src/transport/websocket.d.ts +18 -0
  106. package/dist/src/transport/websocket.js +155 -0
  107. package/dist/src/transport/websocket.js.map +1 -0
  108. package/dist/src/utils/assert.d.ts +1 -0
  109. package/dist/src/utils/assert.js +34 -0
  110. package/dist/src/utils/assert.js.map +1 -0
  111. package/dist/src/utils/cancel-token.d.ts +10 -0
  112. package/dist/src/utils/cancel-token.js +28 -0
  113. package/dist/src/utils/cancel-token.js.map +1 -0
  114. package/dist/src/utils/deferred.d.ts +9 -0
  115. package/dist/src/utils/deferred.js +27 -0
  116. package/dist/src/utils/deferred.js.map +1 -0
  117. package/dist/src/utils/event-emitter.d.ts +15 -0
  118. package/dist/src/utils/event-emitter.js +106 -0
  119. package/dist/src/utils/event-emitter.js.map +1 -0
  120. package/dist/src/utils/on.d.ts +4 -0
  121. package/dist/src/utils/on.js +10 -0
  122. package/dist/src/utils/on.js.map +1 -0
  123. package/dist/src/utils/request.d.ts +20 -0
  124. package/dist/src/utils/request.js +164 -0
  125. package/dist/src/utils/request.js.map +1 -0
  126. package/dist/src/utils/timer.d.ts +8 -0
  127. package/dist/src/utils/timer.js +17 -0
  128. package/dist/src/utils/timer.js.map +1 -0
  129. package/dist/src/utils/utils.d.ts +1 -0
  130. package/dist/src/utils/utils.js +8 -0
  131. package/dist/src/utils/utils.js.map +1 -0
  132. package/dist/src/virtual-socket.d.ts +42 -0
  133. package/dist/src/virtual-socket.js +199 -0
  134. package/dist/src/virtual-socket.js.map +1 -0
  135. package/dist/statics/duplexer.bundle.js +982 -0
  136. package/dist/statics/duplexer.bundle.js.map +1 -0
  137. package/dist/statics/duplexer.bundle.min.js +2 -0
  138. package/dist/statics/duplexer.bundle.min.js.map +1 -0
  139. package/dist/statics/manifest.json +3 -0
  140. package/dist/statics/manifest.min.json +3 -0
  141. package/dist/test/_external-types.d.ts +2 -0
  142. package/dist/test/_global-types.d.ts +10 -0
  143. package/dist/test/_setup-global-hooks.spec.d.ts +1 -0
  144. package/dist/test/_setup-global-hooks.spec.js +13 -0
  145. package/dist/test/_setup-global-hooks.spec.js.map +1 -0
  146. package/dist/test/client-events.it.d.ts +1 -0
  147. package/dist/test/client-events.it.js +33 -0
  148. package/dist/test/client-events.it.js.map +1 -0
  149. package/dist/test/connect.spec.d.ts +1 -0
  150. package/dist/test/connect.spec.js +71 -0
  151. package/dist/test/connect.spec.js.map +1 -0
  152. package/dist/test/connection-manager.spec.d.ts +1 -0
  153. package/dist/test/connection-manager.spec.js +523 -0
  154. package/dist/test/connection-manager.spec.js.map +1 -0
  155. package/dist/test/duplexer.it.d.ts +1 -0
  156. package/dist/test/duplexer.it.js +243 -0
  157. package/dist/test/duplexer.it.js.map +1 -0
  158. package/dist/test/duplexer.spec.d.ts +1 -0
  159. package/dist/test/duplexer.spec.js +337 -0
  160. package/dist/test/duplexer.spec.js.map +1 -0
  161. package/dist/test/environments/web.it.d.ts +1 -0
  162. package/dist/test/environments/web.it.js +30 -0
  163. package/dist/test/environments/web.it.js.map +1 -0
  164. package/dist/test/environments/web.spec.d.ts +1 -0
  165. package/dist/test/environments/web.spec.js +92 -0
  166. package/dist/test/environments/web.spec.js.map +1 -0
  167. package/dist/test/event-emitter.spec.d.ts +1 -0
  168. package/dist/test/event-emitter.spec.js +182 -0
  169. package/dist/test/event-emitter.spec.js.map +1 -0
  170. package/dist/test/helpers/as-promised.d.ts +7 -0
  171. package/dist/test/helpers/as-promised.js +38 -0
  172. package/dist/test/helpers/as-promised.js.map +1 -0
  173. package/dist/test/helpers/assertions.d.ts +8 -0
  174. package/dist/test/helpers/assertions.js +43 -0
  175. package/dist/test/helpers/assertions.js.map +1 -0
  176. package/dist/test/helpers/auth-server.d.ts +10 -0
  177. package/dist/test/helpers/auth-server.js +61 -0
  178. package/dist/test/helpers/auth-server.js.map +1 -0
  179. package/dist/test/helpers/http-polling-environment.d.ts +2 -0
  180. package/dist/test/helpers/http-polling-environment.js +20 -0
  181. package/dist/test/helpers/http-polling-environment.js.map +1 -0
  182. package/dist/test/helpers/in-memory-environemnt.d.ts +15 -0
  183. package/dist/test/helpers/in-memory-environemnt.js +39 -0
  184. package/dist/test/helpers/in-memory-environemnt.js.map +1 -0
  185. package/dist/test/helpers/in-memory-network.d.ts +5 -0
  186. package/dist/test/helpers/in-memory-network.js +37 -0
  187. package/dist/test/helpers/in-memory-network.js.map +1 -0
  188. package/dist/test/helpers/in-memory-timeline.d.ts +8 -0
  189. package/dist/test/helpers/in-memory-timeline.js +24 -0
  190. package/dist/test/helpers/in-memory-timeline.js.map +1 -0
  191. package/dist/test/helpers/in-memory-transport.d.ts +68 -0
  192. package/dist/test/helpers/in-memory-transport.js +271 -0
  193. package/dist/test/helpers/in-memory-transport.js.map +1 -0
  194. package/dist/test/helpers/server-interceptor.d.ts +10 -0
  195. package/dist/test/helpers/server-interceptor.js +138 -0
  196. package/dist/test/helpers/server-interceptor.js.map +1 -0
  197. package/dist/test/helpers/setup-global-mock-navigator.d.ts +4 -0
  198. package/dist/test/helpers/setup-global-mock-navigator.js +22 -0
  199. package/dist/test/helpers/setup-global-mock-navigator.js.map +1 -0
  200. package/dist/test/helpers/window.d.ts +1 -0
  201. package/dist/test/helpers/window.js +17 -0
  202. package/dist/test/helpers/window.js.map +1 -0
  203. package/dist/test/keep-alive.it.spec.d.ts +1 -0
  204. package/dist/test/keep-alive.it.spec.js +42 -0
  205. package/dist/test/keep-alive.it.spec.js.map +1 -0
  206. package/dist/test/keep-alive.spec.d.ts +1 -0
  207. package/dist/test/keep-alive.spec.js +140 -0
  208. package/dist/test/keep-alive.spec.js.map +1 -0
  209. package/dist/test/ng/channel-support.d.ts +39 -0
  210. package/dist/test/ng/channel-support.js +178 -0
  211. package/dist/test/ng/channel-support.js.map +1 -0
  212. package/dist/test/ng/channels.spec.d.ts +1 -0
  213. package/dist/test/ng/channels.spec.js +79 -0
  214. package/dist/test/ng/channels.spec.js.map +1 -0
  215. package/dist/test/ng/client-events.it.d.ts +1 -0
  216. package/dist/test/ng/client-events.it.js +75 -0
  217. package/dist/test/ng/client-events.it.js.map +1 -0
  218. package/dist/test/ng/connect.it.d.ts +1 -0
  219. package/dist/test/ng/connect.it.js +128 -0
  220. package/dist/test/ng/connect.it.js.map +1 -0
  221. package/dist/test/ng/corvid-environment.d.ts +22 -0
  222. package/dist/test/ng/corvid-environment.js +44 -0
  223. package/dist/test/ng/corvid-environment.js.map +1 -0
  224. package/dist/test/ng/environment.d.ts +49 -0
  225. package/dist/test/ng/environment.js +250 -0
  226. package/dist/test/ng/environment.js.map +1 -0
  227. package/dist/test/ng/setup.d.ts +54 -0
  228. package/dist/test/ng/setup.js +256 -0
  229. package/dist/test/ng/setup.js.map +1 -0
  230. package/dist/test/ng/subscribe.it.d.ts +1 -0
  231. package/dist/test/ng/subscribe.it.js +354 -0
  232. package/dist/test/ng/subscribe.it.js.map +1 -0
  233. package/dist/test/ng/unsubscribe.it.d.ts +1 -0
  234. package/dist/test/ng/unsubscribe.it.js +73 -0
  235. package/dist/test/ng/unsubscribe.it.js.map +1 -0
  236. package/dist/test/ng/util-functions.d.ts +7 -0
  237. package/dist/test/ng/util-functions.js +73 -0
  238. package/dist/test/ng/util-functions.js.map +1 -0
  239. package/dist/test/proto/client/index.d.ts +2852 -0
  240. package/dist/test/proto/index.d.ts +1421 -0
  241. package/dist/test/proto/server/index.d.ts +2832 -0
  242. package/dist/test/restore-overrides.it.d.ts +1 -0
  243. package/dist/test/restore-overrides.it.js +38 -0
  244. package/dist/test/restore-overrides.it.js.map +1 -0
  245. package/dist/test/setup.d.ts +1 -0
  246. package/dist/test/setup.js +5 -0
  247. package/dist/test/setup.js.map +1 -0
  248. package/dist/test/strategy.spec.d.ts +1 -0
  249. package/dist/test/strategy.spec.js +209 -0
  250. package/dist/test/strategy.spec.js.map +1 -0
  251. package/dist/test/subscribe.it.d.ts +1 -0
  252. package/dist/test/subscribe.it.js +216 -0
  253. package/dist/test/subscribe.it.js.map +1 -0
  254. package/dist/test/subscribe.spec.d.ts +1 -0
  255. package/dist/test/subscribe.spec.js +86 -0
  256. package/dist/test/subscribe.spec.js.map +1 -0
  257. package/dist/test/transporters/http-polling.it.d.ts +1 -0
  258. package/dist/test/transporters/http-polling.it.js +118 -0
  259. package/dist/test/transporters/http-polling.it.js.map +1 -0
  260. package/dist/test/transporters/http-polling.spec.d.ts +1 -0
  261. package/dist/test/transporters/http-polling.spec.js +354 -0
  262. package/dist/test/transporters/http-polling.spec.js.map +1 -0
  263. package/dist/test/transporters/transporter.spec.d.ts +1 -0
  264. package/dist/test/transporters/transporter.spec.js +46 -0
  265. package/dist/test/transporters/transporter.spec.js.map +1 -0
  266. package/dist/test/transporters/websocket.spec.d.ts +1 -0
  267. package/dist/test/transporters/websocket.spec.js +26 -0
  268. package/dist/test/transporters/websocket.spec.js.map +1 -0
  269. package/dist/test/transports-manager.spec.d.ts +1 -0
  270. package/dist/test/transports-manager.spec.js +346 -0
  271. package/dist/test/transports-manager.spec.js.map +1 -0
  272. package/dist/test/utils/request.spec.d.ts +1 -0
  273. package/dist/test/utils/request.spec.js +274 -0
  274. package/dist/test/utils/request.spec.js.map +1 -0
  275. package/dist/test/virtual-socket.it.d.ts +1 -0
  276. package/dist/test/virtual-socket.it.js +153 -0
  277. package/dist/test/virtual-socket.it.js.map +1 -0
  278. package/package.json +131 -0
  279. package/react-native.d.ts +1 -0
  280. 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