@cendarsoss/pusher-js 8.4.11

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 (425) 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 +928 -0
  12. package/DELTA_COMPRESSION.md +365 -0
  13. package/DELTA_USAGE.md +179 -0
  14. package/IMPLEMENTATION_SUMMARY.md +261 -0
  15. package/IMPORT_GUIDE.md +638 -0
  16. package/LIBRARY_STRUCTURE_ANALYSIS.md +940 -0
  17. package/LICENCE +19 -0
  18. package/Makefile +14 -0
  19. package/README.md +709 -0
  20. package/TAG_FILTERING_CLIENT.md +471 -0
  21. package/bower.json +19 -0
  22. package/bun.lock +2695 -0
  23. package/dist/node/filter.js +252 -0
  24. package/dist/node/filter.js.map +1 -0
  25. package/dist/node/pusher.js +4434 -0
  26. package/dist/node/pusher.js.map +1 -0
  27. package/dist/web/filter.mjs +252 -0
  28. package/dist/web/filter.mjs.map +1 -0
  29. package/dist/web/pusher.mjs +5889 -0
  30. package/dist/web/pusher.mjs.map +1 -0
  31. package/examples/delta-compression-example.html +372 -0
  32. package/examples/delta-seamless-example.html +185 -0
  33. package/index.d.ts +36 -0
  34. package/integration_tests_server/index.js +176 -0
  35. package/integration_tests_server/package-lock.json +1177 -0
  36. package/integration_tests_server/package.json +15 -0
  37. package/interactive/.env +16 -0
  38. package/interactive/CONFLATION_TEST.md +73 -0
  39. package/interactive/DELTA_COMPRESSION_TESTING.md +262 -0
  40. package/interactive/bun.lock +208 -0
  41. package/interactive/package-lock.json +1075 -0
  42. package/interactive/package.json +32 -0
  43. package/interactive/public/app.js +1363 -0
  44. package/interactive/public/bundle-entry.js +14 -0
  45. package/interactive/public/conflation-test.html +508 -0
  46. package/interactive/public/conflation-test.js +785 -0
  47. package/interactive/public/delta-compression.js +1090 -0
  48. package/interactive/public/dist/bundle.js +5857 -0
  49. package/interactive/public/index.html +392 -0
  50. package/interactive/public/main.js +20 -0
  51. package/interactive/public/style.css +823 -0
  52. package/interactive/server.js +246 -0
  53. package/interactive/test-bundle.html +89 -0
  54. package/interactive/test-delta.js +146 -0
  55. package/node.js +1 -0
  56. package/package.json +94 -0
  57. package/pusher-with-encryption/index.js +1 -0
  58. package/react-native/index.d.ts +29 -0
  59. package/react-native/index.js +1 -0
  60. package/spec/config/jasmine/helpers/reporter.js +14 -0
  61. package/spec/config/jasmine/integration.json +13 -0
  62. package/spec/config/jasmine/unit.json +13 -0
  63. package/spec/config/jasmine/webpack.integration.js +33 -0
  64. package/spec/config/jasmine/webpack.unit.js +30 -0
  65. package/spec/config/karma/available_browsers.json +4957 -0
  66. package/spec/config/karma/config.ci.js +25 -0
  67. package/spec/config/karma/config.common.js +50 -0
  68. package/spec/config/karma/config.integration.js +26 -0
  69. package/spec/config/karma/config.unit.js +10 -0
  70. package/spec/config/karma/config.worker.js +34 -0
  71. package/spec/config/karma/integration.js +24 -0
  72. package/spec/config/karma/unit.js +20 -0
  73. package/spec/javascripts/helpers/mocks.js +274 -0
  74. package/spec/javascripts/helpers/node/integration.js +33 -0
  75. package/spec/javascripts/helpers/node/mock-dom-dependencies.ts +1 -0
  76. package/spec/javascripts/helpers/pusher_integration.js +1 -0
  77. package/spec/javascripts/helpers/pusher_integration_class.ts +12 -0
  78. package/spec/javascripts/helpers/timers/promises.js +9 -0
  79. package/spec/javascripts/helpers/waitsFor.js +37 -0
  80. package/spec/javascripts/helpers/web/integration.js +44 -0
  81. package/spec/javascripts/helpers/worker/mock-dom-dependencies.js +1 -0
  82. package/spec/javascripts/integration/core/cluster_config_spec.js +153 -0
  83. package/spec/javascripts/integration/core/falling_back_spec.js +195 -0
  84. package/spec/javascripts/integration/core/pusher_spec/index.js +68 -0
  85. package/spec/javascripts/integration/core/pusher_spec/test_builder.js +715 -0
  86. package/spec/javascripts/integration/core/timeout_configuration_spec.js +200 -0
  87. package/spec/javascripts/integration/core/transport_lists_spec.js +103 -0
  88. package/spec/javascripts/integration/index.node.js +12 -0
  89. package/spec/javascripts/integration/index.web.js +63 -0
  90. package/spec/javascripts/integration/index.worker.js +13 -0
  91. package/spec/javascripts/integration/web/dom/jsonp_spec.js +97 -0
  92. package/spec/javascripts/integration/web/dom/script_request_spec.js +90 -0
  93. package/spec/javascripts/polyfills/index.js +105 -0
  94. package/spec/javascripts/unit/core/channels/channel_spec.js +355 -0
  95. package/spec/javascripts/unit/core/channels/channels_spec.js +94 -0
  96. package/spec/javascripts/unit/core/channels/encrypted_channel_spec.js +343 -0
  97. package/spec/javascripts/unit/core/channels/presence_channel_spec.js +553 -0
  98. package/spec/javascripts/unit/core/channels/private_channel_spec.js +182 -0
  99. package/spec/javascripts/unit/core/config_spec.js +507 -0
  100. package/spec/javascripts/unit/core/connection/connection_manager_spec.js +656 -0
  101. package/spec/javascripts/unit/core/connection/connection_spec.js +286 -0
  102. package/spec/javascripts/unit/core/connection/handshake_spec.js +160 -0
  103. package/spec/javascripts/unit/core/connection/protocol_spec.js +420 -0
  104. package/spec/javascripts/unit/core/defaults_spec.js +26 -0
  105. package/spec/javascripts/unit/core/events_dispatcher_spec.js +385 -0
  106. package/spec/javascripts/unit/core/http/http_polling_socket_spec.js +60 -0
  107. package/spec/javascripts/unit/core/http/http_request_spec.js +185 -0
  108. package/spec/javascripts/unit/core/http/http_socket_spec.js +370 -0
  109. package/spec/javascripts/unit/core/http/http_streaming_socket_spec.js +56 -0
  110. package/spec/javascripts/unit/core/http/http_xhr_request_spec.js +164 -0
  111. package/spec/javascripts/unit/core/logger_spec.js +133 -0
  112. package/spec/javascripts/unit/core/pusher_spec.js +613 -0
  113. package/spec/javascripts/unit/core/pusher_with_encryption_spec.js +18 -0
  114. package/spec/javascripts/unit/core/strategies/best_connected_ever_strategy_spec.js +104 -0
  115. package/spec/javascripts/unit/core/strategies/delayed_strategy_spec.js +95 -0
  116. package/spec/javascripts/unit/core/strategies/first_connected_strategy_spec.js +68 -0
  117. package/spec/javascripts/unit/core/strategies/if_strategy_spec.js +165 -0
  118. package/spec/javascripts/unit/core/strategies/sequential_strategy_spec.js +213 -0
  119. package/spec/javascripts/unit/core/strategies/transport_strategy_spec.js +250 -0
  120. package/spec/javascripts/unit/core/strategies/websocket_prioritized_cached_strategy_spec.js +400 -0
  121. package/spec/javascripts/unit/core/timeline/timeline_spec.js +153 -0
  122. package/spec/javascripts/unit/core/transports/assistant_to_the_transport_manager_spec.js +223 -0
  123. package/spec/javascripts/unit/core/transports/hosts_and_ports_spec.js +85 -0
  124. package/spec/javascripts/unit/core/transports/transport_connection_spec.js +585 -0
  125. package/spec/javascripts/unit/core/transports/transport_manager_spec.js +64 -0
  126. package/spec/javascripts/unit/core/user_spec.js +303 -0
  127. package/spec/javascripts/unit/core/utils/periodic_timer_spec.js +74 -0
  128. package/spec/javascripts/unit/core/utils/timers_spec.js +157 -0
  129. package/spec/javascripts/unit/core/utils/url_store_spec.js +14 -0
  130. package/spec/javascripts/unit/core/watchlist_spec.js +48 -0
  131. package/spec/javascripts/unit/core_with_runtime/auth/channel_authorizer_spec.js +137 -0
  132. package/spec/javascripts/unit/core_with_runtime/auth/deprecated_channel_authorizer_spec.js +48 -0
  133. package/spec/javascripts/unit/core_with_runtime/auth/user_authorizer_spec.js +128 -0
  134. package/spec/javascripts/unit/core_with_runtime/readme.md +5 -0
  135. package/spec/javascripts/unit/index.node.js +11 -0
  136. package/spec/javascripts/unit/index.web.js +12 -0
  137. package/spec/javascripts/unit/index.worker.js +11 -0
  138. package/spec/javascripts/unit/isomorphic/transports/hosts_and_ports_spec.js +82 -0
  139. package/spec/javascripts/unit/isomorphic/transports/transports_spec.js +202 -0
  140. package/spec/javascripts/unit/node/timeline_sender_spec.js +83 -0
  141. package/spec/javascripts/unit/web/dom/dependency_loader_spec.js +249 -0
  142. package/spec/javascripts/unit/web/dom/jsonp_request_spec.js +130 -0
  143. package/spec/javascripts/unit/web/dom/script_receiver_factory_spec.js +68 -0
  144. package/spec/javascripts/unit/web/http/http_xdomain_request_spec.js +222 -0
  145. package/spec/javascripts/unit/web/pusher_authorizer_spec.js +64 -0
  146. package/spec/javascripts/unit/web/timeline/timeline_sender_spec.js +131 -0
  147. package/spec/javascripts/unit/web/transports/hosts_and_ports_spec.js +127 -0
  148. package/spec/javascripts/unit/web/transports/transports_spec.js +444 -0
  149. package/spec/javascripts/unit/worker/channel_authorizer_spec.js +156 -0
  150. package/spec/javascripts/unit/worker/timeline_sender_spec.js +76 -0
  151. package/src/core/auth/auth_transports.ts +18 -0
  152. package/src/core/auth/channel_authorizer.ts +64 -0
  153. package/src/core/auth/deprecated_channel_authorizer.ts +56 -0
  154. package/src/core/auth/options.ts +76 -0
  155. package/src/core/auth/user_authenticator.ts +62 -0
  156. package/src/core/base64.ts +49 -0
  157. package/src/core/channels/channel.ts +173 -0
  158. package/src/core/channels/channel_table.ts +7 -0
  159. package/src/core/channels/channels.ts +86 -0
  160. package/src/core/channels/encrypted_channel.ts +150 -0
  161. package/src/core/channels/filter.ts +342 -0
  162. package/src/core/channels/members.ts +80 -0
  163. package/src/core/channels/metadata.ts +5 -0
  164. package/src/core/channels/presence_channel.ts +113 -0
  165. package/src/core/channels/private_channel.ts +25 -0
  166. package/src/core/config.ts +189 -0
  167. package/src/core/connection/callbacks.ts +21 -0
  168. package/src/core/connection/connection.ts +160 -0
  169. package/src/core/connection/connection_manager.ts +371 -0
  170. package/src/core/connection/connection_manager_options.ts +14 -0
  171. package/src/core/connection/handshake/handshake_payload.ts +10 -0
  172. package/src/core/connection/handshake/index.ts +90 -0
  173. package/src/core/connection/protocol/action.ts +8 -0
  174. package/src/core/connection/protocol/message-types.ts +11 -0
  175. package/src/core/connection/protocol/protocol.ts +166 -0
  176. package/src/core/defaults.ts +66 -0
  177. package/src/core/delta/channel_state.ts +194 -0
  178. package/src/core/delta/decoders.ts +129 -0
  179. package/src/core/delta/index.ts +10 -0
  180. package/src/core/delta/manager.ts +504 -0
  181. package/src/core/delta/types.ts +60 -0
  182. package/src/core/errors.ts +69 -0
  183. package/src/core/events/callback.ts +6 -0
  184. package/src/core/events/callback_registry.ts +75 -0
  185. package/src/core/events/callback_table.ts +7 -0
  186. package/src/core/events/dispatcher.ts +84 -0
  187. package/src/core/http/ajax.ts +24 -0
  188. package/src/core/http/http_factory.ts +16 -0
  189. package/src/core/http/http_polling_socket.ts +24 -0
  190. package/src/core/http/http_request.ts +81 -0
  191. package/src/core/http/http_socket.ts +220 -0
  192. package/src/core/http/http_streaming_socket.ts +19 -0
  193. package/src/core/http/request_hooks.ts +9 -0
  194. package/src/core/http/socket_hooks.ts +11 -0
  195. package/src/core/http/state.ts +7 -0
  196. package/src/core/http/url_location.ts +6 -0
  197. package/src/core/logger.ts +66 -0
  198. package/src/core/options.ts +61 -0
  199. package/src/core/pusher-licence.js +7 -0
  200. package/src/core/pusher-with-encryption.js +1 -0
  201. package/src/core/pusher-with-encryption.ts +14 -0
  202. package/src/core/pusher.js +10 -0
  203. package/src/core/pusher.ts +412 -0
  204. package/src/core/reachability.ts +7 -0
  205. package/src/core/socket.ts +14 -0
  206. package/src/core/strategies/best_connected_ever_strategy.ts +81 -0
  207. package/src/core/strategies/delayed_strategy.ts +48 -0
  208. package/src/core/strategies/first_connected_strategy.ts +31 -0
  209. package/src/core/strategies/if_strategy.ts +34 -0
  210. package/src/core/strategies/sequential_strategy.ts +129 -0
  211. package/src/core/strategies/strategy.ts +8 -0
  212. package/src/core/strategies/strategy_builder.ts +67 -0
  213. package/src/core/strategies/strategy_options.ts +18 -0
  214. package/src/core/strategies/strategy_runner.ts +6 -0
  215. package/src/core/strategies/transport_strategy.ts +144 -0
  216. package/src/core/strategies/websocket_prioritized_cached_strategy.ts +157 -0
  217. package/src/core/timeline/level.ts +7 -0
  218. package/src/core/timeline/timeline.ts +90 -0
  219. package/src/core/timeline/timeline_sender.ts +33 -0
  220. package/src/core/timeline/timeline_transport.ts +11 -0
  221. package/src/core/transports/assistant_to_the_transport_manager.ts +104 -0
  222. package/src/core/transports/ping_delay_options.ts +7 -0
  223. package/src/core/transports/transport.ts +54 -0
  224. package/src/core/transports/transport_connection.ts +241 -0
  225. package/src/core/transports/transport_connection_options.ts +8 -0
  226. package/src/core/transports/transport_hooks.ts +16 -0
  227. package/src/core/transports/transport_manager.ts +52 -0
  228. package/src/core/transports/transports_table.ts +12 -0
  229. package/src/core/transports/url_scheme.ts +13 -0
  230. package/src/core/transports/url_schemes.ts +47 -0
  231. package/src/core/user.ts +186 -0
  232. package/src/core/util.ts +34 -0
  233. package/src/core/utils/collections.ts +353 -0
  234. package/src/core/utils/factory.ts +79 -0
  235. package/src/core/utils/flat_promise.ts +10 -0
  236. package/src/core/utils/timers/abstract_timer.ts +39 -0
  237. package/src/core/utils/timers/index.ts +39 -0
  238. package/src/core/utils/timers/scheduling.ts +11 -0
  239. package/src/core/utils/timers/timed_callback.ts +5 -0
  240. package/src/core/utils/url_store.ts +48 -0
  241. package/src/core/watchlist.ts +31 -0
  242. package/src/d.ts/constants/index.d.ts +5 -0
  243. package/src/d.ts/faye-websocket/faye-websocket.d.ts +21 -0
  244. package/src/d.ts/global/global.d.ts +1 -0
  245. package/src/d.ts/module/module.d.ts +12 -0
  246. package/src/d.ts/tweetnacl-util/index.d.ts +6 -0
  247. package/src/d.ts/window/events.d.ts +4 -0
  248. package/src/d.ts/window/sockjs.d.ts +3 -0
  249. package/src/d.ts/window/websocket.d.ts +4 -0
  250. package/src/d.ts/window/xmlhttprequest.d.ts +3 -0
  251. package/src/filter.ts +5 -0
  252. package/src/index.ts +8 -0
  253. package/src/runtimes/interface.ts +60 -0
  254. package/src/runtimes/isomorphic/auth/xhr_auth.ts +90 -0
  255. package/src/runtimes/isomorphic/default_strategy.ts +155 -0
  256. package/src/runtimes/isomorphic/http/http.ts +32 -0
  257. package/src/runtimes/isomorphic/http/http_xhr_request.ts +35 -0
  258. package/src/runtimes/isomorphic/runtime.ts +62 -0
  259. package/src/runtimes/isomorphic/timeline/xhr_timeline.ts +50 -0
  260. package/src/runtimes/isomorphic/transports/transport_connection_initializer.ts +19 -0
  261. package/src/runtimes/isomorphic/transports/transports.ts +83 -0
  262. package/src/runtimes/node/net_info.ts +10 -0
  263. package/src/runtimes/node/runtime.ts +68 -0
  264. package/src/runtimes/react-native/net_info.ts +42 -0
  265. package/src/runtimes/react-native/runtime.ts +65 -0
  266. package/src/runtimes/web/auth/jsonp_auth.ts +51 -0
  267. package/src/runtimes/web/browser.ts +24 -0
  268. package/src/runtimes/web/default_strategy.ts +201 -0
  269. package/src/runtimes/web/dom/dependencies.ts +16 -0
  270. package/src/runtimes/web/dom/dependency_loader.ts +93 -0
  271. package/src/runtimes/web/dom/json2.js +486 -0
  272. package/src/runtimes/web/dom/jsonp_request.ts +52 -0
  273. package/src/runtimes/web/dom/script_receiver.ts +8 -0
  274. package/src/runtimes/web/dom/script_receiver_factory.ts +57 -0
  275. package/src/runtimes/web/dom/script_request.ts +85 -0
  276. package/src/runtimes/web/http/http.ts +8 -0
  277. package/src/runtimes/web/http/http_xdomain_request.ts +37 -0
  278. package/src/runtimes/web/net_info.ts +50 -0
  279. package/src/runtimes/web/runtime.ts +174 -0
  280. package/src/runtimes/web/timeline/jsonp_timeline.ts +34 -0
  281. package/src/runtimes/web/transports/transport_connection_initializer.ts +39 -0
  282. package/src/runtimes/web/transports/transports.ts +67 -0
  283. package/src/runtimes/worker/auth/fetch_auth.ts +69 -0
  284. package/src/runtimes/worker/net_info.ts +10 -0
  285. package/src/runtimes/worker/runtime.ts +75 -0
  286. package/src/runtimes/worker/timeline/fetch_timeline.ts +39 -0
  287. package/tsconfig.json +18 -0
  288. package/types/spec/javascripts/helpers/node/mock-dom-dependencies.d.ts +1 -0
  289. package/types/spec/javascripts/helpers/pusher_integration_class.d.ts +4 -0
  290. package/types/src/core/auth/auth_transports.d.ts +9 -0
  291. package/types/src/core/auth/channel_authorizer.d.ts +3 -0
  292. package/types/src/core/auth/deprecated_channel_authorizer.d.ts +18 -0
  293. package/types/src/core/auth/options.d.ts +48 -0
  294. package/types/src/core/auth/user_authenticator.d.ts +3 -0
  295. package/types/src/core/base64.d.ts +1 -0
  296. package/types/src/core/channels/channel.d.ts +25 -0
  297. package/types/src/core/channels/channel_table.d.ts +5 -0
  298. package/types/src/core/channels/channels.d.ts +12 -0
  299. package/types/src/core/channels/encrypted_channel.d.ts +15 -0
  300. package/types/src/core/channels/filter.d.ts +33 -0
  301. package/types/src/core/channels/members.d.ts +14 -0
  302. package/types/src/core/channels/metadata.d.ts +4 -0
  303. package/types/src/core/channels/presence_channel.d.ts +13 -0
  304. package/types/src/core/channels/private_channel.d.ts +5 -0
  305. package/types/src/core/config.d.ts +31 -0
  306. package/types/src/core/connection/callbacks.d.ts +18 -0
  307. package/types/src/core/connection/connection.d.ts +16 -0
  308. package/types/src/core/connection/connection_manager.d.ts +50 -0
  309. package/types/src/core/connection/connection_manager_options.d.ts +11 -0
  310. package/types/src/core/connection/handshake/handshake_payload.d.ts +8 -0
  311. package/types/src/core/connection/handshake/index.d.ts +12 -0
  312. package/types/src/core/connection/protocol/action.d.ts +7 -0
  313. package/types/src/core/connection/protocol/message-types.d.ts +10 -0
  314. package/types/src/core/connection/protocol/protocol.d.ts +10 -0
  315. package/types/src/core/defaults.d.ts +26 -0
  316. package/types/src/core/delta/channel_state.d.ts +23 -0
  317. package/types/src/core/delta/decoders.d.ts +12 -0
  318. package/types/src/core/delta/index.d.ts +4 -0
  319. package/types/src/core/delta/manager.d.ts +27 -0
  320. package/types/src/core/delta/types.d.ts +50 -0
  321. package/types/src/core/errors.d.ts +28 -0
  322. package/types/src/core/events/callback.d.ts +5 -0
  323. package/types/src/core/events/callback_registry.d.ts +11 -0
  324. package/types/src/core/events/callback_table.d.ts +5 -0
  325. package/types/src/core/events/dispatcher.d.ts +14 -0
  326. package/types/src/core/http/ajax.d.ts +16 -0
  327. package/types/src/core/http/http_factory.d.ts +13 -0
  328. package/types/src/core/http/http_polling_socket.d.ts +3 -0
  329. package/types/src/core/http/http_request.d.ts +17 -0
  330. package/types/src/core/http/http_socket.d.ts +32 -0
  331. package/types/src/core/http/http_streaming_socket.d.ts +3 -0
  332. package/types/src/core/http/request_hooks.d.ts +6 -0
  333. package/types/src/core/http/socket_hooks.d.ts +8 -0
  334. package/types/src/core/http/state.d.ts +6 -0
  335. package/types/src/core/http/url_location.d.ts +5 -0
  336. package/types/src/core/logger.d.ts +11 -0
  337. package/types/src/core/options.d.ts +36 -0
  338. package/types/src/core/pusher-with-encryption.d.ts +5 -0
  339. package/types/src/core/pusher.d.ts +56 -0
  340. package/types/src/core/reachability.d.ts +5 -0
  341. package/types/src/core/socket.d.ts +12 -0
  342. package/types/src/core/strategies/best_connected_ever_strategy.d.ts +10 -0
  343. package/types/src/core/strategies/delayed_strategy.d.ts +15 -0
  344. package/types/src/core/strategies/first_connected_strategy.d.ts +8 -0
  345. package/types/src/core/strategies/if_strategy.d.ts +10 -0
  346. package/types/src/core/strategies/sequential_strategy.d.ts +16 -0
  347. package/types/src/core/strategies/strategy.d.ts +6 -0
  348. package/types/src/core/strategies/strategy_builder.d.ts +5 -0
  349. package/types/src/core/strategies/strategy_options.d.ts +16 -0
  350. package/types/src/core/strategies/strategy_runner.d.ts +5 -0
  351. package/types/src/core/strategies/transport_strategy.d.ts +15 -0
  352. package/types/src/core/strategies/websocket_prioritized_cached_strategy.d.ts +20 -0
  353. package/types/src/core/timeline/level.d.ts +6 -0
  354. package/types/src/core/timeline/timeline.d.ts +25 -0
  355. package/types/src/core/timeline/timeline_sender.d.ts +13 -0
  356. package/types/src/core/timeline/timeline_transport.d.ts +6 -0
  357. package/types/src/core/transports/assistant_to_the_transport_manager.d.ts +14 -0
  358. package/types/src/core/transports/ping_delay_options.d.ts +6 -0
  359. package/types/src/core/transports/transport.d.ts +8 -0
  360. package/types/src/core/transports/transport_connection.d.ts +35 -0
  361. package/types/src/core/transports/transport_connection_options.d.ts +6 -0
  362. package/types/src/core/transports/transport_hooks.d.ts +13 -0
  363. package/types/src/core/transports/transport_manager.d.ts +14 -0
  364. package/types/src/core/transports/transports_table.d.ts +10 -0
  365. package/types/src/core/transports/url_scheme.d.ts +11 -0
  366. package/types/src/core/transports/url_schemes.d.ts +4 -0
  367. package/types/src/core/user.d.ts +21 -0
  368. package/types/src/core/util.d.ts +8 -0
  369. package/types/src/core/utils/collections.d.ts +18 -0
  370. package/types/src/core/utils/factory.d.ts +29 -0
  371. package/types/src/core/utils/flat_promise.d.ts +6 -0
  372. package/types/src/core/utils/timers/abstract_timer.d.ts +10 -0
  373. package/types/src/core/utils/timers/index.d.ts +9 -0
  374. package/types/src/core/utils/timers/scheduling.d.ts +8 -0
  375. package/types/src/core/utils/timers/timed_callback.d.ts +4 -0
  376. package/types/src/core/utils/url_store.d.ts +4 -0
  377. package/types/src/core/watchlist.d.ts +8 -0
  378. package/types/src/runtimes/interface.d.ts +43 -0
  379. package/types/src/runtimes/isomorphic/auth/xhr_auth.d.ts +3 -0
  380. package/types/src/runtimes/isomorphic/default_strategy.d.ts +5 -0
  381. package/types/src/runtimes/isomorphic/http/http.d.ts +3 -0
  382. package/types/src/runtimes/isomorphic/http/http_xhr_request.d.ts +3 -0
  383. package/types/src/runtimes/isomorphic/runtime.d.ts +2 -0
  384. package/types/src/runtimes/isomorphic/timeline/xhr_timeline.d.ts +6 -0
  385. package/types/src/runtimes/isomorphic/transports/transport_connection_initializer.d.ts +1 -0
  386. package/types/src/runtimes/isomorphic/transports/transports.d.ts +5 -0
  387. package/types/src/runtimes/node/net_info.d.ts +6 -0
  388. package/types/src/runtimes/node/runtime.d.ts +3 -0
  389. package/types/src/runtimes/react-native/net_info.d.ts +8 -0
  390. package/types/src/runtimes/react-native/runtime.d.ts +3 -0
  391. package/types/src/runtimes/web/auth/jsonp_auth.d.ts +3 -0
  392. package/types/src/runtimes/web/browser.d.ts +19 -0
  393. package/types/src/runtimes/web/default_strategy.d.ts +5 -0
  394. package/types/src/runtimes/web/dom/dependencies.d.ts +4 -0
  395. package/types/src/runtimes/web/dom/dependency_loader.d.ts +10 -0
  396. package/types/src/runtimes/web/dom/jsonp_request.d.ts +10 -0
  397. package/types/src/runtimes/web/dom/script_receiver.d.ts +7 -0
  398. package/types/src/runtimes/web/dom/script_receiver_factory.d.ts +10 -0
  399. package/types/src/runtimes/web/dom/script_request.d.ts +9 -0
  400. package/types/src/runtimes/web/http/http.d.ts +2 -0
  401. package/types/src/runtimes/web/http/http_xdomain_request.d.ts +3 -0
  402. package/types/src/runtimes/web/net_info.d.ts +7 -0
  403. package/types/src/runtimes/web/runtime.d.ts +3 -0
  404. package/types/src/runtimes/web/timeline/jsonp_timeline.d.ts +6 -0
  405. package/types/src/runtimes/web/transports/transport_connection_initializer.d.ts +1 -0
  406. package/types/src/runtimes/web/transports/transports.d.ts +2 -0
  407. package/types/src/runtimes/worker/auth/fetch_auth.d.ts +3 -0
  408. package/types/src/runtimes/worker/net_info.d.ts +6 -0
  409. package/types/src/runtimes/worker/runtime.d.ts +3 -0
  410. package/types/src/runtimes/worker/timeline/fetch_timeline.d.ts +6 -0
  411. package/vite.config.js +52 -0
  412. package/vite.config.node.js +72 -0
  413. package/webpack/config.node.js +26 -0
  414. package/webpack/config.react-native.js +35 -0
  415. package/webpack/config.shared.js +50 -0
  416. package/webpack/config.web.js +36 -0
  417. package/webpack/config.worker.js +42 -0
  418. package/webpack/dev.server.js +17 -0
  419. package/webpack/hosting_config.js +6 -0
  420. package/with-encryption/index.d.ts +29 -0
  421. package/with-encryption/index.js +4 -0
  422. package/worker/index.d.ts +29 -0
  423. package/worker/index.js +1 -0
  424. package/worker/with-encryption/index.d.ts +29 -0
  425. package/worker/with-encryption/index.js +1 -0
