@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,471 @@
1
+ # Tag Filtering - JavaScript Client Updates
2
+
3
+ ## Overview
4
+
5
+ The Sockudo JavaScript client has been updated to support publication filtering by tags, allowing clients to subscribe to channels with server-side filters that reduce bandwidth usage by 60-90%.
6
+
7
+ ## What's New
8
+
9
+ ### Filter API
10
+
11
+ A new `Filter` builder API for creating tag filters programmatically:
12
+
13
+ ```typescript
14
+ import Pusher, { Filter } from 'sockudo-js';
15
+
16
+ const pusher = new Pusher('app-key', {
17
+ wsHost: 'localhost',
18
+ wsPort: 6001
19
+ });
20
+
21
+ // Subscribe with filter
22
+ const channel = pusher.subscribe(
23
+ 'match:123',
24
+ Filter.eq('event_type', 'goal')
25
+ );
26
+ ```
27
+
28
+ ## Installation
29
+
30
+ Update to the latest version of sockudo-js:
31
+
32
+ ```bash
33
+ npm install sockudo-js@latest
34
+ # or
35
+ yarn add sockudo-js@latest
36
+ ```
37
+
38
+ ## Quick Start
39
+
40
+ ### Basic Usage
41
+
42
+ ```typescript
43
+ import Pusher, { Filter } from 'sockudo-js';
44
+
45
+ const pusher = new Pusher('app-key', { /* config */ });
46
+
47
+ // Simple equality filter
48
+ const channel = pusher.subscribe(
49
+ 'match:123',
50
+ Filter.eq('event_type', 'goal')
51
+ );
52
+
53
+ channel.bind('match_event', (data) => {
54
+ console.log('Goal scored!', data);
55
+ });
56
+ ```
57
+
58
+ ### Complex Filters
59
+
60
+ ```typescript
61
+ // Goals OR dangerous shots (xG >= 0.8)
62
+ const filter = Filter.or(
63
+ Filter.eq('event_type', 'goal'),
64
+ Filter.and(
65
+ Filter.eq('event_type', 'shot'),
66
+ Filter.gte('xG', '0.8')
67
+ )
68
+ );
69
+
70
+ const channel = pusher.subscribe('match:123', filter);
71
+ ```
72
+
73
+ ## API Reference
74
+
75
+ ### Filter Builder
76
+
77
+ All filter builder methods return a `FilterNode` object that can be passed to `pusher.subscribe()`.
78
+
79
+ #### Comparison Operators
80
+
81
+ ```typescript
82
+ // Equality
83
+ Filter.eq(key: string, val: string): FilterNode
84
+
85
+ // Inequality
86
+ Filter.neq(key: string, val: string): FilterNode
87
+
88
+ // Set membership
89
+ Filter.in(key: string, vals: string[]): FilterNode
90
+
91
+ // Set non-membership
92
+ Filter.nin(key: string, vals: string[]): FilterNode
93
+
94
+ // Key existence
95
+ Filter.exists(key: string): FilterNode
96
+ Filter.notExists(key: string): FilterNode
97
+
98
+ // String operations
99
+ Filter.startsWith(key: string, val: string): FilterNode
100
+ Filter.endsWith(key: string, val: string): FilterNode
101
+ Filter.contains(key: string, val: string): FilterNode
102
+
103
+ // Numeric comparisons (values as strings)
104
+ Filter.gt(key: string, val: string): FilterNode
105
+ Filter.gte(key: string, val: string): FilterNode
106
+ Filter.lt(key: string, val: string): FilterNode
107
+ Filter.lte(key: string, val: string): FilterNode
108
+ ```
109
+
110
+ #### Logical Operators
111
+
112
+ ```typescript
113
+ // All children must match
114
+ Filter.and(...nodes: FilterNode[]): FilterNode
115
+
116
+ // At least one child must match
117
+ Filter.or(...nodes: FilterNode[]): FilterNode
118
+
119
+ // Negates the child
120
+ Filter.not(node: FilterNode): FilterNode
121
+ ```
122
+
123
+ ### Validation
124
+
125
+ ```typescript
126
+ import { validateFilter } from 'sockudo-js';
127
+
128
+ const filter = Filter.eq('event_type', 'goal');
129
+ const error = validateFilter(filter);
130
+
131
+ if (error) {
132
+ console.error('Invalid filter:', error);
133
+ }
134
+ ```
135
+
136
+ ### Helper Functions
137
+
138
+ Pre-built filter patterns for common use cases:
139
+
140
+ ```typescript
141
+ import { FilterExamples } from 'sockudo-js';
142
+
143
+ // Single event type
144
+ FilterExamples.eventType('goal')
145
+
146
+ // Multiple event types
147
+ FilterExamples.eventTypes(['goal', 'shot'])
148
+
149
+ // Numeric range
150
+ FilterExamples.range('xG', '0.5', '0.9')
151
+
152
+ // Important events pattern
153
+ FilterExamples.importantEvents('0.8')
154
+ ```
155
+
156
+ ## Examples
157
+
158
+ ### Football Match Events
159
+
160
+ ```typescript
161
+ // Only goals and penalties
162
+ const filter = Filter.in('event_type', ['goal', 'penalty']);
163
+ const channel = pusher.subscribe('match:123', filter);
164
+
165
+ channel.bind('match_event', (data) => {
166
+ console.log('Important event!', data);
167
+ });
168
+ ```
169
+
170
+ ### Stock Market
171
+
172
+ ```typescript
173
+ // Only specific tickers above a price
174
+ const filter = Filter.and(
175
+ Filter.in('ticker', ['GOOGL', 'AAPL', 'MSFT']),
176
+ Filter.gte('price', '100.00')
177
+ );
178
+
179
+ const channel = pusher.subscribe('stocks', filter);
180
+
181
+ channel.bind('price_update', (data) => {
182
+ console.log('Price update:', data);
183
+ });
184
+ ```
185
+
186
+ ### IoT Sensors
187
+
188
+ ```typescript
189
+ // Only critical temperature alerts
190
+ const filter = Filter.and(
191
+ Filter.eq('sensor_type', 'temperature'),
192
+ Filter.gt('value', '100')
193
+ );
194
+
195
+ const channel = pusher.subscribe('sensors', filter);
196
+
197
+ channel.bind('sensor_reading', (data) => {
198
+ console.log('Critical temperature!', data);
199
+ });
200
+ ```
201
+
202
+ ## TypeScript Support
203
+
204
+ Full TypeScript definitions are included:
205
+
206
+ ```typescript
207
+ import Pusher, {
208
+ Filter,
209
+ FilterNode,
210
+ validateFilter,
211
+ FilterExamples
212
+ } from 'sockudo-js';
213
+
214
+ const filter: FilterNode = Filter.eq('event_type', 'goal');
215
+ const error: string | null = validateFilter(filter);
216
+ ```
217
+
218
+ ## Browser Support
219
+
220
+ Works in all browsers that support ES5+:
221
+ - Chrome/Edge (latest)
222
+ - Firefox (latest)
223
+ - Safari (latest)
224
+ - IE11+ (with polyfills)
225
+
226
+ ## Node.js Support
227
+
228
+ ```javascript
229
+ const Pusher = require('sockudo-js');
230
+ const { Filter } = Pusher;
231
+
232
+ const pusher = new Pusher('app-key', { /* config */ });
233
+
234
+ const filter = Filter.eq('event_type', 'goal');
235
+ const channel = pusher.subscribe('match:123', filter);
236
+ ```
237
+
238
+ ## React Native Support
239
+
240
+ ```javascript
241
+ import Pusher, { Filter } from 'sockudo-js/react-native';
242
+
243
+ const pusher = new Pusher('app-key', { /* config */ });
244
+
245
+ const filter = Filter.eq('event_type', 'goal');
246
+ const channel = pusher.subscribe('match:123', filter);
247
+ ```
248
+
249
+ ## Important Notes
250
+
251
+ ### Server Configuration Required
252
+
253
+ Tag filtering must be enabled on the server:
254
+
255
+ ```bash
256
+ # Server environment variable
257
+ TAG_FILTERING_ENABLED=true
258
+ ```
259
+
260
+ When disabled on the server:
261
+ - Filters are ignored
262
+ - All messages are delivered
263
+ - No bandwidth savings
264
+
265
+ ### Messages Must Have Tags
266
+
267
+ Only messages with tags can be filtered:
268
+
269
+ ```javascript
270
+ // Server-side: Message with tags
271
+ {
272
+ "name": "match_event",
273
+ "channel": "match:123",
274
+ "data": "{...}",
275
+ "tags": {
276
+ "event_type": "goal"
277
+ }
278
+ }
279
+ ```
280
+
281
+ Messages without tags won't match any filter.
282
+
283
+ ### All Values are Strings
284
+
285
+ Tag values are always strings, even for numeric comparisons:
286
+
287
+ ```typescript
288
+ // Correct
289
+ Filter.gt('xG', '0.8')
290
+
291
+ // Not recommended
292
+ Filter.gt('xG', 0.8) // Will be converted to string
293
+ ```
294
+
295
+ ### Updating Filters
296
+
297
+ To change a filter, unsubscribe and resubscribe:
298
+
299
+ ```typescript
300
+ // Initial subscription
301
+ let channel = pusher.subscribe('match:123', Filter.eq('event_type', 'goal'));
302
+
303
+ // Change filter
304
+ pusher.unsubscribe('match:123');
305
+ channel = pusher.subscribe('match:123', Filter.in('event_type', ['goal', 'penalty']));
306
+ ```
307
+
308
+ ## Performance Benefits
309
+
310
+ ### Bandwidth Savings
311
+
312
+ Without filtering:
313
+ ```
314
+ Server: 1000 msgs/sec → Client: 1000 msgs/sec (all processed)
315
+ ```
316
+
317
+ With filtering:
318
+ ```
319
+ Server: 1000 msgs/sec → Client: 50 msgs/sec (only matching)
320
+ Result: 95% bandwidth saved!
321
+ ```
322
+
323
+ ### Mobile Benefits
324
+
325
+ - Reduced data usage on cellular connections
326
+ - Lower battery drain from less processing
327
+ - Faster UI updates (fewer irrelevant messages)
328
+
329
+ ## Best Practices
330
+
331
+ ### 1. Keep Filters Simple
332
+
333
+ ```typescript
334
+ // Good - simple and fast
335
+ Filter.eq('type', 'goal')
336
+
337
+ // Good - moderate complexity
338
+ Filter.in('type', ['goal', 'penalty'])
339
+
340
+ // Avoid - overly complex
341
+ Filter.and(
342
+ Filter.or(...10 filters...),
343
+ Filter.or(...10 filters...)
344
+ )
345
+ ```
346
+
347
+ ### 2. Use Set Operations
348
+
349
+ ```typescript
350
+ // Good - use 'in' for multiple values
351
+ Filter.in('type', ['goal', 'shot', 'penalty'])
352
+
353
+ // Less efficient - multiple 'or' conditions
354
+ Filter.or(
355
+ Filter.eq('type', 'goal'),
356
+ Filter.eq('type', 'shot'),
357
+ Filter.eq('type', 'penalty')
358
+ )
359
+ ```
360
+
361
+ ### 3. Validate Filters
362
+
363
+ ```typescript
364
+ const filter = buildFilterFromUserInput();
365
+ const error = validateFilter(filter);
366
+
367
+ if (error) {
368
+ console.error('Invalid filter:', error);
369
+ return;
370
+ }
371
+
372
+ pusher.subscribe(channelName, filter);
373
+ ```
374
+
375
+ ### 4. Handle Missing Tags Gracefully
376
+
377
+ ```typescript
378
+ // Messages without tags won't match filters
379
+ // Consider this when designing your data flow
380
+ const filter = Filter.eq('priority', 'high');
381
+ const channel = pusher.subscribe('events', filter);
382
+
383
+ // Only receives messages with tags.priority === 'high'
384
+ // Messages without tags.priority won't be received
385
+ ```
386
+
387
+ ## Troubleshooting
388
+
389
+ ### "Not receiving any messages"
390
+
391
+ 1. Check that tag filtering is enabled on server
392
+ 2. Verify messages have tags
393
+ 3. Test without filter to confirm channel works
394
+ 4. Validate filter syntax
395
+
396
+ ### "Filter not working as expected"
397
+
398
+ 1. All comparisons are case-sensitive
399
+ 2. Check tag values match exactly
400
+ 3. Numeric operators require numeric strings
401
+ 4. Messages without tags won't match any filter
402
+
403
+ ### "TypeScript errors"
404
+
405
+ Update your type definitions:
406
+ ```bash
407
+ npm install @types/sockudo-js@latest
408
+ ```
409
+
410
+ ## Migration Guide
411
+
412
+ ### From Standard Pusher Client
413
+
414
+ If you're using standard Pusher subscriptions:
415
+
416
+ ```typescript
417
+ // Before (no filtering)
418
+ const channel = pusher.subscribe('match:123');
419
+
420
+ // After (with filtering)
421
+ const channel = pusher.subscribe(
422
+ 'match:123',
423
+ Filter.eq('event_type', 'goal')
424
+ );
425
+
426
+ // Backward compatible - still works without filter
427
+ const channel = pusher.subscribe('match:123');
428
+ ```
429
+
430
+ ### Gradual Rollout
431
+
432
+ 1. Update client library
433
+ 2. Test with filters in development
434
+ 3. Enable server-side filtering
435
+ 4. Monitor bandwidth savings
436
+ 5. Roll out to production
437
+
438
+ ## Files Modified
439
+
440
+ ### Source Files
441
+ - `src/core/pusher.ts` - Added Filter exports
442
+ - `src/core/pusher.js` - Re-export Filter utilities
443
+ - `src/core/channels/channel.ts` - Added tagsFilter property
444
+ - `src/core/channels/filter.ts` - New filter API (342 lines)
445
+
446
+ ### Type Definitions
447
+ - `types/src/core/pusher.d.ts` - Added Filter exports
448
+ - `types/src/core/channels/channel.d.ts` - Added tagsFilter property
449
+ - `types/src/core/channels/filter.d.ts` - New filter type definitions (150 lines)
450
+
451
+ ### Entry Points
452
+ - `index.d.ts` - Added Filter exports for top-level access
453
+
454
+ ## Further Reading
455
+
456
+ - [Complete Documentation](../../docs/TAG_FILTERING.md)
457
+ - [Quick Start Guide](../../docs/TAG_FILTERING_QUICKSTART.md)
458
+ - [Server Implementation](../../TAG_FILTERING_IMPLEMENTATION.md)
459
+
460
+ ## Support
461
+
462
+ For issues or questions:
463
+ 1. Check the [troubleshooting section](#troubleshooting)
464
+ 2. Review the [complete documentation](../../docs/TAG_FILTERING.md)
465
+ 3. Open an issue on GitHub
466
+
467
+ ---
468
+
469
+ **Tag filtering is an opt-in feature that requires server-side configuration.**
470
+
471
+ Enable it with: `TAG_FILTERING_ENABLED=true`
package/bower.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "pusher-js",
3
+ "location": "git://github.com/pusher/pusher-js.git",
4
+ "description": "Pusher JavaScript library for browsers, React Native, NodeJS and web workers",
5
+ "keywords": [
6
+ "pusher",
7
+ "client",
8
+ "websocket",
9
+ "http",
10
+ "fallback",
11
+ "isomorphic",
12
+ "events",
13
+ "pubsub"
14
+ ],
15
+ "licence": "MIT",
16
+ "authors": ["Pusher <support@pusher.com>"],
17
+ "main": "./dist/web/pusher.js",
18
+ "ignore": ["**/*", "!/dist/**/*", "!LICENCE", "!README.markdown", "!bower.json", "!CHANGELOG.markdown"]
19
+ }