@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,104 @@
1
+ import Util from '../util';
2
+ import * as Collections from '../utils/collections';
3
+ import TransportManager from './transport_manager';
4
+ import TransportConnection from './transport_connection';
5
+ import Transport from './transport';
6
+ import PingDelayOptions from './ping_delay_options';
7
+
8
+ /** Creates transport connections monitored by a transport manager.
9
+ *
10
+ * When a transport is closed, it might mean the environment does not support
11
+ * it. It's possible that messages get stuck in an intermediate buffer or
12
+ * proxies terminate inactive connections. To combat these problems,
13
+ * assistants monitor the connection lifetime, report unclean exits and
14
+ * adjust ping timeouts to keep the connection active. The decision to disable
15
+ * a transport is the manager's responsibility.
16
+ *
17
+ * @param {TransportManager} manager
18
+ * @param {TransportConnection} transport
19
+ * @param {Object} options
20
+ */
21
+ export default class AssistantToTheTransportManager {
22
+ manager: TransportManager;
23
+ transport: Transport;
24
+ minPingDelay: number;
25
+ maxPingDelay: number;
26
+ pingDelay: number;
27
+
28
+ constructor(
29
+ manager: TransportManager,
30
+ transport: Transport,
31
+ options: PingDelayOptions,
32
+ ) {
33
+ this.manager = manager;
34
+ this.transport = transport;
35
+ this.minPingDelay = options.minPingDelay;
36
+ this.maxPingDelay = options.maxPingDelay;
37
+ this.pingDelay = undefined;
38
+ }
39
+
40
+ /** Creates a transport connection.
41
+ *
42
+ * This function has the same API as Transport#createConnection.
43
+ *
44
+ * @param {String} name
45
+ * @param {Number} priority
46
+ * @param {String} key the application key
47
+ * @param {Object} options
48
+ * @returns {TransportConnection}
49
+ */
50
+ createConnection(
51
+ name: string,
52
+ priority: number,
53
+ key: string,
54
+ options: Object,
55
+ ): TransportConnection {
56
+ options = Collections.extend({}, options, {
57
+ activityTimeout: this.pingDelay,
58
+ });
59
+ var connection = this.transport.createConnection(
60
+ name,
61
+ priority,
62
+ key,
63
+ options,
64
+ );
65
+
66
+ var openTimestamp = null;
67
+
68
+ var onOpen = function () {
69
+ connection.unbind('open', onOpen);
70
+ connection.bind('closed', onClosed);
71
+ openTimestamp = Util.now();
72
+ };
73
+ var onClosed = (closeEvent) => {
74
+ connection.unbind('closed', onClosed);
75
+
76
+ if (closeEvent.code === 1002 || closeEvent.code === 1003) {
77
+ // we don't want to use transports not obeying the protocol
78
+ this.manager.reportDeath();
79
+ } else if (!closeEvent.wasClean && openTimestamp) {
80
+ // report deaths only for short-living transport
81
+ var lifespan = Util.now() - openTimestamp;
82
+ if (lifespan < 2 * this.maxPingDelay) {
83
+ this.manager.reportDeath();
84
+ this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);
85
+ }
86
+ }
87
+ };
88
+
89
+ connection.bind('open', onOpen);
90
+ return connection;
91
+ }
92
+
93
+ /** Returns whether the transport is supported in the environment.
94
+ *
95
+ * This function has the same API as Transport#isSupported. Might return false
96
+ * when the manager decides to kill the transport.
97
+ *
98
+ * @param {Object} environment the environment details (encryption, settings)
99
+ * @returns {Boolean} true when the transport is supported
100
+ */
101
+ isSupported(environment: string): boolean {
102
+ return this.manager.isAlive() && this.transport.isSupported(environment);
103
+ }
104
+ }
@@ -0,0 +1,7 @@
1
+ interface PingDelayOptions {
2
+ minPingDelay?: number;
3
+ maxPingDelay?: number;
4
+ pingDelay?: number;
5
+ }
6
+
7
+ export default PingDelayOptions;
@@ -0,0 +1,54 @@
1
+ import Factory from '../utils/factory';
2
+ import TransportHooks from './transport_hooks';
3
+ import TransportConnection from './transport_connection';
4
+ import TransportConnectionOptions from './transport_connection_options';
5
+
6
+ /** Provides interface for transport connection instantiation.
7
+ *
8
+ * Takes transport-specific hooks as the only argument, which allow checking
9
+ * for transport support and creating its connections.
10
+ *
11
+ * Supported hooks: * - file - the name of the file to be fetched during initialization
12
+ * - urls - URL scheme to be used by transport
13
+ * - handlesActivityCheck - true when the transport handles activity checks
14
+ * - supportsPing - true when the transport has a ping/activity API
15
+ * - isSupported - tells whether the transport is supported in the environment
16
+ * - getSocket - creates a WebSocket-compatible transport socket
17
+ *
18
+ * See transports.js for specific implementations.
19
+ *
20
+ * @param {Object} hooks object containing all needed transport hooks
21
+ */
22
+ export default class Transport {
23
+ hooks: TransportHooks;
24
+
25
+ constructor(hooks: TransportHooks) {
26
+ this.hooks = hooks;
27
+ }
28
+
29
+ /** Returns whether the transport is supported in the environment.
30
+ *
31
+ * @param {Object} envronment te environment details (encryption, settings)
32
+ * @returns {Boolean} true when the transport is supported
33
+ */
34
+ isSupported(environment: any): boolean {
35
+ return this.hooks.isSupported(environment);
36
+ }
37
+
38
+ /** Creates a transport connection.
39
+ *
40
+ * @param {String} name
41
+ * @param {Number} priority
42
+ * @param {String} key the application key
43
+ * @param {Object} options
44
+ * @returns {TransportConnection}
45
+ */
46
+ createConnection(
47
+ name: string,
48
+ priority: number,
49
+ key: string,
50
+ options: any,
51
+ ): TransportConnection {
52
+ return new TransportConnection(this.hooks, name, priority, key, options);
53
+ }
54
+ }
@@ -0,0 +1,241 @@
1
+ import Util from '../util';
2
+ import * as Collections from '../utils/collections';
3
+ import { default as EventsDispatcher } from '../events/dispatcher';
4
+ import Logger from '../logger';
5
+ import TransportHooks from './transport_hooks';
6
+ import Socket from '../socket';
7
+ import Runtime from 'runtime';
8
+ import Timeline from '../timeline/timeline';
9
+ import TransportConnectionOptions from './transport_connection_options';
10
+
11
+ /** Provides universal API for transport connections.
12
+ *
13
+ * Transport connection is a low-level object that wraps a connection method
14
+ * and exposes a simple evented interface for the connection state and
15
+ * messaging. It does not implement Pusher-specific WebSocket protocol.
16
+ *
17
+ * Additionally, it fetches resources needed for transport to work and exposes
18
+ * an interface for querying transport features.
19
+ *
20
+ * States:
21
+ * - new - initial state after constructing the object
22
+ * - initializing - during initialization phase, usually fetching resources
23
+ * - intialized - ready to establish a connection
24
+ * - connection - when connection is being established
25
+ * - open - when connection ready to be used
26
+ * - closed - after connection was closed be either side
27
+ *
28
+ * Emits:
29
+ * - error - after the connection raised an error
30
+ *
31
+ * Options:
32
+ * - useTLS - whether connection should be over TLS
33
+ * - hostTLS - host to connect to when connection is over TLS
34
+ * - hostNonTLS - host to connect to when connection is over TLS
35
+ *
36
+ * @param {String} key application key
37
+ * @param {Object} options
38
+ */
39
+ export default class TransportConnection extends EventsDispatcher {
40
+ hooks: TransportHooks;
41
+ name: string;
42
+ priority: number;
43
+ key: string;
44
+ options: TransportConnectionOptions;
45
+ state: string;
46
+ timeline: Timeline;
47
+ activityTimeout: number;
48
+ id: number;
49
+ socket: Socket;
50
+ beforeOpen: Function;
51
+ initialize: Function;
52
+
53
+ constructor(
54
+ hooks: TransportHooks,
55
+ name: string,
56
+ priority: number,
57
+ key: string,
58
+ options: TransportConnectionOptions,
59
+ ) {
60
+ super();
61
+ this.initialize = Runtime.transportConnectionInitializer;
62
+ this.hooks = hooks;
63
+ this.name = name;
64
+ this.priority = priority;
65
+ this.key = key;
66
+ this.options = options;
67
+
68
+ this.state = 'new';
69
+ this.timeline = options.timeline;
70
+ this.activityTimeout = options.activityTimeout;
71
+ this.id = this.timeline.generateUniqueID();
72
+ }
73
+
74
+ /** Checks whether the transport handles activity checks by itself.
75
+ *
76
+ * @return {Boolean}
77
+ */
78
+ handlesActivityChecks(): boolean {
79
+ return Boolean(this.hooks.handlesActivityChecks);
80
+ }
81
+
82
+ /** Checks whether the transport supports the ping/pong API.
83
+ *
84
+ * @return {Boolean}
85
+ */
86
+ supportsPing(): boolean {
87
+ return Boolean(this.hooks.supportsPing);
88
+ }
89
+
90
+ /** Tries to establish a connection.
91
+ *
92
+ * @returns {Boolean} false if transport is in invalid state
93
+ */
94
+ connect(): boolean {
95
+ if (this.socket || this.state !== 'initialized') {
96
+ return false;
97
+ }
98
+
99
+ var url = this.hooks.urls.getInitial(this.key, this.options);
100
+ try {
101
+ this.socket = this.hooks.getSocket(url, this.options);
102
+ } catch (e) {
103
+ Util.defer(() => {
104
+ this.onError(e);
105
+ this.changeState('closed');
106
+ });
107
+ return false;
108
+ }
109
+
110
+ this.bindListeners();
111
+
112
+ Logger.debug('Connecting', { transport: this.name, url });
113
+ this.changeState('connecting');
114
+ return true;
115
+ }
116
+
117
+ /** Closes the connection.
118
+ *
119
+ * @return {Boolean} true if there was a connection to close
120
+ */
121
+ close(): boolean {
122
+ if (this.socket) {
123
+ this.socket.close();
124
+ return true;
125
+ } else {
126
+ return false;
127
+ }
128
+ }
129
+
130
+ /** Sends data over the open connection.
131
+ *
132
+ * @param {String} data
133
+ * @return {Boolean} true only when in the "open" state
134
+ */
135
+ send(data: any): boolean {
136
+ if (this.state === 'open') {
137
+ // Workaround for MobileSafari bug (see https://gist.github.com/2052006)
138
+ Util.defer(() => {
139
+ if (this.socket) {
140
+ this.socket.send(data);
141
+ }
142
+ });
143
+ return true;
144
+ } else {
145
+ return false;
146
+ }
147
+ }
148
+
149
+ /** Sends a ping if the connection is open and transport supports it. */
150
+ ping() {
151
+ if (this.state === 'open' && this.supportsPing()) {
152
+ this.socket.ping();
153
+ }
154
+ }
155
+
156
+ private onOpen() {
157
+ if (this.hooks.beforeOpen) {
158
+ this.hooks.beforeOpen(
159
+ this.socket,
160
+ this.hooks.urls.getPath(this.key, this.options),
161
+ );
162
+ }
163
+ this.changeState('open');
164
+ this.socket.onopen = undefined;
165
+ }
166
+
167
+ private onError(error) {
168
+ this.emit('error', { type: 'WebSocketError', error: error });
169
+ this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));
170
+ }
171
+
172
+ private onClose(closeEvent?: any) {
173
+ if (closeEvent) {
174
+ this.changeState('closed', {
175
+ code: closeEvent.code,
176
+ reason: closeEvent.reason,
177
+ wasClean: closeEvent.wasClean,
178
+ });
179
+ } else {
180
+ this.changeState('closed');
181
+ }
182
+ this.unbindListeners();
183
+ this.socket = undefined;
184
+ }
185
+
186
+ private onMessage(message) {
187
+ this.emit('message', message);
188
+ }
189
+
190
+ private onActivity() {
191
+ this.emit('activity');
192
+ }
193
+
194
+ private bindListeners() {
195
+ this.socket.onopen = () => {
196
+ this.onOpen();
197
+ };
198
+ this.socket.onerror = (error) => {
199
+ this.onError(error);
200
+ };
201
+ this.socket.onclose = (closeEvent) => {
202
+ this.onClose(closeEvent);
203
+ };
204
+ this.socket.onmessage = (message) => {
205
+ this.onMessage(message);
206
+ };
207
+
208
+ if (this.supportsPing()) {
209
+ this.socket.onactivity = () => {
210
+ this.onActivity();
211
+ };
212
+ }
213
+ }
214
+
215
+ private unbindListeners() {
216
+ if (this.socket) {
217
+ this.socket.onopen = undefined;
218
+ this.socket.onerror = undefined;
219
+ this.socket.onclose = undefined;
220
+ this.socket.onmessage = undefined;
221
+ if (this.supportsPing()) {
222
+ this.socket.onactivity = undefined;
223
+ }
224
+ }
225
+ }
226
+
227
+ private changeState(state: string, params?: any) {
228
+ this.state = state;
229
+ this.timeline.info(
230
+ this.buildTimelineMessage({
231
+ state: state,
232
+ params: params,
233
+ }),
234
+ );
235
+ this.emit(state, params);
236
+ }
237
+
238
+ buildTimelineMessage(message): any {
239
+ return Collections.extend({ cid: this.id }, message);
240
+ }
241
+ }
@@ -0,0 +1,8 @@
1
+ import Timeline from '../timeline/timeline';
2
+
3
+ interface TransportConnectionOptions {
4
+ timeline: Timeline;
5
+ activityTimeout: number;
6
+ }
7
+
8
+ export default TransportConnectionOptions;
@@ -0,0 +1,16 @@
1
+ import Factory from '../utils/factory';
2
+ import URLScheme from './url_scheme';
3
+ import Socket from '../socket';
4
+
5
+ interface TransportHooks {
6
+ file?: string;
7
+ urls: URLScheme;
8
+ handlesActivityChecks: boolean;
9
+ supportsPing: boolean;
10
+ isInitialized(): boolean;
11
+ isSupported(environment?: any): boolean;
12
+ getSocket(url: string, options?: any): Socket;
13
+ beforeOpen?: Function;
14
+ }
15
+
16
+ export default TransportHooks;
@@ -0,0 +1,52 @@
1
+ import AssistantToTheTransportManager from './assistant_to_the_transport_manager';
2
+ import Transport from './transport';
3
+ import PingDelayOptions from './ping_delay_options';
4
+ import Factory from '../utils/factory';
5
+
6
+ export interface TransportManagerOptions extends PingDelayOptions {
7
+ lives?: number;
8
+ }
9
+
10
+ /** Keeps track of the number of lives left for a transport.
11
+ *
12
+ * In the beginning of a session, transports may be assigned a number of
13
+ * lives. When an AssistantToTheTransportManager instance reports a transport
14
+ * connection closed uncleanly, the transport loses a life. When the number
15
+ * of lives drops to zero, the transport gets disabled by its manager.
16
+ *
17
+ * @param {Object} options
18
+ */
19
+ export default class TransportManager {
20
+ options: TransportManagerOptions;
21
+ livesLeft: number;
22
+
23
+ constructor(options: TransportManagerOptions) {
24
+ this.options = options || {};
25
+ this.livesLeft = this.options.lives || Infinity;
26
+ }
27
+
28
+ /** Creates a assistant for the transport.
29
+ *
30
+ * @param {Transport} transport
31
+ * @returns {AssistantToTheTransportManager}
32
+ */
33
+ getAssistant(transport: Transport): AssistantToTheTransportManager {
34
+ return Factory.createAssistantToTheTransportManager(this, transport, {
35
+ minPingDelay: this.options.minPingDelay,
36
+ maxPingDelay: this.options.maxPingDelay,
37
+ });
38
+ }
39
+
40
+ /** Returns whether the transport has any lives left.
41
+ *
42
+ * @returns {Boolean}
43
+ */
44
+ isAlive(): boolean {
45
+ return this.livesLeft > 0;
46
+ }
47
+
48
+ /** Takes one life from the transport. */
49
+ reportDeath() {
50
+ this.livesLeft -= 1;
51
+ }
52
+ }
@@ -0,0 +1,12 @@
1
+ import Transport from './transport';
2
+
3
+ interface TransportsTable {
4
+ ws: Transport;
5
+ xhr_streaming: Transport;
6
+ xdr_streaming?: Transport;
7
+ xhr_polling: Transport;
8
+ xdr_polling?: Transport;
9
+ sockjs?: Transport;
10
+ }
11
+
12
+ export default TransportsTable;
@@ -0,0 +1,13 @@
1
+ export interface URLSchemeParams {
2
+ useTLS: boolean;
3
+ hostTLS: string;
4
+ hostNonTLS: string;
5
+ httpPath: string;
6
+ }
7
+
8
+ interface URLScheme {
9
+ getInitial(key: string, params: any): string;
10
+ getPath?(key: string, options: any): string;
11
+ }
12
+
13
+ export default URLScheme;
@@ -0,0 +1,47 @@
1
+ import Defaults from '../defaults';
2
+ import { default as URLScheme, URLSchemeParams } from './url_scheme';
3
+
4
+ function getGenericURL(
5
+ baseScheme: string,
6
+ params: URLSchemeParams,
7
+ path: string,
8
+ ): string {
9
+ var scheme = baseScheme + (params.useTLS ? 's' : '');
10
+ var host = params.useTLS ? params.hostTLS : params.hostNonTLS;
11
+ return scheme + '://' + host + path;
12
+ }
13
+
14
+ function getGenericPath(key: string, queryString?: string): string {
15
+ var path = '/app/' + key;
16
+ var query =
17
+ '?protocol=' +
18
+ Defaults.PROTOCOL +
19
+ '&client=js' +
20
+ '&version=' +
21
+ Defaults.VERSION +
22
+ (queryString ? '&' + queryString : '');
23
+ return path + query;
24
+ }
25
+
26
+ export var ws: URLScheme = {
27
+ getInitial: function (key: string, params: URLSchemeParams): string {
28
+ var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');
29
+ return getGenericURL('ws', params, path);
30
+ },
31
+ };
32
+
33
+ export var http: URLScheme = {
34
+ getInitial: function (key: string, params: URLSchemeParams): string {
35
+ var path = (params.httpPath || '/pusher') + getGenericPath(key);
36
+ return getGenericURL('http', params, path);
37
+ },
38
+ };
39
+
40
+ export var sockjs: URLScheme = {
41
+ getInitial: function (key: string, params: URLSchemeParams): string {
42
+ return getGenericURL('http', params, params.httpPath || '/pusher');
43
+ },
44
+ getPath: function (key: string, params: URLSchemeParams): string {
45
+ return getGenericPath(key);
46
+ },
47
+ };