@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,715 @@
1
+ const Pusher = require('pusher_integration');
2
+
3
+ const Integration = require('integration');
4
+ const Collections = require('core/utils/collections');
5
+ const Runtime = require('runtime').default;
6
+ const TRANSPORTS = Runtime.Transports;
7
+ const waitsFor = require('../../../helpers/waitsFor');
8
+
9
+ function canRunTwoConnections(transport) {
10
+ if (transport !== "sockjs") {
11
+ return true;
12
+ }
13
+ return !/(MSIE [67])|(Version\/(4|5\.0).*Safari)/.test(navigator.userAgent);
14
+ }
15
+
16
+ function subscribe(pusher, channelName, callback) {
17
+ var channel = pusher.subscribe(channelName);
18
+ channel.bind("pusher:subscription_succeeded", function(param) {
19
+ callback(channel, param);
20
+ });
21
+ return channel;
22
+ }
23
+
24
+ function delay(timeMs) {
25
+ return new Promise(resolve => setTimeout(resolve, timeMs));
26
+ }
27
+
28
+ function build(testConfig) {
29
+ var forceTLS = testConfig.forceTLS;
30
+ var transport = testConfig.transport;
31
+
32
+ if (!TRANSPORTS[transport].isSupported({ useTLS: forceTLS })) {
33
+ return;
34
+ }
35
+
36
+ describe("with " + (transport ? transport + ", " : "") + "forceTLS=" + forceTLS, function() {
37
+ var pusher1, pusher2;
38
+ var jasmineDefaultTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
39
+
40
+ beforeAll(() => {
41
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 41000;
42
+ });
43
+
44
+ afterAll(() => {
45
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = jasmineDefaultTimeout;
46
+ });
47
+
48
+ beforeEach(function() {
49
+ Collections.objectApply(TRANSPORTS, function(t, name) {
50
+ spyOn(t, "isSupported").and.returnValue(false);
51
+ });
52
+ TRANSPORTS[transport].isSupported.and.returnValue(true);
53
+ });
54
+
55
+ describe("setup", function() {
56
+ it("should open connections", async function() {
57
+ pusher1 = new Pusher("c49a449b916bb4246729", {
58
+ forceTLS: forceTLS,
59
+ cluster: "mt1"
60
+ });
61
+ if (canRunTwoConnections(transport)) {
62
+ pusher2 = new Pusher("c49a449b916bb4246729", {
63
+ forceTLS: forceTLS,
64
+ cluster: "mt1"
65
+ });
66
+ await waitsFor(function() {
67
+ return pusher2.connection.state === "connected";
68
+ }, "second connection to be established", 20000);
69
+ }
70
+ await waitsFor(function() {
71
+ return pusher1.connection.state === "connected";
72
+ }, "first connection to be established", 20000);
73
+ });
74
+
75
+ });
76
+
77
+ describe("with a public channel", function() {
78
+ buildPublicChannelTests(
79
+ function() { return pusher1; }
80
+ );
81
+ });
82
+
83
+ describe("with a private channel", function() {
84
+ var channelName = Integration.getRandomName("private-integration");
85
+ var channel1, channel2;
86
+
87
+ buildSubscriptionStateTests(
88
+ function() { return pusher1; },
89
+ "private-"
90
+ );
91
+
92
+ if (canRunTwoConnections(transport)) {
93
+ buildClientEventsTests(
94
+ function() { return pusher1; },
95
+ function() { return pusher2; },
96
+ "private-"
97
+ );
98
+ }
99
+ });
100
+
101
+ describe("with a presence channel", function() {
102
+ buildSubscriptionStateTests(
103
+ function() { return pusher1; },
104
+ "presence-"
105
+ );
106
+
107
+ if (canRunTwoConnections(transport)) {
108
+ buildClientEventsTests(
109
+ function() { return pusher1; },
110
+ function() { return pusher2; },
111
+ "presence-"
112
+ );
113
+ buildPresenceChannelTests(
114
+ function() { return pusher1; },
115
+ function() { return pusher2; }
116
+ );
117
+ }
118
+ });
119
+
120
+ describe("teardown", function() {
121
+ if (canRunTwoConnections(transport)) {
122
+ it("should disconnect second connection", function() {
123
+ pusher2.disconnect();
124
+ });
125
+ }
126
+
127
+ it("should disconnect first connection", function() {
128
+ pusher1.disconnect();
129
+ });
130
+ });
131
+ });
132
+ }
133
+ function buildPresenceChannelTests(getPusher1, getPusher2) {
134
+ it("should get connection's member data", async function() {
135
+ var pusher = getPusher1();
136
+ var channelName = Integration.getRandomName("presence-integration_me");
137
+
138
+ var members = null;
139
+ subscribe(pusher, channelName, function(channel, ms) {
140
+ members = ms;
141
+ });
142
+
143
+ await waitsFor(function() {
144
+ return members !== null;
145
+ }, "channel to subscribe", 10000);
146
+
147
+ expect(members.me).toEqual({
148
+ id: pusher.connection.socket_id,
149
+ info: {
150
+ name: "Integration " + pusher.connection.socket_id,
151
+ email: "integration-" + pusher.connection.socket_id + "@example.com"
152
+ }
153
+ });
154
+ });
155
+
156
+ it("should receive a member added event", async function() {
157
+ var pusher1 = getPusher1();
158
+ var pusher2 = getPusher2();
159
+ var channelName = Integration.getRandomName("presence-integration_member_added");
160
+
161
+ var member = null;
162
+ subscribe(pusher1, channelName, function(channel) {
163
+ channel.bind("pusher:member_added", function(m) {
164
+ member = m;
165
+ });
166
+
167
+ subscribe(pusher2, channelName, function() {});
168
+ });
169
+
170
+ await waitsFor(function() {
171
+ return member !== null;
172
+ }, "the member added event", 10000);
173
+
174
+ expect(member.id).toEqual(pusher2.connection.socket_id);
175
+ expect(member).toEqual({
176
+ id: pusher2.connection.socket_id,
177
+ info: {
178
+ name: "Integration " + pusher2.connection.socket_id,
179
+ email: "integration-" + pusher2.connection.socket_id + "@example.com"
180
+ }
181
+ });
182
+
183
+ pusher1.unsubscribe(channelName);
184
+ pusher2.unsubscribe(channelName);
185
+ });
186
+
187
+ it("should receive a member removed event", async function() {
188
+ var pusher1 = getPusher1();
189
+ var pusher2 = getPusher2();
190
+ var channelName = Integration.getRandomName("presence-integration_member_removed");
191
+
192
+ var member = null;
193
+ subscribe(pusher2, channelName, function(channel) {
194
+ channel.bind("pusher:member_added", function(_) {
195
+ channel.bind("pusher:member_removed", function(m) {
196
+ member = m;
197
+ });
198
+ pusher1.unsubscribe(channelName);
199
+ });
200
+
201
+ subscribe(pusher1, channelName, function() {});
202
+ });
203
+
204
+ await waitsFor(function() {
205
+ return member !== null;
206
+ }, "the member removed event", 10000);
207
+
208
+ expect(member.id).toEqual(pusher1.connection.socket_id);
209
+ expect(member).toEqual({
210
+ id: pusher1.connection.socket_id,
211
+ info: {
212
+ name: "Integration " + pusher1.connection.socket_id,
213
+ email: "integration-" + pusher1.connection.socket_id + "@example.com"
214
+ }
215
+ });
216
+
217
+ pusher2.unsubscribe(channelName);
218
+ });
219
+
220
+ it("should maintain correct members count", async function() {
221
+ var pusher1 = getPusher1();
222
+ var pusher2 = getPusher2();
223
+ var channelName = Integration.getRandomName("presence-integration_member_count");
224
+
225
+ var channel1, channel2;
226
+
227
+ var onSubscribed1 = jasmine.createSpy("onSubscribed1");
228
+ var onSubscribed2 = jasmine.createSpy("onSubscribed2");
229
+ var onMemberAdded = jasmine.createSpy("onMemberAdded");
230
+ var onMemberRemoved = jasmine.createSpy("onMemberRemoved");
231
+
232
+ channel1 = subscribe(pusher1, channelName, onSubscribed1);
233
+ expect(channel1.members.count).toEqual(0);
234
+
235
+ await waitsFor(function() {
236
+ return onSubscribed1.calls.count() > 0;
237
+ }, "first connection to subscribe", 10000);
238
+
239
+ expect(channel1.members.count).toEqual(1);
240
+ channel1.bind("pusher:member_added", onMemberAdded);
241
+ channel2 = subscribe(pusher2, channelName, onSubscribed2);
242
+
243
+ await waitsFor(function() {
244
+ return onSubscribed2.calls.count() > 0;
245
+ }, "second connection to subscribe", 10000);
246
+
247
+ expect(channel2.members.count).toEqual(2);
248
+
249
+ await waitsFor(function() {
250
+ return onMemberAdded.calls.count() > 0;
251
+ }, "member added event", 10000);
252
+
253
+ expect(channel1.members.count).toEqual(2);
254
+ channel2.bind("pusher:member_removed", onMemberRemoved);
255
+ pusher1.unsubscribe(channelName);
256
+
257
+ await waitsFor(function() {
258
+ return onMemberRemoved.calls.count() > 0;
259
+ }, "member removed event", 10000);
260
+
261
+ expect(channel2.members.count).toEqual(1);
262
+ });
263
+
264
+ it("should maintain correct members data", async function() {
265
+ var pusher1 = getPusher1();
266
+ var pusher2 = getPusher2();
267
+ var channelName = Integration.getRandomName("presence-integration_member_count");
268
+
269
+ var channel1, channel2;
270
+
271
+ var onSubscribed1 = jasmine.createSpy("onSubscribed1");
272
+ var onSubscribed2 = jasmine.createSpy("onSubscribed2");
273
+ var onMemberAdded = jasmine.createSpy("onMemberAdded");
274
+ var onMemberRemoved = jasmine.createSpy("onMemberRemoved");
275
+
276
+ var member1 = {
277
+ id: pusher1.connection.socket_id,
278
+ info: {
279
+ name: "Integration " + pusher1.connection.socket_id,
280
+ email: "integration-" + pusher1.connection.socket_id + "@example.com"
281
+ }
282
+ };
283
+ var member2 = {
284
+ id: pusher2.connection.socket_id,
285
+ info: {
286
+ name: "Integration " + pusher2.connection.socket_id,
287
+ email: "integration-" + pusher2.connection.socket_id + "@example.com"
288
+ }
289
+ };
290
+
291
+ channel1 = subscribe(pusher1, channelName, onSubscribed1);
292
+
293
+ await waitsFor(function() {
294
+ return onSubscribed1.calls.count() > 0;
295
+ }, "first connection to subscribe", 10000);
296
+
297
+ expect(channel1.members.get(pusher1.connection.socket_id))
298
+ .toEqual(member1);
299
+ expect(channel1.members.get(pusher2.connection.socket_id))
300
+ .toBe(null);
301
+
302
+ expect(channel1.members.me).toEqual(member1);
303
+
304
+ channel1.bind("pusher:member_added", onMemberAdded);
305
+ channel2 = subscribe(pusher2, channelName, onSubscribed2);
306
+
307
+ await waitsFor(function() {
308
+ return onSubscribed2.calls.count() > 0;
309
+ }, "second connection to subscribe", 10000);
310
+
311
+ expect(channel2.members.get(pusher1.connection.socket_id))
312
+ .toEqual(member1);
313
+ expect(channel2.members.get(pusher2.connection.socket_id))
314
+ .toEqual(member2);
315
+
316
+ expect(channel2.members.me).toEqual(member2);
317
+
318
+ await waitsFor(function() {
319
+ return onMemberAdded.calls.count() > 0;
320
+ }, "member added event", 10000);
321
+
322
+ expect(channel1.members.get(pusher1.connection.socket_id))
323
+ .toEqual(member1);
324
+ expect(channel1.members.get(pusher2.connection.socket_id))
325
+ .toEqual(member2);
326
+
327
+ channel2.bind("pusher:member_removed", onMemberRemoved);
328
+ pusher1.unsubscribe(channelName);
329
+
330
+ await waitsFor(function() {
331
+ return onMemberRemoved.calls.count() > 0;
332
+ }, "member removed event", 10000);
333
+
334
+ expect(channel2.members.get(pusher1.connection.socket_id))
335
+ .toBe(null);
336
+ expect(channel2.members.get(pusher2.connection.socket_id))
337
+ .toEqual(member2);
338
+ });
339
+ }
340
+ function buildClientEventsTests(getPusher1, getPusher2, prefix) {
341
+ it("should receive a client event sent by another connection", async function() {
342
+ var pusher1 = getPusher1();
343
+ var pusher2 = getPusher2();
344
+
345
+ var channelName = Integration.getRandomName((prefix || "") + "integration_client_events");
346
+
347
+ var channel1, channel2;
348
+ var onSubscribed1 = jasmine.createSpy("onSubscribed1");
349
+ var onSubscribed2 = jasmine.createSpy("onSubscribed2");
350
+
351
+ var eventName = "client-test";
352
+ var data = { foo: "bar" };
353
+ var onEvent1 = jasmine.createSpy("onEvent1");
354
+ var onEvent2 = jasmine.createSpy("onEvent2");
355
+
356
+
357
+ channel1 = subscribe(pusher1, channelName, onSubscribed1);
358
+ channel2 = subscribe(pusher2, channelName, onSubscribed2);
359
+
360
+ await waitsFor(function() {
361
+ return onSubscribed1.calls.count() > 0 && onSubscribed2.calls.count() > 0;
362
+ }, "both connections to subscribe", 10000);
363
+
364
+ channel1.bind(eventName, onEvent1);
365
+ channel2.bind(eventName, onEvent2);
366
+ pusher1.send_event(eventName, data, channelName);
367
+
368
+ await waitsFor(function() {
369
+ return onEvent2.calls.count();
370
+ }, "second connection to receive a message", 10000);
371
+
372
+ pusher1.unsubscribe(channelName);
373
+ pusher2.unsubscribe(channelName);
374
+ });
375
+
376
+ it("should not receive a client event sent by itself", async function() {
377
+ var pusher = getPusher1();
378
+
379
+ var channelName = Integration.getRandomName((prefix || "") + "integration_client_events");
380
+ var onSubscribed = jasmine.createSpy("onSubscribed");
381
+
382
+ var eventName = "client-test";
383
+ var onEvent = jasmine.createSpy("onEvent");
384
+ var timer = null;
385
+
386
+ var channel = subscribe(pusher, channelName, onSubscribed);
387
+ await waitsFor(function() {
388
+ return onSubscribed.calls.count() > 0;
389
+ }, "connection to subscribe", 10000);
390
+
391
+ channel.bind(eventName, onEvent);
392
+ pusher.send_event(eventName, {}, channelName);
393
+ await delay(5000);
394
+
395
+ expect(onEvent).not.toHaveBeenCalled();
396
+ pusher.unsubscribe(channelName);
397
+ });
398
+ }
399
+ function buildPublicChannelTests(getPusher, prefix) {
400
+ it("should subscribe and receive a message sent via REST API", async function() {
401
+ var pusher = getPusher();
402
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
403
+
404
+ var onSubscribed = jasmine.createSpy("onSubscribed");
405
+ var channel = subscribe(pusher, channelName, onSubscribed);
406
+
407
+ var eventName = "integration_event";
408
+ var data = { x: 1, y: "z" };
409
+ var received = null;
410
+
411
+ await waitsFor(function() {
412
+ return onSubscribed.calls.count();
413
+ }, "subscription to succeed", 10000);
414
+
415
+ channel.bind(eventName, function(message) {
416
+ received = message;
417
+ });
418
+ Integration.sendAPIMessage({
419
+ url: Integration.API_URL + "/v2/send",
420
+ channel: channelName,
421
+ event: eventName,
422
+ data: data
423
+ });
424
+
425
+ await waitsFor(function() {
426
+ return received !== null;
427
+ }, "message to get delivered", 10000);
428
+
429
+ expect(received).toEqual(data);
430
+ pusher.unsubscribe(channelName);
431
+ });
432
+
433
+ it("should not receive messages after unsubscribing", async function() {
434
+ var pusher = getPusher();
435
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
436
+
437
+ var onSubscribed = jasmine.createSpy("onSubscribed");
438
+ var channel = subscribe(pusher, channelName, onSubscribed);
439
+
440
+ var eventName = "after_unsubscribing";
441
+ var received = null;
442
+ var timer = null;
443
+
444
+ await waitsFor(function() {
445
+ return onSubscribed.calls.count();
446
+ }, "subscription to succeed", 10000);
447
+
448
+ channel.bind(eventName, function(message) {
449
+ received = message;
450
+ });
451
+ pusher.unsubscribe(channelName);
452
+ Integration.sendAPIMessage({
453
+ url: Integration.API_URL + "/v2/send",
454
+ channel: channelName,
455
+ event: eventName,
456
+ data: {}
457
+ });
458
+ await delay(5000);
459
+ expect(received).toBe(null);
460
+ });
461
+
462
+ it("should handle unsubscribing as an idempotent operation", async function() {
463
+ var pusher = getPusher();
464
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
465
+
466
+ var onSubscribed = jasmine.createSpy("onSubscribed");
467
+ subscribe(pusher, channelName, onSubscribed);
468
+
469
+ await waitsFor(function() {
470
+ return onSubscribed.calls.count();
471
+ }, "subscription to succeed", 10000);
472
+
473
+ pusher.unsubscribe(channelName);
474
+ pusher.unsubscribe(channelName);
475
+ pusher.unsubscribe(channelName);
476
+ });
477
+
478
+ it("should handle cancelling pending subscription", async function() {
479
+ var pusher = getPusher();
480
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
481
+
482
+ var eventName = "after_unsubscribing";
483
+ var received = null;
484
+ var timer = null;
485
+
486
+ var channel = pusher.subscribe(channelName);
487
+ channel.bind(eventName, function(message) {
488
+ received = message;
489
+ });
490
+
491
+ pusher.unsubscribe(channelName);
492
+ await waitsFor(function() {
493
+ return !channel.subscriptionPending;
494
+ }, "subscription to succeed", 10000);
495
+
496
+ Integration.sendAPIMessage({
497
+ url: Integration.API_URL + "/v2/send",
498
+ channel: channelName,
499
+ event: eventName,
500
+ data: {}
501
+ });
502
+ await delay(5000);
503
+
504
+ expect(channel.subscribed).toEqual(false);
505
+ expect(received).toBe(null);
506
+ });
507
+
508
+ it("should handle reinstating cancelled pending subscription", async function() {
509
+ var pusher = getPusher();
510
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
511
+
512
+ var eventName = "after_subscribing";
513
+ var received = null;
514
+ var timer = null;
515
+
516
+ var channel = pusher.subscribe(channelName);
517
+ channel.bind(eventName, function(message) {
518
+ received = message;
519
+ });
520
+
521
+ pusher.unsubscribe(channelName);
522
+ pusher.subscribe(channelName);
523
+ await waitsFor(function() {
524
+ return !channel.subscriptionPending;
525
+ }, "subscription to succeed", 10000);
526
+
527
+ Integration.sendAPIMessage({
528
+ url: Integration.API_URL + "/v2/send",
529
+ channel: channelName,
530
+ event: eventName,
531
+ data: {}
532
+ });
533
+ await delay(10000);
534
+
535
+ expect(channel.subscribed).toEqual(true);
536
+ expect(received).not.toBe(null);
537
+ });
538
+ }
539
+
540
+ function buildSubscriptionStateTests(getPusher, prefix) {
541
+ it("sub-sub = sub", async function() {
542
+ var pusher = getPusher();
543
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
544
+
545
+ pusher.subscribe(channelName)
546
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
547
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
548
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
549
+ pusher.subscribe(channelName)
550
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
551
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
552
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
553
+
554
+ await waitsFor(function() {
555
+ return pusher.channel(channelName).subscribed;
556
+ }, "subscription to finish", 10000);
557
+
558
+ expect(pusher.channel(channelName).subscribed).toEqual(true);
559
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(false);
560
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
561
+ });
562
+
563
+ it("sub-wait-sub = sub", async function() {
564
+ var pusher = getPusher();
565
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
566
+
567
+ pusher.subscribe(channelName)
568
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
569
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
570
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
571
+
572
+ await waitsFor(function() {
573
+ return pusher.channel(channelName).subscribed;
574
+ }, "subscription to finish", 10000);
575
+
576
+ expect(pusher.channel(channelName).subscribed).toEqual(true);
577
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(false);
578
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
579
+
580
+ pusher.subscribe(channelName)
581
+ expect(pusher.channel(channelName).subscribed).toEqual(true);
582
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(false);
583
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
584
+ });
585
+
586
+ it("sub-unsub = NOP", async function() {
587
+ var pusher = getPusher();
588
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
589
+
590
+ pusher.subscribe(channelName)
591
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
592
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
593
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
594
+
595
+ pusher.unsubscribe(channelName)
596
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
597
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
598
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(true);
599
+
600
+ // there is no easy way to know when an unsubscribe request has been
601
+ // actioned by the server, so we just wait a while
602
+ await delay(5000);
603
+
604
+ expect(pusher.channel(channelName)).toBe(undefined);
605
+ });
606
+
607
+ it("sub-wait-unsub = NOP", async function() {
608
+ var pusher = getPusher();
609
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
610
+
611
+ pusher.subscribe(channelName)
612
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
613
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
614
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
615
+
616
+ await waitsFor(function() {
617
+ return pusher.channel(channelName).subscribed;
618
+ }, "subscription to finish", 10000);
619
+
620
+ expect(pusher.channel(channelName).subscribed).toEqual(true);
621
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(false);
622
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
623
+
624
+ pusher.unsubscribe(channelName)
625
+ expect(pusher.channel(channelName)).toBe(undefined);
626
+ });
627
+
628
+ it("sub-unsub-sub = sub", async function() {
629
+ var pusher = getPusher();
630
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
631
+
632
+ pusher.subscribe(channelName)
633
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
634
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
635
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
636
+
637
+ pusher.unsubscribe(channelName)
638
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
639
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
640
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(true);
641
+
642
+ pusher.subscribe(channelName)
643
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
644
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
645
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
646
+
647
+ await waitsFor(function() {
648
+ return pusher.channel(channelName).subscribed;
649
+ }, "subscription to finish", 10000);
650
+
651
+ expect(pusher.channel(channelName).subscribed).toEqual(true);
652
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(false);
653
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
654
+ });
655
+
656
+ it("sub-unsub-wait-sub = sub", async function() {
657
+ var pusher = getPusher();
658
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
659
+
660
+ pusher.subscribe(channelName)
661
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
662
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
663
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
664
+
665
+ pusher.unsubscribe(channelName)
666
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
667
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
668
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(true);
669
+
670
+ // there is no easy way to know when an unsubscribe request has been
671
+ // actioned by the server, so we just wait a while
672
+ await delay(5000);
673
+ expect(pusher.channel(channelName)).toBe(undefined);
674
+
675
+ pusher.subscribe(channelName)
676
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
677
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
678
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
679
+
680
+ await waitsFor(function() {
681
+ return pusher.channel(channelName).subscribed;
682
+ }, "subscription to finish", 10000);
683
+
684
+ expect(pusher.channel(channelName).subscribed).toEqual(true);
685
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(false);
686
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
687
+ });
688
+
689
+ it("sub-unsub-unsub = NOP", async function() {
690
+ var pusher = getPusher();
691
+ var channelName = Integration.getRandomName((prefix || "") + "integration");
692
+
693
+ pusher.subscribe(channelName)
694
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
695
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
696
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(false);
697
+
698
+ pusher.unsubscribe(channelName)
699
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
700
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
701
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(true);
702
+
703
+ pusher.unsubscribe(channelName)
704
+ expect(pusher.channel(channelName).subscribed).toEqual(false);
705
+ expect(pusher.channel(channelName).subscriptionPending).toEqual(true);
706
+ expect(pusher.channel(channelName).subscriptionCancelled).toEqual(true);
707
+
708
+ // there is no easy way to know when an unsubscribe request has been
709
+ // actioned by the server, so we just wait a while
710
+ await delay(5000);
711
+
712
+ expect(pusher.channel(channelName)).toBe(undefined);
713
+ });
714
+ }
715
+ module.exports = {build}