pusher-fake 2.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,12 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "capybara/poltergeist"
4
3
  require "capybara/rspec"
5
4
 
6
- Capybara.register_driver :poltergeist do |app|
7
- Capybara::Poltergeist::Driver.new(app, url_whitelist: [])
8
- end
9
-
10
5
  Capybara.app = Sinatra::Application
11
- Capybara.server = :webrick
12
- Capybara.default_driver = :poltergeist
6
+ Capybara.server = :puma, { Silent: true }
7
+ Capybara.default_driver = :selenium_chrome_headless
@@ -7,7 +7,7 @@ RSpec.configure do |config|
7
7
  PusherFake.configuration.reset!
8
8
  PusherFake.configuration.web_options.tap do |options|
9
9
  Pusher.url = "http://PUSHER_API_KEY:PUSHER_API_SECRET@" \
10
- "#{options[:host]}:#{options[:port]}/apps/PUSHER_APP_ID"
10
+ "#{options[:host]}:#{options[:port]}/apps/PUSHER_APP_ID"
11
11
  end
12
12
 
13
13
  @thread = Thread.new { PusherFake::Server.start }
@@ -10,27 +10,27 @@ class WebhookHelper
10
10
  end
11
11
  end
12
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
+
13
28
  thread = Thread.new do
14
29
  # Not explicitly requiring Thin::Server occasionally results in
15
30
  # Thin::Server.start not being defined.
16
31
  require "thin"
17
32
  require "thin/server"
18
33
 
19
- class WebhookEndpoint
20
- def self.call(environment)
21
- request = Rack::Request.new(environment)
22
- webhook = Pusher::WebHook.new(request)
23
-
24
- if webhook.valid?
25
- WebhookHelper.mutex.synchronize do
26
- WebhookHelper.events.concat(webhook.events)
27
- end
28
- end
29
-
30
- Rack::Response.new.finish
31
- end
32
- end
33
-
34
34
  EventMachine.run do
35
35
  Thin::Logging.silent = true
36
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: 2.0.0
4
+ version: 3.0.1
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: 2020-03-31 00:00:00.000000000 Z
11
+ date: 2021-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -67,131 +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.3
103
+ version: 2.0.2
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.3
110
+ version: 2.0.2
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: 13.0.1
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: 13.0.1
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.9.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.9.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.80.1
145
+ version: 1.20.0
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - '='
137
151
  - !ruby/object:Gem::Version
138
- version: 0.80.1
152
+ version: 1.20.0
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rubocop-performance
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - '='
144
158
  - !ruby/object:Gem::Version
145
- version: 1.5.2
159
+ version: 1.11.5
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - '='
151
165
  - !ruby/object:Gem::Version
152
- version: 1.5.2
166
+ version: 1.11.5
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
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: rubocop-rspec
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - '='
158
186
  - !ruby/object:Gem::Version
159
- version: 1.38.1
187
+ version: 2.4.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
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
160
202
  type: :development
161
203
  prerelease: false
162
204
  version_requirements: !ruby/object:Gem::Requirement
163
205
  requirements:
164
206
  - - '='
165
207
  - !ruby/object:Gem::Version
166
- version: 1.38.1
208
+ version: 3.142.7
167
209
  - !ruby/object:Gem::Dependency
168
210
  name: sinatra
169
211
  requirement: !ruby/object:Gem::Requirement
170
212
  requirements:
171
213
  - - '='
172
214
  - !ruby/object:Gem::Version
173
- version: 2.0.8.1
215
+ version: 2.1.0
174
216
  type: :development
175
217
  prerelease: false
176
218
  version_requirements: !ruby/object:Gem::Requirement
177
219
  requirements:
178
220
  - - '='
179
221
  - !ruby/object:Gem::Version
180
- version: 2.0.8.1
222
+ version: 2.1.0
181
223
  - !ruby/object:Gem::Dependency
182
224
  name: yard
183
225
  requirement: !ruby/object:Gem::Requirement
184
226
  requirements:
185
227
  - - '='
186
228
  - !ruby/object:Gem::Version
187
- version: 0.9.24
229
+ version: 0.9.26
188
230
  type: :development
189
231
  prerelease: false
