pusher-fake 1.12.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/bin/pusher-fake +1 -3
  3. data/lib/pusher-fake.rb +3 -1
  4. data/lib/pusher-fake/channel.rb +4 -2
  5. data/lib/pusher-fake/channel/presence.rb +3 -3
  6. data/lib/pusher-fake/channel/private.rb +3 -1
  7. data/lib/pusher-fake/channel/public.rb +2 -0
  8. data/lib/pusher-fake/configuration.rb +4 -1
  9. data/lib/pusher-fake/connection.rb +10 -7
  10. data/lib/pusher-fake/server.rb +2 -0
  11. data/lib/pusher-fake/server/application.rb +4 -2
  12. data/lib/pusher-fake/support/base.rb +4 -2
  13. data/lib/pusher-fake/support/cucumber.rb +2 -0
  14. data/lib/pusher-fake/support/rspec.rb +2 -0
  15. data/lib/pusher-fake/webhook.rb +3 -1
  16. data/spec/features/api/channels_spec.rb +2 -0
  17. data/spec/features/api/users_spec.rb +2 -0
  18. data/spec/features/client/connect_spec.rb +2 -0
  19. data/spec/features/client/event_spec.rb +2 -0
  20. data/spec/features/client/presence_spec.rb +2 -0
  21. data/spec/features/client/subscribe_spec.rb +9 -5
  22. data/spec/features/server/event_spec.rb +2 -0
  23. data/spec/features/server/webhooks_spec.rb +2 -0
  24. data/spec/lib/pusher-fake/channel/presence_spec.rb +2 -0
  25. data/spec/lib/pusher-fake/channel/private_spec.rb +4 -2
  26. data/spec/lib/pusher-fake/channel/public_spec.rb +2 -0
  27. data/spec/lib/pusher-fake/channel_spec.rb +2 -0
  28. data/spec/lib/pusher-fake/configuration_spec.rb +9 -1
  29. data/spec/lib/pusher-fake/connection_spec.rb +4 -2
  30. data/spec/lib/pusher-fake/server/application_spec.rb +4 -2
  31. data/spec/lib/pusher-fake/server_spec.rb +2 -0
  32. data/spec/lib/pusher-fake/webhook_spec.rb +3 -1
  33. data/spec/lib/pusher_fake_spec.rb +2 -0
  34. data/spec/spec_helper.rb +3 -1
  35. data/spec/support/application.rb +3 -1
  36. data/spec/support/application/public/javascripts/vendor/polyfill.min.js +1 -0
  37. data/spec/support/application/public/javascripts/vendor/pusher-7.0.0.js +4565 -0
  38. data/spec/support/application/views/index.erb +2 -1
  39. data/spec/support/capybara.rb +4 -7
  40. data/spec/support/coveralls.rb +2 -0
  41. data/spec/support/helpers/connect.rb +2 -0
  42. data/spec/support/helpers/event.rb +2 -0
  43. data/spec/support/helpers/subscription.rb +2 -0
  44. data/spec/support/helpers/user.rb +2 -0
  45. data/spec/support/matchers/have_configuration_option.rb +2 -0
  46. data/spec/support/pusher_fake.rb +3 -1
  47. data/spec/support/webhooks.rb +17 -15
  48. metadata +104 -47
  49. data/lib/pusher-fake/cucumber.rb +0 -4
  50. data/spec/support/application/public/javascripts/vendor/pusher-4.2.2.js +0 -4183
@@ -13,7 +13,8 @@
13
13
  <ul></ul>
14
14
  </section>
15
15
 
16
- <script src="/javascripts/vendor/pusher-4.2.2.js"></script>
16
+ <script src="/javascripts/vendor/polyfill.min.js"></script>
17
+ <script src="/javascripts/vendor/pusher-7.0.0.js"></script>
17
18
  <script>
18
19
  Pusher.instance = <%= PusherFake.javascript %>;
