@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,186 @@
1
+ import Pusher from './pusher';
2
+ import Logger from './logger';
3
+ import {
4
+ UserAuthenticationData,
5
+ UserAuthenticationCallback,
6
+ } from './auth/options';
7
+ import Channel from './channels/channel';
8
+ import WatchlistFacade from './watchlist';
9
+ import EventsDispatcher from './events/dispatcher';
10
+ import flatPromise from './utils/flat_promise';
11
+
12
+ export default class UserFacade extends EventsDispatcher {
13
+ pusher: Pusher;
14
+ signin_requested: boolean = false;
15
+ user_data: any = null;
16
+ serverToUserChannel: Channel = null;
17
+ signinDonePromise: Promise<any> = null;
18
+ watchlist: WatchlistFacade;
19
+ private _signinDoneResolve: Function = null;
20
+
21
+ public constructor(pusher: Pusher) {
22
+ super(function (eventName, data) {
23
+ Logger.debug('No callbacks on user for ' + eventName);
24
+ });
25
+ this.pusher = pusher;
26
+ this.pusher.connection.bind('state_change', ({ previous, current }) => {
27
+ if (previous !== 'connected' && current === 'connected') {
28
+ this._signin();
29
+ }
30
+ if (previous === 'connected' && current !== 'connected') {
31
+ this._cleanup();
32
+ this._newSigninPromiseIfNeeded();
33
+ }
34
+ });
35
+
36
+ this.watchlist = new WatchlistFacade(pusher);
37
+
38
+ this.pusher.connection.bind('message', (event) => {
39
+ var eventName = event.event;
40
+ if (eventName === 'pusher:signin_success') {
41
+ this._onSigninSuccess(event.data);
42
+ }
43
+ if (
44
+ this.serverToUserChannel &&
45
+ this.serverToUserChannel.name === event.channel
46
+ ) {
47
+ this.serverToUserChannel.handleEvent(event);
48
+ }
49
+ });
50
+ }
51
+
52
+ public signin() {
53
+ if (this.signin_requested) {
54
+ return;
55
+ }
56
+
57
+ this.signin_requested = true;
58
+ this._signin();
59
+ }
60
+
61
+ private _signin() {
62
+ if (!this.signin_requested) {
63
+ return;
64
+ }
65
+
66
+ this._newSigninPromiseIfNeeded();
67
+
68
+ if (this.pusher.connection.state !== 'connected') {
69
+ // Signin will be attempted when the connection is connected
70
+ return;
71
+ }
72
+
73
+ this.pusher.config.userAuthenticator(
74
+ {
75
+ socketId: this.pusher.connection.socket_id,
76
+ },
77
+ this._onAuthorize,
78
+ );
79
+ }
80
+
81
+ private _onAuthorize: UserAuthenticationCallback = (
82
+ err,
83
+ authData: UserAuthenticationData,
84
+ ) => {
85
+ if (err) {
86
+ Logger.warn(`Error during signin: ${err}`);
87
+ this._cleanup();
88
+ return;
89
+ }
90
+
91
+ this.pusher.send_event('pusher:signin', {
92
+ auth: authData.auth,
93
+ user_data: authData.user_data,
94
+ });
95
+
96
+ // Later when we get pusher:singin_success event, the user will be marked as signed in
97
+ };
98
+
99
+ private _onSigninSuccess(data: any) {
100
+ try {
101
+ this.user_data = JSON.parse(data.user_data);
102
+ } catch (e) {
103
+ Logger.error(`Failed parsing user data after signin: ${data.user_data}`);
104
+ this._cleanup();
105
+ return;
106
+ }
107
+
108
+ if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {
109
+ Logger.error(
110
+ `user_data doesn't contain an id. user_data: ${this.user_data}`,
111
+ );
112
+ this._cleanup();
113
+ return;
114
+ }
115
+
116
+ // Signin succeeded
117
+ this._signinDoneResolve();
118
+ this._subscribeChannels();
119
+ }
120
+
121
+ private _subscribeChannels() {
122
+ const ensure_subscribed = (channel) => {
123
+ if (channel.subscriptionPending && channel.subscriptionCancelled) {
124
+ channel.reinstateSubscription();
125
+ } else if (
126
+ !channel.subscriptionPending &&
127
+ this.pusher.connection.state === 'connected'
128
+ ) {
129
+ channel.subscribe();
130
+ }
131
+ };
132
+
133
+ this.serverToUserChannel = new Channel(
134
+ `#server-to-user-${this.user_data.id}`,
135
+ this.pusher,
136
+ );
137
+ this.serverToUserChannel.bind_global((eventName, data) => {
138
+ if (
139
+ eventName.indexOf('pusher_internal:') === 0 ||
140
+ eventName.indexOf('pusher:') === 0
141
+ ) {
142
+ // ignore internal events
143
+ return;
144
+ }
145
+ this.emit(eventName, data);
146
+ });
147
+ ensure_subscribed(this.serverToUserChannel);
148
+ }
149
+
150
+ private _cleanup() {
151
+ this.user_data = null;
152
+ if (this.serverToUserChannel) {
153
+ this.serverToUserChannel.unbind_all();
154
+ this.serverToUserChannel.disconnect();
155
+ this.serverToUserChannel = null;
156
+ }
157
+
158
+ if (this.signin_requested) {
159
+ // If signin is in progress and cleanup is called,
160
+ // Mark the current signin process as done.
161
+ this._signinDoneResolve();
162
+ }
163
+ }
164
+
165
+ private _newSigninPromiseIfNeeded() {
166
+ if (!this.signin_requested) {
167
+ return;
168
+ }
169
+
170
+ // If there is a promise and it is not resolved, return without creating a new one.
171
+ if (this.signinDonePromise && !(this.signinDonePromise as any).done) {
172
+ return;
173
+ }
174
+
175
+ // This promise is never rejected.
176
+ // It gets resolved when the signin process is done whether it failed or succeeded
177
+ const { promise, resolve, reject: _ } = flatPromise();
178
+ (promise as any).done = false;
179
+ const setDone = () => {
180
+ (promise as any).done = true;
181
+ };
182
+ promise.then(setDone).catch(setDone);
183
+ this.signinDonePromise = promise;
184
+ this._signinDoneResolve = resolve;
185
+ }
186
+ }
@@ -0,0 +1,34 @@
1
+ import * as Collections from './utils/collections';
2
+ import TimedCallback from './utils/timers/timed_callback';
3
+ import { OneOffTimer, PeriodicTimer } from './utils/timers';
4
+
5
+ var Util = {
6
+ now(): number {
7
+ if (Date.now) {
8
+ return Date.now();
9
+ } else {
10
+ return new Date().valueOf();
11
+ }
12
+ },
13
+
14
+ defer(callback: TimedCallback): OneOffTimer {
15
+ return new OneOffTimer(0, callback);
16
+ },
17
+
18
+ /** Builds a function that will proxy a method call to its first argument.
19
+ *
20
+ * Allows partial application of arguments, so additional arguments are
21
+ * prepended to the argument list.
22
+ *
23
+ * @param {String} name method name
24
+ * @return {Function} proxy function
25
+ */
26
+ method(name: string, ...args: any[]): Function {
27
+ var boundArguments = Array.prototype.slice.call(arguments, 1);
28
+ return function (object) {
29
+ return object[name].apply(object, boundArguments.concat(arguments));
30
+ };
31
+ },
32
+ };
33
+
34
+ export default Util;
@@ -0,0 +1,353 @@
1
+ import base64encode from '../base64';
2
+ import Util from '../util';
3
+
4
+ /** Merges multiple objects into the target argument.
5
+ *
6
+ * For properties that are plain Objects, performs a deep-merge. For the
7
+ * rest it just copies the value of the property.
8
+ *
9
+ * To extend prototypes use it as following:
10
+ * Pusher.Util.extend(Target.prototype, Base.prototype)
11
+ *
12
+ * You can also use it to merge objects without altering them:
13
+ * Pusher.Util.extend({}, object1, object2)
14
+ *
15
+ * @param {Object} target
16
+ * @return {Object} the target argument
17
+ */
18
+ export function extend<T>(target: any, ...sources: any[]): T {
19
+ for (var i = 0; i < sources.length; i++) {
20
+ var extensions = sources[i];
21
+ for (var property in extensions) {
22
+ if (
23
+ extensions[property] &&
24
+ extensions[property].constructor &&
25
+ extensions[property].constructor === Object
26
+ ) {
27
+ target[property] = extend(target[property] || {}, extensions[property]);
28
+ } else {
29
+ target[property] = extensions[property];
30
+ }
31
+ }
32
+ }
33
+ return target;
34
+ }
35
+
36
+ export function stringify(): string {
37
+ var m = ['Pusher'];
38
+ for (var i = 0; i < arguments.length; i++) {
39
+ if (typeof arguments[i] === 'string') {
40
+ m.push(arguments[i]);
41
+ } else {
42
+ m.push(safeJSONStringify(arguments[i]));
43
+ }
44
+ }
45
+ return m.join(' : ');
46
+ }
47
+
48
+ export function arrayIndexOf(array: any[], item: any): number {
49
+ // MSIE doesn't have array.indexOf
50
+ var nativeIndexOf = Array.prototype.indexOf;
51
+ if (array === null) {
52
+ return -1;
53
+ }
54
+ if (nativeIndexOf && array.indexOf === nativeIndexOf) {
55
+ return array.indexOf(item);
56
+ }
57
+ for (var i = 0, l = array.length; i < l; i++) {
58
+ if (array[i] === item) {
59
+ return i;
60
+ }
61
+ }
62
+ return -1;
63
+ }
64
+
65
+ /** Applies a function f to all properties of an object.
66
+ *
67
+ * Function f gets 3 arguments passed:
68
+ * - element from the object
69
+ * - key of the element
70
+ * - reference to the object
71
+ *
72
+ * @param {Object} object
73
+ * @param {Function} f
74
+ */
75
+ export function objectApply(object: any, f: Function) {
76
+ for (var key in object) {
77
+ if (Object.prototype.hasOwnProperty.call(object, key)) {
78
+ f(object[key], key, object);
79
+ }
80
+ }
81
+ }
82
+
83
+ /** Return a list of objects own proerty keys
84
+ *
85
+ * @param {Object} object
86
+ * @returns {Array}
87
+ */
88
+ export function keys(object: any): string[] {
89
+ var keys = [];
90
+ objectApply(object, function (_, key) {
91
+ keys.push(key);
92
+ });
93
+ return keys;
94
+ }
95
+
96
+ /** Return a list of object's own property values
97
+ *
98
+ * @param {Object} object
99
+ * @returns {Array}
100
+ */
101
+ export function values(object: any): any[] {
102
+ var values = [];
103
+ objectApply(object, function (value) {
104
+ values.push(value);
105
+ });
106
+ return values;
107
+ }
108
+
109
+ /** Applies a function f to all elements of an array.
110
+ *
111
+ * Function f gets 3 arguments passed:
112
+ * - element from the array
113
+ * - index of the element
114
+ * - reference to the array
115
+ *
116
+ * @param {Array} array
117
+ * @param {Function} f
118
+ */
119
+ export function apply(array: any[], f: Function, context?: any) {
120
+ for (var i = 0; i < array.length; i++) {
121
+ f.call(context || global, array[i], i, array);
122
+ }
123
+ }
124
+
125
+ /** Maps all elements of the array and returns the result.
126
+ *
127
+ * Function f gets 4 arguments passed:
128
+ * - element from the array
129
+ * - index of the element
130
+ * - reference to the source array
131
+ * - reference to the destination array
132
+ *
133
+ * @param {Array} array
134
+ * @param {Function} f
135
+ */
136
+ export function map(array: any[], f: Function): any[] {
137
+ var result = [];
138
+ for (var i = 0; i < array.length; i++) {
139
+ result.push(f(array[i], i, array, result));
140
+ }
141
+ return result;
142
+ }
143
+
144
+ /** Maps all elements of the object and returns the result.
145
+ *
146
+ * Function f gets 4 arguments passed:
147
+ * - element from the object
148
+ * - key of the element
149
+ * - reference to the source object
150
+ * - reference to the destination object
151
+ *
152
+ * @param {Object} object
153
+ * @param {Function} f
154
+ */
155
+ export function mapObject(object: any, f: Function): any {
156
+ var result = {};
157
+ objectApply(object, function (value, key) {
158
+ result[key] = f(value);
159
+ });
160
+ return result;
161
+ }
162
+
163
+ /** Filters elements of the array using a test function.
164
+ *
165
+ * Function test gets 4 arguments passed:
166
+ * - element from the array
167
+ * - index of the element
168
+ * - reference to the source array
169
+ * - reference to the destination array
170
+ *
171
+ * @param {Array} array
172
+ * @param {Function} f
173
+ */
174
+ export function filter(array: any[], test: Function): any[] {
175
+ test =
176
+ test ||
177
+ function (value) {
178
+ return !!value;
179
+ };
180
+
181
+ var result = [];
182
+ for (var i = 0; i < array.length; i++) {
183
+ if (test(array[i], i, array, result)) {
184
+ result.push(array[i]);
185
+ }
186
+ }
187
+ return result;
188
+ }
189
+
190
+ /** Filters properties of the object using a test function.
191
+ *
192
+ * Function test gets 4 arguments passed:
193
+ * - element from the object
194
+ * - key of the element
195
+ * - reference to the source object
196
+ * - reference to the destination object
197
+ *
198
+ * @param {Object} object
199
+ * @param {Function} f
200
+ */
201
+ export function filterObject(object: Object, test: Function) {
202
+ var result = {};
203
+ objectApply(object, function (value, key) {
204
+ if ((test && test(value, key, object, result)) || Boolean(value)) {
205
+ result[key] = value;
206
+ }
207
+ });
208
+ return result;
209
+ }
210
+
211
+ /** Flattens an object into a two-dimensional array.
212
+ *
213
+ * @param {Object} object
214
+ * @return {Array} resulting array of [key, value] pairs
215
+ */
216
+ export function flatten(object: Object): any[] {
217
+ var result = [];
218
+ objectApply(object, function (value, key) {
219
+ result.push([key, value]);
220
+ });
221
+ return result;
222
+ }
223
+
224
+ /** Checks whether any element of the array passes the test.
225
+ *
226
+ * Function test gets 3 arguments passed:
227
+ * - element from the array
228
+ * - index of the element
229
+ * - reference to the source array
230
+ *
231
+ * @param {Array} array
232
+ * @param {Function} f
233
+ */
234
+ export function any(array: any[], test: Function): boolean {
235
+ for (var i = 0; i < array.length; i++) {
236
+ if (test(array[i], i, array)) {
237
+ return true;
238
+ }
239
+ }
240
+ return false;
241
+ }
242
+
243
+ /** Checks whether all elements of the array pass the test.
244
+ *
245
+ * Function test gets 3 arguments passed:
246
+ * - element from the array
247
+ * - index of the element
248
+ * - reference to the source array
249
+ *
250
+ * @param {Array} array
251
+ * @param {Function} f
252
+ */
253
+ export function all(array: any[], test: Function): boolean {
254
+ for (var i = 0; i < array.length; i++) {
255
+ if (!test(array[i], i, array)) {
256
+ return false;
257
+ }
258
+ }
259
+ return true;
260
+ }
261
+
262
+ export function encodeParamsObject(data): string {
263
+ return mapObject(data, function (value) {
264
+ if (typeof value === 'object') {
265
+ value = safeJSONStringify(value);
266
+ }
267
+ return encodeURIComponent(base64encode(value.toString()));
268
+ });
269
+ }
270
+
271
+ export function buildQueryString(data: any): string {
272
+ var params = filterObject(data, function (value) {
273
+ return value !== undefined;
274
+ });
275
+
276
+ var query = map(
277
+ flatten(encodeParamsObject(params)),
278
+ Util.method('join', '='),
279
+ ).join('&');
280
+
281
+ return query;
282
+ }
283
+
284
+ /**
285
+ * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
286
+ *
287
+ * Remove circular references from an object. Required for JSON.stringify in
288
+ * React Native, which tends to blow up a lot.
289
+ *
290
+ * @param {any} object
291
+ * @return {any} Decycled object
292
+ */
293
+ export function decycleObject(object: any): any {
294
+ var objects = [],
295
+ paths = [];
296
+
297
+ return (function derez(value, path) {
298
+ var i, name, nu;
299
+
300
+ switch (typeof value) {
301
+ case 'object':
302
+ if (!value) {
303
+ return null;
304
+ }
305
+ for (i = 0; i < objects.length; i += 1) {
306
+ if (objects[i] === value) {
307
+ return { $ref: paths[i] };
308
+ }
309
+ }
310
+
311
+ objects.push(value);
312
+ paths.push(path);
313
+
314
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
315
+ nu = [];
316
+ for (i = 0; i < value.length; i += 1) {
317
+ nu[i] = derez(value[i], path + '[' + i + ']');
318
+ }
319
+ } else {
320
+ nu = {};
321
+ for (name in value) {
322
+ if (Object.prototype.hasOwnProperty.call(value, name)) {
323
+ nu[name] = derez(
324
+ value[name],
325
+ path + '[' + JSON.stringify(name) + ']',
326
+ );
327
+ }
328
+ }
329
+ }
330
+ return nu;
331
+ case 'number':
332
+ case 'string':
333
+ case 'boolean':
334
+ return value;
335
+ }
336
+ })(object, '$');
337
+ }
338
+
339
+ /**
340
+ * Provides a cross-browser and cross-platform way to safely stringify objects
341
+ * into JSON. This is particularly necessary for ReactNative, where circular JSON
342
+ * structures throw an exception.
343
+ *
344
+ * @param {any} source The object to stringify
345
+ * @return {string} The serialized output.
346
+ */
347
+ export function safeJSONStringify(source: any): string {
348
+ try {
349
+ return JSON.stringify(source);
350
+ } catch (e) {
351
+ return JSON.stringify(decycleObject(source));
352
+ }
353
+ }
@@ -0,0 +1,79 @@
1
+ import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';
2
+ import PingDelayOptions from '../transports/ping_delay_options';
3
+ import Transport from '../transports/transport';
4
+ import TransportManager from '../transports/transport_manager';
5
+ import Handshake from '../connection/handshake';
6
+ import TransportConnection from '../transports/transport_connection';
7
+ import SocketHooks from '../http/socket_hooks';
8
+ import HTTPSocket from '../http/http_socket';
9
+
10
+ import Timeline from '../timeline/timeline';
11
+ import {
12
+ default as TimelineSender,
13
+ TimelineSenderOptions,
14
+ } from '../timeline/timeline_sender';
15
+ import PresenceChannel from '../channels/presence_channel';
16
+ import PrivateChannel from '../channels/private_channel';
17
+ import EncryptedChannel from '../channels/encrypted_channel';
18
+ import Channel from '../channels/channel';
19
+ import ConnectionManager from '../connection/connection_manager';
20
+ import ConnectionManagerOptions from '../connection/connection_manager_options';
21
+ import Ajax from '../http/ajax';
22
+ import Channels from '../channels/channels';
23
+ import Pusher from '../pusher';
24
+ import { Config } from '../config';
25
+ import * as nacl from 'tweetnacl';
26
+
27
+ var Factory = {
28
+ createChannels(): Channels {
29
+ return new Channels();
30
+ },
31
+
32
+ createConnectionManager(
33
+ key: string,
34
+ options: ConnectionManagerOptions,
35
+ ): ConnectionManager {
36
+ return new ConnectionManager(key, options);
37
+ },
38
+
39
+ createChannel(name: string, pusher: Pusher): Channel {
40
+ return new Channel(name, pusher);
41
+ },
42
+
43
+ createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {
44
+ return new PrivateChannel(name, pusher);
45
+ },
46
+
47
+ createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {
48
+ return new PresenceChannel(name, pusher);
49
+ },
50
+
51
+ createEncryptedChannel(
52
+ name: string,
53
+ pusher: Pusher,
54
+ nacl: nacl,
55
+ ): EncryptedChannel {
56
+ return new EncryptedChannel(name, pusher, nacl);
57
+ },
58
+
59
+ createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {
60
+ return new TimelineSender(timeline, options);
61
+ },
62
+
63
+ createHandshake(
64
+ transport: TransportConnection,
65
+ callback: (HandshakePayload) => void,
66
+ ): Handshake {
67
+ return new Handshake(transport, callback);
68
+ },
69
+
70
+ createAssistantToTheTransportManager(
71
+ manager: TransportManager,
72
+ transport: Transport,
73
+ options: PingDelayOptions,
74
+ ): AssistantToTheTransportManager {
75
+ return new AssistantToTheTransportManager(manager, transport, options);
76
+ },
77
+ };
78
+
79
+ export default Factory;
@@ -0,0 +1,10 @@
1
+ function flatPromise() {
2
+ let resolve, reject;
3
+ const promise = new Promise((res, rej) => {
4
+ resolve = res;
5
+ reject = rej;
6
+ });
7
+ return { promise, resolve, reject };
8
+ }
9
+
10
+ export default flatPromise;
@@ -0,0 +1,39 @@
1
+ import TimedCallback from './timed_callback';
2
+ import { Delay, Scheduler, Canceller } from './scheduling';
3
+
4
+ abstract class Timer {
5
+ protected clear: Canceller;
6
+ protected timer: number | void;
7
+
8
+ constructor(
9
+ set: Scheduler,
10
+ clear: Canceller,
11
+ delay: Delay,
12
+ callback: TimedCallback,
13
+ ) {
14
+ this.clear = clear;
15
+ this.timer = set(() => {
16
+ if (this.timer) {
17
+ this.timer = callback(this.timer);
18
+ }
19
+ }, delay);
20
+ }
21
+
22
+ /** Returns whether the timer is still running.
23
+ *
24
+ * @return {Boolean}
25
+ */
26
+ isRunning(): boolean {
27
+ return this.timer !== null;
28
+ }
29
+
30
+ /** Aborts a timer when it's running. */
31
+ ensureAborted() {
32
+ if (this.timer) {
33
+ this.clear(this.timer);
34
+ this.timer = null;
35
+ }
36
+ }
37
+ }
38
+
39
+ export default Timer;