@@ -0,0 +1,39 @@
1
+ import Timer from './abstract_timer';
2
+ import TimedCallback from './timed_callback';
3
+ import { Delay } from './scheduling';
4
+
5
+ // We need to bind clear functions this way to avoid exceptions on IE8
6
+ function clearTimeout(timer) {
7
+ global.clearTimeout(timer);
8
+ }
9
+ function clearInterval(timer) {
10
+ global.clearInterval(timer);
11
+ }
12
+
13
+ /** Cross-browser compatible one-off timer abstraction.
14
+ *
15
+ * @param {Number} delay
16
+ * @param {Function} callback
17
+ */
18
+ export class OneOffTimer extends Timer {
19
+ constructor(delay: Delay, callback: TimedCallback) {
20
+ super(setTimeout, clearTimeout, delay, function (timer) {
21
+ callback();
22
+ return null;
23
+ });
24
+ }
25
+ }
26
+
27
+ /** Cross-browser compatible periodic timer abstraction.
28
+ *
29
+ * @param {Number} delay
30
+ * @param {Function} callback
31
+ */
32
+ export class PeriodicTimer extends Timer {
33
+ constructor(delay: Delay, callback: TimedCallback) {
34
+ super(setInterval, clearInterval, delay, function (timer) {
35
+ callback();
36
+ return timer;
37
+ });
38
+ }
39
+ }
@@ -0,0 +1,11 @@
1
+ interface Scheduler {
2
+ (TimedCallback, number): number;
3
+ }
4
+
5
+ interface Canceller {
6
+ (number): void;
7
+ }
8
+
9
+ type Delay = number;
10
+
11
+ export { Scheduler, Canceller, Delay };
@@ -0,0 +1,5 @@
1
+ interface TimedCallback {
2
+ (number?): number | void;
3
+ }
4
+
5
+ export default TimedCallback;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A place to store help URLs for error messages etc
3
+ */
4
+
5
+ const urlStore = {
6
+ baseUrl: 'https://pusher.com',
7
+ urls: {
8
+ authenticationEndpoint: {
9
+ path: '/docs/channels/server_api/authenticating_users',
10
+ },
11
+ authorizationEndpoint: {
12
+ path: '/docs/channels/server_api/authorizing-users/',
13
+ },
14
+ javascriptQuickStart: {
15
+ path: '/docs/javascript_quick_start',
16
+ },
17
+ triggeringClientEvents: {
18
+ path: '/docs/client_api_guide/client_events#trigger-events',
19
+ },
20
+ encryptedChannelSupport: {
21
+ fullUrl:
22
+ 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support',
23
+ },
24
+ },
25
+ };
26
+
27
+ /** Builds a consistent string with links to pusher documentation
28
+ *
29
+ * @param {string} key - relevant key in the url_store.urls object
30
+ * @return {string} suffix string to append to log message
31
+ */
32
+ const buildLogSuffix = function (key: string): string {
33
+ const urlPrefix = 'See:';
34
+ const urlObj = urlStore.urls[key];
35
+ if (!urlObj) return '';
36
+
37
+ let url;
38
+ if (urlObj.fullUrl) {
39
+ url = urlObj.fullUrl;
40
+ } else if (urlObj.path) {
41
+ url = urlStore.baseUrl + urlObj.path;
42
+ }
43
+
44
+ if (!url) return '';
45
+ return `${urlPrefix} ${url}`;
46
+ };
47
+
48
+ export default { buildLogSuffix };
@@ -0,0 +1,31 @@
1
+ import Logger from './logger';
2
+ import Pusher from './pusher';
3
+ import EventsDispatcher from './events/dispatcher';
4
+
5
+ export default class WatchlistFacade extends EventsDispatcher {
6
+ private pusher: Pusher;
7
+
8
+ public constructor(pusher: Pusher) {
9
+ super(function (eventName, data) {
10
+ Logger.debug(`No callbacks on watchlist events for ${eventName}`);
11
+ });
12
+
13
+ this.pusher = pusher;
14
+ this.bindWatchlistInternalEvent();
15
+ }
16
+
17
+ handleEvent(pusherEvent) {
18
+ pusherEvent.data.events.forEach((watchlistEvent) => {
19
+ this.emit(watchlistEvent.name, watchlistEvent);
20
+ });
21
+ }
22
+
23
+ private bindWatchlistInternalEvent() {
24
+ this.pusher.connection.bind('message', (pusherEvent) => {
25
+ var eventName = pusherEvent.event;
26
+ if (eventName === 'pusher_internal:watchlist_events') {
27
+ this.handleEvent(pusherEvent);
28
+ }
29
+ });
30
+ }
31
+ }
@@ -0,0 +1,5 @@
1
+ declare var VERSION;
2
+ declare var CDN_HTTP;
3
+ declare var CDN_HTTPS;
4
+ declare var DEPENDENCY_SUFFIX;
5
+ declare var RUNTIME;
@@ -0,0 +1,21 @@
1
+ declare module 'faye-websocket' {
2
+ interface MessageEvent {
3
+ data: any;
4
+ }
5
+
6
+ interface CloseEvent {
7
+ code: number;
8
+ reason: string;
9
+ wasClean: boolean;
10
+ }
11
+
12
+ export class Client {
13
+ public onopen: () => void;
14
+ public onmessage: (event: MessageEvent) => void;
15
+ public onclose: (event: CloseEvent) => void;
16
+
17
+ constructor(url: string);
18
+ send(data: string): void;
19
+ close(code?: number, reason?: string): void;
20
+ }
21
+ }
@@ -0,0 +1 @@
1
+ declare const global: any;
@@ -0,0 +1,12 @@
1
+ declare var module: {
2
+ exports: any;
3
+ };
4
+
5
+ declare var require: {
6
+ <T>(path: string): T;
7
+ (paths: string[], callback: (...modules: any[]) => void): void;
8
+ ensure: (
9
+ paths: string[],
10
+ callback: (require: <T>(path: string) => T) => void,
11
+ ) => void;
12
+ };
@@ -0,0 +1,6 @@
1
+ declare module 'tweetnacl-util' {
2
+ export function encodeUTF8(data: Uint8Array): string;
3
+ export function decodeUTF8(data: string): Uint8Array;
4
+ export function encodeBase64(data: Uint8Array): string;
5
+ export function decodeBase64(data: string): Uint8Array;
6
+ }
@@ -0,0 +1,4 @@
1
+ interface Window {
2
+ attachEvent: any;
3
+ detachEvent: any;
4
+ }
@@ -0,0 +1,3 @@
1
+ interface Window {
2
+ SockJS: any;
3
+ }
@@ -0,0 +1,4 @@
1
+ interface Window {
2
+ WebSocket: any;
3
+ MozWebSocket: any;
4
+ }
@@ -0,0 +1,3 @@
1
+ interface Window {
2
+ XMLHttpRequest: any;
3
+ }
package/src/filter.ts ADDED
@@ -0,0 +1,5 @@
1
+ // Separate entry point for Filter exports
2
+ // This allows clean imports: import { Filter } from 'pusher-js/filter'
3
+
4
+ export { Filter, FilterExamples, validateFilter } from './core/channels/filter';
5
+ export type { FilterNode } from './core/channels/filter';
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ // Main entry point for pusher-js
2
+ // Only exports the Pusher class as default
3
+ // For Filter imports, use: import { Filter } from 'pusher-js/filter'
4
+
5
+ import PusherClass from './core/pusher.ts';
6
+
7
+ // Export Pusher as default only
8
+ export default PusherClass;
@@ -0,0 +1,60 @@
1
+ import { AuthTransports } from '../core/auth/auth_transports';
2
+ import TimelineSender from '../core/timeline/timeline_sender';
3
+ import TimelineTransport from '../core/timeline/timeline_transport';
4
+ import Ajax from '../core/http/ajax';
5
+ import Reachability from '../core/reachability';
6
+ import TransportsTable from '../core/transports/transports_table';
7
+ import Socket from '../core/socket';
8
+ import HTTPFactory from '../core/http/http_factory';
9
+ import HTTPRequest from '../core/http/http_request';
10
+ import Pusher from '../core/pusher';
11
+ import JSONPRequest from './web/dom/jsonp_request';
12
+ import Strategy from '../core/strategies/strategy';
13
+ import { Config } from '../core/config';
14
+ import StrategyOptions from '../core/strategies/strategy_options';
15
+
16
+ /*
17
+ This interface is implemented in web/runtime, node/runtime, react-native/runtime
18
+ and worker/runtime. Its job is to be the only point of contact to platform-specific
19
+ code for the core library. When the core library imports "runtime", Webpack will
20
+ look for src/runtimes/<platform>/runtime.ts. This is how PusherJS keeps
21
+ core and platform-specific code separate.
22
+ */
23
+ interface Runtime {
24
+ setup(PusherClass: {
25
+ new (key: string, options: any): Pusher;
26
+ ready(): void;
27
+ }): void;
28
+ getProtocol(): string;
29
+ getAuthorizers(): AuthTransports;
30
+ getLocalStorage(): any;
31
+ TimelineTransport: TimelineTransport;
32
+ createXHR(): Ajax;
33
+ createWebSocket(url: string): Socket;
34
+ getNetwork(): Reachability;
35
+ getDefaultStrategy(
36
+ config: Config,
37
+ options: StrategyOptions,
38
+ defineTransport: Function,
39
+ ): Strategy;
40
+ Transports: TransportsTable;
41
+ getWebSocketAPI(): new (url: string) => Socket;
42
+ getXHRAPI(): new () => Ajax;
43
+ addUnloadListener(listener: Function): void;
44
+ removeUnloadListener(listener: Function): void;
45
+ transportConnectionInitializer: Function;
46
+ HTTPFactory: HTTPFactory;
47
+ isXHRSupported(): boolean;
48
+ createSocketRequest(method: string, url: string): HTTPRequest;
49
+ randomInt(max: number): number;
50
+
51
+ // these methods/types are only implemented in the web Runtime, so they're
52
+ // optional but must be included in the interface
53
+ getDocument?(): Document;
54
+ createScriptRequest?(url: string): any;
55
+ createJSONPRequest?(url: string, data: any): JSONPRequest;
56
+ ScriptReceivers?: any;
57
+ isXDRSupported?(useTLS?: boolean): boolean;
58
+ }
59
+
60
+ export default Runtime;
@@ -0,0 +1,90 @@
1
+ import TimelineSender from 'core/timeline/timeline_sender';
2
+ import * as Collections from 'core/utils/collections';
3
+ import Util from 'core/util';
4
+ import Runtime from 'runtime';
5
+ import { AuthTransport } from 'core/auth/auth_transports';
6
+ import AbstractRuntime from 'runtimes/interface';
7
+ import UrlStore from 'core/utils/url_store';
8
+ import {
9
+ AuthRequestType,
10
+ AuthTransportCallback,
11
+ InternalAuthOptions,
12
+ } from 'core/auth/options';
13
+ import { HTTPAuthError } from 'core/errors';
14
+
15
+ const ajax: AuthTransport = function (
16
+ context: AbstractRuntime,
17
+ query: string,
18
+ authOptions: InternalAuthOptions,
19
+ authRequestType: AuthRequestType,
20
+ callback: AuthTransportCallback,
21
+ ) {
22
+ const xhr = Runtime.createXHR();
23
+ xhr.open('POST', authOptions.endpoint, true);
24
+
25
+ // add request headers
26
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
27
+ for (var headerName in authOptions.headers) {
28
+ xhr.setRequestHeader(headerName, authOptions.headers[headerName]);
29
+ }
30
+ if (authOptions.headersProvider != null) {
31
+ let dynamicHeaders = authOptions.headersProvider();
32
+ for (var headerName in dynamicHeaders) {
33
+ xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);
34
+ }
35
+ }
36
+
37
+ xhr.onreadystatechange = function () {
38
+ if (xhr.readyState === 4) {
39
+ if (xhr.status === 200) {
40
+ let data;
41
+ let parsed = false;
42
+
43
+ try {
44
+ data = JSON.parse(xhr.responseText);
45
+ parsed = true;
46
+ } catch (e) {
47
+ callback(
48
+ new HTTPAuthError(
49
+ 200,
50
+ `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${
51
+ xhr.responseText
52
+ }`,
53
+ ),
54
+ null,
55
+ );
56
+ }
57
+
58
+ if (parsed) {
59
+ // prevents double execution.
60
+ callback(null, data);
61
+ }
62
+ } else {
63
+ let suffix = '';
64
+ switch (authRequestType) {
65
+ case AuthRequestType.UserAuthentication:
66
+ suffix = UrlStore.buildLogSuffix('authenticationEndpoint');
67
+ break;
68
+ case AuthRequestType.ChannelAuthorization:
69
+ suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(
70
+ 'authorizationEndpoint',
71
+ )}`;
72
+ break;
73
+ }
74
+ callback(
75
+ new HTTPAuthError(
76
+ xhr.status,
77
+ `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +
78
+ `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`,
79
+ ),
80
+ null,
81
+ );
82
+ }
83
+ }
84
+ };
85
+
86
+ xhr.send(query);
87
+ return xhr;
88
+ };
89
+
90
+ export default ajax;
@@ -0,0 +1,155 @@
1
+ import * as Collections from 'core/utils/collections';
2
+ import TransportManager from 'core/transports/transport_manager';
3
+ import Strategy from 'core/strategies/strategy';
4
+ import SequentialStrategy from 'core/strategies/sequential_strategy';
5
+ import BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';
6
+ import WebSocketPrioritizedCachedStrategy, {
7
+ TransportStrategyDictionary,
8
+ } from 'core/strategies/websocket_prioritized_cached_strategy';
9
+ import DelayedStrategy from 'core/strategies/delayed_strategy';
10
+ import IfStrategy from 'core/strategies/if_strategy';
11
+ import FirstConnectedStrategy from 'core/strategies/first_connected_strategy';
12
+ import { Config } from 'core/config';
13
+ import StrategyOptions from 'core/strategies/strategy_options';
14
+
15
+ function testSupportsStrategy(strategy: Strategy) {
16
+ return function () {
17
+ return strategy.isSupported();
18
+ };
19
+ }
20
+
21
+ var getDefaultStrategy = function (
22
+ config: Config,
23
+ baseOptions: StrategyOptions,
24
+ defineTransport: Function,
25
+ ): Strategy {
26
+ var definedTransports = <TransportStrategyDictionary>{};
27
+
28
+ function defineTransportStrategy(
29
+ name: string,
30
+ type: string,
31
+ priority: number,
32
+ options: StrategyOptions,
33
+ manager?: TransportManager,
34
+ ) {
35
+ var transport = defineTransport(
36
+ config,
37
+ name,
38
+ type,
39
+ priority,
40
+ options,
41
+ manager,
42
+ );
43
+
44
+ definedTransports[name] = transport;
45
+
46
+ return transport;
47
+ }
48
+
49
+ var ws_options: StrategyOptions = Object.assign({}, baseOptions, {
50
+ hostNonTLS: config.wsHost + ':' + config.wsPort,
51
+ hostTLS: config.wsHost + ':' + config.wssPort,
52
+ httpPath: config.wsPath,
53
+ });
54
+ var wss_options: StrategyOptions = Collections.extend({}, ws_options, {
55
+ useTLS: true,
56
+ });
57
+ var http_options: StrategyOptions = Object.assign({}, baseOptions, {
58
+ hostNonTLS: config.httpHost + ':' + config.httpPort,
59
+ hostTLS: config.httpHost + ':' + config.httpsPort,
60
+ httpPath: config.httpPath,
61
+ });
62
+ var timeouts = {
63
+ loop: true,
64
+ timeout: 15000,
65
+ timeoutLimit: 60000,
66
+ };
67
+
68
+ var ws_manager = new TransportManager({
69
+ minPingDelay: 10000,
70
+ maxPingDelay: config.activityTimeout,
71
+ });
72
+ var streaming_manager = new TransportManager({
73
+ lives: 2,
74
+ minPingDelay: 10000,
75
+ maxPingDelay: config.activityTimeout,
76
+ });
77
+
78
+ var ws_transport = defineTransportStrategy(
79
+ 'ws',
80
+ 'ws',
81
+ 3,
82
+ ws_options,
83
+ ws_manager,
84
+ );
85
+ var wss_transport = defineTransportStrategy(
86
+ 'wss',
87
+ 'ws',
88
+ 3,
89
+ wss_options,
90
+ ws_manager,
91
+ );
92
+ var xhr_streaming_transport = defineTransportStrategy(
93
+ 'xhr_streaming',
94
+ 'xhr_streaming',
95
+ 1,
96
+ http_options,
97
+ streaming_manager,
98
+ );
99
+ var xhr_polling_transport = defineTransportStrategy(
100
+ 'xhr_polling',
101
+ 'xhr_polling',
102
+ 1,
103
+ http_options,
104
+ );
105
+
106
+ var ws_loop = new SequentialStrategy([ws_transport], timeouts);
107
+ var wss_loop = new SequentialStrategy([wss_transport], timeouts);
108
+ var streaming_loop = new SequentialStrategy(
109
+ [xhr_streaming_transport],
110
+ timeouts,
111
+ );
112
+ var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);
113
+
114
+ var http_loop = new SequentialStrategy(
115
+ [
116
+ new IfStrategy(
117
+ testSupportsStrategy(streaming_loop),
118
+ new BestConnectedEverStrategy([
119
+ streaming_loop,
120
+ new DelayedStrategy(polling_loop, { delay: 4000 }),
121
+ ]),
122
+ polling_loop,
123
+ ),
124
+ ],
125
+ timeouts,
126
+ );
127
+
128
+ var wsStrategy;
129
+ if (baseOptions.useTLS) {
130
+ wsStrategy = new BestConnectedEverStrategy([
131
+ ws_loop,
132
+ new DelayedStrategy(http_loop, { delay: 2000 }),
133
+ ]);
134
+ } else {
135
+ wsStrategy = new BestConnectedEverStrategy([
136
+ ws_loop,
137
+ new DelayedStrategy(wss_loop, { delay: 2000 }),
138
+ new DelayedStrategy(http_loop, { delay: 5000 }),
139
+ ]);
140
+ }
141
+
142
+ return new WebSocketPrioritizedCachedStrategy(
143
+ new FirstConnectedStrategy(
144
+ new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop),
145
+ ),
146
+ definedTransports,
147
+ {
148
+ ttl: 1800000,
149
+ timeline: baseOptions.timeline,
150
+ useTLS: baseOptions.useTLS,
151
+ },
152
+ );
153
+ };
154
+
155
+ export default getDefaultStrategy;
@@ -0,0 +1,32 @@
1
+ import HTTPRequest from 'core/http/http_request';
2
+ import HTTPSocket from 'core/http/http_socket';
3
+ import SocketHooks from 'core/http/socket_hooks';
4
+ import RequestHooks from 'core/http/request_hooks';
5
+ import streamingHooks from 'core/http/http_streaming_socket';
6
+ import pollingHooks from 'core/http/http_polling_socket';
7
+ import xhrHooks from './http_xhr_request';
8
+ import HTTPFactory from 'core/http/http_factory';
9
+
10
+ var HTTP: HTTPFactory = {
11
+ createStreamingSocket(url: string): HTTPSocket {
12
+ return this.createSocket(streamingHooks, url);
13
+ },
14
+
15
+ createPollingSocket(url: string): HTTPSocket {
16
+ return this.createSocket(pollingHooks, url);
17
+ },
18
+
19
+ createSocket(hooks: SocketHooks, url: string): HTTPSocket {
20
+ return new HTTPSocket(hooks, url);
21
+ },
22
+
23
+ createXHR(method: string, url: string): HTTPRequest {
24
+ return this.createRequest(xhrHooks, method, url);
25
+ },
26
+
27
+ createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {
28
+ return new HTTPRequest(hooks, method, url);
29
+ },
30
+ };
31
+
32
+ export default HTTP;
@@ -0,0 +1,35 @@
1
+ import HTTPRequest from 'core/http/http_request';
2
+ import RequestHooks from 'core/http/request_hooks';
3
+ import Ajax from 'core/http/ajax';
4
+ import Runtime from 'runtime';
5
+
6
+ var hooks: RequestHooks = {
7
+ getRequest: function (socket: HTTPRequest): Ajax {
8
+ var Constructor = Runtime.getXHRAPI();
9
+ var xhr = new Constructor();
10
+ xhr.onreadystatechange = xhr.onprogress = function () {
11
+ switch (xhr.readyState) {
12
+ case 3:
13
+ if (xhr.responseText && xhr.responseText.length > 0) {
14
+ socket.onChunk(xhr.status, xhr.responseText);
15
+ }
16
+ break;
17
+ case 4:
18
+ // this happens only on errors, never after calling close
19
+ if (xhr.responseText && xhr.responseText.length > 0) {
20
+ socket.onChunk(xhr.status, xhr.responseText);
21
+ }
22
+ socket.emit('finished', xhr.status);
23
+ socket.close();
24
+ break;
25
+ }
26
+ };
27
+ return xhr;
28
+ },
29
+ abortRequest: function (xhr: Ajax) {
30
+ xhr.onreadystatechange = null;
31
+ xhr.abort();
32
+ },
33
+ };
34
+
35
+ export default hooks;
@@ -0,0 +1,62 @@
1
+ import * as Collections from 'core/utils/collections';
2
+ import Transports from 'isomorphic/transports/transports';
3
+ import TimelineSender from 'core/timeline/timeline_sender';
4
+ import Ajax from 'core/http/ajax';
5
+ import getDefaultStrategy from './default_strategy';
6
+ import TransportsTable from 'core/transports/transports_table';
7
+ import transportConnectionInitializer from './transports/transport_connection_initializer';
8
+ import HTTPFactory from './http/http';
9
+
10
+ var Isomorphic: any = {
11
+ getDefaultStrategy,
12
+ Transports: <TransportsTable>Transports,
13
+ transportConnectionInitializer,
14
+ HTTPFactory,
15
+
16
+ setup(PusherClass): void {
17
+ PusherClass.ready();
18
+ },
19
+
20
+ getLocalStorage(): any {
21
+ return undefined;
22
+ },
23
+
24
+ getClientFeatures(): any[] {
25
+ return Collections.keys(
26
+ Collections.filterObject({ ws: Transports.ws }, function (t) {
27
+ return t.isSupported({});
28
+ }),
29
+ );
30
+ },
31
+
32
+ getProtocol(): string {
33
+ return 'http:';
34
+ },
35
+
36
+ isXHRSupported(): boolean {
37
+ return true;
38
+ },
39
+
40
+ createSocketRequest(method: string, url: string) {
41
+ if (this.isXHRSupported()) {
42
+ return this.HTTPFactory.createXHR(method, url);
43
+ } else {
44
+ throw 'Cross-origin HTTP requests are not supported';
45
+ }
46
+ },
47
+
48
+ createXHR(): Ajax {
49
+ var Constructor = this.getXHRAPI();
50
+ return new Constructor();
51
+ },
52
+
53
+ createWebSocket(url: string): any {
54
+ var Constructor = this.getWebSocketAPI();
55
+ return new Constructor(url);
56
+ },
57
+
58
+ addUnloadListener(listener: any) {},
59
+ removeUnloadListener(listener: any) {},
60
+ };
61
+
62
+ export default Isomorphic;