19
20
  Pusher.instance.connection.bind("state_change", function(states) {
@@ -1,10 +1,7 @@
1
- require "capybara/poltergeist"
2
- require "capybara/rspec"
1
+ # frozen_string_literal: true
3
2
 
4
- Capybara.register_driver :poltergeist do |app|
5
- Capybara::Poltergeist::Driver.new(app, url_whitelist: [])
6
- end
3
+ require "capybara/rspec"
7
4
 
8
5
  Capybara.app = Sinatra::Application
9
- Capybara.server = :webrick
10
- Capybara.default_driver = :poltergeist
6
+ Capybara.server = :puma, { Silent: true }
7
+ Capybara.default_driver = :selenium_chrome_headless
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if ENV["CI"]
2
4
  require "coveralls"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ConnectHelpers
2
4
  def connect(options = {})
3
5
  visit "/"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventHelpers
2
4
  def have_event(event, options = {})
3
5
  have_css("li", text: "Channel #{options[:on]} received #{event} event.")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SubscriptionHelpers
2
4
  def subscribe_to(channel)
3
5
  page.execute_script("Helpers.subscribe(#{MultiJson.dump(channel)})")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module UserHelpers
2
4
  def user_id(name = nil)
3
5
  using_session(name) do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec::Matchers.define :have_configuration_option do |option|
2
4
  match do |configuration|
3
5
  configuration.respond_to?(option) &&
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "thin/server"
2
4
 
3
5
  RSpec.configure do |config|
@@ -5,7 +7,7 @@ RSpec.configure do |config|
5
7
  PusherFake.configuration.reset!
6
8
  PusherFake.configuration.web_options.tap do |options|
7
9
  Pusher.url = "http://PUSHER_API_KEY:PUSHER_API_SECRET@" \
8
- "#{options[:host]}:#{options[:port]}/apps/PUSHER_APP_ID"
10
+ "#{options[:host]}:#{options[:port]}/apps/PUSHER_APP_ID"
9
11
  end
10
12
 
11
13
  @thread = Thread.new { PusherFake::Server.start }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class WebhookHelper
2
4
  def self.events
3
5
  @events ||= []
@@ -8,27 +10,27 @@ class WebhookHelper
8
10
  end
9
11
  end
10
12
 
13
+ class WebhookEndpoint
14
+ def self.call(environment)
15
+ request = Rack::Request.new(environment)
16
+ webhook = Pusher::WebHook.new(request)
17
+
18
+ if webhook.valid?
19
+ WebhookHelper.mutex.synchronize do
20
+ WebhookHelper.events.concat(webhook.events)
21
+ end
22
+ end
23
+
24
+ Rack::Response.new.finish
25
+ end
26
+ end
27
+
11
28
  thread = Thread.new do
12
29
  # Not explicitly requiring Thin::Server occasionally results in
13
30
  # Thin::Server.start not being defined.
14
31
  require "thin"
15
32
  require "thin/server"
16
33
 
17
- class WebhookEndpoint
18
- def self.call(environment)
19
- request = Rack::Request.new(environment)
20
- webhook = Pusher::WebHook.new(request)
21
-
22
- if webhook.valid?
23
- WebhookHelper.mutex.synchronize do
24
- WebhookHelper.events.concat(webhook.events)
25
- end
26
- end
27
-
28
- Rack::Response.new.finish
29
- end
30
- end
31
-
32
34
  EventMachine.run do
33
35
  Thin::Logging.silent = true
34
36
  Thin::Server.start("0.0.0.0", 8082, WebhookEndpoint)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pusher-fake
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Dunn
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-02 00:00:00.000000000 Z
11
+ date: 2021-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -67,117 +67,173 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.5'
69
69
  - !ruby/object:Gem::Dependency
70
- name: poltergeist
70
+ name: capybara
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 1.18.1
75
+ version: 3.35.3
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 1.18.1
82
+ version: 3.35.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: puma
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 5.4.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 5.4.0
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: pusher
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - '='
88
102
  - !ruby/object:Gem::Version
89
- version: 1.3.2
103
+ version: 2.0.1
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - '='
95
109
  - !ruby/object:Gem::Version
96
- version: 1.3.2
110
+ version: 2.0.1
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - '='
102
116
  - !ruby/object:Gem::Version
103
- version: 12.3.2
117
+ version: 13.0.6
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - '='
109
123
  - !ruby/object:Gem::Version
110
- version: 12.3.2
124
+ version: 13.0.6
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rspec
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - '='
116
130
  - !ruby/object:Gem::Version
117
- version: 3.8.0
131
+ version: 3.10.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - '='
123
137
  - !ruby/object:Gem::Version
124
- version: 3.8.0
138
+ version: 3.10.0
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rubocop
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - '='
130
144
  - !ruby/object:Gem::Version
131
- version: 0.63.1
145
+ version: 1.18.4
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 1.18.4
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-performance
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 1.11.4
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - '='
137
165
  - !ruby/object:Gem::Version
138
- version: 0.63.1
166
+ version: 1.11.4
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 0.6.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 0.6.0
139
181
  - !ruby/object:Gem::Dependency
140
182
  name: rubocop-rspec
141
183
  requirement: !ruby/object:Gem::Requirement
142
184
  requirements:
143
185
  - - '='
144
186
  - !ruby/object:Gem::Version
145
- version: 1.31.0
187
+ version: 2.4.0
146
188
  type: :development
147
189
  prerelease: false
148
190
  version_requirements: !ruby/object:Gem::Requirement
149
191
  requirements:
150
192
  - - '='
151
193
  - !ruby/object:Gem::Version
152
- version: 1.31.0
194
+ version: 2.4.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: selenium-webdriver
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 3.142.7
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 3.142.7
153
209
  - !ruby/object:Gem::Dependency
154
210
  name: sinatra
155
211
  requirement: !ruby/object:Gem::Requirement
156
212
  requirements:
157
213
  - - '='
158
214
  - !ruby/object:Gem::Version
159
- version: 2.0.5
215
+ version: 2.1.0
160
216
  type: :development
161
217
  prerelease: false
162
218
  version_requirements: !ruby/object:Gem::Requirement
163
219
  requirements:
164
220
  - - '='
165
221
  - !ruby/object:Gem::Version
166
- version: 2.0.5
222
+ version: 2.1.0
167
223
  - !ruby/object:Gem::Dependency
168
224
  name: yard
169
225
  requirement: !ruby/object:Gem::Requirement
170
226
  requirements:
171
227
  - - '='
172
228
  - !ruby/object:Gem::Version
173
- version: 0.9.18
229
+ version: 0.9.26
174
230
  type: :development
175
231
  prerelease: false
176
232
  version_requirements: !ruby/object:Gem::Requirement
177
233
  requirements:
178
234
  - - '='
179
235
  - !ruby/object:Gem::Version
180
- version: 0.9.18
236
+ version: 0.9.26
181
237
  description: A fake Pusher server for development and testing.
182
238
  email: hello@tristandunn.com
183
239
  executables:
@@ -193,7 +249,6 @@ files:
193
249
  - lib/pusher-fake/channel/public.rb
194
250
  - lib/pusher-fake/configuration.rb
195
251
  - lib/pusher-fake/connection.rb
196
- - lib/pusher-fake/cucumber.rb
197
252
  - lib/pusher-fake/server.rb
198
253
  - lib/pusher-fake/server/application.rb
199
254
  - lib/pusher-fake/support/base.rb
@@ -220,7 +275,8 @@ files:
220
275
  - spec/lib/pusher_fake_spec.rb
221
276
  - spec/spec_helper.rb
222
277
  - spec/support/application.rb
223
- - spec/support/application/public/javascripts/vendor/pusher-4.2.2.js
278
+ - spec/support/application/public/javascripts/vendor/polyfill.min.js
279
+ - spec/support/application/public/javascripts/vendor/pusher-7.0.0.js
224
280
  - spec/support/application/views/index.erb
225
281
  - spec/support/capybara.rb
226
282
  - spec/support/coveralls.rb
@@ -235,7 +291,7 @@ homepage: https://github.com/tristandunn/pusher-fake
235
291
  licenses:
236
292
  - MIT
237
293
  metadata: {}
238
- post_install_message:
294
+ post_install_message:
239
295
  rdoc_options: []
240
296
  require_paths:
241
297
  - lib
@@ -243,46 +299,47 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
299
  requirements:
244
300
  - - ">="
245
301
  - !ruby/object:Gem::Version
246
- version: '0'
302
+ version: '2.6'
247
303
  required_rubygems_version: !ruby/object:Gem::Requirement
248
304
  requirements:
249
305
  - - ">="
250
306
  - !ruby/object:Gem::Version
251
307
  version: '0'
252
308
  requirements: []
253
- rubygems_version: 3.0.3
254
- signing_key:
309
+ rubygems_version: 3.2.22
310
+ signing_key:
255
311
  specification_version: 4
256
312
  summary: A fake Pusher server for development and testing.
257
313
  test_files:
258
- - spec/spec_helper.rb
259
- - spec/features/server/event_spec.rb
260
- - spec/features/server/webhooks_spec.rb
261
314
  - spec/features/api/channels_spec.rb
262
315
  - spec/features/api/users_spec.rb
263
316
  - spec/features/client/connect_spec.rb
264
- - spec/features/client/presence_spec.rb
265
317
  - spec/features/client/event_spec.rb
318
+ - spec/features/client/presence_spec.rb
266
319
  - spec/features/client/subscribe_spec.rb
267
- - spec/support/capybara.rb
268
- - spec/support/webhooks.rb
269
- - spec/support/application.rb
270
- - spec/support/pusher_fake.rb
271
- - spec/support/matchers/have_configuration_option.rb
272
- - spec/support/application/public/javascripts/vendor/pusher-4.2.2.js
320
+ - spec/features/server/event_spec.rb
321
+ - spec/features/server/webhooks_spec.rb
322
+ - spec/lib/pusher-fake/channel/presence_spec.rb
323
+ - spec/lib/pusher-fake/channel/private_spec.rb
324
+ - spec/lib/pusher-fake/channel/public_spec.rb
325
+ - spec/lib/pusher-fake/channel_spec.rb
326
+ - spec/lib/pusher-fake/configuration_spec.rb
327
+ - spec/lib/pusher-fake/connection_spec.rb
328
+ - spec/lib/pusher-fake/server/application_spec.rb
329
+ - spec/lib/pusher-fake/server_spec.rb
330
+ - spec/lib/pusher-fake/webhook_spec.rb
331
+ - spec/lib/pusher_fake_spec.rb
332
+ - spec/spec_helper.rb
333
+ - spec/support/application/public/javascripts/vendor/polyfill.min.js
334
+ - spec/support/application/public/javascripts/vendor/pusher-7.0.0.js
273
335
  - spec/support/application/views/index.erb
336
+ - spec/support/application.rb
337
+ - spec/support/capybara.rb
274
338
  - spec/support/coveralls.rb
275
339
  - spec/support/helpers/connect.rb
276
- - spec/support/helpers/subscription.rb
277
340
  - spec/support/helpers/event.rb
341
+ - spec/support/helpers/subscription.rb
278
342
  - spec/support/helpers/user.rb
279
- - spec/lib/pusher_fake_spec.rb
280
- - spec/lib/pusher-fake/webhook_spec.rb
281
- - spec/lib/pusher-fake/server_spec.rb
282
- - spec/lib/pusher-fake/configuration_spec.rb
283
- - spec/lib/pusher-fake/server/application_spec.rb
284
- - spec/lib/pusher-fake/channel/presence_spec.rb
285
- - spec/lib/pusher-fake/channel/public_spec.rb
286
- - spec/lib/pusher-fake/channel/private_spec.rb
287
- - spec/lib/pusher-fake/connection_spec.rb
288
- - spec/lib/pusher-fake/channel_spec.rb
343
+ - spec/support/matchers/have_configuration_option.rb
344
+ - spec/support/pusher_fake.rb
345
+ - spec/support/webhooks.rb
@@ -1,4 +0,0 @@
1
- require "pusher-fake/support/cucumber"
2
-
3
- warn %([DEPRECATION] "pusher-fake/cucumber" is deprecated.) +
4
- %(Please use "pusher-fake/support/cucumber" instead.)
@@ -1,4183 +0,0 @@
1
- /*!
2
- * Pusher JavaScript Library v4.2.2
3
- * https://pusher.com/
4
- *
5
- * Copyright 2017, Pusher
6
- * Released under the MIT licence.
7
- */
8
-
9
- (function webpackUniversalModuleDefinition(root, factory) {
10
- if(typeof exports === 'object' && typeof module === 'object')
11
- module.exports = factory();
12
- else if(typeof define === 'function' && define.amd)
13
- define([], factory);
14
- else if(typeof exports === 'object')
15
- exports["Pusher"] = factory();
16
- else
17
- root["Pusher"] = factory();
18
- })(this, function() {
19
- return /******/ (function(modules) { // webpackBootstrap
20
- /******/ // The module cache
21
- /******/ var installedModules = {};
22
-
23
- /******/ // The require function
24
- /******/ function __webpack_require__(moduleId) {
25
-
26
- /******/ // Check if module is in cache
27
- /******/ if(installedModules[moduleId])
28
- /******/ return installedModules[moduleId].exports;
29
-
30
- /******/ // Create a new module (and put it into the cache)
31
- /******/ var module = installedModules[moduleId] = {
32
- /******/ exports: {},
33
- /******/ id: moduleId,
34
- /******/ loaded: false
35
- /******/ };
36
-
37
- /******/ // Execute the module function
38
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
39
-
40
- /******/ // Flag the module as loaded
41
- /******/ module.loaded = true;
42
-
43
- /******/ // Return the exports of the module
44
- /******/ return module.exports;
45
- /******/ }
46
-
47
-
48
- /******/ // expose the modules object (__webpack_modules__)
49
- /******/ __webpack_require__.m = modules;
50
-
51
- /******/ // expose the module cache
52
- /******/ __webpack_require__.c = installedModules;
53
-
54
- /******/ // __webpack_public_path__
55
- /******/ __webpack_require__.p = "";
56
-
57
- /******/ // Load entry module and return exports
58
- /******/ return __webpack_require__(0);
59
- /******/ })
60
- /************************************************************************/
61
- /******/ ([
62
- /* 0 */
63
- /***/ (function(module, exports, __webpack_require__) {
64
-
65
- "use strict";
66
- var pusher_1 = __webpack_require__(1);
67
- module.exports = pusher_1["default"];
68
-
69
-
70
- /***/ }),
71
- /* 1 */
72
- /***/ (function(module, exports, __webpack_require__) {
73
-
74
- "use strict";
75
- var runtime_1 = __webpack_require__(2);
76
- var Collections = __webpack_require__(9);
77
- var dispatcher_1 = __webpack_require__(24);
78
- var timeline_1 = __webpack_require__(39);
79
- var level_1 = __webpack_require__(40);
80
- var StrategyBuilder = __webpack_require__(41);
81
- var timers_1 = __webpack_require__(12);
82
- var defaults_1 = __webpack_require__(5);
83
- var DefaultConfig = __webpack_require__(63);
84
- var logger_1 = __webpack_require__(8);
85
- var factory_1 = __webpack_require__(43);
86
- var url_store_1 = __webpack_require__(14);
87
- var Pusher = (function () {
88
- function Pusher(app_key, options) {
89
- var _this = this;
90
- checkAppKey(app_key);
91
- options = options || {};
92
- if (!options.cluster && !(options.wsHost || options.httpHost)) {
93
- var suffix = url_store_1["default"].buildLogSuffix("javascriptQuickStart");
94
- logger_1["default"].warn("You should always specify a cluster when connecting. " + suffix);
95
- }
96
- this.key = app_key;
97
- this.config = Collections.extend(DefaultConfig.getGlobalConfig(), options.cluster ? DefaultConfig.getClusterConfig(options.cluster) : {}, options);
98
- this.channels = factory_1["default"].createChannels();
99
- this.global_emitter = new dispatcher_1["default"]();
100
- this.sessionID = Math.floor(Math.random() * 1000000000);
101
- this.timeline = new timeline_1["default"](this.key, this.sessionID, {
102
- cluster: this.config.cluster,
103
- features: Pusher.getClientFeatures(),
104
- params: this.config.timelineParams || {},
105
- limit: 50,
106
- level: level_1["default"].INFO,
107
- version: defaults_1["default"].VERSION
108
- });
109
- if (!this.config.disableStats) {
110
- this.timelineSender = factory_1["default"].createTimelineSender(this.timeline, {
111
- host: this.config.statsHost,
112
- path: "/timeline/v2/" + runtime_1["default"].TimelineTransport.name
113
- });
114
- }
115
- var getStrategy = function (options) {
116
- var config = Collections.extend({}, _this.config, options);
117
- return StrategyBuilder.build(runtime_1["default"].getDefaultStrategy(config), config);
118
- };
119
- this.connection = factory_1["default"].createConnectionManager(this.key, Collections.extend({ getStrategy: getStrategy,
120
- timeline: this.timeline,
121
- activityTimeout: this.config.activity_timeout,
122
- pongTimeout: this.config.pong_timeout,
123
- unavailableTimeout: this.config.unavailable_timeout
124
- }, this.config, { encrypted: this.isEncrypted() }));
125
- this.connection.bind('connected', function () {
126
- _this.subscribeAll();
127
- if (_this.timelineSender) {
128
- _this.timelineSender.send(_this.connection.isEncrypted());
129
- }
130
- });
131
- this.connection.bind('message', function (params) {
132
- var internal = (params.event.indexOf('pusher_internal:') === 0);
133
- if (params.channel) {
134
- var channel = _this.channel(params.channel);
135
- if (channel) {
136
- channel.handleEvent(params.event, params.data);
137
- }
138
- }
139
- if (!internal) {
140
- _this.global_emitter.emit(params.event, params.data);
141
- }
142
- });
143
- this.connection.bind('connecting', function () {
144
- _this.channels.disconnect();
145
- });
146
- this.connection.bind('disconnected', function () {
147
- _this.channels.disconnect();
148
- });
149
- this.connection.bind('error', function (err) {
150
- logger_1["default"].warn('Error', err);
151
- });
152
- Pusher.instances.push(this);
153
- this.timeline.info({ instances: Pusher.instances.length });
154
- if (Pusher.isReady) {
155
- this.connect();
156
- }
157
- }
158
- Pusher.ready = function () {
159
- Pusher.isReady = true;
160
- for (var i = 0, l = Pusher.instances.length; i < l; i++) {
161
- Pusher.instances[i].connect();
162
- }
163
- };
164
- Pusher.log = function (message) {
165
- if (Pusher.logToConsole && (window).console && (window).console.log) {
166
- (window).console.log(message);
167
- }
168
- };
169
- Pusher.getClientFeatures = function () {
170
- return Collections.keys(Collections.filterObject({ "ws": runtime_1["default"].Transports.ws }, function (t) { return t.isSupported({}); }));
171
- };
172
- Pusher.prototype.channel = function (name) {
173
- return this.channels.find(name);
174
- };
175
- Pusher.prototype.allChannels = function () {
176
- return this.channels.all();
177
- };
178
- Pusher.prototype.connect = function () {
179
- this.connection.connect();
180
- if (this.timelineSender) {
181
- if (!this.timelineSenderTimer) {
182
- var encrypted = this.connection.isEncrypted();
183
- var timelineSender = this.timelineSender;
184
- this.timelineSenderTimer = new timers_1.PeriodicTimer(60000, function () {
185
- timelineSender.send(encrypted);
186
- });
187
- }
188
- }
189
- };
190
- Pusher.prototype.disconnect = function () {
191
- this.connection.disconnect();
192
- if (this.timelineSenderTimer) {
193
- this.timelineSenderTimer.ensureAborted();
194
- this.timelineSenderTimer = null;
195
- }
196
- };
197
- Pusher.prototype.bind = function (event_name, callback, context) {
198
- this.global_emitter.bind(event_name, callback, context);
199
- return this;
200
- };
201
- Pusher.prototype.unbind = function (event_name, callback, context) {
202
- this.global_emitter.unbind(event_name, callback, context);
203
- return this;
204
- };
205
- Pusher.prototype.bind_global = function (callback) {
206
- this.global_emitter.bind_global(callback);
207
- return this;
208
- };
209
- Pusher.prototype.unbind_global = function (callback) {
210
- this.global_emitter.unbind_global(callback);
211
- return this;
212
- };
213
- Pusher.prototype.unbind_all = function (callback) {
214
- this.global_emitter.unbind_all();
215
- return this;
216
- };
217
- Pusher.prototype.subscribeAll = function () {
218
- var channelName;
219
- for (channelName in this.channels.channels) {
220
- if (this.channels.channels.hasOwnProperty(channelName)) {
221
- this.subscribe(channelName);
222
- }
223
- }
224
- };
225
- Pusher.prototype.subscribe = function (channel_name) {
226
- var channel = this.channels.add(channel_name, this);
227
- if (channel.subscriptionPending && channel.subscriptionCancelled) {
228
- channel.reinstateSubscription();
229
- }
230
- else if (!channel.subscriptionPending && this.connection.state === "connected") {
231
- channel.subscribe();
232
- }
233
- return channel;
234
- };
235
- Pusher.prototype.unsubscribe = function (channel_name) {
236
- var channel = this.channels.find(channel_name);
237
- if (channel && channel.subscriptionPending) {
238
- channel.cancelSubscription();
239
- }
240
- else {
241
- channel = this.channels.remove(channel_name);
242
- if (channel && this.connection.state === "connected") {
243
- channel.unsubscribe();
244
- }
245
- }
246
- };
247
- Pusher.prototype.send_event = function (event_name, data, channel) {
248
- return this.connection.send_event(event_name, data, channel);
249
- };
250
- Pusher.prototype.isEncrypted = function () {
251
- if (runtime_1["default"].getProtocol() === "https:") {
252
- return true;
253
- }
254
- else {
255
- return Boolean(this.config.encrypted);
256
- }
257
- };
258
- Pusher.instances = [];
259
- Pusher.isReady = false;
260
- Pusher.logToConsole = false;
261
- Pusher.Runtime = runtime_1["default"];
262
- Pusher.ScriptReceivers = runtime_1["default"].ScriptReceivers;
263
- Pusher.DependenciesReceivers = runtime_1["default"].DependenciesReceivers;
264
- Pusher.auth_callbacks = runtime_1["default"].auth_callbacks;
265
- return Pusher;
266
- }());
267
- exports.__esModule = true;
268
- exports["default"] = Pusher;
269
- function checkAppKey(key) {
270
- if (key === null || key === undefined) {
271
- throw "You must pass your app key when you instantiate Pusher.";
272
- }
273
- }
274
- runtime_1["default"].setup(Pusher);
275
-
276
-
277
- /***/ }),
278
- /* 2 */
279
- /***/ (function(module, exports, __webpack_require__) {
280
-
281
- "use strict";
282
- var dependencies_1 = __webpack_require__(3);
283
- var xhr_auth_1 = __webpack_require__(7);
284
- var jsonp_auth_1 = __webpack_require__(15);
285
- var script_request_1 = __webpack_require__(16);
286
- var jsonp_request_1 = __webpack_require__(17);
287
- var script_receiver_factory_1 = __webpack_require__(4);
288
- var jsonp_timeline_1 = __webpack_require__(18);
289
- var transports_1 = __webpack_require__(19);
290
- var net_info_1 = __webpack_require__(26);
291
- var default_strategy_1 = __webpack_require__(27);
292
- var transport_connection_initializer_1 = __webpack_require__(28);
293
- var http_1 = __webpack_require__(29);
294
- var Runtime = {
295
- nextAuthCallbackID: 1,
296
- auth_callbacks: {},
297
- ScriptReceivers: script_receiver_factory_1.ScriptReceivers,
298
- DependenciesReceivers: dependencies_1.DependenciesReceivers,
299
- getDefaultStrategy: default_strategy_1["default"],
300
- Transports: transports_1["default"],
301
- transportConnectionInitializer: transport_connection_initializer_1["default"],
302
- HTTPFactory: http_1["default"],
303
- TimelineTransport: jsonp_timeline_1["default"],
304
- getXHRAPI: function () {
305
- return window.XMLHttpRequest;
306
- },
307
- getWebSocketAPI: function () {
308
- return window.WebSocket || window.MozWebSocket;
309
- },
310
- setup: function (PusherClass) {
311
- var _this = this;
312
- window.Pusher = PusherClass;
313
- var initializeOnDocumentBody = function () {
314
- _this.onDocumentBody(PusherClass.ready);
315
- };
316
- if (!window.JSON) {
317
- dependencies_1.Dependencies.load("json2", {}, initializeOnDocumentBody);
318
- }
319
- else {
320
- initializeOnDocumentBody();
321
- }
322
- },
323
- getDocument: function () {
324
- return document;
325
- },
326
- getProtocol: function () {
327
- return this.getDocument().location.protocol;
328
- },
329
- getAuthorizers: function () {
330
- return { ajax: xhr_auth_1["default"], jsonp: jsonp_auth_1["default"] };
331
- },
332
- onDocumentBody: function (callback) {
333
- var _this = this;
334
- if (document.body) {
335
- callback();
336
- }
337
- else {
338
- setTimeout(function () {
339
- _this.onDocumentBody(callback);
340
- }, 0);
341
- }
342
- },
343
- createJSONPRequest: function (url, data) {
344
- return new jsonp_request_1["default"](url, data);
345
- },
346
- createScriptRequest: function (src) {
347
- return new script_request_1["default"](src);
348
- },
349
- getLocalStorage: function () {
350
- try {
351
- return window.localStorage;
352
- }
353
- catch (e) {
354
- return undefined;
355
- }
356
- },
357
- createXHR: function () {
358
- if (this.getXHRAPI()) {
359
- return this.createXMLHttpRequest();
360
- }
361
- else {
362
- return this.createMicrosoftXHR();
363
- }
364
- },
365
- createXMLHttpRequest: function () {
366
- var Constructor = this.getXHRAPI();
367
- return new Constructor();
368
- },
369
- createMicrosoftXHR: function () {
370
- return new ActiveXObject("Microsoft.XMLHTTP");
371
- },
372
- getNetwork: function () {
373
- return net_info_1.Network;
374
- },
375
- createWebSocket: function (url) {
376
- var Constructor = this.getWebSocketAPI();
377
- return new Constructor(url);
378
- },
379
- createSocketRequest: function (method, url) {
380
- if (this.isXHRSupported()) {
381
- return this.HTTPFactory.createXHR(method, url);
382
- }
383
- else if (this.isXDRSupported(url.indexOf("https:") === 0)) {
384
- return this.HTTPFactory.createXDR(method, url);
385
- }
386
- else {
387
- throw "Cross-origin HTTP requests are not supported";
388
- }
389
- },
390
- isXHRSupported: function () {
391
- var Constructor = this.getXHRAPI();
392
- return Boolean(Constructor) && (new Constructor()).withCredentials !== undefined;
393
- },
394
- isXDRSupported: function (encrypted) {
395
- var protocol = encrypted ? "https:" : "http:";
396
- var documentProtocol = this.getProtocol();
397
- return Boolean((window['XDomainRequest'])) && documentProtocol === protocol;
398
- },
399
- addUnloadListener: function (listener) {
400
- if (window.addEventListener !== undefined) {
401
- window.addEventListener("unload", listener, false);
402
- }
403
- else if (window.attachEvent !== undefined) {
404
- window.attachEvent("onunload", listener);
405
- }
406
- },
407
- removeUnloadListener: function (listener) {
408
- if (window.addEventListener !== undefined) {
409
- window.removeEventListener("unload", listener, false);
410
- }
411
- else if (window.detachEvent !== undefined) {
412
- window.detachEvent("onunload", listener);
413
- }
414
- }
415
- };
416
- exports.__esModule = true;
417
- exports["default"] = Runtime;
418
-
419
-
420
- /***/ }),
421
- /* 3 */
422
- /***/ (function(module, exports, __webpack_require__) {
423
-
424
- "use strict";
425
- var script_receiver_factory_1 = __webpack_require__(4);
426
- var defaults_1 = __webpack_require__(5);
427
- var dependency_loader_1 = __webpack_require__(6);
428
- exports.DependenciesReceivers = new script_receiver_factory_1.ScriptReceiverFactory("_pusher_dependencies", "Pusher.DependenciesReceivers");
429
- exports.Dependencies = new dependency_loader_1["default"]({
430
- cdn_http: defaults_1["default"].cdn_http,
431
- cdn_https: defaults_1["default"].cdn_https,
432
- version: defaults_1["default"].VERSION,
433
- suffix: defaults_1["default"].dependency_suffix,
434
- receivers: exports.DependenciesReceivers
435
- });
436
-
437
-
438
- /***/ }),
439
- /* 4 */
440
- /***/ (function(module, exports) {
441
-
442
- "use strict";
443
- var ScriptReceiverFactory = (function () {
444
- function ScriptReceiverFactory(prefix, name) {
445
- this.lastId = 0;
446
- this.prefix = prefix;
447
- this.name = name;
448
- }
449
- ScriptReceiverFactory.prototype.create = function (callback) {
450
- this.lastId++;
451
- var number = this.lastId;
452
- var id = this.prefix + number;
453
- var name = this.name + "[" + number + "]";
454
- var called = false;
455
- var callbackWrapper = function () {
456
- if (!called) {
457
- callback.apply(null, arguments);
458
- called = true;
459
- }
460
- };
461
- this[number] = callbackWrapper;
462
- return { number: number, id: id, name: name, callback: callbackWrapper };
463
- };
464
- ScriptReceiverFactory.prototype.remove = function (receiver) {
465
- delete this[receiver.number];
466
- };
467
- return ScriptReceiverFactory;
468
- }());
469
- exports.ScriptReceiverFactory = ScriptReceiverFactory;
470
- exports.ScriptReceivers = new ScriptReceiverFactory("_pusher_script_", "Pusher.ScriptReceivers");
471
-
472
-
473
- /***/ }),
474
- /* 5 */
475
- /***/ (function(module, exports) {
476
-
477
- "use strict";
478
- var Defaults = {
479
- VERSION: "4.2.2",
480
- PROTOCOL: 7,
481
- host: 'ws.pusherapp.com',
482
- ws_port: 80,
483
- wss_port: 443,
484
- ws_path: '',
485
- sockjs_host: 'sockjs.pusher.com',
486
- sockjs_http_port: 80,
487
- sockjs_https_port: 443,
488
- sockjs_path: "/pusher",
489
- stats_host: 'stats.pusher.com',
490
- channel_auth_endpoint: '/pusher/auth',
491
- channel_auth_transport: 'ajax',
492
- activity_timeout: 120000,
493
- pong_timeout: 30000,
494
- unavailable_timeout: 10000,
495
- cdn_http: 'http://js.pusher.com',
496
- cdn_https: 'https://js.pusher.com',
497
- dependency_suffix: ''
498
- };
499
- exports.__esModule = true;
500
- exports["default"] = Defaults;
501
-
502
-
503
- /***/ }),
504
- /* 6 */
505
- /***/ (function(module, exports, __webpack_require__) {
506
-
507
- "use strict";
508
- var script_receiver_factory_1 = __webpack_require__(4);
509
- var runtime_1 = __webpack_require__(2);
510
- var DependencyLoader = (function () {
511
- function DependencyLoader(options) {
512
- this.options = options;
513
- this.receivers = options.receivers || script_receiver_factory_1.ScriptReceivers;
514
- this.loading = {};
515
- }
516
- DependencyLoader.prototype.load = function (name, options, callback) {
517
- var self = this;
518
- if (self.loading[name] && self.loading[name].length > 0) {
519
- self.loading[name].push(callback);
520
- }
521
- else {
522
- self.loading[name] = [callback];
523
- var request = runtime_1["default"].createScriptRequest(self.getPath(name, options));
524
- var receiver = self.receivers.create(function (error) {
525
- self.receivers.remove(receiver);
526
- if (self.loading[name]) {
527
- var callbacks = self.loading[name];
528
- delete self.loading[name];
529
- var successCallback = function (wasSuccessful) {
530
- if (!wasSuccessful) {
531
- request.cleanup();
532
- }
533
- };
534
- for (var i = 0; i < callbacks.length; i++) {
535
- callbacks[i](error, successCallback);
536
- }
537
- }
538
- });
539
- request.send(receiver);
540
- }
541
- };
542
- DependencyLoader.prototype.getRoot = function (options) {
543
- var cdn;
544
- var protocol = runtime_1["default"].getDocument().location.protocol;
545
- if ((options && options.encrypted) || protocol === "https:") {
546
- cdn = this.options.cdn_https;
547
- }
548
- else {
549
- cdn = this.options.cdn_http;
550
- }
551
- return cdn.replace(/\/*$/, "") + "/" + this.options.version;
552
- };
553
- DependencyLoader.prototype.getPath = function (name, options) {
554
- return this.getRoot(options) + '/' + name + this.options.suffix + '.js';
555
- };
556
- ;
557
- return DependencyLoader;
558
- }());
559
- exports.__esModule = true;
560
- exports["default"] = DependencyLoader;
561
-
562
-
563
- /***/ }),
564
- /* 7 */
565
- /***/ (function(module, exports, __webpack_require__) {
566
-
567
- "use strict";
568
- var logger_1 = __webpack_require__(8);
569
- var runtime_1 = __webpack_require__(2);
570
- var url_store_1 = __webpack_require__(14);
571
- var ajax = function (context, socketId, callback) {
572
- var self = this, xhr;
573
- xhr = runtime_1["default"].createXHR();
574
- xhr.open("POST", self.options.authEndpoint, true);
575
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
576
- for (var headerName in this.authOptions.headers) {
577
- xhr.setRequestHeader(headerName, this.authOptions.headers[headerName]);
578
- }
579
- xhr.onreadystatechange = function () {
580
- if (xhr.readyState === 4) {
581
- if (xhr.status === 200) {
582
- var data, parsed = false;
583
- try {
584
- data = JSON.parse(xhr.responseText);
585
- parsed = true;
586
- }
587
- catch (e) {
588
- callback(true, 'JSON returned from webapp was invalid, yet status code was 200. Data was: ' + xhr.responseText);
589
- }
590
- if (parsed) {
591
- callback(false, data);
592
- }
593
- }
594
- else {
595
- var suffix = url_store_1["default"].buildLogSuffix("authenticationEndpoint");
596
- logger_1["default"].warn(("Couldn't retrieve authentication info. " + xhr.status) +
597
- ("Clients must be authenticated to join private or presence channels. " + suffix));
598
- callback(true, xhr.status);
599
- }
600
- }
601
- };
602
- xhr.send(this.composeQuery(socketId));
603
- return xhr;
604
- };
605
- exports.__esModule = true;
606
- exports["default"] = ajax;
607
-
608
-
609
- /***/ }),
610
- /* 8 */
611
- /***/ (function(module, exports, __webpack_require__) {
612
-
613
- "use strict";
614
- var collections_1 = __webpack_require__(9);
615
- var pusher_1 = __webpack_require__(1);
616
- var Logger = {
617
- debug: function () {
618
- var args = [];
619
- for (var _i = 0; _i < arguments.length; _i++) {
620
- args[_i - 0] = arguments[_i];
621
- }
622
- if (!pusher_1["default"].log) {
623
- return;
624
- }
625
- pusher_1["default"].log(collections_1.stringify.apply(this, arguments));
626
- },
627
- warn: function () {
628
- var args = [];
629
- for (var _i = 0; _i < arguments.length; _i++) {
630
- args[_i - 0] = arguments[_i];
631
- }
632
- var message = collections_1.stringify.apply(this, arguments);
633
- if (pusher_1["default"].log) {
634
- pusher_1["default"].log(message);
635
- }
636
- else if ((window).console) {
637
- if ((window).console.warn) {
638
- (window).console.warn(message);
639
- }
640
- else if ((window).console.log) {
641
- (window).console.log(message);
642
- }
643
- }
644
- }
645
- };
646
- exports.__esModule = true;
647
- exports["default"] = Logger;
648
-
649
-
650
- /***/ }),
651
- /* 9 */
652
- /***/ (function(module, exports, __webpack_require__) {
653
-
654
- "use strict";
655
- var base64_1 = __webpack_require__(10);
656
- var util_1 = __webpack_require__(11);
657
- function extend(target) {
658
- var sources = [];
659
- for (var _i = 1; _i < arguments.length; _i++) {
660
- sources[_i - 1] = arguments[_i];
661
- }
662
- for (var i = 0; i < sources.length; i++) {
663
- var extensions = sources[i];
664
- for (var property in extensions) {
665
- if (extensions[property] && extensions[property].constructor &&
666
- extensions[property].constructor === Object) {
667
- target[property] = extend(target[property] || {}, extensions[property]);
668
- }
669
- else {
670
- target[property] = extensions[property];
671
- }
672
- }
673
- }
674
- return target;
675
- }
676
- exports.extend = extend;
677
- function stringify() {
678
- var m = ["Pusher"];
679
- for (var i = 0; i < arguments.length; i++) {
680
- if (typeof arguments[i] === "string") {
681
- m.push(arguments[i]);
682
- }
683
- else {
684
- m.push(safeJSONStringify(arguments[i]));
685
- }
686
- }
687
- return m.join(" : ");
688
- }
689
- exports.stringify = stringify;
690
- function arrayIndexOf(array, item) {
691
- var nativeIndexOf = Array.prototype.indexOf;
692
- if (array === null) {
693
- return -1;
694
- }
695
- if (nativeIndexOf && array.indexOf === nativeIndexOf) {
696
- return array.indexOf(item);
697
- }
698
- for (var i = 0, l = array.length; i < l; i++) {
699
- if (array[i] === item) {
700
- return i;
701
- }
702
- }
703
- return -1;
704
- }
705
- exports.arrayIndexOf = arrayIndexOf;
706
- function objectApply(object, f) {
707
- for (var key in object) {
708
- if (Object.prototype.hasOwnProperty.call(object, key)) {
709
- f(object[key], key, object);
710
- }
711
- }
712
- }
713
- exports.objectApply = objectApply;
714
- function keys(object) {
715
- var keys = [];
716
- objectApply(object, function (_, key) {
717
- keys.push(key);
718
- });
719
- return keys;
720
- }
721
- exports.keys = keys;
722
- function values(object) {
723
- var values = [];
724
- objectApply(object, function (value) {
725
- values.push(value);
726
- });
727
- return values;
728
- }
729
- exports.values = values;
730
- function apply(array, f, context) {
731
- for (var i = 0; i < array.length; i++) {
732
- f.call(context || (window), array[i], i, array);
733
- }
734
- }
735
- exports.apply = apply;
736
- function map(array, f) {
737
- var result = [];
738
- for (var i = 0; i < array.length; i++) {
739
- result.push(f(array[i], i, array, result));
740
- }
741
- return result;
742
- }
743
- exports.map = map;
744
- function mapObject(object, f) {
745
- var result = {};
746
- objectApply(object, function (value, key) {
747
- result[key] = f(value);
748
- });
749
- return result;
750
- }
751
- exports.mapObject = mapObject;
752
- function filter(array, test) {
753
- test = test || function (value) { return !!value; };
754
- var result = [];
755
- for (var i = 0; i < array.length; i++) {
756
- if (test(array[i], i, array, result)) {
757
- result.push(array[i]);
758
- }
759
- }
760
- return result;
761
- }
762
- exports.filter = filter;
763
- function filterObject(object, test) {
764
- var result = {};
765
- objectApply(object, function (value, key) {
766
- if ((test && test(value, key, object, result)) || Boolean(value)) {
767
- result[key] = value;
768
- }
769
- });
770
- return result;
771
- }
772
- exports.filterObject = filterObject;
773
- function flatten(object) {
774
- var result = [];
775
- objectApply(object, function (value, key) {
776
- result.push([key, value]);
777
- });
778
- return result;
779
- }
780
- exports.flatten = flatten;
781
- function any(array, test) {
782
- for (var i = 0; i < array.length; i++) {
783
- if (test(array[i], i, array)) {
784
- return true;
785
- }
786
- }
787
- return false;
788
- }
789
- exports.any = any;
790
- function all(array, test) {
791
- for (var i = 0; i < array.length; i++) {
792
- if (!test(array[i], i, array)) {
793
- return false;
794
- }
795
- }
796
- return true;
797
- }
798
- exports.all = all;
799
- function encodeParamsObject(data) {
800
- return mapObject(data, function (value) {
801
- if (typeof value === "object") {
802
- value = safeJSONStringify(value);
803
- }
804
- return encodeURIComponent(base64_1["default"](value.toString()));
805
- });
806
- }
807
- exports.encodeParamsObject = encodeParamsObject;
808
- function buildQueryString(data) {
809
- var params = filterObject(data, function (value) {
810
- return value !== undefined;
811
- });
812
- var query = map(flatten(encodeParamsObject(params)), util_1["default"].method("join", "=")).join("&");
813
- return query;
814
- }
815
- exports.buildQueryString = buildQueryString;
816
- function decycleObject(object) {
817
- var objects = [], paths = [];
818
- return (function derez(value, path) {
819
- var i, name, nu;
820
- switch (typeof value) {
821
- case 'object':
822
- if (!value) {
823
- return null;
824
- }
825
- for (i = 0; i < objects.length; i += 1) {
826
- if (objects[i] === value) {
827
- return { $ref: paths[i] };
828
- }
829
- }
830
- objects.push(value);
831
- paths.push(path);
832
- if (Object.prototype.toString.apply(value) === '[object Array]') {
833
- nu = [];
834
- for (i = 0; i < value.length; i += 1) {
835
- nu[i] = derez(value[i], path + '[' + i + ']');
836
- }
837
- }
838
- else {
839
- nu = {};
840
- for (name in value) {
841
- if (Object.prototype.hasOwnProperty.call(value, name)) {
842
- nu[name] = derez(value[name], path + '[' + JSON.stringify(name) + ']');
843
- }
844
- }
845
- }
846
- return nu;
847
- case 'number':
848
- case 'string':
849
- case 'boolean':
850
- return value;
851
- }
852
- }(object, '$'));
853
- }
854
- exports.decycleObject = decycleObject;
855
- function safeJSONStringify(source) {
856
- try {
857
- return JSON.stringify(source);
858
- }
859
- catch (e) {
860
- return JSON.stringify(decycleObject(source));
861
- }
862
- }
863
- exports.safeJSONStringify = safeJSONStringify;
864
-
865
-
866
- /***/ }),
867
- /* 10 */
868
- /***/ (function(module, exports, __webpack_require__) {
869
-
870
- "use strict";
871
- function encode(s) {
872
- return btoa(utob(s));
873
- }
874
- exports.__esModule = true;
875
- exports["default"] = encode;
876
- var fromCharCode = String.fromCharCode;
877
- var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
878
- var b64tab = {};
879
- for (var i = 0, l = b64chars.length; i < l; i++) {
880
- b64tab[b64chars.charAt(i)] = i;
881
- }
882
- var cb_utob = function (c) {
883
- var cc = c.charCodeAt(0);
884
- return cc < 0x80 ? c
885
- : cc < 0x800 ? fromCharCode(0xc0 | (cc >>> 6)) +
886
- fromCharCode(0x80 | (cc & 0x3f))
887
- : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +
888
- fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +
889
- fromCharCode(0x80 | (cc & 0x3f));
890
- };
891
- var utob = function (u) {
892
- return u.replace(/[^\x00-\x7F]/g, cb_utob);
893
- };
894
- var cb_encode = function (ccc) {
895
- var padlen = [0, 2, 1][ccc.length % 3];
896
- var ord = ccc.charCodeAt(0) << 16
897
- | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
898
- | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0));
899
- var chars = [
900
- b64chars.charAt(ord >>> 18),
901
- b64chars.charAt((ord >>> 12) & 63),
902
- padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
903
- padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
904
- ];
905
- return chars.join('');
906
- };
907
- var btoa = (window).btoa || function (b) {
908
- return b.replace(/[\s\S]{1,3}/g, cb_encode);
909
- };
910
-
911
-
912
- /***/ }),
913
- /* 11 */
914
- /***/ (function(module, exports, __webpack_require__) {
915
-
916
- "use strict";
917
- var timers_1 = __webpack_require__(12);
918
- var Util = {
919
- now: function () {
920
- if (Date.now) {
921
- return Date.now();
922
- }
923
- else {
924
- return new Date().valueOf();
925
- }
926
- },
927
- defer: function (callback) {
928
- return new timers_1.OneOffTimer(0, callback);
929
- },
930
- method: function (name) {
931
- var args = [];
932
- for (var _i = 1; _i < arguments.length; _i++) {
933
- args[_i - 1] = arguments[_i];
934
- }
935
- var boundArguments = Array.prototype.slice.call(arguments, 1);
936
- return function (object) {
937
- return object[name].apply(object, boundArguments.concat(arguments));
938
- };
939
- }
940
- };
941
- exports.__esModule = true;
942
- exports["default"] = Util;
943
-
944
-
945
- /***/ }),
946
- /* 12 */
947
- /***/ (function(module, exports, __webpack_require__) {
948
-
949
- "use strict";
950
- var __extends = (this && this.__extends) || function (d, b) {
951
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
952
- function __() { this.constructor = d; }
953
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
954
- };
955
- var abstract_timer_1 = __webpack_require__(13);
956
- function clearTimeout(timer) {
957
- (window).clearTimeout(timer);
958
- }
959
- function clearInterval(timer) {
960
- (window).clearInterval(timer);
961
- }
962
- var OneOffTimer = (function (_super) {
963
- __extends(OneOffTimer, _super);
964
- function OneOffTimer(delay, callback) {
965
- _super.call(this, setTimeout, clearTimeout, delay, function (timer) {
966
- callback();
967
- return null;
968
- });
969
- }
970
- return OneOffTimer;
971
- }(abstract_timer_1["default"]));
972
- exports.OneOffTimer = OneOffTimer;
973
- var PeriodicTimer = (function (_super) {
974
- __extends(PeriodicTimer, _super);
975
- function PeriodicTimer(delay, callback) {
976
- _super.call(this, setInterval, clearInterval, delay, function (timer) {
977
- callback();
978
- return timer;
979
- });
980
- }
981
- return PeriodicTimer;
982
- }(abstract_timer_1["default"]));
983
- exports.PeriodicTimer = PeriodicTimer;
984
-
985
-
986
- /***/ }),
987
- /* 13 */
988
- /***/ (function(module, exports) {
989
-
990
- "use strict";
991
- var Timer = (function () {
992
- function Timer(set, clear, delay, callback) {
993
- var _this = this;
994
- this.clear = clear;
995
- this.timer = set(function () {
996
- if (_this.timer) {
997
- _this.timer = callback(_this.timer);
998
- }
999
- }, delay);
1000
- }
1001
- Timer.prototype.isRunning = function () {
1002
- return this.timer !== null;
1003
- };
1004
- Timer.prototype.ensureAborted = function () {
1005
- if (this.timer) {
1006
- this.clear(this.timer);
1007
- this.timer = null;
1008
- }
1009
- };
1010
- return Timer;
1011
- }());
1012
- exports.__esModule = true;
1013
- exports["default"] = Timer;
1014
-
1015
-
1016
- /***/ }),
1017
- /* 14 */
1018
- /***/ (function(module, exports) {
1019
-
1020
- "use strict";
1021
- var urlStore = {
1022
- baseUrl: "https://pusher.com",
1023
- urls: {
1024
- authenticationEndpoint: {
1025
- path: "/docs/authenticating_users"
1026
- },
1027
- javascriptQuickStart: {
1028
- path: "/docs/javascript_quick_start"
1029
- }
1030
- }
1031
- };
1032
- var buildLogSuffix = function (key) {
1033
- var urlPrefix = "See:";
1034
- var urlObj = urlStore.urls[key];
1035
- if (!urlObj)
1036
- return "";
1037
- var url;
1038
- if (urlObj.fullUrl) {
1039
- url = urlObj.fullUrl;
1040
- }
1041
- else if (urlObj.path) {
1042
- url = urlStore.baseUrl + urlObj.path;
1043
- }
1044
- if (!url)
1045
- return "";
1046
- return urlPrefix + " " + url;
1047
- };
1048
- exports.__esModule = true;
1049
- exports["default"] = { buildLogSuffix: buildLogSuffix };
1050
-
1051
-
1052
- /***/ }),
1053
- /* 15 */
1054
- /***/ (function(module, exports, __webpack_require__) {
1055
-
1056
- "use strict";
1057
- var logger_1 = __webpack_require__(8);
1058
- var jsonp = function (context, socketId, callback) {
1059
- if (this.authOptions.headers !== undefined) {
1060
- logger_1["default"].warn("Warn", "To send headers with the auth request, you must use AJAX, rather than JSONP.");
1061
- }
1062
- var callbackName = context.nextAuthCallbackID.toString();
1063
- context.nextAuthCallbackID++;
1064
- var document = context.getDocument();
1065
- var script = document.createElement("script");
1066
- context.auth_callbacks[callbackName] = function (data) {
1067
- callback(false, data);
1068
- };
1069
- var callback_name = "Pusher.auth_callbacks['" + callbackName + "']";
1070
- script.src = this.options.authEndpoint +
1071
- '?callback=' +
1072
- encodeURIComponent(callback_name) +
1073
- '&' +
1074
- this.composeQuery(socketId);
1075
- var head = document.getElementsByTagName("head")[0] || document.documentElement;
1076
- head.insertBefore(script, head.firstChild);
1077
- };
1078
- exports.__esModule = true;
1079
- exports["default"] = jsonp;
1080
-
1081
-
1082
- /***/ }),
1083
- /* 16 */
1084
- /***/ (function(module, exports) {
1085
-
1086
- "use strict";
1087
- var ScriptRequest = (function () {
1088
- function ScriptRequest(src) {
1089
- this.src = src;
1090
- }
1091
- ScriptRequest.prototype.send = function (receiver) {
1092
- var self = this;
1093
- var errorString = "Error loading " + self.src;
1094
- self.script = document.createElement("script");
1095
- self.script.id = receiver.id;
1096
- self.script.src = self.src;
1097
- self.script.type = "text/javascript";
1098
- self.script.charset = "UTF-8";
1099
- if (self.script.addEventListener) {
1100
- self.script.onerror = function () {
1101
- receiver.callback(errorString);
1102
- };
1103
- self.script.onload = function () {
1104
- receiver.callback(null);
1105
- };
1106
- }
1107
- else {
1108
- self.script.onreadystatechange = function () {
1109
- if (self.script.readyState === 'loaded' ||
1110
- self.script.readyState === 'complete') {
1111
- receiver.callback(null);
1112
- }
1113
- };
1114
- }
1115
- if (self.script.async === undefined && document.attachEvent &&
1116
- /opera/i.test(navigator.userAgent)) {
1117
- self.errorScript = document.createElement("script");
1118
- self.errorScript.id = receiver.id + "_error";
1119
- self.errorScript.text = receiver.name + "('" + errorString + "');";
1120
- self.script.async = self.errorScript.async = false;
1121
- }
1122
- else {
1123
- self.script.async = true;
1124
- }
1125
- var head = document.getElementsByTagName('head')[0];
1126
- head.insertBefore(self.script, head.firstChild);
1127
- if (self.errorScript) {
1128
- head.insertBefore(self.errorScript, self.script.nextSibling);
1129
- }
1130
- };
1131
- ScriptRequest.prototype.cleanup = function () {
1132
- if (this.script) {
1133
- this.script.onload = this.script.onerror = null;
1134
- this.script.onreadystatechange = null;
1135
- }
1136
- if (this.script && this.script.parentNode) {
1137
- this.script.parentNode.removeChild(this.script);
1138
- }
1139
- if (this.errorScript && this.errorScript.parentNode) {
1140
- this.errorScript.parentNode.removeChild(this.errorScript);
1141
- }
1142
- this.script = null;
1143
- this.errorScript = null;
1144
- };
1145
- return ScriptRequest;
1146
- }());
1147
- exports.__esModule = true;
1148
- exports["default"] = ScriptRequest;
1149
-
1150
-
1151
- /***/ }),
1152
- /* 17 */
1153
- /***/ (function(module, exports, __webpack_require__) {
1154
-
1155
- "use strict";
1156
- var Collections = __webpack_require__(9);
1157
- var runtime_1 = __webpack_require__(2);
1158
- var JSONPRequest = (function () {
1159
- function JSONPRequest(url, data) {
1160
- this.url = url;
1161
- this.data = data;
1162
- }
1163
- JSONPRequest.prototype.send = function (receiver) {
1164
- if (this.request) {
1165
- return;
1166
- }
1167
- var query = Collections.buildQueryString(this.data);
1168
- var url = this.url + "/" + receiver.number + "?" + query;
1169
- this.request = runtime_1["default"].createScriptRequest(url);
1170
- this.request.send(receiver);
1171
- };
1172
- JSONPRequest.prototype.cleanup = function () {
1173
- if (this.request) {
1174
- this.request.cleanup();
1175
- }
1176
- };
1177
- return JSONPRequest;
1178
- }());
1179
- exports.__esModule = true;
1180
- exports["default"] = JSONPRequest;
1181
-
1182
-
1183
- /***/ }),
1184
- /* 18 */
1185
- /***/ (function(module, exports, __webpack_require__) {
1186
-
1187
- "use strict";
1188
- var runtime_1 = __webpack_require__(2);
1189
- var script_receiver_factory_1 = __webpack_require__(4);
1190
- var getAgent = function (sender, encrypted) {
1191
- return function (data, callback) {
1192
- var scheme = "http" + (encrypted ? "s" : "") + "://";
1193
- var url = scheme + (sender.host || sender.options.host) + sender.options.path;
1194
- var request = runtime_1["default"].createJSONPRequest(url, data);
1195
- var receiver = runtime_1["default"].ScriptReceivers.create(function (error, result) {
1196
- script_receiver_factory_1.ScriptReceivers.remove(receiver);
1197
- request.cleanup();
1198
- if (result && result.host) {
1199
- sender.host = result.host;
1200
- }
1201
- if (callback) {
1202
- callback(error, result);
1203
- }
1204
- });
1205
- request.send(receiver);
1206
- };
1207
- };
1208
- var jsonp = {
1209
- name: 'jsonp',
1210
- getAgent: getAgent
1211
- };
1212
- exports.__esModule = true;
1213
- exports["default"] = jsonp;
1214
-
1215
-
1216
- /***/ }),
1217
- /* 19 */
1218
- /***/ (function(module, exports, __webpack_require__) {
1219
-
1220
- "use strict";
1221
- var transports_1 = __webpack_require__(20);
1222
- var transport_1 = __webpack_require__(22);
1223
- var URLSchemes = __webpack_require__(21);
1224
- var runtime_1 = __webpack_require__(2);
1225
- var dependencies_1 = __webpack_require__(3);
1226
- var Collections = __webpack_require__(9);
1227
- var SockJSTransport = new transport_1["default"]({
1228
- file: "sockjs",
1229
- urls: URLSchemes.sockjs,
1230
- handlesActivityChecks: true,
1231
- supportsPing: false,
1232
- isSupported: function () {
1233
- return true;
1234
- },
1235
- isInitialized: function () {
1236
- return window.SockJS !== undefined;
1237
- },
1238
- getSocket: function (url, options) {
1239
- return new window.SockJS(url, null, {
1240
- js_path: dependencies_1.Dependencies.getPath("sockjs", {
1241
- encrypted: options.encrypted
1242
- }),
1243
- ignore_null_origin: options.ignoreNullOrigin
1244
- });
1245
- },
1246
- beforeOpen: function (socket, path) {
1247
- socket.send(JSON.stringify({
1248
- path: path
1249
- }));
1250
- }
1251
- });
1252
- var xdrConfiguration = {
1253
- isSupported: function (environment) {
1254
- var yes = runtime_1["default"].isXDRSupported(environment.encrypted);
1255
- return yes;
1256
- }
1257
- };
1258
- var XDRStreamingTransport = new transport_1["default"](Collections.extend({}, transports_1.streamingConfiguration, xdrConfiguration));
1259
- var XDRPollingTransport = new transport_1["default"](Collections.extend({}, transports_1.pollingConfiguration, xdrConfiguration));
1260
- transports_1["default"].xdr_streaming = XDRStreamingTransport;
1261
- transports_1["default"].xdr_polling = XDRPollingTransport;
1262
- transports_1["default"].sockjs = SockJSTransport;
1263
- exports.__esModule = true;
1264
- exports["default"] = transports_1["default"];
1265
-
1266
-
1267
- /***/ }),
1268
- /* 20 */
1269
- /***/ (function(module, exports, __webpack_require__) {
1270
-
1271
- "use strict";
1272
- var URLSchemes = __webpack_require__(21);
1273
- var transport_1 = __webpack_require__(22);
1274
- var Collections = __webpack_require__(9);
1275
- var runtime_1 = __webpack_require__(2);
1276
- var WSTransport = new transport_1["default"]({
1277
- urls: URLSchemes.ws,
1278
- handlesActivityChecks: false,
1279
- supportsPing: false,
1280
- isInitialized: function () {
1281
- return Boolean(runtime_1["default"].getWebSocketAPI());
1282
- },
1283
- isSupported: function () {
1284
- return Boolean(runtime_1["default"].getWebSocketAPI());
1285
- },
1286
- getSocket: function (url) {
1287
- return runtime_1["default"].createWebSocket(url);
1288
- }
1289
- });
1290
- var httpConfiguration = {
1291
- urls: URLSchemes.http,
1292
- handlesActivityChecks: false,
1293
- supportsPing: true,
1294
- isInitialized: function () {
1295
- return true;
1296
- }
1297
- };
1298
- exports.streamingConfiguration = Collections.extend({ getSocket: function (url) {
1299
- return runtime_1["default"].HTTPFactory.createStreamingSocket(url);
1300
- }
1301
- }, httpConfiguration);
1302
- exports.pollingConfiguration = Collections.extend({ getSocket: function (url) {
1303
- return runtime_1["default"].HTTPFactory.createPollingSocket(url);
1304
- }
1305
- }, httpConfiguration);
1306
- var xhrConfiguration = {
1307
- isSupported: function () {
1308
- return runtime_1["default"].isXHRSupported();
1309
- }
1310
- };
1311
- var XHRStreamingTransport = new transport_1["default"](Collections.extend({}, exports.streamingConfiguration, xhrConfiguration));
1312
- var XHRPollingTransport = new transport_1["default"](Collections.extend({}, exports.pollingConfiguration, xhrConfiguration));
1313
- var Transports = {
1314
- ws: WSTransport,
1315
- xhr_streaming: XHRStreamingTransport,
1316
- xhr_polling: XHRPollingTransport
1317
- };
1318
- exports.__esModule = true;
1319
- exports["default"] = Transports;
1320
-
1321
-
1322
- /***/ }),
1323
- /* 21 */
1324
- /***/ (function(module, exports, __webpack_require__) {
1325
-
1326
- "use strict";
1327
- var defaults_1 = __webpack_require__(5);
1328
- function getGenericURL(baseScheme, params, path) {
1329
- var scheme = baseScheme + (params.encrypted ? "s" : "");
1330
- var host = params.encrypted ? params.hostEncrypted : params.hostUnencrypted;
1331
- return scheme + "://" + host + path;
1332
- }
1333
- function getGenericPath(key, queryString) {
1334
- var path = "/app/" + key;
1335
- var query = "?protocol=" + defaults_1["default"].PROTOCOL +
1336
- "&client=js" +
1337
- "&version=" + defaults_1["default"].VERSION +
1338
- (queryString ? ("&" + queryString) : "");
1339
- return path + query;
1340
- }
1341
- exports.ws = {
1342
- getInitial: function (key, params) {
1343
- var path = (params.httpPath || "") + getGenericPath(key, "flash=false");
1344
- return getGenericURL("ws", params, path);
1345
- }
1346
- };
1347
- exports.http = {
1348
- getInitial: function (key, params) {
1349
- var path = (params.httpPath || "/pusher") + getGenericPath(key);
1350
- return getGenericURL("http", params, path);
1351
- }
1352
- };
1353
- exports.sockjs = {
1354
- getInitial: function (key, params) {
1355
- return getGenericURL("http", params, params.httpPath || "/pusher");
1356
- },
1357
- getPath: function (key, params) {
1358
- return getGenericPath(key);
1359
- }
1360
- };
1361
-
1362
-
1363
- /***/ }),
1364
- /* 22 */
1365
- /***/ (function(module, exports, __webpack_require__) {
1366
-
1367
- "use strict";
1368
- var transport_connection_1 = __webpack_require__(23);
1369
- var Transport = (function () {
1370
- function Transport(hooks) {
1371
- this.hooks = hooks;
1372
- }
1373
- Transport.prototype.isSupported = function (environment) {
1374
- return this.hooks.isSupported(environment);
1375
- };
1376
- Transport.prototype.createConnection = function (name, priority, key, options) {
1377
- return new transport_connection_1["default"](this.hooks, name, priority, key, options);
1378
- };
1379
- return Transport;
1380
- }());
1381
- exports.__esModule = true;
1382
- exports["default"] = Transport;
1383
-
1384
-
1385
- /***/ }),
1386
- /* 23 */
1387
- /***/ (function(module, exports, __webpack_require__) {
1388
-
1389
- "use strict";
1390
- var __extends = (this && this.__extends) || function (d, b) {
1391
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
1392
- function __() { this.constructor = d; }
1393
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
1394
- };
1395
- var util_1 = __webpack_require__(11);
1396
- var Collections = __webpack_require__(9);
1397
- var dispatcher_1 = __webpack_require__(24);
1398
- var logger_1 = __webpack_require__(8);
1399
- var runtime_1 = __webpack_require__(2);
1400
- var TransportConnection = (function (_super) {
1401
- __extends(TransportConnection, _super);
1402
- function TransportConnection(hooks, name, priority, key, options) {
1403
- _super.call(this);
1404
- this.initialize = runtime_1["default"].transportConnectionInitializer;
1405
- this.hooks = hooks;
1406
- this.name = name;
1407
- this.priority = priority;
1408
- this.key = key;
1409
- this.options = options;
1410
- this.state = "new";
1411
- this.timeline = options.timeline;
1412
- this.activityTimeout = options.activityTimeout;
1413
- this.id = this.timeline.generateUniqueID();
1414
- }
1415
- TransportConnection.prototype.handlesActivityChecks = function () {
1416
- return Boolean(this.hooks.handlesActivityChecks);
1417
- };
1418
- TransportConnection.prototype.supportsPing = function () {
1419
- return Boolean(this.hooks.supportsPing);
1420
- };
1421
- TransportConnection.prototype.connect = function () {
1422
- var _this = this;
1423
- if (this.socket || this.state !== "initialized") {
1424
- return false;
1425
- }
1426
- var url = this.hooks.urls.getInitial(this.key, this.options);
1427
- try {
1428
- this.socket = this.hooks.getSocket(url, this.options);
1429
- }
1430
- catch (e) {
1431
- util_1["default"].defer(function () {
1432
- _this.onError(e);
1433
- _this.changeState("closed");
1434
- });
1435
- return false;
1436
- }
1437
- this.bindListeners();
1438
- logger_1["default"].debug("Connecting", { transport: this.name, url: url });
1439
- this.changeState("connecting");
1440
- return true;
1441
- };
1442
- TransportConnection.prototype.close = function () {
1443
- if (this.socket) {
1444
- this.socket.close();
1445
- return true;
1446
- }
1447
- else {
1448
- return false;
1449
- }
1450
- };
1451
- TransportConnection.prototype.send = function (data) {
1452
- var _this = this;
1453
- if (this.state === "open") {
1454
- util_1["default"].defer(function () {
1455
- if (_this.socket) {
1456
- _this.socket.send(data);
1457
- }
1458
- });
1459
- return true;
1460
- }
1461
- else {
1462
- return false;
1463
- }
1464
- };
1465
- TransportConnection.prototype.ping = function () {
1466
- if (this.state === "open" && this.supportsPing()) {
1467
- this.socket.ping();
1468
- }
1469
- };
1470
- TransportConnection.prototype.onOpen = function () {
1471
- if (this.hooks.beforeOpen) {
1472
- this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options));
1473
- }
1474
- this.changeState("open");
1475
- this.socket.onopen = undefined;
1476
- };
1477
- TransportConnection.prototype.onError = function (error) {
1478
- this.emit("error", { type: 'WebSocketError', error: error });
1479
- this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));
1480
- };
1481
- TransportConnection.prototype.onClose = function (closeEvent) {
1482
- if (closeEvent) {
1483
- this.changeState("closed", {
1484
- code: closeEvent.code,
1485
- reason: closeEvent.reason,
1486
- wasClean: closeEvent.wasClean
1487
- });
1488
- }
1489
- else {
1490
- this.changeState("closed");
1491
- }
1492
- this.unbindListeners();
1493
- this.socket = undefined;
1494
- };
1495
- TransportConnection.prototype.onMessage = function (message) {
1496
- this.emit("message", message);
1497
- };
1498
- TransportConnection.prototype.onActivity = function () {
1499
- this.emit("activity");
1500
- };
1501
- TransportConnection.prototype.bindListeners = function () {
1502
- var _this = this;
1503
- this.socket.onopen = function () {
1504
- _this.onOpen();
1505
- };
1506
- this.socket.onerror = function (error) {
1507
- _this.onError(error);
1508
- };
1509
- this.socket.onclose = function (closeEvent) {
1510
- _this.onClose(closeEvent);
1511
- };
1512
- this.socket.onmessage = function (message) {
1513
- _this.onMessage(message);
1514
- };
1515
- if (this.supportsPing()) {
1516
- this.socket.onactivity = function () { _this.onActivity(); };
1517
- }
1518
- };
1519
- TransportConnection.prototype.unbindListeners = function () {
1520
- if (this.socket) {
1521
- this.socket.onopen = undefined;
1522
- this.socket.onerror = undefined;
1523
- this.socket.onclose = undefined;
1524
- this.socket.onmessage = undefined;
1525
- if (this.supportsPing()) {
1526
- this.socket.onactivity = undefined;
1527
- }
1528
- }
1529
- };
1530
- TransportConnection.prototype.changeState = function (state, params) {
1531
- this.state = state;
1532
- this.timeline.info(this.buildTimelineMessage({
1533
- state: state,
1534
- params: params
1535
- }));
1536
- this.emit(state, params);
1537
- };
1538
- TransportConnection.prototype.buildTimelineMessage = function (message) {
1539
- return Collections.extend({ cid: this.id }, message);
1540
- };
1541
- return TransportConnection;
1542
- }(dispatcher_1["default"]));
1543
- exports.__esModule = true;
1544
- exports["default"] = TransportConnection;
1545
-
1546
-
1547
- /***/ }),
1548
- /* 24 */
1549
- /***/ (function(module, exports, __webpack_require__) {
1550
-
1551
- "use strict";
1552
- var Collections = __webpack_require__(9);
1553
- var callback_registry_1 = __webpack_require__(25);
1554
- var Dispatcher = (function () {
1555
- function Dispatcher(failThrough) {
1556
- this.callbacks = new callback_registry_1["default"]();
1557
- this.global_callbacks = [];
1558
- this.failThrough = failThrough;
1559
- }
1560
- Dispatcher.prototype.bind = function (eventName, callback, context) {
1561
- this.callbacks.add(eventName, callback, context);
1562
- return this;
1563
- };
1564
- Dispatcher.prototype.bind_global = function (callback) {
1565
- this.global_callbacks.push(callback);
1566
- return this;
1567
- };
1568
- Dispatcher.prototype.unbind = function (eventName, callback, context) {
1569
- this.callbacks.remove(eventName, callback, context);
1570
- return this;
1571
- };
1572
- Dispatcher.prototype.unbind_global = function (callback) {
1573
- if (!callback) {
1574
- this.global_callbacks = [];
1575
- return this;
1576
- }
1577
- this.global_callbacks = Collections.filter(this.global_callbacks || [], function (c) { return c !== callback; });
1578
- return this;
1579
- };
1580
- Dispatcher.prototype.unbind_all = function () {
1581
- this.unbind();
1582
- this.unbind_global();
1583
- return this;
1584
- };
1585
- Dispatcher.prototype.emit = function (eventName, data) {
1586
- var i;
1587
- for (i = 0; i < this.global_callbacks.length; i++) {
1588
- this.global_callbacks[i](eventName, data);
1589
- }
1590
- var callbacks = this.callbacks.get(eventName);
1591
- if (callbacks && callbacks.length > 0) {
1592
- for (i = 0; i < callbacks.length; i++) {
1593
- callbacks[i].fn.call(callbacks[i].context || (window), data);
1594
- }
1595
- }
1596
- else if (this.failThrough) {
1597
- this.failThrough(eventName, data);
1598
- }
1599
- return this;
1600
- };
1601
- return Dispatcher;
1602
- }());
1603
- exports.__esModule = true;
1604
- exports["default"] = Dispatcher;
1605
-
1606
-
1607
- /***/ }),
1608
- /* 25 */
1609
- /***/ (function(module, exports, __webpack_require__) {
1610
-
1611
- "use strict";
1612
- var Collections = __webpack_require__(9);
1613
- var CallbackRegistry = (function () {
1614
- function CallbackRegistry() {
1615
- this._callbacks = {};
1616
- }
1617
- CallbackRegistry.prototype.get = function (name) {
1618
- return this._callbacks[prefix(name)];
1619
- };
1620
- CallbackRegistry.prototype.add = function (name, callback, context) {
1621
- var prefixedEventName = prefix(name);
1622
- this._callbacks[prefixedEventName] = this._callbacks[prefixedEventName] || [];
1623
- this._callbacks[prefixedEventName].push({
1624
- fn: callback,
1625
- context: context
1626
- });
1627
- };
1628
- CallbackRegistry.prototype.remove = function (name, callback, context) {
1629
- if (!name && !callback && !context) {
1630
- this._callbacks = {};
1631
- return;
1632
- }
1633
- var names = name ? [prefix(name)] : Collections.keys(this._callbacks);
1634
- if (callback || context) {
1635
- this.removeCallback(names, callback, context);
1636
- }
1637
- else {
1638
- this.removeAllCallbacks(names);
1639
- }
1640
- };
1641
- CallbackRegistry.prototype.removeCallback = function (names, callback, context) {
1642
- Collections.apply(names, function (name) {
1643
- this._callbacks[name] = Collections.filter(this._callbacks[name] || [], function (binding) {
1644
- return (callback && callback !== binding.fn) ||
1645
- (context && context !== binding.context);
1646
- });
1647
- if (this._callbacks[name].length === 0) {
1648
- delete this._callbacks[name];
1649
- }
1650
- }, this);
1651
- };
1652
- CallbackRegistry.prototype.removeAllCallbacks = function (names) {
1653
- Collections.apply(names, function (name) {
1654
- delete this._callbacks[name];
1655
- }, this);
1656
- };
1657
- return CallbackRegistry;
1658
- }());
1659
- exports.__esModule = true;
1660
- exports["default"] = CallbackRegistry;
1661
- function prefix(name) {
1662
- return "_" + name;
1663
- }
1664
-
1665
-
1666
- /***/ }),
1667
- /* 26 */
1668
- /***/ (function(module, exports, __webpack_require__) {
1669
-
1670
- "use strict";
1671
- var __extends = (this && this.__extends) || function (d, b) {
1672
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
1673
- function __() { this.constructor = d; }
1674
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
1675
- };
1676
- var dispatcher_1 = __webpack_require__(24);
1677
- var NetInfo = (function (_super) {
1678
- __extends(NetInfo, _super);
1679
- function NetInfo() {
1680
- _super.call(this);
1681
- var self = this;
1682
- if (window.addEventListener !== undefined) {
1683
- window.addEventListener("online", function () {
1684
- self.emit('online');
1685
- }, false);
1686
- window.addEventListener("offline", function () {
1687
- self.emit('offline');
1688
- }, false);
1689
- }
1690
- }
1691
- NetInfo.prototype.isOnline = function () {
1692
- if (window.navigator.onLine === undefined) {
1693
- return true;
1694
- }
1695
- else {
1696
- return window.navigator.onLine;
1697
- }
1698
- };
1699
- return NetInfo;
1700
- }(dispatcher_1["default"]));
1701
- exports.NetInfo = NetInfo;
1702
- exports.Network = new NetInfo();
1703
-
1704
-
1705
- /***/ }),
1706
- /* 27 */
1707
- /***/ (function(module, exports) {
1708
-
1709
- "use strict";
1710
- var getDefaultStrategy = function (config) {
1711
- var wsStrategy;
1712
- if (config.encrypted) {
1713
- wsStrategy = [
1714
- ":best_connected_ever",
1715
- ":ws_loop",
1716
- [":delayed", 2000, [":http_fallback_loop"]]
1717
- ];
1718
- }
1719
- else {
1720
- wsStrategy = [
1721
- ":best_connected_ever",
1722
- ":ws_loop",
1723
- [":delayed", 2000, [":wss_loop"]],
1724
- [":delayed", 5000, [":http_fallback_loop"]]
1725
- ];
1726
- }
1727
- return [
1728
- [":def", "ws_options", {
1729
- hostUnencrypted: config.wsHost + ":" + config.wsPort,
1730
- hostEncrypted: config.wsHost + ":" + config.wssPort,
1731
- httpPath: config.wsPath
1732
- }],
1733
- [":def", "wss_options", [":extend", ":ws_options", {
1734
- encrypted: true
1735
- }]],
1736
- [":def", "sockjs_options", {
1737
- hostUnencrypted: config.httpHost + ":" + config.httpPort,
1738
- hostEncrypted: config.httpHost + ":" + config.httpsPort,
1739
- httpPath: config.httpPath
1740
- }],
1741
- [":def", "timeouts", {
1742
- loop: true,
1743
- timeout: 15000,
1744
- timeoutLimit: 60000
1745
- }],
1746
- [":def", "ws_manager", [":transport_manager", {
1747
- lives: 2,
1748
- minPingDelay: 10000,
1749
- maxPingDelay: config.activity_timeout
1750
- }]],
1751
- [":def", "streaming_manager", [":transport_manager", {
1752
- lives: 2,
1753
- minPingDelay: 10000,
1754
- maxPingDelay: config.activity_timeout
1755
- }]],
1756
- [":def_transport", "ws", "ws", 3, ":ws_options", ":ws_manager"],
1757
- [":def_transport", "wss", "ws", 3, ":wss_options", ":ws_manager"],
1758
- [":def_transport", "sockjs", "sockjs", 1, ":sockjs_options"],
1759
- [":def_transport", "xhr_streaming", "xhr_streaming", 1, ":sockjs_options", ":streaming_manager"],
1760
- [":def_transport", "xdr_streaming", "xdr_streaming", 1, ":sockjs_options", ":streaming_manager"],
1761
- [":def_transport", "xhr_polling", "xhr_polling", 1, ":sockjs_options"],
1762
- [":def_transport", "xdr_polling", "xdr_polling", 1, ":sockjs_options"],
1763
- [":def", "ws_loop", [":sequential", ":timeouts", ":ws"]],
1764
- [":def", "wss_loop", [":sequential", ":timeouts", ":wss"]],
1765
- [":def", "sockjs_loop", [":sequential", ":timeouts", ":sockjs"]],
1766
- [":def", "streaming_loop", [":sequential", ":timeouts",
1767
- [":if", [":is_supported", ":xhr_streaming"],
1768
- ":xhr_streaming",
1769
- ":xdr_streaming"
1770
- ]
1771
- ]],
1772
- [":def", "polling_loop", [":sequential", ":timeouts",
1773
- [":if", [":is_supported", ":xhr_polling"],
1774
- ":xhr_polling",
1775
- ":xdr_polling"
1776
- ]
1777
- ]],
1778
- [":def", "http_loop", [":if", [":is_supported", ":streaming_loop"], [
1779
- ":best_connected_ever",
1780
- ":streaming_loop",
1781
- [":delayed", 4000, [":polling_loop"]]
1782
- ], [
1783
- ":polling_loop"
1784
- ]]],
1785
- [":def", "http_fallback_loop",
1786
- [":if", [":is_supported", ":http_loop"], [
1787
- ":http_loop"
1788
- ], [
1789
- ":sockjs_loop"
1790
- ]]
1791
- ],
1792
- [":def", "strategy",
1793
- [":cached", 1800000,
1794
- [":first_connected",
1795
- [":if", [":is_supported", ":ws"],
1796
- wsStrategy,
1797
- ":http_fallback_loop"
1798
- ]
1799
- ]
1800
- ]
1801
- ]
1802
- ];
1803
- };
1804
- exports.__esModule = true;
1805
- exports["default"] = getDefaultStrategy;
1806
-
1807
-
1808
- /***/ }),
1809
- /* 28 */
1810
- /***/ (function(module, exports, __webpack_require__) {
1811
-
1812
- "use strict";
1813
- var dependencies_1 = __webpack_require__(3);
1814
- function default_1() {
1815
- var self = this;
1816
- self.timeline.info(self.buildTimelineMessage({
1817
- transport: self.name + (self.options.encrypted ? "s" : "")
1818
- }));
1819
- if (self.hooks.isInitialized()) {
1820
- self.changeState("initialized");
1821
- }
1822
- else if (self.hooks.file) {
1823
- self.changeState("initializing");
1824
- dependencies_1.Dependencies.load(self.hooks.file, { encrypted: self.options.encrypted }, function (error, callback) {
1825
- if (self.hooks.isInitialized()) {
1826
- self.changeState("initialized");
1827
- callback(true);
1828
- }
1829
- else {
1830
- if (error) {
1831
- self.onError(error);
1832
- }
1833
- self.onClose();
1834
- callback(false);
1835
- }
1836
- });
1837
- }
1838
- else {
1839
- self.onClose();
1840
- }
1841
- }
1842
- exports.__esModule = true;
1843
- exports["default"] = default_1;
1844
-
1845
-
1846
- /***/ }),
1847
- /* 29 */
1848
- /***/ (function(module, exports, __webpack_require__) {
1849
-
1850
- "use strict";
1851
- var http_xdomain_request_1 = __webpack_require__(30);
1852
- var http_1 = __webpack_require__(32);
1853
- http_1["default"].createXDR = function (method, url) {
1854
- return this.createRequest(http_xdomain_request_1["default"], method, url);
1855
- };
1856
- exports.__esModule = true;
1857
- exports["default"] = http_1["default"];
1858
-
1859
-
1860
- /***/ }),
1861
- /* 30 */
1862
- /***/ (function(module, exports, __webpack_require__) {
1863
-
1864
- "use strict";
1865
- var Errors = __webpack_require__(31);
1866
- var hooks = {
1867
- getRequest: function (socket) {
1868
- var xdr = new window.XDomainRequest();
1869
- xdr.ontimeout = function () {
1870
- socket.emit("error", new Errors.RequestTimedOut());
1871
- socket.close();
1872
- };
1873
- xdr.onerror = function (e) {
1874
- socket.emit("error", e);
1875
- socket.close();
1876
- };
1877
- xdr.onprogress = function () {
1878
- if (xdr.responseText && xdr.responseText.length > 0) {
1879
- socket.onChunk(200, xdr.responseText);
1880
- }
1881
- };
1882
- xdr.onload = function () {
1883
- if (xdr.responseText && xdr.responseText.length > 0) {
1884
- socket.onChunk(200, xdr.responseText);
1885
- }
1886
- socket.emit("finished", 200);
1887
- socket.close();
1888
- };
1889
- return xdr;
1890
- },
1891
- abortRequest: function (xdr) {
1892
- xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;
1893
- xdr.abort();
1894
- }
1895
- };
1896
- exports.__esModule = true;
1897
- exports["default"] = hooks;
1898
-
1899
-
1900
- /***/ }),
1901
- /* 31 */
1902
- /***/ (function(module, exports) {
1903
-
1904
- "use strict";
1905
- var __extends = (this && this.__extends) || function (d, b) {
1906
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
1907
- function __() { this.constructor = d; }
1908
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
1909
- };
1910
- var BadEventName = (function (_super) {
1911
- __extends(BadEventName, _super);
1912
- function BadEventName() {
1913
- _super.apply(this, arguments);
1914
- }
1915
- return BadEventName;
1916
- }(Error));
1917
- exports.BadEventName = BadEventName;
1918
- var RequestTimedOut = (function (_super) {
1919
- __extends(RequestTimedOut, _super);
1920
- function RequestTimedOut() {
1921
- _super.apply(this, arguments);
1922
- }
1923
- return RequestTimedOut;
1924
- }(Error));
1925
- exports.RequestTimedOut = RequestTimedOut;
1926
- var TransportPriorityTooLow = (function (_super) {
1927
- __extends(TransportPriorityTooLow, _super);
1928
- function TransportPriorityTooLow() {
1929
- _super.apply(this, arguments);
1930
- }
1931
- return TransportPriorityTooLow;
1932
- }(Error));
1933
- exports.TransportPriorityTooLow = TransportPriorityTooLow;
1934
- var TransportClosed = (function (_super) {
1935
- __extends(TransportClosed, _super);
1936
- function TransportClosed() {
1937
- _super.apply(this, arguments);
1938
- }
1939
- return TransportClosed;
1940
- }(Error));
1941
- exports.TransportClosed = TransportClosed;
1942
- var UnsupportedTransport = (function (_super) {
1943
- __extends(UnsupportedTransport, _super);
1944
- function UnsupportedTransport() {
1945
- _super.apply(this, arguments);
1946
- }
1947
- return UnsupportedTransport;
1948
- }(Error));
1949
- exports.UnsupportedTransport = UnsupportedTransport;
1950
- var UnsupportedStrategy = (function (_super) {
1951
- __extends(UnsupportedStrategy, _super);
1952
- function UnsupportedStrategy() {
1953
- _super.apply(this, arguments);
1954
- }
1955
- return UnsupportedStrategy;
1956
- }(Error));
1957
- exports.UnsupportedStrategy = UnsupportedStrategy;
1958
-
1959
-
1960
- /***/ }),
1961
- /* 32 */
1962
- /***/ (function(module, exports, __webpack_require__) {
1963
-
1964
- "use strict";
1965
- var http_request_1 = __webpack_require__(33);
1966
- var http_socket_1 = __webpack_require__(34);
1967
- var http_streaming_socket_1 = __webpack_require__(36);
1968
- var http_polling_socket_1 = __webpack_require__(37);
1969
- var http_xhr_request_1 = __webpack_require__(38);
1970
- var HTTP = {
1971
- createStreamingSocket: function (url) {
1972
- return this.createSocket(http_streaming_socket_1["default"], url);
1973
- },
1974
- createPollingSocket: function (url) {
1975
- return this.createSocket(http_polling_socket_1["default"], url);
1976
- },
1977
- createSocket: function (hooks, url) {
1978
- return new http_socket_1["default"](hooks, url);
1979
- },
1980
- createXHR: function (method, url) {
1981
- return this.createRequest(http_xhr_request_1["default"], method, url);
1982
- },
1983
- createRequest: function (hooks, method, url) {
1984
- return new http_request_1["default"](hooks, method, url);
1985
- }
1986
- };
1987
- exports.__esModule = true;
1988
- exports["default"] = HTTP;
1989
-
1990
-
1991
- /***/ }),
1992
- /* 33 */
1993
- /***/ (function(module, exports, __webpack_require__) {
1994
-
1995
- "use strict";
1996
- var __extends = (this && this.__extends) || function (d, b) {
1997
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
1998
- function __() { this.constructor = d; }
1999
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
2000
- };
2001
- var runtime_1 = __webpack_require__(2);
2002
- var dispatcher_1 = __webpack_require__(24);
2003
- var MAX_BUFFER_LENGTH = 256 * 1024;
2004
- var HTTPRequest = (function (_super) {
2005
- __extends(HTTPRequest, _super);
2006
- function HTTPRequest(hooks, method, url) {
2007
- _super.call(this);
2008
- this.hooks = hooks;
2009
- this.method = method;
2010
- this.url = url;
2011
- }
2012
- HTTPRequest.prototype.start = function (payload) {
2013
- var _this = this;
2014
- this.position = 0;
2015
- this.xhr = this.hooks.getRequest(this);
2016
- this.unloader = function () {
2017
- _this.close();
2018
- };
2019
- runtime_1["default"].addUnloadListener(this.unloader);
2020
- this.xhr.open(this.method, this.url, true);
2021
- if (this.xhr.setRequestHeader) {
2022
- this.xhr.setRequestHeader("Content-Type", "application/json");
2023
- }
2024
- this.xhr.send(payload);
2025
- };
2026
- HTTPRequest.prototype.close = function () {
2027
- if (this.unloader) {
2028
- runtime_1["default"].removeUnloadListener(this.unloader);
2029
- this.unloader = null;
2030
- }
2031
- if (this.xhr) {
2032
- this.hooks.abortRequest(this.xhr);
2033
- this.xhr = null;
2034
- }
2035
- };
2036
- HTTPRequest.prototype.onChunk = function (status, data) {
2037
- while (true) {
2038
- var chunk = this.advanceBuffer(data);
2039
- if (chunk) {
2040
- this.emit("chunk", { status: status, data: chunk });
2041
- }
2042
- else {
2043
- break;
2044
- }
2045
- }
2046
- if (this.isBufferTooLong(data)) {
2047
- this.emit("buffer_too_long");
2048
- }
2049
- };
2050
- HTTPRequest.prototype.advanceBuffer = function (buffer) {
2051
- var unreadData = buffer.slice(this.position);
2052
- var endOfLinePosition = unreadData.indexOf("\n");
2053
- if (endOfLinePosition !== -1) {
2054
- this.position += endOfLinePosition + 1;
2055
- return unreadData.slice(0, endOfLinePosition);
2056
- }
2057
- else {
2058
- return null;
2059
- }
2060
- };
2061
- HTTPRequest.prototype.isBufferTooLong = function (buffer) {
2062
- return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;
2063
- };
2064
- return HTTPRequest;
2065
- }(dispatcher_1["default"]));
2066
- exports.__esModule = true;
2067
- exports["default"] = HTTPRequest;
2068
-
2069
-
2070
- /***/ }),
2071
- /* 34 */
2072
- /***/ (function(module, exports, __webpack_require__) {
2073
-
2074
- "use strict";
2075
- var state_1 = __webpack_require__(35);
2076
- var util_1 = __webpack_require__(11);
2077
- var runtime_1 = __webpack_require__(2);
2078
- var autoIncrement = 1;
2079
- var HTTPSocket = (function () {
2080
- function HTTPSocket(hooks, url) {
2081
- this.hooks = hooks;
2082
- this.session = randomNumber(1000) + "/" + randomString(8);
2083
- this.location = getLocation(url);
2084
- this.readyState = state_1["default"].CONNECTING;
2085
- this.openStream();
2086
- }
2087
- HTTPSocket.prototype.send = function (payload) {
2088
- return this.sendRaw(JSON.stringify([payload]));
2089
- };
2090
- HTTPSocket.prototype.ping = function () {
2091
- this.hooks.sendHeartbeat(this);
2092
- };
2093
- HTTPSocket.prototype.close = function (code, reason) {
2094
- this.onClose(code, reason, true);
2095
- };
2096
- HTTPSocket.prototype.sendRaw = function (payload) {
2097
- if (this.readyState === state_1["default"].OPEN) {
2098
- try {
2099
- runtime_1["default"].createSocketRequest("POST", getUniqueURL(getSendURL(this.location, this.session))).start(payload);
2100
- return true;
2101
- }
2102
- catch (e) {
2103
- return false;
2104
- }
2105
- }
2106
- else {
2107
- return false;
2108
- }
2109
- };
2110
- HTTPSocket.prototype.reconnect = function () {
2111
- this.closeStream();
2112
- this.openStream();
2113
- };
2114
- ;
2115
- HTTPSocket.prototype.onClose = function (code, reason, wasClean) {
2116
- this.closeStream();
2117
- this.readyState = state_1["default"].CLOSED;
2118
- if (this.onclose) {
2119
- this.onclose({
2120
- code: code,
2121
- reason: reason,
2122
- wasClean: wasClean
2123
- });
2124
- }
2125
- };
2126
- HTTPSocket.prototype.onChunk = function (chunk) {
2127
- if (chunk.status !== 200) {
2128
- return;
2129
- }
2130
- if (this.readyState === state_1["default"].OPEN) {
2131
- this.onActivity();
2132
- }
2133
- var payload;
2134
- var type = chunk.data.slice(0, 1);
2135
- switch (type) {
2136
- case 'o':
2137
- payload = JSON.parse(chunk.data.slice(1) || '{}');
2138
- this.onOpen(payload);
2139
- break;
2140
- case 'a':
2141
- payload = JSON.parse(chunk.data.slice(1) || '[]');
2142
- for (var i = 0; i < payload.length; i++) {
2143
- this.onEvent(payload[i]);
2144
- }
2145
- break;
2146
- case 'm':
2147
- payload = JSON.parse(chunk.data.slice(1) || 'null');
2148
- this.onEvent(payload);
2149
- break;
2150
- case 'h':
2151
- this.hooks.onHeartbeat(this);
2152
- break;
2153
- case 'c':
2154
- payload = JSON.parse(chunk.data.slice(1) || '[]');
2155
- this.onClose(payload[0], payload[1], true);
2156
- break;
2157
- }
2158
- };
2159
- HTTPSocket.prototype.onOpen = function (options) {
2160
- if (this.readyState === state_1["default"].CONNECTING) {
2161
- if (options && options.hostname) {
2162
- this.location.base = replaceHost(this.location.base, options.hostname);
2163
- }
2164
- this.readyState = state_1["default"].OPEN;
2165
- if (this.onopen) {
2166
- this.onopen();
2167
- }
2168
- }
2169
- else {
2170
- this.onClose(1006, "Server lost session", true);
2171
- }
2172
- };
2173
- HTTPSocket.prototype.onEvent = function (event) {
2174
- if (this.readyState === state_1["default"].OPEN && this.onmessage) {
2175
- this.onmessage({ data: event });
2176
- }
2177
- };
2178
- HTTPSocket.prototype.onActivity = function () {
2179
- if (this.onactivity) {
2180
- this.onactivity();
2181
- }
2182
- };
2183
- HTTPSocket.prototype.onError = function (error) {
2184
- if (this.onerror) {
2185
- this.onerror(error);
2186
- }
2187
- };
2188
- HTTPSocket.prototype.openStream = function () {
2189
- var _this = this;
2190
- this.stream = runtime_1["default"].createSocketRequest("POST", getUniqueURL(this.hooks.getReceiveURL(this.location, this.session)));
2191
- this.stream.bind("chunk", function (chunk) {
2192
- _this.onChunk(chunk);
2193
- });
2194
- this.stream.bind("finished", function (status) {
2195
- _this.hooks.onFinished(_this, status);
2196
- });
2197
- this.stream.bind("buffer_too_long", function () {
2198
- _this.reconnect();
2199
- });
2200
- try {
2201
- this.stream.start();
2202
- }
2203
- catch (error) {
2204
- util_1["default"].defer(function () {
2205
- _this.onError(error);
2206
- _this.onClose(1006, "Could not start streaming", false);
2207
- });
2208
- }
2209
- };
2210
- HTTPSocket.prototype.closeStream = function () {
2211
- if (this.stream) {
2212
- this.stream.unbind_all();
2213
- this.stream.close();
2214
- this.stream = null;
2215
- }
2216
- };
2217
- return HTTPSocket;
2218
- }());
2219
- function getLocation(url) {
2220
- var parts = /([^\?]*)\/*(\??.*)/.exec(url);
2221
- return {
2222
- base: parts[1],
2223
- queryString: parts[2]
2224
- };
2225
- }
2226
- function getSendURL(url, session) {
2227
- return url.base + "/" + session + "/xhr_send";
2228
- }
2229
- function getUniqueURL(url) {
2230
- var separator = (url.indexOf('?') === -1) ? "?" : "&";
2231
- return url + separator + "t=" + (+new Date()) + "&n=" + autoIncrement++;
2232
- }
2233
- function replaceHost(url, hostname) {
2234
- var urlParts = /(https?:\/\/)([^\/:]+)((\/|:)?.*)/.exec(url);
2235
- return urlParts[1] + hostname + urlParts[3];
2236
- }
2237
- function randomNumber(max) {
2238
- return Math.floor(Math.random() * max);
2239
- }
2240
- function randomString(length) {
2241
- var result = [];
2242
- for (var i = 0; i < length; i++) {
2243
- result.push(randomNumber(32).toString(32));
2244
- }
2245
- return result.join('');
2246
- }
2247
- exports.__esModule = true;
2248
- exports["default"] = HTTPSocket;
2249
-
2250
-
2251
- /***/ }),
2252
- /* 35 */
2253
- /***/ (function(module, exports) {
2254
-
2255
- "use strict";
2256
- var State;
2257
- (function (State) {
2258
- State[State["CONNECTING"] = 0] = "CONNECTING";
2259
- State[State["OPEN"] = 1] = "OPEN";
2260
- State[State["CLOSED"] = 3] = "CLOSED";
2261
- })(State || (State = {}));
2262
- exports.__esModule = true;
2263
- exports["default"] = State;
2264
-
2265
-
2266
- /***/ }),
2267
- /* 36 */
2268
- /***/ (function(module, exports) {
2269
-
2270
- "use strict";
2271
- var hooks = {
2272
- getReceiveURL: function (url, session) {
2273
- return url.base + "/" + session + "/xhr_streaming" + url.queryString;
2274
- },
2275
- onHeartbeat: function (socket) {
2276
- socket.sendRaw("[]");
2277
- },
2278
- sendHeartbeat: function (socket) {
2279
- socket.sendRaw("[]");
2280
- },
2281
- onFinished: function (socket, status) {
2282
- socket.onClose(1006, "Connection interrupted (" + status + ")", false);
2283
- }
2284
- };
2285
- exports.__esModule = true;
2286
- exports["default"] = hooks;
2287
-
2288
-
2289
- /***/ }),
2290
- /* 37 */
2291
- /***/ (function(module, exports) {
2292
-
2293
- "use strict";
2294
- var hooks = {
2295
- getReceiveURL: function (url, session) {
2296
- return url.base + "/" + session + "/xhr" + url.queryString;
2297
- },
2298
- onHeartbeat: function () {
2299
- },
2300
- sendHeartbeat: function (socket) {
2301
- socket.sendRaw("[]");
2302
- },
2303
- onFinished: function (socket, status) {
2304
- if (status === 200) {
2305
- socket.reconnect();
2306
- }
2307
- else {
2308
- socket.onClose(1006, "Connection interrupted (" + status + ")", false);
2309
- }
2310
- }
2311
- };
2312
- exports.__esModule = true;
2313
- exports["default"] = hooks;
2314
-
2315
-
2316
- /***/ }),
2317
- /* 38 */
2318
- /***/ (function(module, exports, __webpack_require__) {
2319
-
2320
- "use strict";
2321
- var runtime_1 = __webpack_require__(2);
2322
- var hooks = {
2323
- getRequest: function (socket) {
2324
- var Constructor = runtime_1["default"].getXHRAPI();
2325
- var xhr = new Constructor();
2326
- xhr.onreadystatechange = xhr.onprogress = function () {
2327
- switch (xhr.readyState) {
2328
- case 3:
2329
- if (xhr.responseText && xhr.responseText.length > 0) {
2330
- socket.onChunk(xhr.status, xhr.responseText);
2331
- }
2332
- break;
2333
- case 4:
2334
- if (xhr.responseText && xhr.responseText.length > 0) {
2335
- socket.onChunk(xhr.status, xhr.responseText);
2336
- }
2337
- socket.emit("finished", xhr.status);
2338
- socket.close();
2339
- break;
2340
- }
2341
- };
2342
- return xhr;
2343
- },
2344
- abortRequest: function (xhr) {
2345
- xhr.onreadystatechange = null;
2346
- xhr.abort();
2347
- }
2348
- };
2349
- exports.__esModule = true;
2350
- exports["default"] = hooks;
2351
-
2352
-
2353
- /***/ }),
2354
- /* 39 */
2355
- /***/ (function(module, exports, __webpack_require__) {
2356
-
2357
- "use strict";
2358
- var Collections = __webpack_require__(9);
2359
- var util_1 = __webpack_require__(11);
2360
- var level_1 = __webpack_require__(40);
2361
- var Timeline = (function () {
2362
- function Timeline(key, session, options) {
2363
- this.key = key;
2364
- this.session = session;
2365
- this.events = [];
2366
- this.options = options || {};
2367
- this.sent = 0;
2368
- this.uniqueID = 0;
2369
- }
2370
- Timeline.prototype.log = function (level, event) {
2371
- if (level <= this.options.level) {
2372
- this.events.push(Collections.extend({}, event, { timestamp: util_1["default"].now() }));
2373
- if (this.options.limit && this.events.length > this.options.limit) {
2374
- this.events.shift();
2375
- }
2376
- }
2377
- };
2378
- Timeline.prototype.error = function (event) {
2379
- this.log(level_1["default"].ERROR, event);
2380
- };
2381
- Timeline.prototype.info = function (event) {
2382
- this.log(level_1["default"].INFO, event);
2383
- };
2384
- Timeline.prototype.debug = function (event) {
2385
- this.log(level_1["default"].DEBUG, event);
2386
- };
2387
- Timeline.prototype.isEmpty = function () {
2388
- return this.events.length === 0;
2389
- };
2390
- Timeline.prototype.send = function (sendfn, callback) {
2391
- var _this = this;
2392
- var data = Collections.extend({
2393
- session: this.session,
2394
- bundle: this.sent + 1,
2395
- key: this.key,
2396
- lib: "js",
2397
- version: this.options.version,
2398
- cluster: this.options.cluster,
2399
- features: this.options.features,
2400
- timeline: this.events
2401
- }, this.options.params);
2402
- this.events = [];
2403
- sendfn(data, function (error, result) {
2404
- if (!error) {
2405
- _this.sent++;
2406
- }
2407
- if (callback) {
2408
- callback(error, result);
2409
- }
2410
- });
2411
- return true;
2412
- };
2413
- Timeline.prototype.generateUniqueID = function () {
2414
- this.uniqueID++;
2415
- return this.uniqueID;
2416
- };
2417
- return Timeline;
2418
- }());
2419
- exports.__esModule = true;
2420
- exports["default"] = Timeline;
2421
-
2422
-
2423
- /***/ }),
2424
- /* 40 */
2425
- /***/ (function(module, exports) {
2426
-
2427
- "use strict";
2428
- var TimelineLevel;
2429
- (function (TimelineLevel) {
2430
- TimelineLevel[TimelineLevel["ERROR"] = 3] = "ERROR";
2431
- TimelineLevel[TimelineLevel["INFO"] = 6] = "INFO";
2432
- TimelineLevel[TimelineLevel["DEBUG"] = 7] = "DEBUG";
2433
- })(TimelineLevel || (TimelineLevel = {}));
2434
- exports.__esModule = true;
2435
- exports["default"] = TimelineLevel;
2436
-
2437
-
2438
- /***/ }),
2439
- /* 41 */
2440
- /***/ (function(module, exports, __webpack_require__) {
2441
-
2442
- "use strict";
2443
- var Collections = __webpack_require__(9);
2444
- var util_1 = __webpack_require__(11);
2445
- var transport_manager_1 = __webpack_require__(42);
2446
- var Errors = __webpack_require__(31);
2447
- var transport_strategy_1 = __webpack_require__(56);
2448
- var sequential_strategy_1 = __webpack_require__(57);
2449
- var best_connected_ever_strategy_1 = __webpack_require__(58);
2450
- var cached_strategy_1 = __webpack_require__(59);
2451
- var delayed_strategy_1 = __webpack_require__(60);
2452
- var if_strategy_1 = __webpack_require__(61);
2453
- var first_connected_strategy_1 = __webpack_require__(62);
2454
- var runtime_1 = __webpack_require__(2);
2455
- var Transports = runtime_1["default"].Transports;
2456
- exports.build = function (scheme, options) {
2457
- var context = Collections.extend({}, globalContext, options);
2458
- return evaluate(scheme, context)[1].strategy;
2459
- };
2460
- var UnsupportedStrategy = {
2461
- isSupported: function () {
2462
- return false;
2463
- },
2464
- connect: function (_, callback) {
2465
- var deferred = util_1["default"].defer(function () {
2466
- callback(new Errors.UnsupportedStrategy());
2467
- });
2468
- return {
2469
- abort: function () {
2470
- deferred.ensureAborted();
2471
- },
2472
- forceMinPriority: function () { }
2473
- };
2474
- }
2475
- };
2476
- function returnWithOriginalContext(f) {
2477
- return function (context) {
2478
- return [f.apply(this, arguments), context];
2479
- };
2480
- }
2481
- var globalContext = {
2482
- extend: function (context, first, second) {
2483
- return [Collections.extend({}, first, second), context];
2484
- },
2485
- def: function (context, name, value) {
2486
- if (context[name] !== undefined) {
2487
- throw "Redefining symbol " + name;
2488
- }
2489
- context[name] = value;
2490
- return [undefined, context];
2491
- },
2492
- def_transport: function (context, name, type, priority, options, manager) {
2493
- var transportClass = Transports[type];
2494
- if (!transportClass) {
2495
- throw new Errors.UnsupportedTransport(type);
2496
- }
2497
- var enabled = (!context.enabledTransports ||
2498
- Collections.arrayIndexOf(context.enabledTransports, name) !== -1) &&
2499
- (!context.disabledTransports ||
2500
- Collections.arrayIndexOf(context.disabledTransports, name) === -1);
2501
- var transport;
2502
- if (enabled) {
2503
- transport = new transport_strategy_1["default"](name, priority, manager ? manager.getAssistant(transportClass) : transportClass, Collections.extend({
2504
- key: context.key,
2505
- encrypted: context.encrypted,
2506
- timeline: context.timeline,
2507
- ignoreNullOrigin: context.ignoreNullOrigin
2508
- }, options));
2509
- }
2510
- else {
2511
- transport = UnsupportedStrategy;
2512
- }
2513
- var newContext = context.def(context, name, transport)[1];
2514
- newContext.Transports = context.Transports || {};
2515
- newContext.Transports[name] = transport;
2516
- return [undefined, newContext];
2517
- },
2518
- transport_manager: returnWithOriginalContext(function (_, options) {
2519
- return new transport_manager_1["default"](options);
2520
- }),
2521
- sequential: returnWithOriginalContext(function (_, options) {
2522
- var strategies = Array.prototype.slice.call(arguments, 2);
2523
- return new sequential_strategy_1["default"](strategies, options);
2524
- }),
2525
- cached: returnWithOriginalContext(function (context, ttl, strategy) {
2526
- return new cached_strategy_1["default"](strategy, context.Transports, {
2527
- ttl: ttl,
2528
- timeline: context.timeline,
2529
- encrypted: context.encrypted
2530
- });
2531
- }),
2532
- first_connected: returnWithOriginalContext(function (_, strategy) {
2533
- return new first_connected_strategy_1["default"](strategy);
2534
- }),
2535
- best_connected_ever: returnWithOriginalContext(function () {
2536
- var strategies = Array.prototype.slice.call(arguments, 1);
2537
- return new best_connected_ever_strategy_1["default"](strategies);
2538
- }),
2539
- delayed: returnWithOriginalContext(function (_, delay, strategy) {
2540
- return new delayed_strategy_1["default"](strategy, { delay: delay });
2541
- }),
2542
- "if": returnWithOriginalContext(function (_, test, trueBranch, falseBranch) {
2543
- return new if_strategy_1["default"](test, trueBranch, falseBranch);
2544
- }),
2545
- is_supported: returnWithOriginalContext(function (_, strategy) {
2546
- return function () {
2547
- return strategy.isSupported();
2548
- };
2549
- })
2550
- };
2551
- function isSymbol(expression) {
2552
- return (typeof expression === "string") && expression.charAt(0) === ":";
2553
- }
2554
- function getSymbolValue(expression, context) {
2555
- return context[expression.slice(1)];
2556
- }
2557
- function evaluateListOfExpressions(expressions, context) {
2558
- if (expressions.length === 0) {
2559
- return [[], context];
2560
- }
2561
- var head = evaluate(expressions[0], context);
2562
- var tail = evaluateListOfExpressions(expressions.slice(1), head[1]);
2563
- return [[head[0]].concat(tail[0]), tail[1]];
2564
- }
2565
- function evaluateString(expression, context) {
2566
- if (!isSymbol(expression)) {
2567
- return [expression, context];
2568
- }
2569
- var value = getSymbolValue(expression, context);
2570
- if (value === undefined) {
2571
- throw "Undefined symbol " + expression;
2572
- }
2573
- return [value, context];
2574
- }
2575
- function evaluateArray(expression, context) {
2576
- if (isSymbol(expression[0])) {
2577
- var f = getSymbolValue(expression[0], context);
2578
- if (expression.length > 1) {
2579
- if (typeof f !== "function") {
2580
- throw "Calling non-function " + expression[0];
2581
- }
2582
- var args = [Collections.extend({}, context)].concat(Collections.map(expression.slice(1), function (arg) {
2583
- return evaluate(arg, Collections.extend({}, context))[0];
2584
- }));
2585
- return f.apply(this, args);
2586
- }
2587
- else {
2588
- return [f, context];
2589
- }
2590
- }
2591
- else {
2592
- return evaluateListOfExpressions(expression, context);
2593
- }
2594
- }
2595
- function evaluate(expression, context) {
2596
- if (typeof expression === "string") {
2597
- return evaluateString(expression, context);
2598
- }
2599
- else if (typeof expression === "object") {
2600
- if (expression instanceof Array && expression.length > 0) {
2601
- return evaluateArray(expression, context);
2602
- }
2603
- }
2604
- return [expression, context];
2605
- }
2606
-
2607
-
2608
- /***/ }),
2609
- /* 42 */
2610
- /***/ (function(module, exports, __webpack_require__) {
2611
-
2612
- "use strict";
2613
- var factory_1 = __webpack_require__(43);
2614
- var TransportManager = (function () {
2615
- function TransportManager(options) {
2616
- this.options = options || {};
2617
- this.livesLeft = this.options.lives || Infinity;
2618
- }
2619
- TransportManager.prototype.getAssistant = function (transport) {
2620
- return factory_1["default"].createAssistantToTheTransportManager(this, transport, {
2621
- minPingDelay: this.options.minPingDelay,
2622
- maxPingDelay: this.options.maxPingDelay
2623
- });
2624
- };
2625
- TransportManager.prototype.isAlive = function () {
2626
- return this.livesLeft > 0;
2627
- };
2628
- TransportManager.prototype.reportDeath = function () {
2629
- this.livesLeft -= 1;
2630
- };
2631
- return TransportManager;
2632
- }());
2633
- exports.__esModule = true;
2634
- exports["default"] = TransportManager;
2635
-
2636
-
2637
- /***/ }),
2638
- /* 43 */
2639
- /***/ (function(module, exports, __webpack_require__) {
2640
-
2641
- "use strict";
2642
- var assistant_to_the_transport_manager_1 = __webpack_require__(44);
2643
- var handshake_1 = __webpack_require__(45);
2644
- var pusher_authorizer_1 = __webpack_require__(48);
2645
- var timeline_sender_1 = __webpack_require__(49);
2646
- var presence_channel_1 = __webpack_require__(50);
2647
- var private_channel_1 = __webpack_require__(51);
2648
- var channel_1 = __webpack_require__(52);
2649
- var connection_manager_1 = __webpack_require__(54);
2650
- var channels_1 = __webpack_require__(55);
2651
- var Factory = {
2652
- createChannels: function () {
2653
- return new channels_1["default"]();
2654
- },
2655
- createConnectionManager: function (key, options) {
2656
- return new connection_manager_1["default"](key, options);
2657
- },
2658
- createChannel: function (name, pusher) {
2659
- return new channel_1["default"](name, pusher);
2660
- },
2661
- createPrivateChannel: function (name, pusher) {
2662
- return new private_channel_1["default"](name, pusher);
2663
- },
2664
- createPresenceChannel: function (name, pusher) {
2665
- return new presence_channel_1["default"](name, pusher);
2666
- },
2667
- createTimelineSender: function (timeline, options) {
2668
- return new timeline_sender_1["default"](timeline, options);
2669
- },
2670
- createAuthorizer: function (channel, options) {
2671
- if (options.authorizer) {
2672
- return options.authorizer(channel, options);
2673
- }
2674
- return new pusher_authorizer_1["default"](channel, options);
2675
- },
2676
- createHandshake: function (transport, callback) {
2677
- return new handshake_1["default"](transport, callback);
2678
- },
2679
- createAssistantToTheTransportManager: function (manager, transport, options) {
2680
- return new assistant_to_the_transport_manager_1["default"](manager, transport, options);
2681
- }
2682
- };
2683
- exports.__esModule = true;
2684
- exports["default"] = Factory;
2685
-
2686
-
2687
- /***/ }),
2688
- /* 44 */
2689
- /***/ (function(module, exports, __webpack_require__) {
2690
-
2691
- "use strict";
2692
- var util_1 = __webpack_require__(11);
2693
- var Collections = __webpack_require__(9);
2694
- var AssistantToTheTransportManager = (function () {
2695
- function AssistantToTheTransportManager(manager, transport, options) {
2696
- this.manager = manager;
2697
- this.transport = transport;
2698
- this.minPingDelay = options.minPingDelay;
2699
- this.maxPingDelay = options.maxPingDelay;
2700
- this.pingDelay = undefined;
2701
- }
2702
- AssistantToTheTransportManager.prototype.createConnection = function (name, priority, key, options) {
2703
- var _this = this;
2704
- options = Collections.extend({}, options, {
2705
- activityTimeout: this.pingDelay
2706
- });
2707
- var connection = this.transport.createConnection(name, priority, key, options);
2708
- var openTimestamp = null;
2709
- var onOpen = function () {
2710
- connection.unbind("open", onOpen);
2711
- connection.bind("closed", onClosed);
2712
- openTimestamp = util_1["default"].now();
2713
- };
2714
- var onClosed = function (closeEvent) {
2715
- connection.unbind("closed", onClosed);
2716
- if (closeEvent.code === 1002 || closeEvent.code === 1003) {
2717
- _this.manager.reportDeath();
2718
- }
2719
- else if (!closeEvent.wasClean && openTimestamp) {
2720
- var lifespan = util_1["default"].now() - openTimestamp;
2721
- if (lifespan < 2 * _this.maxPingDelay) {
2722
- _this.manager.reportDeath();
2723
- _this.pingDelay = Math.max(lifespan / 2, _this.minPingDelay);
2724
- }
2725
- }
2726
- };
2727
- connection.bind("open", onOpen);
2728
- return connection;
2729
- };
2730
- AssistantToTheTransportManager.prototype.isSupported = function (environment) {
2731
- return this.manager.isAlive() && this.transport.isSupported(environment);
2732
- };
2733
- return AssistantToTheTransportManager;
2734
- }());
2735
- exports.__esModule = true;
2736
- exports["default"] = AssistantToTheTransportManager;
2737
-
2738
-
2739
- /***/ }),
2740
- /* 45 */
2741
- /***/ (function(module, exports, __webpack_require__) {
2742
-
2743
- "use strict";
2744
- var Collections = __webpack_require__(9);
2745
- var Protocol = __webpack_require__(46);
2746
- var connection_1 = __webpack_require__(47);
2747
- var Handshake = (function () {
2748
- function Handshake(transport, callback) {
2749
- this.transport = transport;
2750
- this.callback = callback;
2751
- this.bindListeners();
2752
- }
2753
- Handshake.prototype.close = function () {
2754
- this.unbindListeners();
2755
- this.transport.close();
2756
- };
2757
- Handshake.prototype.bindListeners = function () {
2758
- var _this = this;
2759
- this.onMessage = function (m) {
2760
- _this.unbindListeners();
2761
- var result;
2762
- try {
2763
- result = Protocol.processHandshake(m);
2764
- }
2765
- catch (e) {
2766
- _this.finish("error", { error: e });
2767
- _this.transport.close();
2768
- return;
2769
- }
2770
- if (result.action === "connected") {
2771
- _this.finish("connected", {
2772
- connection: new connection_1["default"](result.id, _this.transport),
2773
- activityTimeout: result.activityTimeout
2774
- });
2775
- }
2776
- else {
2777
- _this.finish(result.action, { error: result.error });
2778
- _this.transport.close();
2779
- }
2780
- };
2781
- this.onClosed = function (closeEvent) {
2782
- _this.unbindListeners();
2783
- var action = Protocol.getCloseAction(closeEvent) || "backoff";
2784
- var error = Protocol.getCloseError(closeEvent);
2785
- _this.finish(action, { error: error });
2786
- };
2787
- this.transport.bind("message", this.onMessage);
2788
- this.transport.bind("closed", this.onClosed);
2789
- };
2790
- Handshake.prototype.unbindListeners = function () {
2791
- this.transport.unbind("message", this.onMessage);
2792
- this.transport.unbind("closed", this.onClosed);
2793
- };
2794
- Handshake.prototype.finish = function (action, params) {
2795
- this.callback(Collections.extend({ transport: this.transport, action: action }, params));
2796
- };
2797
- return Handshake;
2798
- }());
2799
- exports.__esModule = true;
2800
- exports["default"] = Handshake;
2801
-
2802
-
2803
- /***/ }),
2804
- /* 46 */
2805
- /***/ (function(module, exports) {
2806
-
2807
- "use strict";
2808
- exports.decodeMessage = function (message) {
2809
- try {
2810
- var params = JSON.parse(message.data);
2811
- if (typeof params.data === 'string') {
2812
- try {
2813
- params.data = JSON.parse(params.data);
2814
- }
2815
- catch (e) {
2816
- if (!(e instanceof SyntaxError)) {
2817
- throw e;
2818
- }
2819
- }
2820
- }
2821
- return params;
2822
- }
2823
- catch (e) {
2824
- throw { type: 'MessageParseError', error: e, data: message.data };
2825
- }
2826
- };
2827
- exports.encodeMessage = function (message) {
2828
- return JSON.stringify(message);
2829
- };
2830
- exports.processHandshake = function (message) {
2831
- message = exports.decodeMessage(message);
2832
- if (message.event === "pusher:connection_established") {
2833
- if (!message.data.activity_timeout) {
2834
- throw "No activity timeout specified in handshake";
2835
- }
2836
- return {
2837
- action: "connected",
2838
- id: message.data.socket_id,
2839
- activityTimeout: message.data.activity_timeout * 1000
2840
- };
2841
- }
2842
- else if (message.event === "pusher:error") {
2843
- return {
2844
- action: this.getCloseAction(message.data),
2845
- error: this.getCloseError(message.data)
2846
- };
2847
- }
2848
- else {
2849
- throw "Invalid handshake";
2850
- }
2851
- };
2852
- exports.getCloseAction = function (closeEvent) {
2853
- if (closeEvent.code < 4000) {
2854
- if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {
2855
- return "backoff";
2856
- }
2857
- else {
2858
- return null;
2859
- }
2860
- }
2861
- else if (closeEvent.code === 4000) {
2862
- return "ssl_only";
2863
- }
2864
- else if (closeEvent.code < 4100) {
2865
- return "refused";
2866
- }
2867
- else if (closeEvent.code < 4200) {
2868
- return "backoff";
2869
- }
2870
- else if (closeEvent.code < 4300) {
2871
- return "retry";
2872
- }
2873
- else {
2874
- return "refused";
2875
- }
2876
- };
2877
- exports.getCloseError = function (closeEvent) {
2878
- if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {
2879
- return {
2880
- type: 'PusherError',
2881
- data: {
2882
- code: closeEvent.code,
2883
- message: closeEvent.reason || closeEvent.message
2884
- }
2885
- };
2886
- }
2887
- else {
2888
- return null;
2889
- }
2890
- };
2891
-
2892
-
2893
- /***/ }),
2894
- /* 47 */
2895
- /***/ (function(module, exports, __webpack_require__) {
2896
-
2897
- "use strict";
2898
- var __extends = (this && this.__extends) || function (d, b) {
2899
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
2900
- function __() { this.constructor = d; }
2901
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
2902
- };
2903
- var Collections = __webpack_require__(9);
2904
- var dispatcher_1 = __webpack_require__(24);
2905
- var Protocol = __webpack_require__(46);
2906
- var logger_1 = __webpack_require__(8);
2907
- var Connection = (function (_super) {
2908
- __extends(Connection, _super);
2909
- function Connection(id, transport) {
2910
- _super.call(this);
2911
- this.id = id;
2912
- this.transport = transport;
2913
- this.activityTimeout = transport.activityTimeout;
2914
- this.bindListeners();
2915
- }
2916
- Connection.prototype.handlesActivityChecks = function () {
2917
- return this.transport.handlesActivityChecks();
2918
- };
2919
- Connection.prototype.send = function (data) {
2920
- return this.transport.send(data);
2921
- };
2922
- Connection.prototype.send_event = function (name, data, channel) {
2923
- var message = { event: name, data: data };
2924
- if (channel) {
2925
- message.channel = channel;
2926
- }
2927
- logger_1["default"].debug('Event sent', message);
2928
- return this.send(Protocol.encodeMessage(message));
2929
- };
2930
- Connection.prototype.ping = function () {
2931
- if (this.transport.supportsPing()) {
2932
- this.transport.ping();
2933
- }
2934
- else {
2935
- this.send_event('pusher:ping', {});
2936
- }
2937
- };
2938
- Connection.prototype.close = function () {
2939
- this.transport.close();
2940
- };
2941
- Connection.prototype.bindListeners = function () {
2942
- var _this = this;
2943
- var listeners = {
2944
- message: function (m) {
2945
- var message;
2946
- try {
2947
- message = Protocol.decodeMessage(m);
2948
- }
2949
- catch (e) {
2950
- _this.emit('error', {
2951
- type: 'MessageParseError',
2952
- error: e,
2953
- data: m.data
2954
- });
2955
- }
2956
- if (message !== undefined) {
2957
- logger_1["default"].debug('Event recd', message);
2958
- switch (message.event) {
2959
- case 'pusher:error':
2960
- _this.emit('error', { type: 'PusherError', data: message.data });
2961
- break;
2962
- case 'pusher:ping':
2963
- _this.emit("ping");
2964
- break;
2965
- case 'pusher:pong':
2966
- _this.emit("pong");
2967
- break;
2968
- }
2969
- _this.emit('message', message);
2970
- }
2971
- },
2972
- activity: function () {
2973
- _this.emit("activity");
2974
- },
2975
- error: function (error) {
2976
- _this.emit("error", { type: "WebSocketError", error: error });
2977
- },
2978
- closed: function (closeEvent) {
2979
- unbindListeners();
2980
- if (closeEvent && closeEvent.code) {
2981
- _this.handleCloseEvent(closeEvent);
2982
- }
2983
- _this.transport = null;
2984
- _this.emit("closed");
2985
- }
2986
- };
2987
- var unbindListeners = function () {
2988
- Collections.objectApply(listeners, function (listener, event) {
2989
- _this.transport.unbind(event, listener);
2990
- });
2991
- };
2992
- Collections.objectApply(listeners, function (listener, event) {
2993
- _this.transport.bind(event, listener);
2994
- });
2995
- };
2996
- Connection.prototype.handleCloseEvent = function (closeEvent) {
2997
- var action = Protocol.getCloseAction(closeEvent);
2998
- var error = Protocol.getCloseError(closeEvent);
2999
- if (error) {
3000
- this.emit('error', error);
3001
- }
3002
- if (action) {
3003
- this.emit(action);
3004
- }
3005
- };
3006
- return Connection;
3007
- }(dispatcher_1["default"]));
3008
- exports.__esModule = true;
3009
- exports["default"] = Connection;
3010
-
3011
-
3012
- /***/ }),
3013
- /* 48 */
3014
- /***/ (function(module, exports, __webpack_require__) {
3015
-
3016
- "use strict";
3017
- var runtime_1 = __webpack_require__(2);
3018
- var PusherAuthorizer = (function () {
3019
- function PusherAuthorizer(channel, options) {
3020
- this.channel = channel;
3021
- var authTransport = options.authTransport;
3022
- if (typeof runtime_1["default"].getAuthorizers()[authTransport] === "undefined") {
3023
- throw "'" + authTransport + "' is not a recognized auth transport";
3024
- }
3025
- this.type = authTransport;
3026
- this.options = options;
3027
- this.authOptions = (options || {}).auth || {};
3028
- }
3029
- PusherAuthorizer.prototype.composeQuery = function (socketId) {
3030
- var query = 'socket_id=' + encodeURIComponent(socketId) +
3031
- '&channel_name=' + encodeURIComponent(this.channel.name);
3032
- for (var i in this.authOptions.params) {
3033
- query += "&" + encodeURIComponent(i) + "=" + encodeURIComponent(this.authOptions.params[i]);
3034
- }
3035
- return query;
3036
- };
3037
- PusherAuthorizer.prototype.authorize = function (socketId, callback) {
3038
- PusherAuthorizer.authorizers = PusherAuthorizer.authorizers || runtime_1["default"].getAuthorizers();
3039
- return PusherAuthorizer.authorizers[this.type].call(this, runtime_1["default"], socketId, callback);
3040
- };
3041
- return PusherAuthorizer;
3042
- }());
3043
- exports.__esModule = true;
3044
- exports["default"] = PusherAuthorizer;
3045
-
3046
-
3047
- /***/ }),
3048
- /* 49 */
3049
- /***/ (function(module, exports, __webpack_require__) {
3050
-
3051
- "use strict";
3052
- var runtime_1 = __webpack_require__(2);
3053
- var TimelineSender = (function () {
3054
- function TimelineSender(timeline, options) {
3055
- this.timeline = timeline;
3056
- this.options = options || {};
3057
- }
3058
- TimelineSender.prototype.send = function (encrypted, callback) {
3059
- if (this.timeline.isEmpty()) {
3060
- return;
3061
- }
3062
- this.timeline.send(runtime_1["default"].TimelineTransport.getAgent(this, encrypted), callback);
3063
- };
3064
- return TimelineSender;
3065
- }());
3066
- exports.__esModule = true;
3067
- exports["default"] = TimelineSender;
3068
-
3069
-
3070
- /***/ }),
3071
- /* 50 */
3072
- /***/ (function(module, exports, __webpack_require__) {
3073
-
3074
- "use strict";
3075
- var __extends = (this && this.__extends) || function (d, b) {
3076
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
3077
- function __() { this.constructor = d; }
3078
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
3079
- };
3080
- var private_channel_1 = __webpack_require__(51);
3081
- var logger_1 = __webpack_require__(8);
3082
- var members_1 = __webpack_require__(53);
3083
- var url_store_1 = __webpack_require__(14);
3084
- var PresenceChannel = (function (_super) {
3085
- __extends(PresenceChannel, _super);
3086
- function PresenceChannel(name, pusher) {
3087
- _super.call(this, name, pusher);
3088
- this.members = new members_1["default"]();
3089
- }
3090
- PresenceChannel.prototype.authorize = function (socketId, callback) {
3091
- var _this = this;
3092
- _super.prototype.authorize.call(this, socketId, function (error, authData) {
3093
- if (!error) {
3094
- if (authData.channel_data === undefined) {
3095
- var suffix = url_store_1["default"].buildLogSuffix("authenticationEndpoint");
3096
- logger_1["default"].warn(("Invalid auth response for channel '" + _this.name + "',") +
3097
- ("expected 'channel_data' field. " + suffix));
3098
- callback("Invalid auth response");
3099
- return;
3100
- }
3101
- var channelData = JSON.parse(authData.channel_data);
3102
- _this.members.setMyID(channelData.user_id);
3103
- }
3104
- callback(error, authData);
3105
- });
3106
- };
3107
- PresenceChannel.prototype.handleEvent = function (event, data) {
3108
- switch (event) {
3109
- case "pusher_internal:subscription_succeeded":
3110
- this.subscriptionPending = false;
3111
- this.subscribed = true;
3112
- if (this.subscriptionCancelled) {
3113
- this.pusher.unsubscribe(this.name);
3114
- }
3115
- else {
3116
- this.members.onSubscription(data);
3117
- this.emit("pusher:subscription_succeeded", this.members);
3118
- }
3119
- break;
3120
- case "pusher_internal:member_added":
3121
- var addedMember = this.members.addMember(data);
3122
- this.emit('pusher:member_added', addedMember);
3123
- break;
3124
- case "pusher_internal:member_removed":
3125
- var removedMember = this.members.removeMember(data);
3126
- if (removedMember) {
3127
- this.emit('pusher:member_removed', removedMember);
3128
- }
3129
- break;
3130
- default:
3131
- private_channel_1["default"].prototype.handleEvent.call(this, event, data);
3132
- }
3133
- };
3134
- PresenceChannel.prototype.disconnect = function () {
3135
- this.members.reset();
3136
- _super.prototype.disconnect.call(this);
3137
- };
3138
- return PresenceChannel;
3139
- }(private_channel_1["default"]));
3140
- exports.__esModule = true;
3141
- exports["default"] = PresenceChannel;
3142
-
3143
-
3144
- /***/ }),
3145
- /* 51 */
3146
- /***/ (function(module, exports, __webpack_require__) {
3147
-
3148
- "use strict";
3149
- var __extends = (this && this.__extends) || function (d, b) {
3150
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
3151
- function __() { this.constructor = d; }
3152
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
3153
- };
3154
- var factory_1 = __webpack_require__(43);
3155
- var channel_1 = __webpack_require__(52);
3156
- var PrivateChannel = (function (_super) {
3157
- __extends(PrivateChannel, _super);
3158
- function PrivateChannel() {
3159
- _super.apply(this, arguments);
3160
- }
3161
- PrivateChannel.prototype.authorize = function (socketId, callback) {
3162
- var authorizer = factory_1["default"].createAuthorizer(this, this.pusher.config);
3163
- return authorizer.authorize(socketId, callback);
3164
- };
3165
- return PrivateChannel;
3166
- }(channel_1["default"]));
3167
- exports.__esModule = true;
3168
- exports["default"] = PrivateChannel;
3169
-
3170
-
3171
- /***/ }),
3172
- /* 52 */
3173
- /***/ (function(module, exports, __webpack_require__) {
3174
-
3175
- "use strict";
3176
- var __extends = (this && this.__extends) || function (d, b) {
3177
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
3178
- function __() { this.constructor = d; }
3179
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
3180
- };
3181
- var dispatcher_1 = __webpack_require__(24);
3182
- var Errors = __webpack_require__(31);
3183
- var logger_1 = __webpack_require__(8);
3184
- var Channel = (function (_super) {
3185
- __extends(Channel, _super);
3186
- function Channel(name, pusher) {
3187
- _super.call(this, function (event, data) {
3188
- logger_1["default"].debug('No callbacks on ' + name + ' for ' + event);
3189
- });
3190
- this.name = name;
3191
- this.pusher = pusher;
3192
- this.subscribed = false;
3193
- this.subscriptionPending = false;
3194
- this.subscriptionCancelled = false;
3195
- }
3196
- Channel.prototype.authorize = function (socketId, callback) {
3197
- return callback(false, {});
3198
- };
3199
- Channel.prototype.trigger = function (event, data) {
3200
- if (event.indexOf("client-") !== 0) {
3201
- throw new Errors.BadEventName("Event '" + event + "' does not start with 'client-'");
3202
- }
3203
- return this.pusher.send_event(event, data, this.name);
3204
- };
3205
- Channel.prototype.disconnect = function () {
3206
- this.subscribed = false;
3207
- this.subscriptionPending = false;
3208
- };
3209
- Channel.prototype.handleEvent = function (event, data) {
3210
- if (event.indexOf("pusher_internal:") === 0) {
3211
- if (event === "pusher_internal:subscription_succeeded") {
3212
- this.subscriptionPending = false;
3213
- this.subscribed = true;
3214
- if (this.subscriptionCancelled) {
3215
- this.pusher.unsubscribe(this.name);
3216
- }
3217
- else {
3218
- this.emit("pusher:subscription_succeeded", data);
3219
- }
3220
- }
3221
- }
3222
- else {
3223
- this.emit(event, data);
3224
- }
3225
- };
3226
- Channel.prototype.subscribe = function () {
3227
- var _this = this;
3228
- if (this.subscribed) {
3229
- return;
3230
- }
3231
- this.subscriptionPending = true;
3232
- this.subscriptionCancelled = false;
3233
- this.authorize(this.pusher.connection.socket_id, function (error, data) {
3234
- if (error) {
3235
- _this.handleEvent('pusher:subscription_error', data);
3236
- }
3237
- else {
3238
- _this.pusher.send_event('pusher:subscribe', {
3239
- auth: data.auth,
3240
- channel_data: data.channel_data,
3241
- channel: _this.name
3242
- });
3243
- }
3244
- });
3245
- };
3246
- Channel.prototype.unsubscribe = function () {
3247
- this.subscribed = false;
3248
- this.pusher.send_event('pusher:unsubscribe', {
3249
- channel: this.name
3250
- });
3251
- };
3252
- Channel.prototype.cancelSubscription = function () {
3253
- this.subscriptionCancelled = true;
3254
- };
3255
- Channel.prototype.reinstateSubscription = function () {
3256
- this.subscriptionCancelled = false;
3257
- };
3258
- return Channel;
3259
- }(dispatcher_1["default"]));
3260
- exports.__esModule = true;
3261
- exports["default"] = Channel;
3262
-
3263
-
3264
- /***/ }),
3265
- /* 53 */
3266
- /***/ (function(module, exports, __webpack_require__) {
3267
-
3268
- "use strict";
3269
- var Collections = __webpack_require__(9);
3270
- var Members = (function () {
3271
- function Members() {
3272
- this.reset();
3273
- }
3274
- Members.prototype.get = function (id) {
3275
- if (Object.prototype.hasOwnProperty.call(this.members, id)) {
3276
- return {
3277
- id: id,
3278
- info: this.members[id]
3279
- };
3280
- }
3281
- else {
3282
- return null;
3283
- }
3284
- };
3285
- Members.prototype.each = function (callback) {
3286
- var _this = this;
3287
- Collections.objectApply(this.members, function (member, id) {
3288
- callback(_this.get(id));
3289
- });
3290
- };
3291
- Members.prototype.setMyID = function (id) {
3292
- this.myID = id;
3293
- };
3294
- Members.prototype.onSubscription = function (subscriptionData) {
3295
- this.members = subscriptionData.presence.hash;
3296
- this.count = subscriptionData.presence.count;
3297
- this.me = this.get(this.myID);
3298
- };
3299
- Members.prototype.addMember = function (memberData) {
3300
- if (this.get(memberData.user_id) === null) {
3301
- this.count++;
3302
- }
3303
- this.members[memberData.user_id] = memberData.user_info;
3304
- return this.get(memberData.user_id);
3305
- };
3306
- Members.prototype.removeMember = function (memberData) {
3307
- var member = this.get(memberData.user_id);
3308
- if (member) {
3309
- delete this.members[memberData.user_id];
3310
- this.count--;
3311
- }
3312
- return member;
3313
- };
3314
- Members.prototype.reset = function () {
3315
- this.members = {};
3316
- this.count = 0;
3317
- this.myID = null;
3318
- this.me = null;
3319
- };
3320
- return Members;
3321
- }());
3322
- exports.__esModule = true;
3323
- exports["default"] = Members;
3324
-
3325
-
3326
- /***/ }),
3327
- /* 54 */
3328
- /***/ (function(module, exports, __webpack_require__) {
3329
-
3330
- "use strict";
3331
- var __extends = (this && this.__extends) || function (d, b) {
3332
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
3333
- function __() { this.constructor = d; }
3334
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
3335
- };
3336
- var dispatcher_1 = __webpack_require__(24);
3337
- var timers_1 = __webpack_require__(12);
3338
- var logger_1 = __webpack_require__(8);
3339
- var Collections = __webpack_require__(9);
3340
- var runtime_1 = __webpack_require__(2);
3341
- var ConnectionManager = (function (_super) {
3342
- __extends(ConnectionManager, _super);
3343
- function ConnectionManager(key, options) {
3344
- var _this = this;
3345
- _super.call(this);
3346
- this.key = key;
3347
- this.options = options || {};
3348
- this.state = "initialized";
3349
- this.connection = null;
3350
- this.encrypted = !!options.encrypted;
3351
- this.timeline = this.options.timeline;
3352
- this.connectionCallbacks = this.buildConnectionCallbacks();
3353
- this.errorCallbacks = this.buildErrorCallbacks();
3354
- this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);
3355
- var Network = runtime_1["default"].getNetwork();
3356
- Network.bind("online", function () {
3357
- _this.timeline.info({ netinfo: "online" });
3358
- if (_this.state === "connecting" || _this.state === "unavailable") {
3359
- _this.retryIn(0);
3360
- }
3361
- });
3362
- Network.bind("offline", function () {
3363
- _this.timeline.info({ netinfo: "offline" });
3364
- if (_this.connection) {
3365
- _this.sendActivityCheck();
3366
- }
3367
- });
3368
- this.updateStrategy();
3369
- }
3370
- ConnectionManager.prototype.connect = function () {
3371
- if (this.connection || this.runner) {
3372
- return;
3373
- }
3374
- if (!this.strategy.isSupported()) {
3375
- this.updateState("failed");
3376
- return;
3377
- }
3378
- this.updateState("connecting");
3379
- this.startConnecting();
3380
- this.setUnavailableTimer();
3381
- };
3382
- ;
3383
- ConnectionManager.prototype.send = function (data) {
3384
- if (this.connection) {
3385
- return this.connection.send(data);
3386
- }
3387
- else {
3388
- return false;
3389
- }
3390
- };
3391
- ;
3392
- ConnectionManager.prototype.send_event = function (name, data, channel) {
3393
- if (this.connection) {
3394
- return this.connection.send_event(name, data, channel);
3395
- }
3396
- else {
3397
- return false;
3398
- }
3399
- };
3400
- ;
3401
- ConnectionManager.prototype.disconnect = function () {
3402
- this.disconnectInternally();
3403
- this.updateState("disconnected");
3404
- };
3405
- ;
3406
- ConnectionManager.prototype.isEncrypted = function () {
3407
- return this.encrypted;
3408
- };
3409
- ;
3410
- ConnectionManager.prototype.startConnecting = function () {
3411
- var _this = this;
3412
- var callback = function (error, handshake) {
3413
- if (error) {
3414
- _this.runner = _this.strategy.connect(0, callback);
3415
- }
3416
- else {
3417
- if (handshake.action === "error") {
3418
- _this.emit("error", { type: "HandshakeError", error: handshake.error });
3419
- _this.timeline.error({ handshakeError: handshake.error });
3420
- }
3421
- else {
3422
- _this.abortConnecting();
3423
- _this.handshakeCallbacks[handshake.action](handshake);
3424
- }
3425
- }
3426
- };
3427
- this.runner = this.strategy.connect(0, callback);
3428
- };
3429
- ;
3430
- ConnectionManager.prototype.abortConnecting = function () {
3431
- if (this.runner) {
3432
- this.runner.abort();
3433
- this.runner = null;
3434
- }
3435
- };
3436
- ;
3437
- ConnectionManager.prototype.disconnectInternally = function () {
3438
- this.abortConnecting();
3439
- this.clearRetryTimer();
3440
- this.clearUnavailableTimer();
3441
- if (this.connection) {
3442
- var connection = this.abandonConnection();
3443
- connection.close();
3444
- }
3445
- };
3446
- ;
3447
- ConnectionManager.prototype.updateStrategy = function () {
3448
- this.strategy = this.options.getStrategy({
3449
- key: this.key,
3450
- timeline: this.timeline,
3451
- encrypted: this.encrypted
3452
- });
3453
- };
3454
- ;
3455
- ConnectionManager.prototype.retryIn = function (delay) {
3456
- var _this = this;
3457
- this.timeline.info({ action: "retry", delay: delay });
3458
- if (delay > 0) {
3459
- this.emit("connecting_in", Math.round(delay / 1000));
3460
- }
3461
- this.retryTimer = new timers_1.OneOffTimer(delay || 0, function () {
3462
- _this.disconnectInternally();
3463
- _this.connect();
3464
- });
3465
- };
3466
- ;
3467
- ConnectionManager.prototype.clearRetryTimer = function () {
3468
- if (this.retryTimer) {
3469
- this.retryTimer.ensureAborted();
3470
- this.retryTimer = null;
3471
- }
3472
- };
3473
- ;
3474
- ConnectionManager.prototype.setUnavailableTimer = function () {
3475
- var _this = this;
3476
- this.unavailableTimer = new timers_1.OneOffTimer(this.options.unavailableTimeout, function () {
3477
- _this.updateState("unavailable");
3478
- });
3479
- };
3480
- ;
3481
- ConnectionManager.prototype.clearUnavailableTimer = function () {
3482
- if (this.unavailableTimer) {
3483
- this.unavailableTimer.ensureAborted();
3484
- }
3485
- };
3486
- ;
3487
- ConnectionManager.prototype.sendActivityCheck = function () {
3488
- var _this = this;
3489
- this.stopActivityCheck();
3490
- this.connection.ping();
3491
- this.activityTimer = new timers_1.OneOffTimer(this.options.pongTimeout, function () {
3492
- _this.timeline.error({ pong_timed_out: _this.options.pongTimeout });
3493
- _this.retryIn(0);
3494
- });
3495
- };
3496
- ;
3497
- ConnectionManager.prototype.resetActivityCheck = function () {
3498
- var _this = this;
3499
- this.stopActivityCheck();
3500
- if (this.connection && !this.connection.handlesActivityChecks()) {
3501
- this.activityTimer = new timers_1.OneOffTimer(this.activityTimeout, function () {
3502
- _this.sendActivityCheck();
3503
- });
3504
- }
3505
- };
3506
- ;
3507
- ConnectionManager.prototype.stopActivityCheck = function () {
3508
- if (this.activityTimer) {
3509
- this.activityTimer.ensureAborted();
3510
- }
3511
- };
3512
- ;
3513
- ConnectionManager.prototype.buildConnectionCallbacks = function () {
3514
- var _this = this;
3515
- return {
3516
- message: function (message) {
3517
- _this.resetActivityCheck();
3518
- _this.emit('message', message);
3519
- },
3520
- ping: function () {
3521
- _this.send_event('pusher:pong', {});
3522
- },
3523
- activity: function () {
3524
- _this.resetActivityCheck();
3525
- },
3526
- error: function (error) {
3527
- _this.emit("error", { type: "WebSocketError", error: error });
3528
- },
3529
- closed: function () {
3530
- _this.abandonConnection();
3531
- if (_this.shouldRetry()) {
3532
- _this.retryIn(1000);
3533
- }
3534
- }
3535
- };
3536
- };
3537
- ;
3538
- ConnectionManager.prototype.buildHandshakeCallbacks = function (errorCallbacks) {
3539
- var _this = this;
3540
- return Collections.extend({}, errorCallbacks, {
3541
- connected: function (handshake) {
3542
- _this.activityTimeout = Math.min(_this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity);
3543
- _this.clearUnavailableTimer();
3544
- _this.setConnection(handshake.connection);
3545
- _this.socket_id = _this.connection.id;
3546
- _this.updateState("connected", { socket_id: _this.socket_id });
3547
- }
3548
- });
3549
- };
3550
- ;
3551
- ConnectionManager.prototype.buildErrorCallbacks = function () {
3552
- var _this = this;
3553
- var withErrorEmitted = function (callback) {
3554
- return function (result) {
3555
- if (result.error) {
3556
- _this.emit("error", { type: "WebSocketError", error: result.error });
3557
- }
3558
- callback(result);
3559
- };
3560
- };
3561
- return {
3562
- ssl_only: withErrorEmitted(function () {
3563
- _this.encrypted = true;
3564
- _this.updateStrategy();
3565
- _this.retryIn(0);
3566
- }),
3567
- refused: withErrorEmitted(function () {
3568
- _this.disconnect();
3569
- }),
3570
- backoff: withErrorEmitted(function () {
3571
- _this.retryIn(1000);
3572
- }),
3573
- retry: withErrorEmitted(function () {
3574
- _this.retryIn(0);
3575
- })
3576
- };
3577
- };
3578
- ;
3579
- ConnectionManager.prototype.setConnection = function (connection) {
3580
- this.connection = connection;
3581
- for (var event in this.connectionCallbacks) {
3582
- this.connection.bind(event, this.connectionCallbacks[event]);
3583
- }
3584
- this.resetActivityCheck();
3585
- };
3586
- ;
3587
- ConnectionManager.prototype.abandonConnection = function () {
3588
- if (!this.connection) {
3589
- return;
3590
- }
3591
- this.stopActivityCheck();
3592
- for (var event in this.connectionCallbacks) {
3593
- this.connection.unbind(event, this.connectionCallbacks[event]);
3594
- }
3595
- var connection = this.connection;
3596
- this.connection = null;
3597
- return connection;
3598
- };
3599
- ConnectionManager.prototype.updateState = function (newState, data) {
3600
- var previousState = this.state;
3601
- this.state = newState;
3602
- if (previousState !== newState) {
3603
- var newStateDescription = newState;
3604
- if (newStateDescription === "connected") {
3605
- newStateDescription += " with new socket ID " + data.socket_id;
3606
- }
3607
- logger_1["default"].debug('State changed', previousState + ' -> ' + newStateDescription);
3608
- this.timeline.info({ state: newState, params: data });
3609
- this.emit('state_change', { previous: previousState, current: newState });
3610
- this.emit(newState, data);
3611
- }
3612
- };
3613
- ConnectionManager.prototype.shouldRetry = function () {
3614
- return this.state === "connecting" || this.state === "connected";
3615
- };
3616
- return ConnectionManager;
3617
- }(dispatcher_1["default"]));
3618
- exports.__esModule = true;
3619
- exports["default"] = ConnectionManager;
3620
-
3621
-
3622
- /***/ }),
3623
- /* 55 */
3624
- /***/ (function(module, exports, __webpack_require__) {
3625
-
3626
- "use strict";
3627
- var Collections = __webpack_require__(9);
3628
- var factory_1 = __webpack_require__(43);
3629
- var Channels = (function () {
3630
- function Channels() {
3631
- this.channels = {};
3632
- }
3633
- Channels.prototype.add = function (name, pusher) {
3634
- if (!this.channels[name]) {
3635
- this.channels[name] = createChannel(name, pusher);
3636
- }
3637
- return this.channels[name];
3638
- };
3639
- Channels.prototype.all = function () {
3640
- return Collections.values(this.channels);
3641
- };
3642
- Channels.prototype.find = function (name) {
3643
- return this.channels[name];
3644
- };
3645
- Channels.prototype.remove = function (name) {
3646
- var channel = this.channels[name];
3647
- delete this.channels[name];
3648
- return channel;
3649
- };
3650
- Channels.prototype.disconnect = function () {
3651
- Collections.objectApply(this.channels, function (channel) {
3652
- channel.disconnect();
3653
- });
3654
- };
3655
- return Channels;
3656
- }());
3657
- exports.__esModule = true;
3658
- exports["default"] = Channels;
3659
- function createChannel(name, pusher) {
3660
- if (name.indexOf('private-') === 0) {
3661
- return factory_1["default"].createPrivateChannel(name, pusher);
3662
- }
3663
- else if (name.indexOf('presence-') === 0) {
3664
- return factory_1["default"].createPresenceChannel(name, pusher);
3665
- }
3666
- else {
3667
- return factory_1["default"].createChannel(name, pusher);
3668
- }
3669
- }
3670
-
3671
-
3672
- /***/ }),
3673
- /* 56 */
3674
- /***/ (function(module, exports, __webpack_require__) {
3675
-
3676
- "use strict";
3677
- var factory_1 = __webpack_require__(43);
3678
- var util_1 = __webpack_require__(11);
3679
- var Errors = __webpack_require__(31);
3680
- var Collections = __webpack_require__(9);
3681
- var TransportStrategy = (function () {
3682
- function TransportStrategy(name, priority, transport, options) {
3683
- this.name = name;
3684
- this.priority = priority;
3685
- this.transport = transport;
3686
- this.options = options || {};
3687
- }
3688
- TransportStrategy.prototype.isSupported = function () {
3689
- return this.transport.isSupported({
3690
- encrypted: this.options.encrypted
3691
- });
3692
- };
3693
- TransportStrategy.prototype.connect = function (minPriority, callback) {
3694
- var _this = this;
3695
- if (!this.isSupported()) {
3696
- return failAttempt(new Errors.UnsupportedStrategy(), callback);
3697
- }
3698
- else if (this.priority < minPriority) {
3699
- return failAttempt(new Errors.TransportPriorityTooLow(), callback);
3700
- }
3701
- var connected = false;
3702
- var transport = this.transport.createConnection(this.name, this.priority, this.options.key, this.options);
3703
- var handshake = null;
3704
- var onInitialized = function () {
3705
- transport.unbind("initialized", onInitialized);
3706
- transport.connect();
3707
- };
3708
- var onOpen = function () {
3709
- handshake = factory_1["default"].createHandshake(transport, function (result) {
3710
- connected = true;
3711
- unbindListeners();
3712
- callback(null, result);
3713
- });
3714
- };
3715
- var onError = function (error) {
3716
- unbindListeners();
3717
- callback(error);
3718
- };
3719
- var onClosed = function () {
3720
- unbindListeners();
3721
- var serializedTransport;
3722
- serializedTransport = Collections.safeJSONStringify(transport);
3723
- callback(new Errors.TransportClosed(serializedTransport));
3724
- };
3725
- var unbindListeners = function () {
3726
- transport.unbind("initialized", onInitialized);
3727
- transport.unbind("open", onOpen);
3728
- transport.unbind("error", onError);
3729
- transport.unbind("closed", onClosed);
3730
- };
3731
- transport.bind("initialized", onInitialized);
3732
- transport.bind("open", onOpen);
3733
- transport.bind("error", onError);
3734
- transport.bind("closed", onClosed);
3735
- transport.initialize();
3736
- return {
3737
- abort: function () {
3738
- if (connected) {
3739
- return;
3740
- }
3741
- unbindListeners();
3742
- if (handshake) {
3743
- handshake.close();
3744
- }
3745
- else {
3746
- transport.close();
3747
- }
3748
- },
3749
- forceMinPriority: function (p) {
3750
- if (connected) {
3751
- return;
3752
- }
3753
- if (_this.priority < p) {
3754
- if (handshake) {
3755
- handshake.close();
3756
- }
3757
- else {
3758
- transport.close();
3759
- }
3760
- }
3761
- }
3762
- };
3763
- };
3764
- return TransportStrategy;
3765
- }());
3766
- exports.__esModule = true;
3767
- exports["default"] = TransportStrategy;
3768
- function failAttempt(error, callback) {
3769
- util_1["default"].defer(function () {
3770
- callback(error);
3771
- });
3772
- return {
3773
- abort: function () { },
3774
- forceMinPriority: function () { }
3775
- };
3776
- }
3777
-
3778
-
3779
- /***/ }),
3780
- /* 57 */
3781
- /***/ (function(module, exports, __webpack_require__) {
3782
-
3783
- "use strict";
3784
- var Collections = __webpack_require__(9);
3785
- var util_1 = __webpack_require__(11);
3786
- var timers_1 = __webpack_require__(12);
3787
- var SequentialStrategy = (function () {
3788
- function SequentialStrategy(strategies, options) {
3789
- this.strategies = strategies;
3790
- this.loop = Boolean(options.loop);
3791
- this.failFast = Boolean(options.failFast);
3792
- this.timeout = options.timeout;
3793
- this.timeoutLimit = options.timeoutLimit;
3794
- }
3795
- SequentialStrategy.prototype.isSupported = function () {
3796
- return Collections.any(this.strategies, util_1["default"].method("isSupported"));
3797
- };
3798
- SequentialStrategy.prototype.connect = function (minPriority, callback) {
3799
- var _this = this;
3800
- var strategies = this.strategies;
3801
- var current = 0;
3802
- var timeout = this.timeout;
3803
- var runner = null;
3804
- var tryNextStrategy = function (error, handshake) {
3805
- if (handshake) {
3806
- callback(null, handshake);
3807
- }
3808
- else {
3809
- current = current + 1;
3810
- if (_this.loop) {
3811
- current = current % strategies.length;
3812
- }
3813
- if (current < strategies.length) {
3814
- if (timeout) {
3815
- timeout = timeout * 2;
3816
- if (_this.timeoutLimit) {
3817
- timeout = Math.min(timeout, _this.timeoutLimit);
3818
- }
3819
- }
3820
- runner = _this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: _this.failFast }, tryNextStrategy);
3821
- }
3822
- else {
3823
- callback(true);
3824
- }
3825
- }
3826
- };
3827
- runner = this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: this.failFast }, tryNextStrategy);
3828
- return {
3829
- abort: function () {
3830
- runner.abort();
3831
- },
3832
- forceMinPriority: function (p) {
3833
- minPriority = p;
3834
- if (runner) {
3835
- runner.forceMinPriority(p);
3836
- }
3837
- }
3838
- };
3839
- };
3840
- SequentialStrategy.prototype.tryStrategy = function (strategy, minPriority, options, callback) {
3841
- var timer = null;
3842
- var runner = null;
3843
- if (options.timeout > 0) {
3844
- timer = new timers_1.OneOffTimer(options.timeout, function () {
3845
- runner.abort();
3846
- callback(true);
3847
- });
3848
- }
3849
- runner = strategy.connect(minPriority, function (error, handshake) {
3850
- if (error && timer && timer.isRunning() && !options.failFast) {
3851
- return;
3852
- }
3853
- if (timer) {
3854
- timer.ensureAborted();
3855
- }
3856
- callback(error, handshake);
3857
- });
3858
- return {
3859
- abort: function () {
3860
- if (timer) {
3861
- timer.ensureAborted();
3862
- }
3863
- runner.abort();
3864
- },
3865
- forceMinPriority: function (p) {
3866
- runner.forceMinPriority(p);
3867
- }
3868
- };
3869
- };
3870
- return SequentialStrategy;
3871
- }());
3872
- exports.__esModule = true;
3873
- exports["default"] = SequentialStrategy;
3874
-
3875
-
3876
- /***/ }),
3877
- /* 58 */
3878
- /***/ (function(module, exports, __webpack_require__) {
3879
-
3880
- "use strict";
3881
- var Collections = __webpack_require__(9);
3882
- var util_1 = __webpack_require__(11);
3883
- var BestConnectedEverStrategy = (function () {
3884
- function BestConnectedEverStrategy(strategies) {
3885
- this.strategies = strategies;
3886
- }
3887
- BestConnectedEverStrategy.prototype.isSupported = function () {
3888
- return Collections.any(this.strategies, util_1["default"].method("isSupported"));
3889
- };
3890
- BestConnectedEverStrategy.prototype.connect = function (minPriority, callback) {
3891
- return connect(this.strategies, minPriority, function (i, runners) {
3892
- return function (error, handshake) {
3893
- runners[i].error = error;
3894
- if (error) {
3895
- if (allRunnersFailed(runners)) {
3896
- callback(true);
3897
- }
3898
- return;
3899
- }
3900
- Collections.apply(runners, function (runner) {
3901
- runner.forceMinPriority(handshake.transport.priority);
3902
- });
3903
- callback(null, handshake);
3904
- };
3905
- });
3906
- };
3907
- return BestConnectedEverStrategy;
3908
- }());
3909
- exports.__esModule = true;
3910
- exports["default"] = BestConnectedEverStrategy;
3911
- function connect(strategies, minPriority, callbackBuilder) {
3912
- var runners = Collections.map(strategies, function (strategy, i, _, rs) {
3913
- return strategy.connect(minPriority, callbackBuilder(i, rs));
3914
- });
3915
- return {
3916
- abort: function () {
3917
- Collections.apply(runners, abortRunner);
3918
- },
3919
- forceMinPriority: function (p) {
3920
- Collections.apply(runners, function (runner) {
3921
- runner.forceMinPriority(p);
3922
- });
3923
- }
3924
- };
3925
- }
3926
- function allRunnersFailed(runners) {
3927
- return Collections.all(runners, function (runner) {
3928
- return Boolean(runner.error);
3929
- });
3930
- }
3931
- function abortRunner(runner) {
3932
- if (!runner.error && !runner.aborted) {
3933
- runner.abort();
3934
- runner.aborted = true;
3935
- }
3936
- }
3937
-
3938
-
3939
- /***/ }),
3940
- /* 59 */
3941
- /***/ (function(module, exports, __webpack_require__) {
3942
-
3943
- "use strict";
3944
- var util_1 = __webpack_require__(11);
3945
- var runtime_1 = __webpack_require__(2);
3946
- var sequential_strategy_1 = __webpack_require__(57);
3947
- var Collections = __webpack_require__(9);
3948
- var CachedStrategy = (function () {
3949
- function CachedStrategy(strategy, transports, options) {
3950
- this.strategy = strategy;
3951
- this.transports = transports;
3952
- this.ttl = options.ttl || 1800 * 1000;
3953
- this.encrypted = options.encrypted;
3954
- this.timeline = options.timeline;
3955
- }
3956
- CachedStrategy.prototype.isSupported = function () {
3957
- return this.strategy.isSupported();
3958
- };
3959
- CachedStrategy.prototype.connect = function (minPriority, callback) {
3960
- var encrypted = this.encrypted;
3961
- var info = fetchTransportCache(encrypted);
3962
- var strategies = [this.strategy];
3963
- if (info && info.timestamp + this.ttl >= util_1["default"].now()) {
3964
- var transport = this.transports[info.transport];
3965
- if (transport) {
3966
- this.timeline.info({
3967
- cached: true,
3968
- transport: info.transport,
3969
- latency: info.latency
3970
- });
3971
- strategies.push(new sequential_strategy_1["default"]([transport], {
3972
- timeout: info.latency * 2 + 1000,
3973
- failFast: true
3974
- }));
3975
- }
3976
- }
3977
- var startTimestamp = util_1["default"].now();
3978
- var runner = strategies.pop().connect(minPriority, function cb(error, handshake) {
3979
- if (error) {
3980
- flushTransportCache(encrypted);
3981
- if (strategies.length > 0) {
3982
- startTimestamp = util_1["default"].now();
3983
- runner = strategies.pop().connect(minPriority, cb);
3984
- }
3985
- else {
3986
- callback(error);
3987
- }
3988
- }
3989
- else {
3990
- storeTransportCache(encrypted, handshake.transport.name, util_1["default"].now() - startTimestamp);
3991
- callback(null, handshake);
3992
- }
3993
- });
3994
- return {
3995
- abort: function () {
3996
- runner.abort();
3997
- },
3998
- forceMinPriority: function (p) {
3999
- minPriority = p;
4000
- if (runner) {
4001
- runner.forceMinPriority(p);
4002
- }
4003
- }
4004
- };
4005
- };
4006
- return CachedStrategy;
4007
- }());
4008
- exports.__esModule = true;
4009
- exports["default"] = CachedStrategy;
4010
- function getTransportCacheKey(encrypted) {
4011
- return "pusherTransport" + (encrypted ? "Encrypted" : "Unencrypted");
4012
- }
4013
- function fetchTransportCache(encrypted) {
4014
- var storage = runtime_1["default"].getLocalStorage();
4015
- if (storage) {
4016
- try {
4017
- var serializedCache = storage[getTransportCacheKey(encrypted)];
4018
- if (serializedCache) {
4019
- return JSON.parse(serializedCache);
4020
- }
4021
- }
4022
- catch (e) {
4023
- flushTransportCache(encrypted);
4024
- }
4025
- }
4026
- return null;
4027
- }
4028
- function storeTransportCache(encrypted, transport, latency) {
4029
- var storage = runtime_1["default"].getLocalStorage();
4030
- if (storage) {
4031
- try {
4032
- storage[getTransportCacheKey(encrypted)] = Collections.safeJSONStringify({
4033
- timestamp: util_1["default"].now(),
4034
- transport: transport,
4035
- latency: latency
4036
- });
4037
- }
4038
- catch (e) {
4039
- }
4040
- }
4041
- }
4042
- function flushTransportCache(encrypted) {
4043
- var storage = runtime_1["default"].getLocalStorage();
4044
- if (storage) {
4045
- try {
4046
- delete storage[getTransportCacheKey(encrypted)];
4047
- }
4048
- catch (e) {
4049
- }
4050
- }
4051
- }
4052
-
4053
-
4054
- /***/ }),
4055
- /* 60 */
4056
- /***/ (function(module, exports, __webpack_require__) {
4057
-
4058
- "use strict";
4059
- var timers_1 = __webpack_require__(12);
4060
- var DelayedStrategy = (function () {
4061
- function DelayedStrategy(strategy, _a) {
4062
- var number = _a.delay;
4063
- this.strategy = strategy;
4064
- this.options = { delay: number };
4065
- }
4066
- DelayedStrategy.prototype.isSupported = function () {
4067
- return this.strategy.isSupported();
4068
- };
4069
- DelayedStrategy.prototype.connect = function (minPriority, callback) {
4070
- var strategy = this.strategy;
4071
- var runner;
4072
- var timer = new timers_1.OneOffTimer(this.options.delay, function () {
4073
- runner = strategy.connect(minPriority, callback);
4074
- });
4075
- return {
4076
- abort: function () {
4077
- timer.ensureAborted();
4078
- if (runner) {
4079
- runner.abort();
4080
- }
4081
- },
4082
- forceMinPriority: function (p) {
4083
- minPriority = p;
4084
- if (runner) {
4085
- runner.forceMinPriority(p);
4086
- }
4087
- }
4088
- };
4089
- };
4090
- return DelayedStrategy;
4091
- }());
4092
- exports.__esModule = true;
4093
- exports["default"] = DelayedStrategy;
4094
-
4095
-
4096
- /***/ }),
4097
- /* 61 */
4098
- /***/ (function(module, exports) {
4099
-
4100
- "use strict";
4101
- var IfStrategy = (function () {
4102
- function IfStrategy(test, trueBranch, falseBranch) {
4103
- this.test = test;
4104
- this.trueBranch = trueBranch;
4105
- this.falseBranch = falseBranch;
4106
- }
4107
- IfStrategy.prototype.isSupported = function () {
4108
- var branch = this.test() ? this.trueBranch : this.falseBranch;
4109
- return branch.isSupported();
4110
- };
4111
- IfStrategy.prototype.connect = function (minPriority, callback) {
4112
- var branch = this.test() ? this.trueBranch : this.falseBranch;
4113
- return branch.connect(minPriority, callback);
4114
- };
4115
- return IfStrategy;
4116
- }());
4117
- exports.__esModule = true;
4118
- exports["default"] = IfStrategy;
4119
-
4120
-
4121
- /***/ }),
4122
- /* 62 */
4123
- /***/ (function(module, exports) {
4124
-
4125
- "use strict";
4126
- var FirstConnectedStrategy = (function () {
4127
- function FirstConnectedStrategy(strategy) {
4128
- this.strategy = strategy;
4129
- }
4130
- FirstConnectedStrategy.prototype.isSupported = function () {
4131
- return this.strategy.isSupported();
4132
- };
4133
- FirstConnectedStrategy.prototype.connect = function (minPriority, callback) {
4134
- var runner = this.strategy.connect(minPriority, function (error, handshake) {
4135
- if (handshake) {
4136
- runner.abort();
4137
- }
4138
- callback(error, handshake);
4139
- });
4140
- return runner;
4141
- };
4142
- return FirstConnectedStrategy;
4143
- }());
4144
- exports.__esModule = true;
4145
- exports["default"] = FirstConnectedStrategy;
4146
-
4147
-
4148
- /***/ }),
4149
- /* 63 */
4150
- /***/ (function(module, exports, __webpack_require__) {
4151
-
4152
- "use strict";
4153
- var defaults_1 = __webpack_require__(5);
4154
- exports.getGlobalConfig = function () {
4155
- return {
4156
- wsHost: defaults_1["default"].host,
4157
- wsPort: defaults_1["default"].ws_port,
4158
- wssPort: defaults_1["default"].wss_port,
4159
- wsPath: defaults_1["default"].ws_path,
4160
- httpHost: defaults_1["default"].sockjs_host,
4161
- httpPort: defaults_1["default"].sockjs_http_port,
4162
- httpsPort: defaults_1["default"].sockjs_https_port,
4163
- httpPath: defaults_1["default"].sockjs_path,
4164
- statsHost: defaults_1["default"].stats_host,
4165
- authEndpoint: defaults_1["default"].channel_auth_endpoint,
4166
- authTransport: defaults_1["default"].channel_auth_transport,
4167
- activity_timeout: defaults_1["default"].activity_timeout,
4168
- pong_timeout: defaults_1["default"].pong_timeout,
4169
- unavailable_timeout: defaults_1["default"].unavailable_timeout
4170
- };
4171
- };
4172
- exports.getClusterConfig = function (clusterName) {
4173
- return {
4174
- wsHost: "ws-" + clusterName + ".pusher.com",
4175
- httpHost: "sockjs-" + clusterName + ".pusher.com"
4176
- };
4177
- };
4178
-
4179
-
4180
- /***/ })
4181
- /******/ ])
4182
- });
4183
- ;