@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.
- package/.editorconfig +14 -0
- package/.github/ISSUE_TEMPLATE.md +11 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/.github/dependabot.yml +14 -0
- package/.github/stale.yml +26 -0
- package/.github/workflows/release.yml +112 -0
- package/.github/workflows/release_pr.yml +43 -0
- package/.github/workflows/run-tests.yml +62 -0
- package/.gitmodules +3 -0
- package/.prettierrc +2 -0
- package/CHANGELOG.md +928 -0
- package/DELTA_COMPRESSION.md +365 -0
- package/DELTA_USAGE.md +179 -0
- package/IMPLEMENTATION_SUMMARY.md +261 -0
- package/IMPORT_GUIDE.md +638 -0
- package/LIBRARY_STRUCTURE_ANALYSIS.md +940 -0
- package/LICENCE +19 -0
- package/Makefile +14 -0
- package/README.md +709 -0
- package/TAG_FILTERING_CLIENT.md +471 -0
- package/bower.json +19 -0
- package/bun.lock +2695 -0
- package/dist/node/filter.js +252 -0
- package/dist/node/filter.js.map +1 -0
- package/dist/node/pusher.js +4434 -0
- package/dist/node/pusher.js.map +1 -0
- package/dist/web/filter.mjs +252 -0
- package/dist/web/filter.mjs.map +1 -0
- package/dist/web/pusher.mjs +5889 -0
- package/dist/web/pusher.mjs.map +1 -0
- package/examples/delta-compression-example.html +372 -0
- package/examples/delta-seamless-example.html +185 -0
- package/index.d.ts +36 -0
- package/integration_tests_server/index.js +176 -0
- package/integration_tests_server/package-lock.json +1177 -0
- package/integration_tests_server/package.json +15 -0
- package/interactive/.env +16 -0
- package/interactive/CONFLATION_TEST.md +73 -0
- package/interactive/DELTA_COMPRESSION_TESTING.md +262 -0
- package/interactive/bun.lock +208 -0
- package/interactive/package-lock.json +1075 -0
- package/interactive/package.json +32 -0
- package/interactive/public/app.js +1363 -0
- package/interactive/public/bundle-entry.js +14 -0
- package/interactive/public/conflation-test.html +508 -0
- package/interactive/public/conflation-test.js +785 -0
- package/interactive/public/delta-compression.js +1090 -0
- package/interactive/public/dist/bundle.js +5857 -0
- package/interactive/public/index.html +392 -0
- package/interactive/public/main.js +20 -0
- package/interactive/public/style.css +823 -0
- package/interactive/server.js +246 -0
- package/interactive/test-bundle.html +89 -0
- package/interactive/test-delta.js +146 -0
- package/node.js +1 -0
- package/package.json +94 -0
- package/pusher-with-encryption/index.js +1 -0
- package/react-native/index.d.ts +29 -0
- package/react-native/index.js +1 -0
- package/spec/config/jasmine/helpers/reporter.js +14 -0
- package/spec/config/jasmine/integration.json +13 -0
- package/spec/config/jasmine/unit.json +13 -0
- package/spec/config/jasmine/webpack.integration.js +33 -0
- package/spec/config/jasmine/webpack.unit.js +30 -0
- package/spec/config/karma/available_browsers.json +4957 -0
- package/spec/config/karma/config.ci.js +25 -0
- package/spec/config/karma/config.common.js +50 -0
- package/spec/config/karma/config.integration.js +26 -0
- package/spec/config/karma/config.unit.js +10 -0
- package/spec/config/karma/config.worker.js +34 -0
- package/spec/config/karma/integration.js +24 -0
- package/spec/config/karma/unit.js +20 -0
- package/spec/javascripts/helpers/mocks.js +274 -0
- package/spec/javascripts/helpers/node/integration.js +33 -0
- package/spec/javascripts/helpers/node/mock-dom-dependencies.ts +1 -0
- package/spec/javascripts/helpers/pusher_integration.js +1 -0
- package/spec/javascripts/helpers/pusher_integration_class.ts +12 -0
- package/spec/javascripts/helpers/timers/promises.js +9 -0
- package/spec/javascripts/helpers/waitsFor.js +37 -0
- package/spec/javascripts/helpers/web/integration.js +44 -0
- package/spec/javascripts/helpers/worker/mock-dom-dependencies.js +1 -0
- package/spec/javascripts/integration/core/cluster_config_spec.js +153 -0
- package/spec/javascripts/integration/core/falling_back_spec.js +195 -0
- package/spec/javascripts/integration/core/pusher_spec/index.js +68 -0
- package/spec/javascripts/integration/core/pusher_spec/test_builder.js +715 -0
- package/spec/javascripts/integration/core/timeout_configuration_spec.js +200 -0
- package/spec/javascripts/integration/core/transport_lists_spec.js +103 -0
- package/spec/javascripts/integration/index.node.js +12 -0
- package/spec/javascripts/integration/index.web.js +63 -0
- package/spec/javascripts/integration/index.worker.js +13 -0
- package/spec/javascripts/integration/web/dom/jsonp_spec.js +97 -0
- package/spec/javascripts/integration/web/dom/script_request_spec.js +90 -0
- package/spec/javascripts/polyfills/index.js +105 -0
- package/spec/javascripts/unit/core/channels/channel_spec.js +355 -0
- package/spec/javascripts/unit/core/channels/channels_spec.js +94 -0
- package/spec/javascripts/unit/core/channels/encrypted_channel_spec.js +343 -0
- package/spec/javascripts/unit/core/channels/presence_channel_spec.js +553 -0
- package/spec/javascripts/unit/core/channels/private_channel_spec.js +182 -0
- package/spec/javascripts/unit/core/config_spec.js +507 -0
- package/spec/javascripts/unit/core/connection/connection_manager_spec.js +656 -0
- package/spec/javascripts/unit/core/connection/connection_spec.js +286 -0
- package/spec/javascripts/unit/core/connection/handshake_spec.js +160 -0
- package/spec/javascripts/unit/core/connection/protocol_spec.js +420 -0
- package/spec/javascripts/unit/core/defaults_spec.js +26 -0
- package/spec/javascripts/unit/core/events_dispatcher_spec.js +385 -0
- package/spec/javascripts/unit/core/http/http_polling_socket_spec.js +60 -0
- package/spec/javascripts/unit/core/http/http_request_spec.js +185 -0
- package/spec/javascripts/unit/core/http/http_socket_spec.js +370 -0
- package/spec/javascripts/unit/core/http/http_streaming_socket_spec.js +56 -0
- package/spec/javascripts/unit/core/http/http_xhr_request_spec.js +164 -0
- package/spec/javascripts/unit/core/logger_spec.js +133 -0
- package/spec/javascripts/unit/core/pusher_spec.js +613 -0
- package/spec/javascripts/unit/core/pusher_with_encryption_spec.js +18 -0
- package/spec/javascripts/unit/core/strategies/best_connected_ever_strategy_spec.js +104 -0
- package/spec/javascripts/unit/core/strategies/delayed_strategy_spec.js +95 -0
- package/spec/javascripts/unit/core/strategies/first_connected_strategy_spec.js +68 -0
- package/spec/javascripts/unit/core/strategies/if_strategy_spec.js +165 -0
- package/spec/javascripts/unit/core/strategies/sequential_strategy_spec.js +213 -0
- package/spec/javascripts/unit/core/strategies/transport_strategy_spec.js +250 -0
- package/spec/javascripts/unit/core/strategies/websocket_prioritized_cached_strategy_spec.js +400 -0
- package/spec/javascripts/unit/core/timeline/timeline_spec.js +153 -0
- package/spec/javascripts/unit/core/transports/assistant_to_the_transport_manager_spec.js +223 -0
- package/spec/javascripts/unit/core/transports/hosts_and_ports_spec.js +85 -0
- package/spec/javascripts/unit/core/transports/transport_connection_spec.js +585 -0
- package/spec/javascripts/unit/core/transports/transport_manager_spec.js +64 -0
- package/spec/javascripts/unit/core/user_spec.js +303 -0
- package/spec/javascripts/unit/core/utils/periodic_timer_spec.js +74 -0
- package/spec/javascripts/unit/core/utils/timers_spec.js +157 -0
- package/spec/javascripts/unit/core/utils/url_store_spec.js +14 -0
- package/spec/javascripts/unit/core/watchlist_spec.js +48 -0
- package/spec/javascripts/unit/core_with_runtime/auth/channel_authorizer_spec.js +137 -0
- package/spec/javascripts/unit/core_with_runtime/auth/deprecated_channel_authorizer_spec.js +48 -0
- package/spec/javascripts/unit/core_with_runtime/auth/user_authorizer_spec.js +128 -0
- package/spec/javascripts/unit/core_with_runtime/readme.md +5 -0
- package/spec/javascripts/unit/index.node.js +11 -0
- package/spec/javascripts/unit/index.web.js +12 -0
- package/spec/javascripts/unit/index.worker.js +11 -0
- package/spec/javascripts/unit/isomorphic/transports/hosts_and_ports_spec.js +82 -0
- package/spec/javascripts/unit/isomorphic/transports/transports_spec.js +202 -0
- package/spec/javascripts/unit/node/timeline_sender_spec.js +83 -0
- package/spec/javascripts/unit/web/dom/dependency_loader_spec.js +249 -0
- package/spec/javascripts/unit/web/dom/jsonp_request_spec.js +130 -0
- package/spec/javascripts/unit/web/dom/script_receiver_factory_spec.js +68 -0
- package/spec/javascripts/unit/web/http/http_xdomain_request_spec.js +222 -0
- package/spec/javascripts/unit/web/pusher_authorizer_spec.js +64 -0
- package/spec/javascripts/unit/web/timeline/timeline_sender_spec.js +131 -0
- package/spec/javascripts/unit/web/transports/hosts_and_ports_spec.js +127 -0
- package/spec/javascripts/unit/web/transports/transports_spec.js +444 -0
- package/spec/javascripts/unit/worker/channel_authorizer_spec.js +156 -0
- package/spec/javascripts/unit/worker/timeline_sender_spec.js +76 -0
- package/src/core/auth/auth_transports.ts +18 -0
- package/src/core/auth/channel_authorizer.ts +64 -0
- package/src/core/auth/deprecated_channel_authorizer.ts +56 -0
- package/src/core/auth/options.ts +76 -0
- package/src/core/auth/user_authenticator.ts +62 -0
- package/src/core/base64.ts +49 -0
- package/src/core/channels/channel.ts +173 -0
- package/src/core/channels/channel_table.ts +7 -0
- package/src/core/channels/channels.ts +86 -0
- package/src/core/channels/encrypted_channel.ts +150 -0
- package/src/core/channels/filter.ts +342 -0
- package/src/core/channels/members.ts +80 -0
- package/src/core/channels/metadata.ts +5 -0
- package/src/core/channels/presence_channel.ts +113 -0
- package/src/core/channels/private_channel.ts +25 -0
- package/src/core/config.ts +189 -0
- package/src/core/connection/callbacks.ts +21 -0
- package/src/core/connection/connection.ts +160 -0
- package/src/core/connection/connection_manager.ts +371 -0
- package/src/core/connection/connection_manager_options.ts +14 -0
- package/src/core/connection/handshake/handshake_payload.ts +10 -0
- package/src/core/connection/handshake/index.ts +90 -0
- package/src/core/connection/protocol/action.ts +8 -0
- package/src/core/connection/protocol/message-types.ts +11 -0
- package/src/core/connection/protocol/protocol.ts +166 -0
- package/src/core/defaults.ts +66 -0
- package/src/core/delta/channel_state.ts +194 -0
- package/src/core/delta/decoders.ts +129 -0
- package/src/core/delta/index.ts +10 -0
- package/src/core/delta/manager.ts +504 -0
- package/src/core/delta/types.ts +60 -0
- package/src/core/errors.ts +69 -0
- package/src/core/events/callback.ts +6 -0
- package/src/core/events/callback_registry.ts +75 -0
- package/src/core/events/callback_table.ts +7 -0
- package/src/core/events/dispatcher.ts +84 -0
- package/src/core/http/ajax.ts +24 -0
- package/src/core/http/http_factory.ts +16 -0
- package/src/core/http/http_polling_socket.ts +24 -0
- package/src/core/http/http_request.ts +81 -0
- package/src/core/http/http_socket.ts +220 -0
- package/src/core/http/http_streaming_socket.ts +19 -0
- package/src/core/http/request_hooks.ts +9 -0
- package/src/core/http/socket_hooks.ts +11 -0
- package/src/core/http/state.ts +7 -0
- package/src/core/http/url_location.ts +6 -0
- package/src/core/logger.ts +66 -0
- package/src/core/options.ts +61 -0
- package/src/core/pusher-licence.js +7 -0
- package/src/core/pusher-with-encryption.js +1 -0
- package/src/core/pusher-with-encryption.ts +14 -0
- package/src/core/pusher.js +10 -0
- package/src/core/pusher.ts +412 -0
- package/src/core/reachability.ts +7 -0
- package/src/core/socket.ts +14 -0
- package/src/core/strategies/best_connected_ever_strategy.ts +81 -0
- package/src/core/strategies/delayed_strategy.ts +48 -0
- package/src/core/strategies/first_connected_strategy.ts +31 -0
- package/src/core/strategies/if_strategy.ts +34 -0
- package/src/core/strategies/sequential_strategy.ts +129 -0
- package/src/core/strategies/strategy.ts +8 -0
- package/src/core/strategies/strategy_builder.ts +67 -0
- package/src/core/strategies/strategy_options.ts +18 -0
- package/src/core/strategies/strategy_runner.ts +6 -0
- package/src/core/strategies/transport_strategy.ts +144 -0
- package/src/core/strategies/websocket_prioritized_cached_strategy.ts +157 -0
- package/src/core/timeline/level.ts +7 -0
- package/src/core/timeline/timeline.ts +90 -0
- package/src/core/timeline/timeline_sender.ts +33 -0
- package/src/core/timeline/timeline_transport.ts +11 -0
- package/src/core/transports/assistant_to_the_transport_manager.ts +104 -0
- package/src/core/transports/ping_delay_options.ts +7 -0
- package/src/core/transports/transport.ts +54 -0
- package/src/core/transports/transport_connection.ts +241 -0
- package/src/core/transports/transport_connection_options.ts +8 -0
- package/src/core/transports/transport_hooks.ts +16 -0
- package/src/core/transports/transport_manager.ts +52 -0
- package/src/core/transports/transports_table.ts +12 -0
- package/src/core/transports/url_scheme.ts +13 -0
- package/src/core/transports/url_schemes.ts +47 -0
- package/src/core/user.ts +186 -0
- package/src/core/util.ts +34 -0
- package/src/core/utils/collections.ts +353 -0
- package/src/core/utils/factory.ts +79 -0
- package/src/core/utils/flat_promise.ts +10 -0
- package/src/core/utils/timers/abstract_timer.ts +39 -0
- package/src/core/utils/timers/index.ts +39 -0
- package/src/core/utils/timers/scheduling.ts +11 -0
- package/src/core/utils/timers/timed_callback.ts +5 -0
- package/src/core/utils/url_store.ts +48 -0
- package/src/core/watchlist.ts +31 -0
- package/src/d.ts/constants/index.d.ts +5 -0
- package/src/d.ts/faye-websocket/faye-websocket.d.ts +21 -0
- package/src/d.ts/global/global.d.ts +1 -0
- package/src/d.ts/module/module.d.ts +12 -0
- package/src/d.ts/tweetnacl-util/index.d.ts +6 -0
- package/src/d.ts/window/events.d.ts +4 -0
- package/src/d.ts/window/sockjs.d.ts +3 -0
- package/src/d.ts/window/websocket.d.ts +4 -0
- package/src/d.ts/window/xmlhttprequest.d.ts +3 -0
- package/src/filter.ts +5 -0
- package/src/index.ts +8 -0
- package/src/runtimes/interface.ts +60 -0
- package/src/runtimes/isomorphic/auth/xhr_auth.ts +90 -0
- package/src/runtimes/isomorphic/default_strategy.ts +155 -0
- package/src/runtimes/isomorphic/http/http.ts +32 -0
- package/src/runtimes/isomorphic/http/http_xhr_request.ts +35 -0
- package/src/runtimes/isomorphic/runtime.ts +62 -0
- package/src/runtimes/isomorphic/timeline/xhr_timeline.ts +50 -0
- package/src/runtimes/isomorphic/transports/transport_connection_initializer.ts +19 -0
- package/src/runtimes/isomorphic/transports/transports.ts +83 -0
- package/src/runtimes/node/net_info.ts +10 -0
- package/src/runtimes/node/runtime.ts +68 -0
- package/src/runtimes/react-native/net_info.ts +42 -0
- package/src/runtimes/react-native/runtime.ts +65 -0
- package/src/runtimes/web/auth/jsonp_auth.ts +51 -0
- package/src/runtimes/web/browser.ts +24 -0
- package/src/runtimes/web/default_strategy.ts +201 -0
- package/src/runtimes/web/dom/dependencies.ts +16 -0
- package/src/runtimes/web/dom/dependency_loader.ts +93 -0
- package/src/runtimes/web/dom/json2.js +486 -0
- package/src/runtimes/web/dom/jsonp_request.ts +52 -0
- package/src/runtimes/web/dom/script_receiver.ts +8 -0
- package/src/runtimes/web/dom/script_receiver_factory.ts +57 -0
- package/src/runtimes/web/dom/script_request.ts +85 -0
- package/src/runtimes/web/http/http.ts +8 -0
- package/src/runtimes/web/http/http_xdomain_request.ts +37 -0
- package/src/runtimes/web/net_info.ts +50 -0
- package/src/runtimes/web/runtime.ts +174 -0
- package/src/runtimes/web/timeline/jsonp_timeline.ts +34 -0
- package/src/runtimes/web/transports/transport_connection_initializer.ts +39 -0
- package/src/runtimes/web/transports/transports.ts +67 -0
- package/src/runtimes/worker/auth/fetch_auth.ts +69 -0
- package/src/runtimes/worker/net_info.ts +10 -0
- package/src/runtimes/worker/runtime.ts +75 -0
- package/src/runtimes/worker/timeline/fetch_timeline.ts +39 -0
- package/tsconfig.json +18 -0
- package/types/spec/javascripts/helpers/node/mock-dom-dependencies.d.ts +1 -0
- package/types/spec/javascripts/helpers/pusher_integration_class.d.ts +4 -0
- package/types/src/core/auth/auth_transports.d.ts +9 -0
- package/types/src/core/auth/channel_authorizer.d.ts +3 -0
- package/types/src/core/auth/deprecated_channel_authorizer.d.ts +18 -0
- package/types/src/core/auth/options.d.ts +48 -0
- package/types/src/core/auth/user_authenticator.d.ts +3 -0
- package/types/src/core/base64.d.ts +1 -0
- package/types/src/core/channels/channel.d.ts +25 -0
- package/types/src/core/channels/channel_table.d.ts +5 -0
- package/types/src/core/channels/channels.d.ts +12 -0
- package/types/src/core/channels/encrypted_channel.d.ts +15 -0
- package/types/src/core/channels/filter.d.ts +33 -0
- package/types/src/core/channels/members.d.ts +14 -0
- package/types/src/core/channels/metadata.d.ts +4 -0
- package/types/src/core/channels/presence_channel.d.ts +13 -0
- package/types/src/core/channels/private_channel.d.ts +5 -0
- package/types/src/core/config.d.ts +31 -0
- package/types/src/core/connection/callbacks.d.ts +18 -0
- package/types/src/core/connection/connection.d.ts +16 -0
- package/types/src/core/connection/connection_manager.d.ts +50 -0
- package/types/src/core/connection/connection_manager_options.d.ts +11 -0
- package/types/src/core/connection/handshake/handshake_payload.d.ts +8 -0
- package/types/src/core/connection/handshake/index.d.ts +12 -0
- package/types/src/core/connection/protocol/action.d.ts +7 -0
- package/types/src/core/connection/protocol/message-types.d.ts +10 -0
- package/types/src/core/connection/protocol/protocol.d.ts +10 -0
- package/types/src/core/defaults.d.ts +26 -0
- package/types/src/core/delta/channel_state.d.ts +23 -0
- package/types/src/core/delta/decoders.d.ts +12 -0
- package/types/src/core/delta/index.d.ts +4 -0
- package/types/src/core/delta/manager.d.ts +27 -0
- package/types/src/core/delta/types.d.ts +50 -0
- package/types/src/core/errors.d.ts +28 -0
- package/types/src/core/events/callback.d.ts +5 -0
- package/types/src/core/events/callback_registry.d.ts +11 -0
- package/types/src/core/events/callback_table.d.ts +5 -0
- package/types/src/core/events/dispatcher.d.ts +14 -0
- package/types/src/core/http/ajax.d.ts +16 -0
- package/types/src/core/http/http_factory.d.ts +13 -0
- package/types/src/core/http/http_polling_socket.d.ts +3 -0
- package/types/src/core/http/http_request.d.ts +17 -0
- package/types/src/core/http/http_socket.d.ts +32 -0
- package/types/src/core/http/http_streaming_socket.d.ts +3 -0
- package/types/src/core/http/request_hooks.d.ts +6 -0
- package/types/src/core/http/socket_hooks.d.ts +8 -0
- package/types/src/core/http/state.d.ts +6 -0
- package/types/src/core/http/url_location.d.ts +5 -0
- package/types/src/core/logger.d.ts +11 -0
- package/types/src/core/options.d.ts +36 -0
- package/types/src/core/pusher-with-encryption.d.ts +5 -0
- package/types/src/core/pusher.d.ts +56 -0
- package/types/src/core/reachability.d.ts +5 -0
- package/types/src/core/socket.d.ts +12 -0
- package/types/src/core/strategies/best_connected_ever_strategy.d.ts +10 -0
- package/types/src/core/strategies/delayed_strategy.d.ts +15 -0
- package/types/src/core/strategies/first_connected_strategy.d.ts +8 -0
- package/types/src/core/strategies/if_strategy.d.ts +10 -0
- package/types/src/core/strategies/sequential_strategy.d.ts +16 -0
- package/types/src/core/strategies/strategy.d.ts +6 -0
- package/types/src/core/strategies/strategy_builder.d.ts +5 -0
- package/types/src/core/strategies/strategy_options.d.ts +16 -0
- package/types/src/core/strategies/strategy_runner.d.ts +5 -0
- package/types/src/core/strategies/transport_strategy.d.ts +15 -0
- package/types/src/core/strategies/websocket_prioritized_cached_strategy.d.ts +20 -0
- package/types/src/core/timeline/level.d.ts +6 -0
- package/types/src/core/timeline/timeline.d.ts +25 -0
- package/types/src/core/timeline/timeline_sender.d.ts +13 -0
- package/types/src/core/timeline/timeline_transport.d.ts +6 -0
- package/types/src/core/transports/assistant_to_the_transport_manager.d.ts +14 -0
- package/types/src/core/transports/ping_delay_options.d.ts +6 -0
- package/types/src/core/transports/transport.d.ts +8 -0
- package/types/src/core/transports/transport_connection.d.ts +35 -0
- package/types/src/core/transports/transport_connection_options.d.ts +6 -0
- package/types/src/core/transports/transport_hooks.d.ts +13 -0
- package/types/src/core/transports/transport_manager.d.ts +14 -0
- package/types/src/core/transports/transports_table.d.ts +10 -0
- package/types/src/core/transports/url_scheme.d.ts +11 -0
- package/types/src/core/transports/url_schemes.d.ts +4 -0
- package/types/src/core/user.d.ts +21 -0
- package/types/src/core/util.d.ts +8 -0
- package/types/src/core/utils/collections.d.ts +18 -0
- package/types/src/core/utils/factory.d.ts +29 -0
- package/types/src/core/utils/flat_promise.d.ts +6 -0
- package/types/src/core/utils/timers/abstract_timer.d.ts +10 -0
- package/types/src/core/utils/timers/index.d.ts +9 -0
- package/types/src/core/utils/timers/scheduling.d.ts +8 -0
- package/types/src/core/utils/timers/timed_callback.d.ts +4 -0
- package/types/src/core/utils/url_store.d.ts +4 -0
- package/types/src/core/watchlist.d.ts +8 -0
- package/types/src/runtimes/interface.d.ts +43 -0
- package/types/src/runtimes/isomorphic/auth/xhr_auth.d.ts +3 -0
- package/types/src/runtimes/isomorphic/default_strategy.d.ts +5 -0
- package/types/src/runtimes/isomorphic/http/http.d.ts +3 -0
- package/types/src/runtimes/isomorphic/http/http_xhr_request.d.ts +3 -0
- package/types/src/runtimes/isomorphic/runtime.d.ts +2 -0
- package/types/src/runtimes/isomorphic/timeline/xhr_timeline.d.ts +6 -0
- package/types/src/runtimes/isomorphic/transports/transport_connection_initializer.d.ts +1 -0
- package/types/src/runtimes/isomorphic/transports/transports.d.ts +5 -0
- package/types/src/runtimes/node/net_info.d.ts +6 -0
- package/types/src/runtimes/node/runtime.d.ts +3 -0
- package/types/src/runtimes/react-native/net_info.d.ts +8 -0
- package/types/src/runtimes/react-native/runtime.d.ts +3 -0
- package/types/src/runtimes/web/auth/jsonp_auth.d.ts +3 -0
- package/types/src/runtimes/web/browser.d.ts +19 -0
- package/types/src/runtimes/web/default_strategy.d.ts +5 -0
- package/types/src/runtimes/web/dom/dependencies.d.ts +4 -0
- package/types/src/runtimes/web/dom/dependency_loader.d.ts +10 -0
- package/types/src/runtimes/web/dom/jsonp_request.d.ts +10 -0
- package/types/src/runtimes/web/dom/script_receiver.d.ts +7 -0
- package/types/src/runtimes/web/dom/script_receiver_factory.d.ts +10 -0
- package/types/src/runtimes/web/dom/script_request.d.ts +9 -0
- package/types/src/runtimes/web/http/http.d.ts +2 -0
- package/types/src/runtimes/web/http/http_xdomain_request.d.ts +3 -0
- package/types/src/runtimes/web/net_info.d.ts +7 -0
- package/types/src/runtimes/web/runtime.d.ts +3 -0
- package/types/src/runtimes/web/timeline/jsonp_timeline.d.ts +6 -0
- package/types/src/runtimes/web/transports/transport_connection_initializer.d.ts +1 -0
- package/types/src/runtimes/web/transports/transports.d.ts +2 -0
- package/types/src/runtimes/worker/auth/fetch_auth.d.ts +3 -0
- package/types/src/runtimes/worker/net_info.d.ts +6 -0
- package/types/src/runtimes/worker/runtime.d.ts +3 -0
- package/types/src/runtimes/worker/timeline/fetch_timeline.d.ts +6 -0
- package/vite.config.js +52 -0
- package/vite.config.node.js +72 -0
- package/webpack/config.node.js +26 -0
- package/webpack/config.react-native.js +35 -0
- package/webpack/config.shared.js +50 -0
- package/webpack/config.web.js +36 -0
- package/webpack/config.worker.js +42 -0
- package/webpack/dev.server.js +17 -0
- package/webpack/hosting_config.js +6 -0
- package/with-encryption/index.d.ts +29 -0
- package/with-encryption/index.js +4 -0
- package/worker/index.d.ts +29 -0
- package/worker/index.js +1 -0
- package/worker/with-encryption/index.d.ts +29 -0
- package/worker/with-encryption/index.js +1 -0
package/IMPORT_GUIDE.md
ADDED
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
# Import Guide for Pusher-JS (Sockudo Edition)
|
|
2
|
+
|
|
3
|
+
This guide explains how to import and use the Pusher-JS library with delta compression and tag filtering features.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Basic Import (Pusher Only)](#basic-import-pusher-only)
|
|
8
|
+
- [With Filter Support](#with-filter-support)
|
|
9
|
+
- [Framework Examples](#framework-examples)
|
|
10
|
+
- [Vue 3](#vue-3)
|
|
11
|
+
- [React](#react)
|
|
12
|
+
- [Angular](#angular)
|
|
13
|
+
- [Vanilla JavaScript](#vanilla-javascript)
|
|
14
|
+
- [TypeScript Support](#typescript-support)
|
|
15
|
+
- [Delta Compression](#delta-compression)
|
|
16
|
+
- [Tag Filtering](#tag-filtering)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Basic Import (Pusher Only)
|
|
21
|
+
|
|
22
|
+
When you only need the Pusher client without filters:
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
import Pusher from 'pusher-js';
|
|
26
|
+
|
|
27
|
+
const pusher = new Pusher('your-app-key', {
|
|
28
|
+
cluster: 'mt1',
|
|
29
|
+
wsHost: 'localhost',
|
|
30
|
+
wsPort: 6001,
|
|
31
|
+
forceTLS: false,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const channel = pusher.subscribe('my-channel');
|
|
35
|
+
channel.bind('my-event', (data) => {
|
|
36
|
+
console.log('Received:', data);
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## With Filter Support
|
|
43
|
+
|
|
44
|
+
When you need tag filtering capabilities, import Filter separately:
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
import Pusher from 'pusher-js';
|
|
48
|
+
import { Filter, FilterExamples } from 'pusher-js/filter';
|
|
49
|
+
|
|
50
|
+
const pusher = new Pusher('your-app-key', {
|
|
51
|
+
cluster: 'mt1',
|
|
52
|
+
wsHost: 'localhost',
|
|
53
|
+
wsPort: 6001,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Subscribe with a filter
|
|
57
|
+
const channel = pusher.subscribe(
|
|
58
|
+
'events-channel',
|
|
59
|
+
Filter.eq('event_type', 'goal')
|
|
60
|
+
);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Framework Examples
|
|
66
|
+
|
|
67
|
+
### Vue 3
|
|
68
|
+
|
|
69
|
+
#### Composition API
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<script setup>
|
|
73
|
+
import { ref, onMounted, onUnmounted } from 'vue';
|
|
74
|
+
import Pusher from 'pusher-js';
|
|
75
|
+
import { Filter } from 'pusher-js/filter';
|
|
76
|
+
|
|
77
|
+
const messages = ref([]);
|
|
78
|
+
let pusher = null;
|
|
79
|
+
let channel = null;
|
|
80
|
+
|
|
81
|
+
onMounted(() => {
|
|
82
|
+
// Initialize Pusher
|
|
83
|
+
pusher = new Pusher('your-app-key', {
|
|
84
|
+
cluster: 'mt1',
|
|
85
|
+
wsHost: 'localhost',
|
|
86
|
+
wsPort: 6001,
|
|
87
|
+
forceTLS: false,
|
|
88
|
+
|
|
89
|
+
// Enable delta compression
|
|
90
|
+
deltaCompression: {
|
|
91
|
+
enabled: true,
|
|
92
|
+
algorithms: ['fossil', 'xdelta3'],
|
|
93
|
+
debug: false,
|
|
94
|
+
onStats: (stats) => {
|
|
95
|
+
console.log('Bandwidth saved:', stats.bandwidthSavedPercent + '%');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Subscribe to a channel
|
|
101
|
+
channel = pusher.subscribe('chat-room');
|
|
102
|
+
|
|
103
|
+
channel.bind('message', (data) => {
|
|
104
|
+
messages.value.push(data);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Subscribe with tag filter
|
|
108
|
+
const filteredChannel = pusher.subscribe(
|
|
109
|
+
'sports-events',
|
|
110
|
+
Filter.or(
|
|
111
|
+
Filter.eq('event_type', 'goal'),
|
|
112
|
+
Filter.eq('event_type', 'red_card')
|
|
113
|
+
)
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
filteredChannel.bind('event', (data) => {
|
|
117
|
+
console.log('Important event:', data);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
onUnmounted(() => {
|
|
122
|
+
if (channel) {
|
|
123
|
+
channel.unbind_all();
|
|
124
|
+
pusher.unsubscribe(channel.name);
|
|
125
|
+
}
|
|
126
|
+
if (pusher) {
|
|
127
|
+
pusher.disconnect();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
</script>
|
|
131
|
+
|
|
132
|
+
<template>
|
|
133
|
+
<div>
|
|
134
|
+
<h1>Chat Messages</h1>
|
|
135
|
+
<div v-for="msg in messages" :key="msg.id">
|
|
136
|
+
{{ msg.text }}
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
</template>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### Options API
|
|
143
|
+
|
|
144
|
+
```vue
|
|
145
|
+
<script>
|
|
146
|
+
import Pusher from 'pusher-js';
|
|
147
|
+
import { Filter } from 'pusher-js/filter';
|
|
148
|
+
|
|
149
|
+
export default {
|
|
150
|
+
data() {
|
|
151
|
+
return {
|
|
152
|
+
pusher: null,
|
|
153
|
+
channel: null,
|
|
154
|
+
messages: []
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
mounted() {
|
|
159
|
+
this.pusher = new Pusher('your-app-key', {
|
|
160
|
+
cluster: 'mt1',
|
|
161
|
+
wsHost: 'localhost',
|
|
162
|
+
wsPort: 6001,
|
|
163
|
+
forceTLS: false,
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
this.channel = this.pusher.subscribe('my-channel');
|
|
167
|
+
this.channel.bind('message', this.handleMessage);
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
methods: {
|
|
171
|
+
handleMessage(data) {
|
|
172
|
+
this.messages.push(data);
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
beforeUnmount() {
|
|
177
|
+
if (this.channel) {
|
|
178
|
+
this.channel.unbind_all();
|
|
179
|
+
this.pusher.unsubscribe(this.channel.name);
|
|
180
|
+
}
|
|
181
|
+
if (this.pusher) {
|
|
182
|
+
this.pusher.disconnect();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
</script>
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### React
|
|
190
|
+
|
|
191
|
+
```jsx
|
|
192
|
+
import { useEffect, useState } from 'react';
|
|
193
|
+
import Pusher from 'pusher-js';
|
|
194
|
+
import { Filter } from 'pusher-js/filter';
|
|
195
|
+
|
|
196
|
+
function ChatComponent() {
|
|
197
|
+
const [messages, setMessages] = useState([]);
|
|
198
|
+
const [pusher, setPusher] = useState(null);
|
|
199
|
+
|
|
200
|
+
useEffect(() => {
|
|
201
|
+
// Initialize Pusher
|
|
202
|
+
const pusherInstance = new Pusher('your-app-key', {
|
|
203
|
+
cluster: 'mt1',
|
|
204
|
+
wsHost: 'localhost',
|
|
205
|
+
wsPort: 6001,
|
|
206
|
+
forceTLS: false,
|
|
207
|
+
|
|
208
|
+
// Enable delta compression
|
|
209
|
+
deltaCompression: {
|
|
210
|
+
enabled: true,
|
|
211
|
+
algorithms: ['fossil', 'xdelta3']
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
setPusher(pusherInstance);
|
|
216
|
+
|
|
217
|
+
// Subscribe to channel
|
|
218
|
+
const channel = pusherInstance.subscribe('chat-room');
|
|
219
|
+
|
|
220
|
+
channel.bind('message', (data) => {
|
|
221
|
+
setMessages(prev => [...prev, data]);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// Subscribe with filter
|
|
225
|
+
const filteredChannel = pusherInstance.subscribe(
|
|
226
|
+
'notifications',
|
|
227
|
+
Filter.eq('priority', 'high')
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
filteredChannel.bind('notification', (data) => {
|
|
231
|
+
console.log('High priority notification:', data);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// Cleanup
|
|
235
|
+
return () => {
|
|
236
|
+
channel.unbind_all();
|
|
237
|
+
filteredChannel.unbind_all();
|
|
238
|
+
pusherInstance.unsubscribe('chat-room');
|
|
239
|
+
pusherInstance.unsubscribe('notifications');
|
|
240
|
+
pusherInstance.disconnect();
|
|
241
|
+
};
|
|
242
|
+
}, []);
|
|
243
|
+
|
|
244
|
+
return (
|
|
245
|
+
<div>
|
|
246
|
+
<h1>Chat Messages</h1>
|
|
247
|
+
{messages.map((msg, idx) => (
|
|
248
|
+
<div key={idx}>{msg.text}</div>
|
|
249
|
+
))}
|
|
250
|
+
</div>
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export default ChatComponent;
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Angular
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
import { Component, OnInit, OnDestroy } from '@angular/core';
|
|
261
|
+
import Pusher from 'pusher-js';
|
|
262
|
+
import { Filter } from 'pusher-js/filter';
|
|
263
|
+
|
|
264
|
+
@Component({
|
|
265
|
+
selector: 'app-chat',
|
|
266
|
+
templateUrl: './chat.component.html'
|
|
267
|
+
})
|
|
268
|
+
export class ChatComponent implements OnInit, OnDestroy {
|
|
269
|
+
messages: any[] = [];
|
|
270
|
+
private pusher: any;
|
|
271
|
+
private channel: any;
|
|
272
|
+
|
|
273
|
+
ngOnInit() {
|
|
274
|
+
this.pusher = new Pusher('your-app-key', {
|
|
275
|
+
cluster: 'mt1',
|
|
276
|
+
wsHost: 'localhost',
|
|
277
|
+
wsPort: 6001,
|
|
278
|
+
forceTLS: false,
|
|
279
|
+
|
|
280
|
+
deltaCompression: {
|
|
281
|
+
enabled: true,
|
|
282
|
+
algorithms: ['fossil', 'xdelta3']
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
this.channel = this.pusher.subscribe('chat-room');
|
|
287
|
+
|
|
288
|
+
this.channel.bind('message', (data: any) => {
|
|
289
|
+
this.messages.push(data);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// Subscribe with filter
|
|
293
|
+
const filteredChannel = this.pusher.subscribe(
|
|
294
|
+
'events',
|
|
295
|
+
Filter.in('type', ['goal', 'assist'])
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
filteredChannel.bind('event', (data: any) => {
|
|
299
|
+
console.log('Sports event:', data);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
ngOnDestroy() {
|
|
304
|
+
if (this.channel) {
|
|
305
|
+
this.channel.unbind_all();
|
|
306
|
+
this.pusher.unsubscribe(this.channel.name);
|
|
307
|
+
}
|
|
308
|
+
if (this.pusher) {
|
|
309
|
+
this.pusher.disconnect();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Vanilla JavaScript
|
|
316
|
+
|
|
317
|
+
```html
|
|
318
|
+
<!DOCTYPE html>
|
|
319
|
+
<html>
|
|
320
|
+
<head>
|
|
321
|
+
<title>Pusher Example</title>
|
|
322
|
+
</head>
|
|
323
|
+
<body>
|
|
324
|
+
<div id="messages"></div>
|
|
325
|
+
|
|
326
|
+
<script type="module">
|
|
327
|
+
import Pusher from './node_modules/pusher-js/dist/web/pusher.mjs';
|
|
328
|
+
import { Filter } from './node_modules/pusher-js/dist/web/filter.mjs';
|
|
329
|
+
|
|
330
|
+
const pusher = new Pusher('your-app-key', {
|
|
331
|
+
cluster: 'mt1',
|
|
332
|
+
wsHost: 'localhost',
|
|
333
|
+
wsPort: 6001,
|
|
334
|
+
forceTLS: false,
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
const channel = pusher.subscribe('my-channel');
|
|
338
|
+
|
|
339
|
+
channel.bind('message', (data) => {
|
|
340
|
+
const div = document.createElement('div');
|
|
341
|
+
div.textContent = data.text;
|
|
342
|
+
document.getElementById('messages').appendChild(div);
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
// With filter
|
|
346
|
+
const filteredChannel = pusher.subscribe(
|
|
347
|
+
'notifications',
|
|
348
|
+
Filter.eq('urgent', 'true')
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
filteredChannel.bind('alert', (data) => {
|
|
352
|
+
alert('Urgent: ' + data.message);
|
|
353
|
+
});
|
|
354
|
+
</script>
|
|
355
|
+
</body>
|
|
356
|
+
</html>
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## TypeScript Support
|
|
362
|
+
|
|
363
|
+
Full TypeScript definitions are included:
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
import Pusher from 'pusher-js';
|
|
367
|
+
import { Filter, FilterNode, FilterExamples } from 'pusher-js/filter';
|
|
368
|
+
import type { Channel, PresenceChannel } from 'pusher-js';
|
|
369
|
+
|
|
370
|
+
// Type-safe Pusher initialization
|
|
371
|
+
const pusher = new Pusher('your-app-key', {
|
|
372
|
+
cluster: 'mt1',
|
|
373
|
+
wsHost: 'localhost',
|
|
374
|
+
wsPort: 6001,
|
|
375
|
+
forceTLS: false,
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
// Type-safe channel
|
|
379
|
+
const channel: Channel = pusher.subscribe('my-channel');
|
|
380
|
+
|
|
381
|
+
// Type-safe filter
|
|
382
|
+
const filter: FilterNode = Filter.and(
|
|
383
|
+
Filter.eq('type', 'order'),
|
|
384
|
+
Filter.gte('amount', '100')
|
|
385
|
+
);
|
|
386
|
+
|
|
387
|
+
const filteredChannel = pusher.subscribe('orders', filter);
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Delta Compression
|
|
393
|
+
|
|
394
|
+
Enable delta compression to save up to 60-90% bandwidth on similar consecutive messages:
|
|
395
|
+
|
|
396
|
+
```javascript
|
|
397
|
+
import Pusher from 'pusher-js';
|
|
398
|
+
|
|
399
|
+
const pusher = new Pusher('your-app-key', {
|
|
400
|
+
cluster: 'mt1',
|
|
401
|
+
wsHost: 'localhost',
|
|
402
|
+
wsPort: 6001,
|
|
403
|
+
|
|
404
|
+
// Delta compression configuration
|
|
405
|
+
deltaCompression: {
|
|
406
|
+
enabled: true,
|
|
407
|
+
algorithms: ['fossil', 'xdelta3'], // Supported algorithms
|
|
408
|
+
debug: true, // Enable debug logging
|
|
409
|
+
onStats: (stats) => {
|
|
410
|
+
console.log('Delta Compression Stats:', {
|
|
411
|
+
totalMessages: stats.totalMessages,
|
|
412
|
+
deltaMessages: stats.deltaMessages,
|
|
413
|
+
fullMessages: stats.fullMessages,
|
|
414
|
+
bandwidthSaved: stats.bandwidthSavedPercent.toFixed(1) + '%'
|
|
415
|
+
});
|
|
416
|
+
},
|
|
417
|
+
onError: (error) => {
|
|
418
|
+
console.error('Delta compression error:', error);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
// Get delta statistics
|
|
424
|
+
const stats = pusher.getDeltaStats();
|
|
425
|
+
console.log('Bandwidth saved:', stats.bandwidthSavedPercent);
|
|
426
|
+
|
|
427
|
+
// Reset statistics
|
|
428
|
+
pusher.resetDeltaStats();
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Delta Compression Notes
|
|
432
|
+
|
|
433
|
+
- **Automatic**: Once enabled, delta compression works transparently
|
|
434
|
+
- **Server-side**: Must be enabled on the server (Sockudo) as well
|
|
435
|
+
- **Algorithms**: Supports `fossil` (fast) and `xdelta3` (better compression)
|
|
436
|
+
- **Fallback**: Automatically falls back to full messages if decoding fails
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## Tag Filtering
|
|
441
|
+
|
|
442
|
+
Subscribe to channels with server-side filtering to reduce bandwidth:
|
|
443
|
+
|
|
444
|
+
```javascript
|
|
445
|
+
import Pusher from 'pusher-js';
|
|
446
|
+
import { Filter, FilterExamples } from 'pusher-js/filter';
|
|
447
|
+
|
|
448
|
+
const pusher = new Pusher('your-app-key', {
|
|
449
|
+
cluster: 'mt1',
|
|
450
|
+
wsHost: 'localhost',
|
|
451
|
+
wsPort: 6001,
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
// Simple equality filter
|
|
455
|
+
const goalsChannel = pusher.subscribe(
|
|
456
|
+
'match:123',
|
|
457
|
+
Filter.eq('event_type', 'goal')
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
// Complex filter with AND/OR
|
|
461
|
+
const importantEvents = pusher.subscribe(
|
|
462
|
+
'match:123',
|
|
463
|
+
Filter.or(
|
|
464
|
+
Filter.eq('event_type', 'goal'),
|
|
465
|
+
Filter.and(
|
|
466
|
+
Filter.eq('event_type', 'shot'),
|
|
467
|
+
Filter.gte('xG', '0.8') // High expected goals
|
|
468
|
+
)
|
|
469
|
+
)
|
|
470
|
+
);
|
|
471
|
+
|
|
472
|
+
// Range filter
|
|
473
|
+
const highValueOrders = pusher.subscribe(
|
|
474
|
+
'orders',
|
|
475
|
+
Filter.and(
|
|
476
|
+
Filter.gte('amount', '100'),
|
|
477
|
+
Filter.lte('amount', '1000')
|
|
478
|
+
)
|
|
479
|
+
);
|
|
480
|
+
|
|
481
|
+
// IN filter (multiple values)
|
|
482
|
+
const selectedTypes = pusher.subscribe(
|
|
483
|
+
'events',
|
|
484
|
+
Filter.in('type', ['goal', 'assist', 'penalty'])
|
|
485
|
+
);
|
|
486
|
+
|
|
487
|
+
// String filters
|
|
488
|
+
const userEvents = pusher.subscribe(
|
|
489
|
+
'activity',
|
|
490
|
+
Filter.startsWith('user_id', 'premium_')
|
|
491
|
+
);
|
|
492
|
+
|
|
493
|
+
// Existence filter
|
|
494
|
+
const hasLocation = pusher.subscribe(
|
|
495
|
+
'updates',
|
|
496
|
+
Filter.exists('location')
|
|
497
|
+
);
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Available Filter Operators
|
|
501
|
+
|
|
502
|
+
```javascript
|
|
503
|
+
// Comparison
|
|
504
|
+
Filter.eq(key, value) // Equal
|
|
505
|
+
Filter.neq(key, value) // Not equal
|
|
506
|
+
Filter.gt(key, value) // Greater than
|
|
507
|
+
Filter.gte(key, value) // Greater than or equal
|
|
508
|
+
Filter.lt(key, value) // Less than
|
|
509
|
+
Filter.lte(key, value) // Less than or equal
|
|
510
|
+
|
|
511
|
+
// Set operations
|
|
512
|
+
Filter.in(key, values) // In array
|
|
513
|
+
Filter.nin(key, values) // Not in array
|
|
514
|
+
|
|
515
|
+
// String operations
|
|
516
|
+
Filter.startsWith(key, value) // Starts with
|
|
517
|
+
Filter.endsWith(key, value) // Ends with
|
|
518
|
+
Filter.contains(key, value) // Contains substring
|
|
519
|
+
|
|
520
|
+
// Existence
|
|
521
|
+
Filter.exists(key) // Key exists
|
|
522
|
+
Filter.notExists(key) // Key does not exist
|
|
523
|
+
|
|
524
|
+
// Logical operators
|
|
525
|
+
Filter.and(...filters) // All filters must match
|
|
526
|
+
Filter.or(...filters) // Any filter must match
|
|
527
|
+
Filter.not(filter) // Negate filter
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### Filter Examples
|
|
531
|
+
|
|
532
|
+
```javascript
|
|
533
|
+
import { FilterExamples } from 'pusher-js/filter';
|
|
534
|
+
|
|
535
|
+
// Pre-built filter examples
|
|
536
|
+
const goalEvents = FilterExamples.eventType('goal');
|
|
537
|
+
const multipleTypes = FilterExamples.eventTypes(['goal', 'shot', 'save']);
|
|
538
|
+
const rangeFilter = FilterExamples.range('price', '10', '100');
|
|
539
|
+
const importantEvents = FilterExamples.importantEvents('0.7'); // xG threshold
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
### Server-Side Requirements
|
|
543
|
+
|
|
544
|
+
For tag filtering to work:
|
|
545
|
+
|
|
546
|
+
1. **Server must support it**: Ensure Sockudo has tag filtering enabled
|
|
547
|
+
2. **Tags in publications**: Server must include tags when publishing events:
|
|
548
|
+
|
|
549
|
+
```javascript
|
|
550
|
+
// Server-side (Node.js example)
|
|
551
|
+
pusher.trigger('match:123', 'event', {
|
|
552
|
+
player: 'Messi',
|
|
553
|
+
minute: 34
|
|
554
|
+
}, {
|
|
555
|
+
tags: {
|
|
556
|
+
event_type: 'goal',
|
|
557
|
+
priority: 'high'
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
---
|
|
563
|
+
|
|
564
|
+
## Migration from Previous Versions
|
|
565
|
+
|
|
566
|
+
If you were using the old import style:
|
|
567
|
+
|
|
568
|
+
### ❌ Old Way (No Longer Works)
|
|
569
|
+
```javascript
|
|
570
|
+
import Pusher, { Filter } from 'pusher-js';
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
### ✅ New Way (Clean Separation)
|
|
574
|
+
```javascript
|
|
575
|
+
import Pusher from 'pusher-js';
|
|
576
|
+
import { Filter } from 'pusher-js/filter';
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
### Why the Change?
|
|
580
|
+
|
|
581
|
+
This change provides:
|
|
582
|
+
- **Better bundling**: Works consistently across all bundlers (Webpack, Vite, Bun, Rollup)
|
|
583
|
+
- **Smaller bundles**: Only import Filter if you need it
|
|
584
|
+
- **Clearer API**: Separate concerns (connection vs. filtering)
|
|
585
|
+
- **TypeScript friendly**: Better type inference and IDE support
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## Troubleshooting
|
|
590
|
+
|
|
591
|
+
### Module Not Found: 'pusher-js/filter'
|
|
592
|
+
|
|
593
|
+
Make sure your bundler supports package.json `exports` field. Most modern bundlers do:
|
|
594
|
+
- ✅ Webpack 5+
|
|
595
|
+
- ✅ Vite
|
|
596
|
+
- ✅ Bun
|
|
597
|
+
- ✅ Rollup with `@rollup/plugin-node-resolve`
|
|
598
|
+
- ⚠️ Webpack 4: May need configuration updates
|
|
599
|
+
|
|
600
|
+
### Delta Compression Not Working
|
|
601
|
+
|
|
602
|
+
1. Check server has delta compression enabled
|
|
603
|
+
2. Ensure delta libraries are loaded (fossil-delta, vcdiff-decoder)
|
|
604
|
+
3. Check browser console for errors
|
|
605
|
+
4. Try enabling debug mode: `deltaCompression: { debug: true }`
|
|
606
|
+
|
|
607
|
+
### Tag Filtering Not Working
|
|
608
|
+
|
|
609
|
+
1. Verify server has tag filtering enabled
|
|
610
|
+
2. Check that server includes tags when publishing events
|
|
611
|
+
3. Use `validateFilter` to check filter syntax:
|
|
612
|
+
|
|
613
|
+
```javascript
|
|
614
|
+
import { validateFilter } from 'pusher-js/filter';
|
|
615
|
+
|
|
616
|
+
const filter = Filter.eq('type', 'goal');
|
|
617
|
+
const error = validateFilter(filter);
|
|
618
|
+
if (error) {
|
|
619
|
+
console.error('Invalid filter:', error);
|
|
620
|
+
}
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
---
|
|
624
|
+
|
|
625
|
+
## Additional Resources
|
|
626
|
+
|
|
627
|
+
- [Delta Compression Documentation](./DELTA_COMPRESSION.md)
|
|
628
|
+
- [Tag Filtering Documentation](./TAG_FILTERING_CLIENT.md)
|
|
629
|
+
- [Main README](./README.md)
|
|
630
|
+
- [Sockudo Server Documentation](../../README.md)
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
634
|
+
## Support
|
|
635
|
+
|
|
636
|
+
For issues, questions, or contributions:
|
|
637
|
+
- GitHub Issues: [Sockudo Issues](https://github.com/Cendars/sockudo-cendars/issues)
|
|
638
|
+
- Pusher-JS Issues: [Pusher-JS Issues](https://github.com/Cendars/sockudo-js/issues)
|