@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,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Filter = {
4
+ // Comparison operators
5
+ /**
6
+ * Creates an equality comparison: key == val
7
+ * @param key The tag key to compare
8
+ * @param val The value to compare against
9
+ * @returns FilterNode for equality comparison
10
+ */
11
+ eq: (key, val) => ({
12
+ key,
13
+ cmp: "eq",
14
+ val
15
+ }),
16
+ /**
17
+ * Creates an inequality comparison: key != val
18
+ * @param key The tag key to compare
19
+ * @param val The value to compare against
20
+ * @returns FilterNode for inequality comparison
21
+ */
22
+ neq: (key, val) => ({
23
+ key,
24
+ cmp: "neq",
25
+ val
26
+ }),
27
+ /**
28
+ * Creates a set membership comparison: key in [vals...]
29
+ * @param key The tag key to compare
30
+ * @param vals Array of values for set membership
31
+ * @returns FilterNode for set membership comparison
32
+ */
33
+ in: (key, vals) => ({
34
+ key,
35
+ cmp: "in",
36
+ vals
37
+ }),
38
+ /**
39
+ * Creates a set non-membership comparison: key not in [vals...]
40
+ * @param key The tag key to compare
41
+ * @param vals Array of values for set non-membership
42
+ * @returns FilterNode for set non-membership comparison
43
+ */
44
+ nin: (key, vals) => ({
45
+ key,
46
+ cmp: "nin",
47
+ vals
48
+ }),
49
+ /**
50
+ * Creates an existence check: key exists
51
+ * @param key The tag key to check for existence
52
+ * @returns FilterNode for existence check
53
+ */
54
+ exists: (key) => ({
55
+ key,
56
+ cmp: "ex"
57
+ }),
58
+ /**
59
+ * Creates a non-existence check: key does not exist
60
+ * @param key The tag key to check for non-existence
61
+ * @returns FilterNode for non-existence check
62
+ */
63
+ notExists: (key) => ({
64
+ key,
65
+ cmp: "nex"
66
+ }),
67
+ /**
68
+ * Creates a starts-with comparison: key starts with val
69
+ * @param key The tag key to compare
70
+ * @param val The prefix to match
71
+ * @returns FilterNode for starts-with comparison
72
+ */
73
+ startsWith: (key, val) => ({
74
+ key,
75
+ cmp: "sw",
76
+ val
77
+ }),
78
+ /**
79
+ * Creates an ends-with comparison: key ends with val
80
+ * @param key The tag key to compare
81
+ * @param val The suffix to match
82
+ * @returns FilterNode for ends-with comparison
83
+ */
84
+ endsWith: (key, val) => ({
85
+ key,
86
+ cmp: "ew",
87
+ val
88
+ }),
89
+ /**
90
+ * Creates a contains comparison: key contains val
91
+ * @param key The tag key to compare
92
+ * @param val The substring to match
93
+ * @returns FilterNode for contains comparison
94
+ */
95
+ contains: (key, val) => ({
96
+ key,
97
+ cmp: "ct",
98
+ val
99
+ }),
100
+ /**
101
+ * Creates a greater-than comparison: key > val (numeric)
102
+ * @param key The tag key to compare
103
+ * @param val The numeric value to compare against (as string)
104
+ * @returns FilterNode for greater-than comparison
105
+ */
106
+ gt: (key, val) => ({
107
+ key,
108
+ cmp: "gt",
109
+ val
110
+ }),
111
+ /**
112
+ * Creates a greater-than-or-equal comparison: key >= val (numeric)
113
+ * @param key The tag key to compare
114
+ * @param val The numeric value to compare against (as string)
115
+ * @returns FilterNode for greater-than-or-equal comparison
116
+ */
117
+ gte: (key, val) => ({
118
+ key,
119
+ cmp: "gte",
120
+ val
121
+ }),
122
+ /**
123
+ * Creates a less-than comparison: key < val (numeric)
124
+ * @param key The tag key to compare
125
+ * @param val The numeric value to compare against (as string)
126
+ * @returns FilterNode for less-than comparison
127
+ */
128
+ lt: (key, val) => ({
129
+ key,
130
+ cmp: "lt",
131
+ val
132
+ }),
133
+ /**
134
+ * Creates a less-than-or-equal comparison: key <= val (numeric)
135
+ * @param key The tag key to compare
136
+ * @param val The numeric value to compare against (as string)
137
+ * @returns FilterNode for less-than-or-equal comparison
138
+ */
139
+ lte: (key, val) => ({
140
+ key,
141
+ cmp: "lte",
142
+ val
143
+ }),
144
+ // Logical operators
145
+ /**
146
+ * Creates an AND logical operation: all children must match
147
+ * @param nodes Child filter nodes to combine with AND
148
+ * @returns FilterNode for AND operation
149
+ */
150
+ and: (...nodes) => ({
151
+ op: "and",
152
+ nodes
153
+ }),
154
+ /**
155
+ * Creates an OR logical operation: at least one child must match
156
+ * @param nodes Child filter nodes to combine with OR
157
+ * @returns FilterNode for OR operation
158
+ */
159
+ or: (...nodes) => ({
160
+ op: "or",
161
+ nodes
162
+ }),
163
+ /**
164
+ * Creates a NOT logical operation: negates the child
165
+ * @param node Child filter node to negate
166
+ * @returns FilterNode for NOT operation
167
+ */
168
+ not: (node) => ({
169
+ op: "not",
170
+ nodes: [node]
171
+ })
172
+ };
173
+ function validateFilter(filter) {
174
+ if (filter.op) {
175
+ const op = filter.op;
176
+ if (!["and", "or", "not"].includes(op)) {
177
+ return `Invalid logical operator: ${op}`;
178
+ }
179
+ if (!filter.nodes || !Array.isArray(filter.nodes)) {
180
+ return `Logical operation '${op}' requires nodes array`;
181
+ }
182
+ if (op === "not" && filter.nodes.length !== 1) {
183
+ return `NOT operation requires exactly one child node, got ${filter.nodes.length}`;
184
+ }
185
+ if ((op === "and" || op === "or") && filter.nodes.length === 0) {
186
+ return `${op.toUpperCase()} operation requires at least one child node`;
187
+ }
188
+ for (let i = 0; i < filter.nodes.length; i++) {
189
+ const childError = validateFilter(filter.nodes[i]);
190
+ if (childError) {
191
+ return `Child node ${i}: ${childError}`;
192
+ }
193
+ }
194
+ } else {
195
+ if (!filter.key) {
196
+ return "Leaf node requires a key";
197
+ }
198
+ if (!filter.cmp) {
199
+ return "Leaf node requires a comparison operator";
200
+ }
201
+ const validOps = ["eq", "neq", "in", "nin", "ex", "nex", "sw", "ew", "ct", "gt", "gte", "lt", "lte"];
202
+ if (!validOps.includes(filter.cmp)) {
203
+ return `Invalid comparison operator: ${filter.cmp}`;
204
+ }
205
+ if (filter.cmp === "in" || filter.cmp === "nin") {
206
+ if (!filter.vals || !Array.isArray(filter.vals) || filter.vals.length === 0) {
207
+ return `${filter.cmp} operation requires non-empty vals array`;
208
+ }
209
+ } else if (filter.cmp === "ex" || filter.cmp === "nex") ;
210
+ else {
211
+ if (!filter.val) {
212
+ return `${filter.cmp} operation requires a val`;
213
+ }
214
+ }
215
+ }
216
+ return null;
217
+ }
218
+ const FilterExamples = {
219
+ /**
220
+ * Filter for a specific event type
221
+ * @example Filter.eq("event_type", "goal")
222
+ */
223
+ eventType: (type) => Filter.eq("event_type", type),
224
+ /**
225
+ * Filter for events in a set of types
226
+ * @example FilterExamples.eventTypes(["goal", "shot"])
227
+ */
228
+ eventTypes: (types) => Filter.in("event_type", types),
229
+ /**
230
+ * Filter for numeric range
231
+ * @example FilterExamples.range("xG", "0.5", "0.9")
232
+ */
233
+ range: (key, min, max) => Filter.and(
234
+ Filter.gte(key, min),
235
+ Filter.lte(key, max)
236
+ ),
237
+ /**
238
+ * Filter for goals OR high-probability shots
239
+ * @example FilterExamples.importantEvents("0.8")
240
+ */
241
+ importantEvents: (xGThreshold) => Filter.or(
242
+ Filter.eq("event_type", "goal"),
243
+ Filter.and(
244
+ Filter.eq("event_type", "shot"),
245
+ Filter.gte("xG", xGThreshold)
246
+ )
247
+ )
248
+ };
249
+ exports.Filter = Filter;
250
+ exports.FilterExamples = FilterExamples;
251
+ exports.validateFilter = validateFilter;
252
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sources":["../../src/core/channels/filter.ts"],"sourcesContent":["// sockudo-js/src/core/channels/filter.ts\n\n/**\n * Filter node structure for publication filtering by tags.\n *\n * This structure matches the server-side FilterNode format for zero-allocation\n * evaluation during message broadcast.\n */\nexport interface FilterNode {\n /** Logical operator: \"and\", \"or\", \"not\" (if present, this is a branch node) */\n op?: string;\n\n /** Key for comparison (leaf nodes only) */\n key?: string;\n\n /** Comparison operator: \"eq\", \"neq\", \"in\", \"nin\", \"ex\", \"nex\", \"sw\", \"ew\", \"ct\", \"gt\", \"gte\", \"lt\", \"lte\" */\n cmp?: string;\n\n /** Single value for most comparisons */\n val?: string;\n\n /** Multiple values for set operations (in, nin) */\n vals?: string[];\n\n /** Child nodes for logical operations */\n nodes?: FilterNode[];\n}\n\n/**\n * Builder for constructing filter nodes programmatically.\n *\n * Provides a clean API for creating complex filters without dealing with\n * the internal FilterNode structure directly.\n *\n * @example\n * ```typescript\n * // Simple equality filter\n * const filter = Filter.eq(\"event_type\", \"goal\");\n *\n * // Complex nested filter\n * const filter = Filter.or(\n * Filter.eq(\"event_type\", \"goal\"),\n * Filter.and(\n * Filter.eq(\"event_type\", \"shot\"),\n * Filter.gte(\"xG\", \"0.8\")\n * )\n * );\n * ```\n */\nexport const Filter = {\n // Comparison operators\n\n /**\n * Creates an equality comparison: key == val\n * @param key The tag key to compare\n * @param val The value to compare against\n * @returns FilterNode for equality comparison\n */\n eq: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"eq\",\n val\n }),\n\n /**\n * Creates an inequality comparison: key != val\n * @param key The tag key to compare\n * @param val The value to compare against\n * @returns FilterNode for inequality comparison\n */\n neq: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"neq\",\n val\n }),\n\n /**\n * Creates a set membership comparison: key in [vals...]\n * @param key The tag key to compare\n * @param vals Array of values for set membership\n * @returns FilterNode for set membership comparison\n */\n in: (key: string, vals: string[]): FilterNode => ({\n key,\n cmp: \"in\",\n vals\n }),\n\n /**\n * Creates a set non-membership comparison: key not in [vals...]\n * @param key The tag key to compare\n * @param vals Array of values for set non-membership\n * @returns FilterNode for set non-membership comparison\n */\n nin: (key: string, vals: string[]): FilterNode => ({\n key,\n cmp: \"nin\",\n vals\n }),\n\n /**\n * Creates an existence check: key exists\n * @param key The tag key to check for existence\n * @returns FilterNode for existence check\n */\n exists: (key: string): FilterNode => ({\n key,\n cmp: \"ex\"\n }),\n\n /**\n * Creates a non-existence check: key does not exist\n * @param key The tag key to check for non-existence\n * @returns FilterNode for non-existence check\n */\n notExists: (key: string): FilterNode => ({\n key,\n cmp: \"nex\"\n }),\n\n /**\n * Creates a starts-with comparison: key starts with val\n * @param key The tag key to compare\n * @param val The prefix to match\n * @returns FilterNode for starts-with comparison\n */\n startsWith: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"sw\",\n val\n }),\n\n /**\n * Creates an ends-with comparison: key ends with val\n * @param key The tag key to compare\n * @param val The suffix to match\n * @returns FilterNode for ends-with comparison\n */\n endsWith: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"ew\",\n val\n }),\n\n /**\n * Creates a contains comparison: key contains val\n * @param key The tag key to compare\n * @param val The substring to match\n * @returns FilterNode for contains comparison\n */\n contains: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"ct\",\n val\n }),\n\n /**\n * Creates a greater-than comparison: key > val (numeric)\n * @param key The tag key to compare\n * @param val The numeric value to compare against (as string)\n * @returns FilterNode for greater-than comparison\n */\n gt: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"gt\",\n val\n }),\n\n /**\n * Creates a greater-than-or-equal comparison: key >= val (numeric)\n * @param key The tag key to compare\n * @param val The numeric value to compare against (as string)\n * @returns FilterNode for greater-than-or-equal comparison\n */\n gte: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"gte\",\n val\n }),\n\n /**\n * Creates a less-than comparison: key < val (numeric)\n * @param key The tag key to compare\n * @param val The numeric value to compare against (as string)\n * @returns FilterNode for less-than comparison\n */\n lt: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"lt\",\n val\n }),\n\n /**\n * Creates a less-than-or-equal comparison: key <= val (numeric)\n * @param key The tag key to compare\n * @param val The numeric value to compare against (as string)\n * @returns FilterNode for less-than-or-equal comparison\n */\n lte: (key: string, val: string): FilterNode => ({\n key,\n cmp: \"lte\",\n val\n }),\n\n // Logical operators\n\n /**\n * Creates an AND logical operation: all children must match\n * @param nodes Child filter nodes to combine with AND\n * @returns FilterNode for AND operation\n */\n and: (...nodes: FilterNode[]): FilterNode => ({\n op: \"and\",\n nodes\n }),\n\n /**\n * Creates an OR logical operation: at least one child must match\n * @param nodes Child filter nodes to combine with OR\n * @returns FilterNode for OR operation\n */\n or: (...nodes: FilterNode[]): FilterNode => ({\n op: \"or\",\n nodes\n }),\n\n /**\n * Creates a NOT logical operation: negates the child\n * @param node Child filter node to negate\n * @returns FilterNode for NOT operation\n */\n not: (node: FilterNode): FilterNode => ({\n op: \"not\",\n nodes: [node]\n })\n};\n\n/**\n * Validates a filter node structure.\n *\n * @param filter The filter node to validate\n * @returns Error message if invalid, null if valid\n */\nexport function validateFilter(filter: FilterNode): string | null {\n if (filter.op) {\n // Branch node - logical operation\n const op = filter.op;\n\n if (![\"and\", \"or\", \"not\"].includes(op)) {\n return `Invalid logical operator: ${op}`;\n }\n\n if (!filter.nodes || !Array.isArray(filter.nodes)) {\n return `Logical operation '${op}' requires nodes array`;\n }\n\n if (op === \"not\" && filter.nodes.length !== 1) {\n return `NOT operation requires exactly one child node, got ${filter.nodes.length}`;\n }\n\n if ((op === \"and\" || op === \"or\") && filter.nodes.length === 0) {\n return `${op.toUpperCase()} operation requires at least one child node`;\n }\n\n // Validate all children recursively\n for (let i = 0; i < filter.nodes.length; i++) {\n const childError = validateFilter(filter.nodes[i]);\n if (childError) {\n return `Child node ${i}: ${childError}`;\n }\n }\n } else {\n // Leaf node - comparison\n if (!filter.key) {\n return \"Leaf node requires a key\";\n }\n\n if (!filter.cmp) {\n return \"Leaf node requires a comparison operator\";\n }\n\n const validOps = [\"eq\", \"neq\", \"in\", \"nin\", \"ex\", \"nex\", \"sw\", \"ew\", \"ct\", \"gt\", \"gte\", \"lt\", \"lte\"];\n if (!validOps.includes(filter.cmp)) {\n return `Invalid comparison operator: ${filter.cmp}`;\n }\n\n // Check value requirements based on operator\n if (filter.cmp === \"in\" || filter.cmp === \"nin\") {\n if (!filter.vals || !Array.isArray(filter.vals) || filter.vals.length === 0) {\n return `${filter.cmp} operation requires non-empty vals array`;\n }\n } else if (filter.cmp === \"ex\" || filter.cmp === \"nex\") {\n // Existence checks don't need values\n } else {\n if (!filter.val) {\n return `${filter.cmp} operation requires a val`;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Example filter patterns for common use cases\n */\nexport const FilterExamples = {\n /**\n * Filter for a specific event type\n * @example Filter.eq(\"event_type\", \"goal\")\n */\n eventType: (type: string) => Filter.eq(\"event_type\", type),\n\n /**\n * Filter for events in a set of types\n * @example FilterExamples.eventTypes([\"goal\", \"shot\"])\n */\n eventTypes: (types: string[]) => Filter.in(\"event_type\", types),\n\n /**\n * Filter for numeric range\n * @example FilterExamples.range(\"xG\", \"0.5\", \"0.9\")\n */\n range: (key: string, min: string, max: string) =>\n Filter.and(\n Filter.gte(key, min),\n Filter.lte(key, max)\n ),\n\n /**\n * Filter for goals OR high-probability shots\n * @example FilterExamples.importantEvents(\"0.8\")\n */\n importantEvents: (xGThreshold: string) =>\n Filter.or(\n Filter.eq(\"event_type\", \"goal\"),\n Filter.and(\n Filter.eq(\"event_type\", \"shot\"),\n Filter.gte(\"xG\", xGThreshold)\n )\n )\n};\n"],"names":[],"mappings":"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"}