pingerchips-js 1.0.0-a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/.editorconfig +14 -0
  2. package/.github/ISSUE_TEMPLATE.md +11 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  4. package/.github/dependabot.yml +14 -0
  5. package/.github/stale.yml +26 -0
  6. package/.github/workflows/release.yml +112 -0
  7. package/.github/workflows/release_pr.yml +43 -0
  8. package/.github/workflows/run-tests.yml +62 -0
  9. package/.gitmodules +3 -0
  10. package/.prettierrc +2 -0
  11. package/CHANGELOG.md +924 -0
  12. package/LICENCE +19 -0
  13. package/Makefile +78 -0
  14. package/README.md +707 -0
  15. package/bower.json +28 -0
  16. package/dist/node/pusher.js +10870 -0
  17. package/dist/node/pusher.js.map +1 -0
  18. package/dist/react-native/pusher.js +9 -0
  19. package/dist/react-native/pusher.js.map +1 -0
  20. package/dist/web/json2.js +486 -0
  21. package/dist/web/json2.min.js +1 -0
  22. package/dist/web/pusher-with-encryption.js +7009 -0
  23. package/dist/web/pusher-with-encryption.js.map +1 -0
  24. package/dist/web/pusher-with-encryption.min.js +9 -0
  25. package/dist/web/pusher-with-encryption.min.js.map +1 -0
  26. package/dist/web/pusher.js +4587 -0
  27. package/dist/web/pusher.js.map +1 -0
  28. package/dist/web/pusher.min.js +9 -0
  29. package/dist/web/pusher.min.js.map +1 -0
  30. package/dist/web/sockjs.js +2435 -0
  31. package/dist/web/sockjs.min.js +89 -0
  32. package/dist/worker/pusher-with-encryption.worker.js +6622 -0
  33. package/dist/worker/pusher-with-encryption.worker.js.map +1 -0
  34. package/dist/worker/pusher-with-encryption.worker.min.js +9 -0
  35. package/dist/worker/pusher-with-encryption.worker.min.js.map +1 -0
  36. package/dist/worker/pusher.worker.js +4200 -0
  37. package/dist/worker/pusher.worker.js.map +1 -0
  38. package/dist/worker/pusher.worker.min.js +9 -0
  39. package/dist/worker/pusher.worker.min.js.map +1 -0
  40. package/index.d.ts +29 -0
  41. package/integration_tests_server/index.js +176 -0
  42. package/integration_tests_server/package-lock.json +1177 -0
  43. package/integration_tests_server/package.json +15 -0
  44. package/node.js +1 -0
  45. package/package.json +70 -0
  46. package/pusher-with-encryption/index.js +1 -0
  47. package/react-native/index.d.ts +29 -0
  48. package/react-native/index.js +1 -0
  49. package/spec/config/jasmine/helpers/reporter.js +14 -0
  50. package/spec/config/jasmine/integration.json +13 -0
  51. package/spec/config/jasmine/unit.json +13 -0
  52. package/spec/config/jasmine/webpack.integration.js +33 -0
  53. package/spec/config/jasmine/webpack.unit.js +30 -0
  54. package/spec/config/karma/available_browsers.json +4957 -0
  55. package/spec/config/karma/config.ci.js +25 -0
  56. package/spec/config/karma/config.common.js +50 -0
  57. package/spec/config/karma/config.integration.js +26 -0
  58. package/spec/config/karma/config.unit.js +10 -0
  59. package/spec/config/karma/config.worker.js +34 -0
  60. package/spec/config/karma/integration.js +24 -0
  61. package/spec/config/karma/unit.js +20 -0
  62. package/spec/javascripts/helpers/mocks.js +274 -0
  63. package/spec/javascripts/helpers/node/integration.js +33 -0
  64. package/spec/javascripts/helpers/node/mock-dom-dependencies.ts +1 -0
  65. package/spec/javascripts/helpers/pusher_integration.js +1 -0
  66. package/spec/javascripts/helpers/pusher_integration_class.ts +12 -0
  67. package/spec/javascripts/helpers/timers/promises.js +9 -0
  68. package/spec/javascripts/helpers/waitsFor.js +37 -0
  69. package/spec/javascripts/helpers/web/integration.js +44 -0
  70. package/spec/javascripts/helpers/worker/mock-dom-dependencies.js +1 -0
  71. package/spec/javascripts/integration/core/cluster_config_spec.js +153 -0
  72. package/spec/javascripts/integration/core/falling_back_spec.js +195 -0
  73. package/spec/javascripts/integration/core/pusher_spec/index.js +68 -0
  74. package/spec/javascripts/integration/core/pusher_spec/test_builder.js +715 -0
  75. package/spec/javascripts/integration/core/timeout_configuration_spec.js +200 -0
  76. package/spec/javascripts/integration/core/transport_lists_spec.js +103 -0
  77. package/spec/javascripts/integration/index.node.js +12 -0
  78. package/spec/javascripts/integration/index.web.js +63 -0
  79. package/spec/javascripts/integration/index.worker.js +13 -0
  80. package/spec/javascripts/integration/web/dom/jsonp_spec.js +97 -0
  81. package/spec/javascripts/integration/web/dom/script_request_spec.js +90 -0
  82. package/spec/javascripts/polyfills/index.js +105 -0
  83. package/spec/javascripts/unit/core/channels/channel_spec.js +355 -0
  84. package/spec/javascripts/unit/core/channels/channels_spec.js +94 -0
  85. package/spec/javascripts/unit/core/channels/encrypted_channel_spec.js +343 -0
  86. package/spec/javascripts/unit/core/channels/presence_channel_spec.js +553 -0
  87. package/spec/javascripts/unit/core/channels/private_channel_spec.js +182 -0
  88. package/spec/javascripts/unit/core/config_spec.js +507 -0
  89. package/spec/javascripts/unit/core/connection/connection_manager_spec.js +656 -0
  90. package/spec/javascripts/unit/core/connection/connection_spec.js +286 -0
  91. package/spec/javascripts/unit/core/connection/handshake_spec.js +160 -0
  92. package/spec/javascripts/unit/core/connection/protocol_spec.js +420 -0
  93. package/spec/javascripts/unit/core/defaults_spec.js +26 -0
  94. package/spec/javascripts/unit/core/events_dispatcher_spec.js +385 -0
  95. package/spec/javascripts/unit/core/http/http_polling_socket_spec.js +60 -0
  96. package/spec/javascripts/unit/core/http/http_request_spec.js +185 -0
  97. package/spec/javascripts/unit/core/http/http_socket_spec.js +370 -0
  98. package/spec/javascripts/unit/core/http/http_streaming_socket_spec.js +56 -0
  99. package/spec/javascripts/unit/core/http/http_xhr_request_spec.js +164 -0
  100. package/spec/javascripts/unit/core/logger_spec.js +133 -0
  101. package/spec/javascripts/unit/core/pusher_spec.js +613 -0
  102. package/spec/javascripts/unit/core/pusher_with_encryption_spec.js +18 -0
  103. package/spec/javascripts/unit/core/strategies/best_connected_ever_strategy_spec.js +104 -0
  104. package/spec/javascripts/unit/core/strategies/delayed_strategy_spec.js +95 -0
  105. package/spec/javascripts/unit/core/strategies/first_connected_strategy_spec.js +68 -0
  106. package/spec/javascripts/unit/core/strategies/if_strategy_spec.js +165 -0
  107. package/spec/javascripts/unit/core/strategies/sequential_strategy_spec.js +213 -0
  108. package/spec/javascripts/unit/core/strategies/transport_strategy_spec.js +250 -0
  109. package/spec/javascripts/unit/core/strategies/websocket_prioritized_cached_strategy_spec.js +400 -0
  110. package/spec/javascripts/unit/core/timeline/timeline_spec.js +153 -0
  111. package/spec/javascripts/unit/core/transports/assistant_to_the_transport_manager_spec.js +223 -0
  112. package/spec/javascripts/unit/core/transports/hosts_and_ports_spec.js +85 -0
  113. package/spec/javascripts/unit/core/transports/transport_connection_spec.js +585 -0
  114. package/spec/javascripts/unit/core/transports/transport_manager_spec.js +64 -0
  115. package/spec/javascripts/unit/core/user_spec.js +303 -0
  116. package/spec/javascripts/unit/core/utils/periodic_timer_spec.js +74 -0
  117. package/spec/javascripts/unit/core/utils/timers_spec.js +157 -0
  118. package/spec/javascripts/unit/core/utils/url_store_spec.js +14 -0
  119. package/spec/javascripts/unit/core/watchlist_spec.js +48 -0
  120. package/spec/javascripts/unit/core_with_runtime/auth/channel_authorizer_spec.js +137 -0
  121. package/spec/javascripts/unit/core_with_runtime/auth/deprecated_channel_authorizer_spec.js +48 -0
  122. package/spec/javascripts/unit/core_with_runtime/auth/user_authorizer_spec.js +128 -0
  123. package/spec/javascripts/unit/core_with_runtime/readme.md +5 -0
  124. package/spec/javascripts/unit/index.node.js +11 -0
  125. package/spec/javascripts/unit/index.web.js +12 -0
  126. package/spec/javascripts/unit/index.worker.js +11 -0
  127. package/spec/javascripts/unit/isomorphic/transports/hosts_and_ports_spec.js +82 -0
  128. package/spec/javascripts/unit/isomorphic/transports/transports_spec.js +202 -0
  129. package/spec/javascripts/unit/node/timeline_sender_spec.js +83 -0
  130. package/spec/javascripts/unit/web/dom/dependency_loader_spec.js +249 -0
  131. package/spec/javascripts/unit/web/dom/jsonp_request_spec.js +130 -0
  132. package/spec/javascripts/unit/web/dom/script_receiver_factory_spec.js +68 -0
  133. package/spec/javascripts/unit/web/http/http_xdomain_request_spec.js +222 -0
  134. package/spec/javascripts/unit/web/pusher_authorizer_spec.js +64 -0
  135. package/spec/javascripts/unit/web/timeline/timeline_sender_spec.js +131 -0
  136. package/spec/javascripts/unit/web/transports/hosts_and_ports_spec.js +127 -0
  137. package/spec/javascripts/unit/web/transports/transports_spec.js +444 -0
  138. package/spec/javascripts/unit/worker/channel_authorizer_spec.js +156 -0
  139. package/spec/javascripts/unit/worker/timeline_sender_spec.js +76 -0
  140. package/src/core/auth/auth_transports.ts +18 -0
  141. package/src/core/auth/channel_authorizer.ts +64 -0
  142. package/src/core/auth/deprecated_channel_authorizer.ts +58 -0
  143. package/src/core/auth/options.ts +78 -0
  144. package/src/core/auth/user_authenticator.ts +62 -0
  145. package/src/core/base64.ts +49 -0
  146. package/src/core/channels/channel.ts +163 -0
  147. package/src/core/channels/channel_table.ts +7 -0
  148. package/src/core/channels/channels.ts +85 -0
  149. package/src/core/channels/encrypted_channel.ts +149 -0
  150. package/src/core/channels/members.ts +80 -0
  151. package/src/core/channels/metadata.ts +5 -0
  152. package/src/core/channels/presence_channel.ts +113 -0
  153. package/src/core/channels/private_channel.ts +25 -0
  154. package/src/core/config.ts +189 -0
  155. package/src/core/connection/callbacks.ts +21 -0
  156. package/src/core/connection/connection.ts +160 -0
  157. package/src/core/connection/connection_manager.ts +371 -0
  158. package/src/core/connection/connection_manager_options.ts +14 -0
  159. package/src/core/connection/handshake/handshake_payload.ts +10 -0
  160. package/src/core/connection/handshake/index.ts +90 -0
  161. package/src/core/connection/protocol/action.ts +8 -0
  162. package/src/core/connection/protocol/message-types.ts +8 -0
  163. package/src/core/connection/protocol/protocol.ts +154 -0
  164. package/src/core/defaults.ts +66 -0
  165. package/src/core/errors.ts +69 -0
  166. package/src/core/events/callback.ts +6 -0
  167. package/src/core/events/callback_registry.ts +75 -0
  168. package/src/core/events/callback_table.ts +7 -0
  169. package/src/core/events/dispatcher.ts +84 -0
  170. package/src/core/http/ajax.ts +24 -0
  171. package/src/core/http/http_factory.ts +16 -0
  172. package/src/core/http/http_polling_socket.ts +24 -0
  173. package/src/core/http/http_request.ts +81 -0
  174. package/src/core/http/http_socket.ts +220 -0
  175. package/src/core/http/http_streaming_socket.ts +19 -0
  176. package/src/core/http/request_hooks.ts +9 -0
  177. package/src/core/http/socket_hooks.ts +11 -0
  178. package/src/core/http/state.ts +7 -0
  179. package/src/core/http/url_location.ts +6 -0
  180. package/src/core/logger.ts +53 -0
  181. package/src/core/options.ts +59 -0
  182. package/src/core/pusher-licence.js +7 -0
  183. package/src/core/pusher-with-encryption.js +1 -0
  184. package/src/core/pusher-with-encryption.ts +14 -0
  185. package/src/core/pusher.js +2 -0
  186. package/src/core/pusher.ts +249 -0
  187. package/src/core/reachability.ts +7 -0
  188. package/src/core/socket.ts +14 -0
  189. package/src/core/strategies/best_connected_ever_strategy.ts +81 -0
  190. package/src/core/strategies/delayed_strategy.ts +48 -0
  191. package/src/core/strategies/first_connected_strategy.ts +28 -0
  192. package/src/core/strategies/if_strategy.ts +34 -0
  193. package/src/core/strategies/sequential_strategy.ts +129 -0
  194. package/src/core/strategies/strategy.ts +8 -0
  195. package/src/core/strategies/strategy_builder.ts +67 -0
  196. package/src/core/strategies/strategy_options.ts +18 -0
  197. package/src/core/strategies/strategy_runner.ts +6 -0
  198. package/src/core/strategies/transport_strategy.ts +144 -0
  199. package/src/core/strategies/websocket_prioritized_cached_strategy.ts +157 -0
  200. package/src/core/timeline/level.ts +7 -0
  201. package/src/core/timeline/timeline.ts +90 -0
  202. package/src/core/timeline/timeline_sender.ts +33 -0
  203. package/src/core/timeline/timeline_transport.ts +11 -0
  204. package/src/core/transports/assistant_to_the_transport_manager.ts +104 -0
  205. package/src/core/transports/ping_delay_options.ts +7 -0
  206. package/src/core/transports/transport.ts +54 -0
  207. package/src/core/transports/transport_connection.ts +241 -0
  208. package/src/core/transports/transport_connection_options.ts +8 -0
  209. package/src/core/transports/transport_hooks.ts +16 -0
  210. package/src/core/transports/transport_manager.ts +52 -0
  211. package/src/core/transports/transports_table.ts +12 -0
  212. package/src/core/transports/url_scheme.ts +13 -0
  213. package/src/core/transports/url_schemes.ts +47 -0
  214. package/src/core/user.ts +186 -0
  215. package/src/core/util.ts +34 -0
  216. package/src/core/utils/collections.ts +353 -0
  217. package/src/core/utils/factory.ts +75 -0
  218. package/src/core/utils/flat_promise.ts +10 -0
  219. package/src/core/utils/timers/abstract_timer.ts +39 -0
  220. package/src/core/utils/timers/index.ts +39 -0
  221. package/src/core/utils/timers/scheduling.ts +11 -0
  222. package/src/core/utils/timers/timed_callback.ts +5 -0
  223. package/src/core/utils/url_store.ts +48 -0
  224. package/src/core/watchlist.ts +31 -0
  225. package/src/d.ts/constants/index.d.ts +5 -0
  226. package/src/d.ts/faye-websocket/faye-websocket.d.ts +21 -0
  227. package/src/d.ts/global/global.d.ts +1 -0
  228. package/src/d.ts/module/module.d.ts +12 -0
  229. package/src/d.ts/tweetnacl-util/index.d.ts +6 -0
  230. package/src/d.ts/window/events.d.ts +4 -0
  231. package/src/d.ts/window/sockjs.d.ts +3 -0
  232. package/src/d.ts/window/websocket.d.ts +4 -0
  233. package/src/d.ts/window/xmlhttprequest.d.ts +3 -0
  234. package/src/runtimes/interface.ts +59 -0
  235. package/src/runtimes/isomorphic/auth/xhr_auth.ts +90 -0
  236. package/src/runtimes/isomorphic/default_strategy.ts +155 -0
  237. package/src/runtimes/isomorphic/http/http.ts +32 -0
  238. package/src/runtimes/isomorphic/http/http_xhr_request.ts +35 -0
  239. package/src/runtimes/isomorphic/runtime.ts +62 -0
  240. package/src/runtimes/isomorphic/timeline/xhr_timeline.ts +50 -0
  241. package/src/runtimes/isomorphic/transports/transport_connection_initializer.ts +19 -0
  242. package/src/runtimes/isomorphic/transports/transports.ts +81 -0
  243. package/src/runtimes/node/net_info.ts +10 -0
  244. package/src/runtimes/node/runtime.ts +68 -0
  245. package/src/runtimes/react-native/net_info.ts +42 -0
  246. package/src/runtimes/react-native/runtime.ts +65 -0
  247. package/src/runtimes/web/auth/jsonp_auth.ts +51 -0
  248. package/src/runtimes/web/browser.ts +24 -0
  249. package/src/runtimes/web/default_strategy.ts +201 -0
  250. package/src/runtimes/web/dom/dependencies.ts +16 -0
  251. package/src/runtimes/web/dom/dependency_loader.ts +93 -0
  252. package/src/runtimes/web/dom/json2.js +486 -0
  253. package/src/runtimes/web/dom/jsonp_request.ts +52 -0
  254. package/src/runtimes/web/dom/script_receiver.ts +8 -0
  255. package/src/runtimes/web/dom/script_receiver_factory.ts +57 -0
  256. package/src/runtimes/web/dom/script_request.ts +85 -0
  257. package/src/runtimes/web/dom/sockjs/COPYING +11 -0
  258. package/src/runtimes/web/dom/sockjs/Changelog +147 -0
  259. package/src/runtimes/web/dom/sockjs/LICENSE-MIT-SockJS +19 -0
  260. package/src/runtimes/web/dom/sockjs/Makefile +109 -0
  261. package/src/runtimes/web/dom/sockjs/README.md +388 -0
  262. package/src/runtimes/web/dom/sockjs/VERSION-GEN +17 -0
  263. package/src/runtimes/web/dom/sockjs/bin/render.coffee +111 -0
  264. package/src/runtimes/web/dom/sockjs/bin/run_testling.sh +135 -0
  265. package/src/runtimes/web/dom/sockjs/lib/all.js +9 -0
  266. package/src/runtimes/web/dom/sockjs/lib/dom.js +185 -0
  267. package/src/runtimes/web/dom/sockjs/lib/dom2.js +280 -0
  268. package/src/runtimes/web/dom/sockjs/lib/eventemitter.js +57 -0
  269. package/src/runtimes/web/dom/sockjs/lib/heartbeater.js +70 -0
  270. package/src/runtimes/web/dom/sockjs/lib/index.js +41 -0
  271. package/src/runtimes/web/dom/sockjs/lib/info.js +117 -0
  272. package/src/runtimes/web/dom/sockjs/lib/json2.min.js +1 -0
  273. package/src/runtimes/web/dom/sockjs/lib/reventtarget.js +55 -0
  274. package/src/runtimes/web/dom/sockjs/lib/simpleevent.js +28 -0
  275. package/src/runtimes/web/dom/sockjs/lib/sockjs.js +288 -0
  276. package/src/runtimes/web/dom/sockjs/lib/test-hooks.js +16 -0
  277. package/src/runtimes/web/dom/sockjs/lib/trans-iframe-eventsource.js +29 -0
  278. package/src/runtimes/web/dom/sockjs/lib/trans-iframe-htmlfile.js +35 -0
  279. package/src/runtimes/web/dom/sockjs/lib/trans-iframe-within.js +100 -0
  280. package/src/runtimes/web/dom/sockjs/lib/trans-iframe-xhr-polling.js +30 -0
  281. package/src/runtimes/web/dom/sockjs/lib/trans-iframe.js +103 -0
  282. package/src/runtimes/web/dom/sockjs/lib/trans-jsonp-polling.js +106 -0
  283. package/src/runtimes/web/dom/sockjs/lib/trans-jsonp-receiver.js +116 -0
  284. package/src/runtimes/web/dom/sockjs/lib/trans-polling.js +44 -0
  285. package/src/runtimes/web/dom/sockjs/lib/trans-receiver-eventsource.js +41 -0
  286. package/src/runtimes/web/dom/sockjs/lib/trans-receiver-htmlfile.js +65 -0
  287. package/src/runtimes/web/dom/sockjs/lib/trans-receiver-xhr.js +42 -0
  288. package/src/runtimes/web/dom/sockjs/lib/trans-sender.js +138 -0
  289. package/src/runtimes/web/dom/sockjs/lib/trans-xhr.js +29 -0
  290. package/src/runtimes/web/dom/sockjs/lib/utils.js +297 -0
  291. package/src/runtimes/web/dom/sockjs/package.json +18 -0
  292. package/src/runtimes/web/dom/sockjs/version +1 -0
  293. package/src/runtimes/web/http/http.ts +8 -0
  294. package/src/runtimes/web/http/http_xdomain_request.ts +37 -0
  295. package/src/runtimes/web/net_info.ts +50 -0
  296. package/src/runtimes/web/runtime.ts +174 -0
  297. package/src/runtimes/web/timeline/jsonp_timeline.ts +34 -0
  298. package/src/runtimes/web/transports/transport_connection_initializer.ts +39 -0
  299. package/src/runtimes/web/transports/transports.ts +65 -0
  300. package/src/runtimes/worker/auth/fetch_auth.ts +69 -0
  301. package/src/runtimes/worker/net_info.ts +10 -0
  302. package/src/runtimes/worker/runtime.ts +75 -0
  303. package/src/runtimes/worker/timeline/fetch_timeline.ts +39 -0
  304. package/tsconfig.json +26 -0
  305. package/types/spec/javascripts/helpers/node/mock-dom-dependencies.d.ts +1 -0
  306. package/types/spec/javascripts/helpers/pusher_integration_class.d.ts +4 -0
  307. package/types/src/core/auth/auth_transports.d.ts +9 -0
  308. package/types/src/core/auth/channel_authorizer.d.ts +3 -0
  309. package/types/src/core/auth/deprecated_channel_authorizer.d.ts +18 -0
  310. package/types/src/core/auth/options.d.ts +48 -0
  311. package/types/src/core/auth/user_authenticator.d.ts +3 -0
  312. package/types/src/core/base64.d.ts +1 -0
  313. package/types/src/core/channels/channel.d.ts +23 -0
  314. package/types/src/core/channels/channel_table.d.ts +5 -0
  315. package/types/src/core/channels/channels.d.ts +12 -0
  316. package/types/src/core/channels/encrypted_channel.d.ts +15 -0
  317. package/types/src/core/channels/members.d.ts +14 -0
  318. package/types/src/core/channels/metadata.d.ts +4 -0
  319. package/types/src/core/channels/presence_channel.d.ts +13 -0
  320. package/types/src/core/channels/private_channel.d.ts +5 -0
  321. package/types/src/core/config.d.ts +31 -0
  322. package/types/src/core/connection/callbacks.d.ts +18 -0
  323. package/types/src/core/connection/connection.d.ts +16 -0
  324. package/types/src/core/connection/connection_manager.d.ts +50 -0
  325. package/types/src/core/connection/connection_manager_options.d.ts +11 -0
  326. package/types/src/core/connection/handshake/handshake_payload.d.ts +8 -0
  327. package/types/src/core/connection/handshake/index.d.ts +12 -0
  328. package/types/src/core/connection/protocol/action.d.ts +7 -0
  329. package/types/src/core/connection/protocol/message-types.d.ts +7 -0
  330. package/types/src/core/connection/protocol/protocol.d.ts +10 -0
  331. package/types/src/core/defaults.d.ts +26 -0
  332. package/types/src/core/errors.d.ts +28 -0
  333. package/types/src/core/events/callback.d.ts +5 -0
  334. package/types/src/core/events/callback_registry.d.ts +11 -0
  335. package/types/src/core/events/callback_table.d.ts +5 -0
  336. package/types/src/core/events/dispatcher.d.ts +14 -0
  337. package/types/src/core/http/ajax.d.ts +16 -0
  338. package/types/src/core/http/http_factory.d.ts +13 -0
  339. package/types/src/core/http/http_polling_socket.d.ts +3 -0
  340. package/types/src/core/http/http_request.d.ts +17 -0
  341. package/types/src/core/http/http_socket.d.ts +32 -0
  342. package/types/src/core/http/http_streaming_socket.d.ts +3 -0
  343. package/types/src/core/http/request_hooks.d.ts +6 -0
  344. package/types/src/core/http/socket_hooks.d.ts +8 -0
  345. package/types/src/core/http/state.d.ts +6 -0
  346. package/types/src/core/http/url_location.d.ts +5 -0
  347. package/types/src/core/logger.d.ts +11 -0
  348. package/types/src/core/options.d.ts +34 -0
  349. package/types/src/core/pusher-with-encryption.d.ts +5 -0
  350. package/types/src/core/pusher.d.ts +49 -0
  351. package/types/src/core/reachability.d.ts +5 -0
  352. package/types/src/core/socket.d.ts +12 -0
  353. package/types/src/core/strategies/best_connected_ever_strategy.d.ts +10 -0
  354. package/types/src/core/strategies/delayed_strategy.d.ts +15 -0
  355. package/types/src/core/strategies/first_connected_strategy.d.ts +8 -0
  356. package/types/src/core/strategies/if_strategy.d.ts +10 -0
  357. package/types/src/core/strategies/sequential_strategy.d.ts +16 -0
  358. package/types/src/core/strategies/strategy.d.ts +6 -0
  359. package/types/src/core/strategies/strategy_builder.d.ts +5 -0
  360. package/types/src/core/strategies/strategy_options.d.ts +16 -0
  361. package/types/src/core/strategies/strategy_runner.d.ts +5 -0
  362. package/types/src/core/strategies/transport_strategy.d.ts +15 -0
  363. package/types/src/core/strategies/websocket_prioritized_cached_strategy.d.ts +20 -0
  364. package/types/src/core/timeline/level.d.ts +6 -0
  365. package/types/src/core/timeline/timeline.d.ts +25 -0
  366. package/types/src/core/timeline/timeline_sender.d.ts +13 -0
  367. package/types/src/core/timeline/timeline_transport.d.ts +6 -0
  368. package/types/src/core/transports/assistant_to_the_transport_manager.d.ts +14 -0
  369. package/types/src/core/transports/ping_delay_options.d.ts +6 -0
  370. package/types/src/core/transports/transport.d.ts +8 -0
  371. package/types/src/core/transports/transport_connection.d.ts +35 -0
  372. package/types/src/core/transports/transport_connection_options.d.ts +6 -0
  373. package/types/src/core/transports/transport_hooks.d.ts +13 -0
  374. package/types/src/core/transports/transport_manager.d.ts +14 -0
  375. package/types/src/core/transports/transports_table.d.ts +10 -0
  376. package/types/src/core/transports/url_scheme.d.ts +11 -0
  377. package/types/src/core/transports/url_schemes.d.ts +4 -0
  378. package/types/src/core/user.d.ts +21 -0
  379. package/types/src/core/util.d.ts +8 -0
  380. package/types/src/core/utils/collections.d.ts +18 -0
  381. package/types/src/core/utils/factory.d.ts +29 -0
  382. package/types/src/core/utils/flat_promise.d.ts +6 -0
  383. package/types/src/core/utils/timers/abstract_timer.d.ts +10 -0
  384. package/types/src/core/utils/timers/index.d.ts +9 -0
  385. package/types/src/core/utils/timers/scheduling.d.ts +8 -0
  386. package/types/src/core/utils/timers/timed_callback.d.ts +4 -0
  387. package/types/src/core/utils/url_store.d.ts +4 -0
  388. package/types/src/core/watchlist.d.ts +8 -0
  389. package/types/src/runtimes/interface.d.ts +43 -0
  390. package/types/src/runtimes/isomorphic/auth/xhr_auth.d.ts +3 -0
  391. package/types/src/runtimes/isomorphic/default_strategy.d.ts +5 -0
  392. package/types/src/runtimes/isomorphic/http/http.d.ts +3 -0
  393. package/types/src/runtimes/isomorphic/http/http_xhr_request.d.ts +3 -0
  394. package/types/src/runtimes/isomorphic/runtime.d.ts +2 -0
  395. package/types/src/runtimes/isomorphic/timeline/xhr_timeline.d.ts +6 -0
  396. package/types/src/runtimes/isomorphic/transports/transport_connection_initializer.d.ts +1 -0
  397. package/types/src/runtimes/isomorphic/transports/transports.d.ts +5 -0
  398. package/types/src/runtimes/node/net_info.d.ts +6 -0
  399. package/types/src/runtimes/node/runtime.d.ts +3 -0
  400. package/types/src/runtimes/react-native/net_info.d.ts +8 -0
  401. package/types/src/runtimes/react-native/runtime.d.ts +3 -0
  402. package/types/src/runtimes/web/auth/jsonp_auth.d.ts +3 -0
  403. package/types/src/runtimes/web/browser.d.ts +19 -0
  404. package/types/src/runtimes/web/default_strategy.d.ts +5 -0
  405. package/types/src/runtimes/web/dom/dependencies.d.ts +4 -0
  406. package/types/src/runtimes/web/dom/dependency_loader.d.ts +10 -0
  407. package/types/src/runtimes/web/dom/jsonp_request.d.ts +10 -0
  408. package/types/src/runtimes/web/dom/script_receiver.d.ts +7 -0
  409. package/types/src/runtimes/web/dom/script_receiver_factory.d.ts +10 -0
  410. package/types/src/runtimes/web/dom/script_request.d.ts +9 -0
  411. package/types/src/runtimes/web/http/http.d.ts +2 -0
  412. package/types/src/runtimes/web/http/http_xdomain_request.d.ts +3 -0
  413. package/types/src/runtimes/web/net_info.d.ts +7 -0
  414. package/types/src/runtimes/web/runtime.d.ts +3 -0
  415. package/types/src/runtimes/web/timeline/jsonp_timeline.d.ts +6 -0
  416. package/types/src/runtimes/web/transports/transport_connection_initializer.d.ts +1 -0
  417. package/types/src/runtimes/web/transports/transports.d.ts +2 -0
  418. package/types/src/runtimes/worker/auth/fetch_auth.d.ts +3 -0
  419. package/types/src/runtimes/worker/net_info.d.ts +6 -0
  420. package/types/src/runtimes/worker/runtime.d.ts +3 -0
  421. package/types/src/runtimes/worker/timeline/fetch_timeline.d.ts +6 -0
  422. package/webpack/config.node.js +26 -0
  423. package/webpack/config.react-native.js +35 -0
  424. package/webpack/config.shared.js +50 -0
  425. package/webpack/config.web.js +36 -0
  426. package/webpack/config.worker.js +42 -0
  427. package/webpack/dev.server.js +17 -0
  428. package/webpack/hosting_config.js +6 -0
  429. package/with-encryption/index.d.ts +29 -0
  430. package/with-encryption/index.js +4 -0
  431. package/worker/index.d.ts +29 -0
  432. package/worker/index.js +1 -0
  433. package/worker/with-encryption/index.d.ts +29 -0
  434. package/worker/with-encryption/index.js +1 -0
