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