@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,372 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Pusher-JS Delta Compression Example</title>
7
+ <style>
8
+ body {
9
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
+ max-width: 1200px;
11
+ margin: 0 auto;
12
+ padding: 20px;
13
+ background: #f5f5f5;
14
+ }
15
+ .container {
16
+ background: white;
17
+ padding: 20px;
18
+ border-radius: 8px;
19
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
20
+ margin-bottom: 20px;
21
+ }
22
+ h1 { color: #333; margin-top: 0; }
23
+ h2 { color: #666; border-bottom: 2px solid #6c5ce7; padding-bottom: 5px; }
24
+ .stats {
25
+ display: grid;
26
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
27
+ gap: 15px;
28
+ margin: 20px 0;
29
+ }
30
+ .stat-box {
31
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
32
+ color: white;
33
+ padding: 15px;
34
+ border-radius: 5px;
35
+ }
36
+ .stat-label { font-size: 0.9em; opacity: 0.9; }
37
+ .stat-value { font-size: 2em; font-weight: bold; margin-top: 5px; }
38
+ .controls { margin: 20px 0; }
39
+ button {
40
+ background: #6c5ce7;
41
+ color: white;
42
+ border: none;
43
+ padding: 10px 20px;
44
+ border-radius: 5px;
45
+ cursor: pointer;
46
+ font-size: 16px;
47
+ margin-right: 10px;
48
+ }
49
+ button:hover { background: #5f4dd1; }
50
+ button:disabled {
51
+ background: #ccc;
52
+ cursor: not-allowed;
53
+ }
54
+ .log {
55
+ background: #f8f9fa;
56
+ border: 1px solid #dee2e6;
57
+ border-radius: 4px;
58
+ padding: 15px;
59
+ max-height: 300px;
60
+ overflow-y: auto;
61
+ font-family: 'Courier New', monospace;
62
+ font-size: 0.9em;
63
+ }
64
+ .log-entry {
65
+ padding: 5px 0;
66
+ border-bottom: 1px solid #e9ecef;
67
+ }
68
+ .log-entry:last-child { border-bottom: none; }
69
+ .log-time { color: #6c757d; }
70
+ .log-delta { color: #e74c3c; font-weight: bold; }
71
+ .log-full { color: #27ae60; font-weight: bold; }
72
+ .status {
73
+ padding: 8px 15px;
74
+ border-radius: 20px;
75
+ display: inline-block;
76
+ font-weight: bold;
77
+ }
78
+ .status.connected { background: #d4edda; color: #155724; }
79
+ .status.disconnected { background: #f8d7da; color: #721c24; }
80
+ .status.connecting { background: #fff3cd; color: #856404; }
81
+ </style>
82
+ </head>
83
+ <body>
84
+ <div class="container">
85
+ <h1>🚀 Pusher-JS Delta Compression Demo</h1>
86
+ <p>
87
+ This example demonstrates native delta compression and conflation key support.
88
+ Open the browser console to see detailed delta compression logs.
89
+ </p>
90
+
91
+ <div class="controls">
92
+ <button id="connect-btn">Connect</button>
93
+ <button id="disconnect-btn" disabled>Disconnect</button>
94
+ <button id="subscribe-btn" disabled>Subscribe to Channel</button>
95
+ <button id="send-test-btn" disabled>Send Test Messages</button>
96
+ <button id="reset-stats-btn" disabled>Reset Stats</button>
97
+ </div>
98
+
99
+ <div>
100
+ Connection Status: <span id="status" class="status disconnected">Disconnected</span>
101
+ </div>
102
+ </div>
103
+
104
+ <div class="container">
105
+ <h2>📊 Delta Compression Statistics</h2>
106
+ <div class="stats">
107
+ <div class="stat-box">
108
+ <div class="stat-label">Bandwidth Saved</div>
109
+ <div class="stat-value" id="bandwidth-saved">0%</div>
110
+ </div>
111
+ <div class="stat-box">
112
+ <div class="stat-label">Total Messages</div>
113
+ <div class="stat-value" id="total-messages">0</div>
114
+ </div>
115
+ <div class="stat-box">
116
+ <div class="stat-label">Delta Messages</div>
117
+ <div class="stat-value" id="delta-messages">0</div>
118
+ </div>
119
+ <div class="stat-box">
120
+ <div class="stat-label">Full Messages</div>
121
+ <div class="stat-value" id="full-messages">0</div>
122
+ </div>
123
+ <div class="stat-box">
124
+ <div class="stat-label">Bytes Saved</div>
125
+ <div class="stat-value" id="bytes-saved">0 KB</div>
126
+ </div>
127
+ <div class="stat-box">
128
+ <div class="stat-label">Channels</div>
129
+ <div class="stat-value" id="channel-count">0</div>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <div class="container">
135
+ <h2>📝 Message Log</h2>
136
+ <div id="log" class="log">
137
+ <div class="log-entry">Waiting for connection...</div>
138
+ </div>
139
+ </div>
140
+
141
+ <!-- Include Delta Compression Libraries -->
142
+ <script src="https://cdn.jsdelivr.net/npm/fossil-delta@1.0.2/fossil-delta.min.js"></script>
143
+
144
+ <!-- Include Pusher JS -->
145
+ <script src="../dist/web/pusher.js"></script>
146
+
147
+ <script>
148
+ // Configuration - Update these values for your setup
149
+ const CONFIG = {
150
+ appKey: 'your-app-key',
151
+ wsHost: 'localhost',
152
+ wsPort: 6001,
153
+ cluster: 'mt1',
154
+ forceTLS: false,
155
+ channelName: 'market-data',
156
+ eventName: 'price-update'
157
+ };
158
+
159
+ let pusher = null;
160
+ let channel = null;
161
+ let messageCount = 0;
162
+
163
+ // DOM elements
164
+ const connectBtn = document.getElementById('connect-btn');
165
+ const disconnectBtn = document.getElementById('disconnect-btn');
166
+ const subscribeBtn = document.getElementById('subscribe-btn');
167
+ const sendTestBtn = document.getElementById('send-test-btn');
168
+ const resetStatsBtn = document.getElementById('reset-stats-btn');
169
+ const statusEl = document.getElementById('status');
170
+ const logEl = document.getElementById('log');
171
+
172
+ // Utility functions
173
+ function log(message, type = 'info') {
174
+ const time = new Date().toLocaleTimeString();
175
+ const entry = document.createElement('div');
176
+ entry.className = 'log-entry';
177
+
178
+ let typeClass = '';
179
+ if (type === 'delta') typeClass = 'log-delta';
180
+ if (type === 'full') typeClass = 'log-full';
181
+
182
+ entry.innerHTML = `<span class="log-time">${time}</span> <span class="${typeClass}">${message}</span>`;
183
+ logEl.appendChild(entry);
184
+ logEl.scrollTop = logEl.scrollHeight;
185
+ }
186
+
187
+ function updateStats() {
188
+ const stats = pusher.getDeltaStats();
189
+ if (!stats) return;
190
+
191
+ document.getElementById('bandwidth-saved').textContent =
192
+ stats.bandwidthSavedPercent.toFixed(1) + '%';
193
+ document.getElementById('total-messages').textContent = stats.totalMessages;
194
+ document.getElementById('delta-messages').textContent = stats.deltaMessages;
195
+ document.getElementById('full-messages').textContent = stats.fullMessages;
196
+ document.getElementById('bytes-saved').textContent =
197
+ (stats.bandwidthSaved / 1024).toFixed(2) + ' KB';
198
+ document.getElementById('channel-count').textContent = stats.channelCount;
199
+ }
200
+
201
+ function updateStatus(status, text) {
202
+ statusEl.className = `status ${status}`;
203
+ statusEl.textContent = text;
204
+ }
205
+
206
+ // Connect to Pusher
207
+ function connect() {
208
+ log('Connecting to Pusher...');
209
+ updateStatus('connecting', 'Connecting');
210
+
211
+ pusher = new Pusher(CONFIG.appKey, {
212
+ cluster: CONFIG.cluster,
213
+ wsHost: CONFIG.wsHost,
214
+ wsPort: CONFIG.wsPort,
215
+ forceTLS: CONFIG.forceTLS,
216
+ enabledTransports: ['ws'],
217
+
218
+ // Enable delta compression
219
+ deltaCompression: {
220
+ enabled: true,
221
+ algorithms: ['fossil', 'xdelta3'],
222
+ debug: true,
223
+
224
+ onStats: (stats) => {
225
+ console.log('Delta Stats Update:', stats);
226
+ updateStats();
227
+ },
228
+
229
+ onError: (error) => {
230
+ console.error('Delta Compression Error:', error);
231
+ log('❌ Delta error: ' + error, 'error');
232
+ }
233
+ }
234
+ });
235
+
236
+ pusher.connection.bind('connected', () => {
237
+ log('✅ Connected to Pusher (socket_id: ' + pusher.connection.socket_id + ')');
238
+ updateStatus('connected', 'Connected');
239
+ connectBtn.disabled = true;
240
+ disconnectBtn.disabled = false;
241
+ subscribeBtn.disabled = false;
242
+ resetStatsBtn.disabled = false;
243
+ });
244
+
245
+ pusher.connection.bind('disconnected', () => {
246
+ log('⚠️ Disconnected from Pusher');
247
+ updateStatus('disconnected', 'Disconnected');
248
+ connectBtn.disabled = false;
249
+ disconnectBtn.disabled = true;
250
+ subscribeBtn.disabled = true;
251
+ sendTestBtn.disabled = true;
252
+ resetStatsBtn.disabled = true;
253
+ });
254
+
255
+ pusher.connection.bind('error', (err) => {
256
+ log('❌ Connection error: ' + JSON.stringify(err));
257
+ console.error('Pusher error:', err);
258
+ });
259
+
260
+ // Listen for delta compression events
261
+ pusher.bind('pusher:delta_compression_enabled', (data) => {
262
+ log('🗜️ Delta compression enabled: ' + JSON.stringify(data));
263
+ });
264
+ }
265
+
266
+ // Subscribe to channel
267
+ function subscribe() {
268
+ log('Subscribing to channel: ' + CONFIG.channelName);
269
+
270
+ channel = pusher.subscribe(CONFIG.channelName);
271
+
272
+ channel.bind('pusher:subscription_succeeded', () => {
273
+ log('✅ Subscribed to ' + CONFIG.channelName);
274
+ sendTestBtn.disabled = false;
275
+ });
276
+
277
+ channel.bind('pusher:subscription_error', (status) => {
278
+ log('❌ Subscription error: ' + JSON.stringify(status));
279
+ });
280
+
281
+ channel.bind('pusher:delta_cache_sync', (data) => {
282
+ log('🔄 Received cache sync for conflation keys');
283
+ console.log('Cache sync data:', data);
284
+ });
285
+
286
+ // Bind to custom events
287
+ channel.bind(CONFIG.eventName, (data) => {
288
+ messageCount++;
289
+ const isDelta = data.__delta_seq !== undefined;
290
+
291
+ if (isDelta) {
292
+ log(`[DELTA #${messageCount}] ${data.asset}: $${data.price}`, 'delta');
293
+ } else {
294
+ log(`[FULL #${messageCount}] ${data.asset}: $${data.price}`, 'full');
295
+ }
296
+
297
+ console.log('Received message:', data);
298
+ updateStats();
299
+ });
300
+ }
301
+
302
+ // Disconnect
303
+ function disconnect() {
304
+ if (pusher) {
305
+ pusher.disconnect();
306
+ pusher = null;
307
+ channel = null;
308
+ }
309
+ }
310
+
311
+ // Send test messages (requires server endpoint)
312
+ async function sendTestMessages() {
313
+ log('📤 Sending test messages...');
314
+
315
+ // Send a sequence of messages for different assets
316
+ const assets = ['BTC', 'ETH', 'ADA'];
317
+
318
+ for (let i = 0; i < 10; i++) {
319
+ for (const asset of assets) {
320
+ const price = (1000 + i * 10 + Math.random() * 5).toFixed(2);
321
+ const volume = (Math.random() * 1000).toFixed(2);
322
+
323
+ try {
324
+ // This assumes you have a trigger endpoint on your server
325
+ await fetch('/trigger-event', {
326
+ method: 'POST',
327
+ headers: { 'Content-Type': 'application/json' },
328
+ body: JSON.stringify({
329
+ channel: CONFIG.channelName,
330
+ event: CONFIG.eventName,
331
+ data: {
332
+ asset: asset,
333
+ price: price,
334
+ volume: volume,
335
+ timestamp: new Date().toISOString()
336
+ }
337
+ })
338
+ });
339
+ } catch (error) {
340
+ log('❌ Failed to send message: ' + error.message);
341
+ console.error(error);
342
+ }
343
+
344
+ await new Promise(resolve => setTimeout(resolve, 100));
345
+ }
346
+ }
347
+
348
+ log('✅ Test messages sent');
349
+ }
350
+
351
+ // Reset statistics
352
+ function resetStats() {
353
+ if (pusher) {
354
+ pusher.resetDeltaStats();
355
+ messageCount = 0;
356
+ updateStats();
357
+ log('🔄 Statistics reset');
358
+ }
359
+ }
360
+
361
+ // Event listeners
362
+ connectBtn.addEventListener('click', connect);
363
+ disconnectBtn.addEventListener('click', disconnect);
364
+ subscribeBtn.addEventListener('click', subscribe);
365
+ sendTestBtn.addEventListener('click', sendTestMessages);
366
+ resetStatsBtn.addEventListener('click', resetStats);
367
+
368
+ // Initial log
369
+ log('Ready to connect. Make sure your Sockudo server is running with delta compression enabled.');
370
+ </script>
371
+ </body>
372
+ </html>
@@ -0,0 +1,185 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Delta Compression - Seamless API Example</title>
7
+ <style>
8
+ body {
9
+ font-family: Arial, sans-serif;
10
+ max-width: 800px;
11
+ margin: 50px auto;
12
+ padding: 20px;
13
+ }
14
+ .section {
15
+ background: #f5f5f5;
16
+ padding: 20px;
17
+ margin: 20px 0;
18
+ border-radius: 8px;
19
+ }
20
+ .message {
21
+ background: white;
22
+ padding: 10px;
23
+ margin: 10px 0;
24
+ border-left: 4px solid #4CAF50;
25
+ }
26
+ .delta-message {
27
+ border-left-color: #2196F3;
28
+ }
29
+ .stats {
30
+ background: #e3f2fd;
31
+ padding: 15px;
32
+ border-radius: 4px;
33
+ }
34
+ code {
35
+ background: #fff;
36
+ padding: 2px 6px;
37
+ border-radius: 3px;
38
+ font-family: 'Courier New', monospace;
39
+ }
40
+ pre {
41
+ background: #263238;
42
+ color: #aed581;
43
+ padding: 15px;
44
+ border-radius: 4px;
45
+ overflow-x: auto;
46
+ }
47
+ </style>
48
+ </head>
49
+ <body>
50
+ <h1>Delta Compression - Seamless API Example</h1>
51
+
52
+ <div class="section">
53
+ <h2>Key Point: Transparent Delta Decoding</h2>
54
+ <p>
55
+ With delta compression enabled, <code>channel.bind()</code> automatically receives
56
+ <strong>decoded messages</strong> - you don't need to handle delta vs full messages differently!
57
+ </p>
58
+ </div>
59
+
60
+ <div class="section">
61
+ <h2>Simple Usage</h2>
62
+ <pre>
63
+ // Initialize Pusher with delta compression
64
+ const pusher = new Pusher('your-app-key', {
65
+ wsHost: 'localhost',
66
+ wsPort: 6001,
67
+ forceTLS: false,
68
+ enabledTransports: ['ws'],
69
+ delta: {
70
+ enabled: true,
71
+ debug: true
72
+ }
73
+ });
74
+
75
+ // Subscribe to channel
76
+ const channel = pusher.subscribe('prices');
77
+
78
+ // Bind to events - receives BOTH full AND decoded delta messages seamlessly!
79
+ channel.bind('price-update', (data) => {
80
+ console.log('Received:', data);
81
+ // data is always the complete decoded message
82
+ // You never have to check if it's a delta or full message!
83
+ });
84
+ </pre>
85
+ </div>
86
+
87
+ <div class="section">
88
+ <h2>Live Demo</h2>
89
+ <button id="connect-btn">Connect & Subscribe</button>
90
+ <button id="disconnect-btn" disabled>Disconnect</button>
91
+
92
+ <div id="messages-container"></div>
93
+
94
+ <div class="stats" id="stats">
95
+ <strong>Delta Compression Stats:</strong><br>
96
+ Total Messages: <span id="total">0</span><br>
97
+ Full Messages: <span id="full">0</span><br>
98
+ Delta Messages: <span id="delta">0</span><br>
99
+ Bandwidth Saved: <span id="saved">0%</span>
100
+ </div>
101
+ </div>
102
+
103
+ <script src="../dist/web/pusher.js"></script>
104
+ <script>
105
+ let pusher = null;
106
+ let channel = null;
107
+ let messageCount = 0;
108
+
109
+ const connectBtn = document.getElementById('connect-btn');
110
+ const disconnectBtn = document.getElementById('disconnect-btn');
111
+ const messagesContainer = document.getElementById('messages-container');
112
+
113
+ connectBtn.addEventListener('click', () => {
114
+ // Initialize with delta compression
115
+ pusher = new Pusher('app-key', {
116
+ wsHost: 'localhost',
117
+ wsPort: 6001,
118
+ forceTLS: false,
119
+ enabledTransports: ['ws'],
120
+ delta: {
121
+ enabled: true,
122
+ debug: true,
123
+ onStats: updateStats
124
+ }
125
+ });
126
+
127
+ // Subscribe to channel
128
+ channel = pusher.subscribe('test-channel');
129
+
130
+ // This is the SEAMLESS API - handles both full and delta messages!
131
+ channel.bind('test-event', (data) => {
132
+ messageCount++;
133
+
134
+ // Add message to UI
135
+ const msgDiv = document.createElement('div');
136
+ msgDiv.className = 'message';
137
+ msgDiv.innerHTML = `
138
+ <strong>Message #${messageCount}</strong><br>
139
+ <code>${JSON.stringify(data, null, 2)}</code>
140
+ `;
141
+ messagesContainer.prepend(msgDiv);
142
+
143
+ console.log('Received message:', data);
144
+ // Note: You don't know or care if this was a delta or full message!
145
+ // The library handles it transparently!
146
+ });
147
+
148
+ channel.bind('pusher:subscription_succeeded', () => {
149
+ console.log('✅ Subscribed successfully');
150
+ addSystemMessage('✅ Subscribed to test-channel');
151
+ });
152
+
153
+ connectBtn.disabled = true;
154
+ disconnectBtn.disabled = false;
155
+ });
156
+
157
+ disconnectBtn.addEventListener('click', () => {
158
+ if (pusher) {
159
+ pusher.disconnect();
160
+ pusher = null;
161
+ channel = null;
162
+ }
163
+ connectBtn.disabled = false;
164
+ disconnectBtn.disabled = true;
165
+ addSystemMessage('❌ Disconnected');
166
+ });
167
+
168
+ function addSystemMessage(text) {
169
+ const msgDiv = document.createElement('div');
170
+ msgDiv.className = 'message';
171
+ msgDiv.style.borderLeftColor = '#FF9800';
172
+ msgDiv.innerHTML = `<strong>${text}</strong>`;
173
+ messagesContainer.prepend(msgDiv);
174
+ }
175
+
176
+ function updateStats(stats) {
177
+ document.getElementById('total').textContent = stats.totalMessages;
178
+ document.getElementById('full').textContent = stats.fullMessages;
179
+ document.getElementById('delta').textContent = stats.deltaMessages;
180
+ document.getElementById('saved').textContent =
181
+ stats.bandwidthSavedPercent.toFixed(1) + '%';
182
+ }
183
+ </script>
184
+ </body>
185
+ </html>
package/index.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ export {
2
+ DeprecatedAuthOptions,
3
+ ChannelAuthorizerGenerator,
4
+ } from './types/src/core/auth/deprecated_channel_authorizer';
5
+ export {
6
+ UserAuthenticationOptions,
7
+ ChannelAuthorizationOptions,
8
+ ChannelAuthorizationHandler,
9
+ UserAuthenticationHandler,
10
+ ChannelAuthorizationCallback,
11
+ UserAuthenticationCallback,
12
+ } from './types/src/core/auth/options';
13
+ export { Options } from './types/src/core/options';
14
+
15
+ export { default as Channel } from './types/src/core/channels/channel';
16
+ export { default as PresenceChannel } from './types/src/core/channels/presence_channel';
17
+ export { default as Members } from './types/src/core/channels/members';
18
+ export { default as Runtime } from './types/src/runtimes/interface';
19
+ export { default as ConnectionManager } from './types/src/core/connection/connection_manager';
20
+
21
+ export {
22
+ FilterNode,
23
+ Filter,
24
+ validateFilter,
25
+ FilterExamples,
26
+ } from './types/src/core/channels/filter';
27
+
28
+ export { default } from './types/src/core/pusher';
29
+
30
+ // The following types are provided for backward compatibility
31
+ export {
32
+ DeprecatedAuthOptions as AuthOptions,
33
+ DeprecatedChannelAuthorizer as Authorizer,
34
+ ChannelAuthorizerGenerator as AuthorizerGenerator,
35
+ } from './types/src/core/auth/deprecated_channel_authorizer';
36
+ export { ChannelAuthorizationCallback as AuthorizerCallback } from './types/src/core/auth/options';