@@ -0,0 +1,154 @@
1
+ import Action from './action';
2
+ import { PusherEvent } from './message-types';
3
+ /**
4
+ * Provides functions for handling Pusher protocol-specific messages.
5
+ */
6
+
7
+ const Protocol = {
8
+ /**
9
+ * Decodes a message in a Pusher format.
10
+ *
11
+ * The MessageEvent we receive from the transport should contain a pusher event
12
+ * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the
13
+ * data field
14
+ *
15
+ * The pusher event may contain a data field too, and it may also be
16
+ * serialised as JSON
17
+ *
18
+ * Throws errors when messages are not parse'able.
19
+ *
20
+ * @param {MessageEvent} messageEvent
21
+ * @return {PusherEvent}
22
+ */
23
+ decodeMessage: function(messageEvent: MessageEvent): PusherEvent {
24
+ try {
25
+ var messageData = JSON.parse(messageEvent.data);
26
+ var pusherEventData = messageData.data;
27
+ if (typeof pusherEventData === 'string') {
28
+ try {
29
+ pusherEventData = JSON.parse(messageData.data);
30
+ } catch (e) {}
31
+ }
32
+ var pusherEvent: PusherEvent = {
33
+ event: messageData.event,
34
+ channel: messageData.channel,
35
+ data: pusherEventData
36
+ };
37
+ if (messageData.user_id) {
38
+ pusherEvent.user_id = messageData.user_id;
39
+ }
40
+ return pusherEvent;
41
+ } catch (e) {
42
+ throw { type: 'MessageParseError', error: e, data: messageEvent.data };
43
+ }
44
+ },
45
+
46
+ /**
47
+ * Encodes a message to be sent.
48
+ *
49
+ * @param {PusherEvent} event
50
+ * @return {String}
51
+ */
52
+ encodeMessage: function(event: PusherEvent): string {
53
+ return JSON.stringify(event);
54
+ },
55
+
56
+ /**
57
+ * Processes a handshake message and returns appropriate actions.
58
+ *
59
+ * Returns an object with an 'action' and other action-specific properties.
60
+ *
61
+ * There are three outcomes when calling this function. First is a successful
62
+ * connection attempt, when pusher:connection_established is received, which
63
+ * results in a 'connected' action with an 'id' property. When passed a
64
+ * pusher:error event, it returns a result with action appropriate to the
65
+ * close code and an error. Otherwise, it raises an exception.
66
+ *
67
+ * @param {String} message
68
+ * @result Object
69
+ */
70
+ processHandshake: function(messageEvent: MessageEvent): Action {
71
+ var message = Protocol.decodeMessage(messageEvent);
72
+
73
+ if (message.event === 'pusher:connection_established') {
74
+ if (!message.data.activity_timeout) {
75
+ throw 'No activity timeout specified in handshake';
76
+ }
77
+ return {
78
+ action: 'connected',
79
+ id: message.data.socket_id,
80
+ activityTimeout: message.data.activity_timeout * 1000
81
+ };
82
+ } else if (message.event === 'pusher:error') {
83
+ // From protocol 6 close codes are sent only once, so this only
84
+ // happens when connection does not support close codes
85
+ return {
86
+ action: this.getCloseAction(message.data),
87
+ error: this.getCloseError(message.data)
88
+ };
89
+ } else {
90
+ throw 'Invalid handshake';
91
+ }
92
+ },
93
+
94
+ /**
95
+ * Dispatches the close event and returns an appropriate action name.
96
+ *
97
+ * See:
98
+ * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent
99
+ * 2. http://pusher.com/docs/pusher_protocol
100
+ *
101
+ * @param {CloseEvent} closeEvent
102
+ * @return {String} close action name
103
+ */
104
+ getCloseAction: function(closeEvent): string {
105
+ if (closeEvent.code < 4000) {
106
+ // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,
107
+ // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL
108
+ // ignore 1007...3999
109
+ // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,
110
+ // 1004 CLOSE_TOO_LARGE
111
+ if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {
112
+ return 'backoff';
113
+ } else {
114
+ return null;
115
+ }
116
+ } else if (closeEvent.code === 4000) {
117
+ return 'tls_only';
118
+ } else if (closeEvent.code < 4100) {
119
+ return 'refused';
120
+ } else if (closeEvent.code < 4200) {
121
+ return 'backoff';
122
+ } else if (closeEvent.code < 4300) {
123
+ return 'retry';
124
+ } else {
125
+ // unknown error
126
+ return 'refused';
127
+ }
128
+ },
129
+
130
+ /**
131
+ * Returns an error or null basing on the close event.
132
+ *
133
+ * Null is returned when connection was closed cleanly. Otherwise, an object
134
+ * with error details is returned.
135
+ *
136
+ * @param {CloseEvent} closeEvent
137
+ * @return {Object} error object
138
+ */
139
+ getCloseError: function(closeEvent): any {
140
+ if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {
141
+ return {
142
+ type: 'PusherError',
143
+ data: {
144
+ code: closeEvent.code,
145
+ message: closeEvent.reason || closeEvent.message
146
+ }
147
+ };
148
+ } else {
149
+ return null;
150
+ }
151
+ }
152
+ };
153
+
154
+ export default Protocol;
@@ -0,0 +1,66 @@
1
+ import {
2
+ ChannelAuthorizationOptions,
3
+ UserAuthenticationOptions
4
+ } from './auth/options';
5
+ import { AuthTransport } from './config';
6
+
7
+ export interface DefaultConfig {
8
+ VERSION: string;
9
+ PROTOCOL: number;
10
+ wsPort: number;
11
+ wssPort: number;
12
+ wsPath: string;
13
+ httpHost: string;
14
+ httpPort: number;
15
+ httpsPort: number;
16
+ httpPath: string;
17
+ stats_host: string;
18
+ authEndpoint: string;
19
+ authTransport: AuthTransport;
20
+ activityTimeout: number;
21
+ pongTimeout: number;
22
+ unavailableTimeout: number;
23
+ userAuthentication: UserAuthenticationOptions;
24
+ channelAuthorization: ChannelAuthorizationOptions;
25
+
26
+ cdn_http?: string;
27
+ cdn_https?: string;
28
+ dependency_suffix?: string;
29
+ }
30
+
31
+ var Defaults: DefaultConfig = {
32
+ VERSION: VERSION,
33
+ PROTOCOL: 7,
34
+
35
+ wsPort: 80,
36
+ wssPort: 443,
37
+ wsPath: '',
38
+ // DEPRECATED: SockJS fallback parameters
39
+ httpHost: 'sockjs.pusher.com',
40
+ httpPort: 80,
41
+ httpsPort: 443,
42
+ httpPath: '/pusher',
43
+ // DEPRECATED: Stats
44
+ stats_host: 'stats.pusher.com',
45
+ // DEPRECATED: Other settings
46
+ authEndpoint: '/pusher/auth',
47
+ authTransport: 'ajax',
48
+ activityTimeout: 120000,
49
+ pongTimeout: 30000,
50
+ unavailableTimeout: 10000,
51
+ userAuthentication: {
52
+ endpoint: '/pusher/user-auth',
53
+ transport: 'ajax'
54
+ },
55
+ channelAuthorization: {
56
+ endpoint: '/pusher/auth',
57
+ transport: 'ajax'
58
+ },
59
+
60
+ // CDN configuration
61
+ cdn_http: CDN_HTTP,
62
+ cdn_https: CDN_HTTPS,
63
+ dependency_suffix: DEPENDENCY_SUFFIX
64
+ };
65
+
66
+ export default Defaults;
@@ -0,0 +1,69 @@
1
+ /** Error classes used throughout the library. */
2
+ // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
3
+ export class BadEventName extends Error {
4
+ constructor(msg?: string) {
5
+ super(msg);
6
+
7
+ Object.setPrototypeOf(this, new.target.prototype);
8
+ }
9
+ }
10
+
11
+ export class BadChannelName extends Error {
12
+ constructor(msg?: string) {
13
+ super(msg);
14
+
15
+ Object.setPrototypeOf(this, new.target.prototype);
16
+ }
17
+ }
18
+
19
+ export class RequestTimedOut extends Error {
20
+ constructor(msg?: string) {
21
+ super(msg);
22
+
23
+ Object.setPrototypeOf(this, new.target.prototype);
24
+ }
25
+ }
26
+ export class TransportPriorityTooLow extends Error {
27
+ constructor(msg?: string) {
28
+ super(msg);
29
+
30
+ Object.setPrototypeOf(this, new.target.prototype);
31
+ }
32
+ }
33
+ export class TransportClosed extends Error {
34
+ constructor(msg?: string) {
35
+ super(msg);
36
+
37
+ Object.setPrototypeOf(this, new.target.prototype);
38
+ }
39
+ }
40
+ export class UnsupportedFeature extends Error {
41
+ constructor(msg?: string) {
42
+ super(msg);
43
+
44
+ Object.setPrototypeOf(this, new.target.prototype);
45
+ }
46
+ }
47
+ export class UnsupportedTransport extends Error {
48
+ constructor(msg?: string) {
49
+ super(msg);
50
+
51
+ Object.setPrototypeOf(this, new.target.prototype);
52
+ }
53
+ }
54
+ export class UnsupportedStrategy extends Error {
55
+ constructor(msg?: string) {
56
+ super(msg);
57
+
58
+ Object.setPrototypeOf(this, new.target.prototype);
59
+ }
60
+ }
61
+ export class HTTPAuthError extends Error {
62
+ status: number;
63
+ constructor(status: number, msg?: string) {
64
+ super(msg);
65
+ this.status = status;
66
+
67
+ Object.setPrototypeOf(this, new.target.prototype);
68
+ }
69
+ }
@@ -0,0 +1,6 @@
1
+ interface Callback {
2
+ fn: Function;
3
+ context: any;
4
+ }
5
+
6
+ export default Callback;
@@ -0,0 +1,75 @@
1
+ import Callback from './callback';
2
+ import * as Collections from '../utils/collections';
3
+ import CallbackTable from './callback_table';
4
+
5
+ export default class CallbackRegistry {
6
+ _callbacks: CallbackTable;
7
+
8
+ constructor() {
9
+ this._callbacks = {};
10
+ }
11
+
12
+ get(name: string): Callback[] {
13
+ return this._callbacks[prefix(name)];
14
+ }
15
+
16
+ add(name: string, callback: Function, context: any) {
17
+ var prefixedEventName = prefix(name);
18
+ this._callbacks[prefixedEventName] =
19
+ this._callbacks[prefixedEventName] || [];
20
+ this._callbacks[prefixedEventName].push({
21
+ fn: callback,
22
+ context: context
23
+ });
24
+ }
25
+
26
+ remove(name?: string, callback?: Function, context?: any) {
27
+ if (!name && !callback && !context) {
28
+ this._callbacks = {};
29
+ return;
30
+ }
31
+
32
+ var names = name ? [prefix(name)] : Collections.keys(this._callbacks);
33
+
34
+ if (callback || context) {
35
+ this.removeCallback(names, callback, context);
36
+ } else {
37
+ this.removeAllCallbacks(names);
38
+ }
39
+ }
40
+
41
+ private removeCallback(names: string[], callback: Function, context: any) {
42
+ Collections.apply(
43
+ names,
44
+ function(name) {
45
+ this._callbacks[name] = Collections.filter(
46
+ this._callbacks[name] || [],
47
+ function(binding) {
48
+ return (
49
+ (callback && callback !== binding.fn) ||
50
+ (context && context !== binding.context)
51
+ );
52
+ }
53
+ );
54
+ if (this._callbacks[name].length === 0) {
55
+ delete this._callbacks[name];
56
+ }
57
+ },
58
+ this
59
+ );
60
+ }
61
+
62
+ private removeAllCallbacks(names: string[]) {
63
+ Collections.apply(
64
+ names,
65
+ function(name) {
66
+ delete this._callbacks[name];
67
+ },
68
+ this
69
+ );
70
+ }
71
+ }
72
+
73
+ function prefix(name: string): string {
74
+ return '_' + name;
75
+ }
@@ -0,0 +1,7 @@
1
+ import Callback from './callback';
2
+
3
+ interface CallbackTable {
4
+ [index: string]: Callback[];
5
+ }
6
+
7
+ export default CallbackTable;
@@ -0,0 +1,84 @@
1
+ import * as Collections from '../utils/collections';
2
+ import Callback from './callback';
3
+ import Metadata from '../channels/metadata';
4
+ import CallbackRegistry from './callback_registry';
5
+
6
+ /** Manages callback bindings and event emitting.
7
+ *
8
+ * @param Function failThrough called when no listeners are bound to an event
9
+ */
10
+ export default class Dispatcher {
11
+ callbacks: CallbackRegistry;
12
+ global_callbacks: Function[];
13
+ failThrough: Function;
14
+
15
+ constructor(failThrough?: Function) {
16
+ this.callbacks = new CallbackRegistry();
17
+ this.global_callbacks = [];
18
+ this.failThrough = failThrough;
19
+ }
20
+
21
+ bind(eventName: string, callback: Function, context?: any) {
22
+ this.callbacks.add(eventName, callback, context);
23
+ return this;
24
+ }
25
+
26
+ bind_global(callback: Function) {
27
+ this.global_callbacks.push(callback);
28
+ return this;
29
+ }
30
+
31
+ unbind(eventName?: string, callback?: Function, context?: any) {
32
+ this.callbacks.remove(eventName, callback, context);
33
+ return this;
34
+ }
35
+
36
+ unbind_global(callback?: Function) {
37
+ if (!callback) {
38
+ this.global_callbacks = [];
39
+ return this;
40
+ }
41
+
42
+ this.global_callbacks = Collections.filter(
43
+ this.global_callbacks || [],
44
+ c => c !== callback
45
+ );
46
+
47
+ return this;
48
+ }
49
+
50
+ unbind_all() {
51
+ this.unbind();
52
+ this.unbind_global();
53
+ return this;
54
+ }
55
+
56
+ emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {
57
+ for (var i = 0; i < this.global_callbacks.length; i++) {
58
+ this.global_callbacks[i](eventName, data);
59
+ }
60
+
61
+ var callbacks = this.callbacks.get(eventName);
62
+ var args = [];
63
+
64
+ if (metadata) {
65
+ // if there's a metadata argument, we need to call the callback with both
66
+ // data and metadata regardless of whether data is undefined
67
+ args.push(data, metadata);
68
+ } else if (data) {
69
+ // metadata is undefined, so we only need to call the callback with data
70
+ // if data exists
71
+ args.push(data);
72
+ }
73
+
74
+ if (callbacks && callbacks.length > 0) {
75
+ for (var i = 0; i < callbacks.length; i++) {
76
+ callbacks[i].fn.apply(callbacks[i].context || global, args);
77
+ }
78
+ } else if (this.failThrough) {
79
+ this.failThrough(eventName, data);
80
+ }
81
+
82
+ return this;
83
+ }
84
+ }
@@ -0,0 +1,24 @@
1
+ interface Ajax {
2
+ open(
3
+ method: string,
4
+ url: string,
5
+ async?: boolean,
6
+ user?: string,
7
+ password?: string
8
+ ): void;
9
+ send(payload?: any): void;
10
+ setRequestHeader(key: string, value: string): void;
11
+ onreadystatechange: Function;
12
+ readyState: number;
13
+ responseText: string;
14
+ status: number;
15
+ withCredentials?: boolean;
16
+
17
+ ontimeout: Function;
18
+ onerror: Function;
19
+ onprogress: Function;
20
+ onload: Function;
21
+ abort: Function;
22
+ }
23
+
24
+ export default Ajax;
@@ -0,0 +1,16 @@
1
+ import HTTPSocket from './http_socket';
2
+ import SocketHooks from './socket_hooks';
3
+ import HTTPRequest from './http_request';
4
+ import RequestHooks from './request_hooks';
5
+ import Ajax from './ajax';
6
+
7
+ interface HTTPFactory {
8
+ createStreamingSocket(url: string): HTTPSocket;
9
+ createPollingSocket(url: string): HTTPSocket;
10
+ createSocket(hooks: SocketHooks, url: string): HTTPSocket;
11
+ createXHR(method: string, url: string): HTTPRequest;
12
+ createXDR?(method: string, url: string): HTTPRequest;
13
+ createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest;
14
+ }
15
+
16
+ export default HTTPFactory;
@@ -0,0 +1,24 @@
1
+ import SocketHooks from './socket_hooks';
2
+ import URLLocation from './url_location';
3
+ import HTTPSocket from './http_socket';
4
+
5
+ var hooks: SocketHooks = {
6
+ getReceiveURL: function(url: URLLocation, session: string): string {
7
+ return url.base + '/' + session + '/xhr' + url.queryString;
8
+ },
9
+ onHeartbeat: function() {
10
+ // next HTTP request will reset server's activity timer
11
+ },
12
+ sendHeartbeat: function(socket) {
13
+ socket.sendRaw('[]');
14
+ },
15
+ onFinished: function(socket, status) {
16
+ if (status === 200) {
17
+ socket.reconnect();
18
+ } else {
19
+ socket.onClose(1006, 'Connection interrupted (' + status + ')', false);
20
+ }
21
+ }
22
+ };
23
+
24
+ export default hooks;
@@ -0,0 +1,81 @@
1
+ import Runtime from 'runtime';
2
+ import RequestHooks from './request_hooks';
3
+ import Ajax from './ajax';
4
+ import { default as EventsDispatcher } from '../events/dispatcher';
5
+
6
+ const MAX_BUFFER_LENGTH = 256 * 1024;
7
+
8
+ export default class HTTPRequest extends EventsDispatcher {
9
+ hooks: RequestHooks;
10
+ method: string;
11
+ url: string;
12
+ position: number;
13
+ xhr: Ajax;
14
+ unloader: Function;
15
+
16
+ constructor(hooks: RequestHooks, method: string, url: string) {
17
+ super();
18
+ this.hooks = hooks;
19
+ this.method = method;
20
+ this.url = url;
21
+ }
22
+
23
+ start(payload?: any) {
24
+ this.position = 0;
25
+ this.xhr = this.hooks.getRequest(this);
26
+
27
+ this.unloader = () => {
28
+ this.close();
29
+ };
30
+ Runtime.addUnloadListener(this.unloader);
31
+
32
+ this.xhr.open(this.method, this.url, true);
33
+
34
+ if (this.xhr.setRequestHeader) {
35
+ this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.
36
+ }
37
+ this.xhr.send(payload);
38
+ }
39
+
40
+ close() {
41
+ if (this.unloader) {
42
+ Runtime.removeUnloadListener(this.unloader);
43
+ this.unloader = null;
44
+ }
45
+ if (this.xhr) {
46
+ this.hooks.abortRequest(this.xhr);
47
+ this.xhr = null;
48
+ }
49
+ }
50
+
51
+ onChunk(status: number, data: any) {
52
+ while (true) {
53
+ var chunk = this.advanceBuffer(data);
54
+ if (chunk) {
55
+ this.emit('chunk', { status: status, data: chunk });
56
+ } else {
57
+ break;
58
+ }
59
+ }
60
+ if (this.isBufferTooLong(data)) {
61
+ this.emit('buffer_too_long');
62
+ }
63
+ }
64
+
65
+ private advanceBuffer(buffer: any[]): any {
66
+ var unreadData = buffer.slice(this.position);
67
+ var endOfLinePosition = unreadData.indexOf('\n');
68
+
69
+ if (endOfLinePosition !== -1) {
70
+ this.position += endOfLinePosition + 1;
71
+ return unreadData.slice(0, endOfLinePosition);
72
+ } else {
73
+ // chunk is not finished yet, don't move the buffer pointer
74
+ return null;
75
+ }
76
+ }
77
+
78
+ private isBufferTooLong(buffer: any): boolean {
79
+ return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;
80
+ }
81
+ }