190
232
  version_requirements: !ruby/object:Gem::Requirement
191
233
  requirements:
192
234
  - - '='
193
235
  - !ruby/object:Gem::Version
194
- version: 0.9.24
236
+ version: 0.9.26
195
237
  description: A fake Pusher server for development and testing.
196
238
  email: hello@tristandunn.com
197
239
  executables:
@@ -207,7 +249,6 @@ files:
207
249
  - lib/pusher-fake/channel/public.rb
208
250
  - lib/pusher-fake/configuration.rb
209
251
  - lib/pusher-fake/connection.rb
210
- - lib/pusher-fake/cucumber.rb
211
252
  - lib/pusher-fake/server.rb
212
253
  - lib/pusher-fake/server/application.rb
213
254
  - lib/pusher-fake/support/base.rb
@@ -234,7 +275,8 @@ files:
234
275
  - spec/lib/pusher_fake_spec.rb
235
276
  - spec/spec_helper.rb
236
277
  - spec/support/application.rb
237
- - 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
238
280
  - spec/support/application/views/index.erb
239
281
  - spec/support/capybara.rb
240
282
  - spec/support/coveralls.rb
@@ -249,7 +291,7 @@ homepage: https://github.com/tristandunn/pusher-fake
249
291
  licenses:
250
292
  - MIT
251
293
  metadata: {}
252
- post_install_message:
294
+ post_install_message:
253
295
  rdoc_options: []
254
296
  require_paths:
255
297
  - lib
@@ -257,46 +299,47 @@ required_ruby_version: !ruby/object:Gem::Requirement
257
299
  requirements:
258
300
  - - ">="
259
301
  - !ruby/object:Gem::Version
260
- version: '2.4'
302
+ version: '2.6'
261
303
  required_rubygems_version: !ruby/object:Gem::Requirement
262
304
  requirements:
263
305
  - - ">="
264
306
  - !ruby/object:Gem::Version
265
307
  version: '0'
266
308
  requirements: []
267
- rubygems_version: 3.0.3
268
- signing_key:
309
+ rubygems_version: 3.2.22
310
+ signing_key:
269
311
  specification_version: 4
270
312
  summary: A fake Pusher server for development and testing.
271
313
  test_files:
272
- - spec/spec_helper.rb
273
- - spec/features/server/event_spec.rb
274
- - spec/features/server/webhooks_spec.rb
275
314
  - spec/features/api/channels_spec.rb
276
315
  - spec/features/api/users_spec.rb
277
316
  - spec/features/client/connect_spec.rb
278
- - spec/features/client/presence_spec.rb
279
317
  - spec/features/client/event_spec.rb
318
+ - spec/features/client/presence_spec.rb
280
319
  - spec/features/client/subscribe_spec.rb
281
- - spec/support/capybara.rb
282
- - spec/support/webhooks.rb
283
- - spec/support/application.rb
284
- - spec/support/pusher_fake.rb
285
- - spec/support/matchers/have_configuration_option.rb
286
- - 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
287
335
  - spec/support/application/views/index.erb
336
+ - spec/support/application.rb
337
+ - spec/support/capybara.rb
288
338
  - spec/support/coveralls.rb
289
339
  - spec/support/helpers/connect.rb
290
- - spec/support/helpers/subscription.rb
291
340
  - spec/support/helpers/event.rb
341
+ - spec/support/helpers/subscription.rb
292
342
  - spec/support/helpers/user.rb
293
- - spec/lib/pusher_fake_spec.rb
294
- - spec/lib/pusher-fake/webhook_spec.rb
295
- - spec/lib/pusher-fake/server_spec.rb
296
- - spec/lib/pusher-fake/configuration_spec.rb
297
- - spec/lib/pusher-fake/server/application_spec.rb
298
- - spec/lib/pusher-fake/channel/presence_spec.rb
299
- - spec/lib/pusher-fake/channel/public_spec.rb
300
- - spec/lib/pusher-fake/channel/private_spec.rb
301
- - spec/lib/pusher-fake/connection_spec.rb
302
- - 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,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "pusher-fake/support/cucumber"
4
-
5
- warn %([DEPRECATION] "pusher-fake/cucumber" is deprecated.) +
6
- %(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
- ;