@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,104 @@
|
|
|
1
|
+
import Util from '../util';
|
|
2
|
+
import * as Collections from '../utils/collections';
|
|
3
|
+
import TransportManager from './transport_manager';
|
|
4
|
+
import TransportConnection from './transport_connection';
|
|
5
|
+
import Transport from './transport';
|
|
6
|
+
import PingDelayOptions from './ping_delay_options';
|
|
7
|
+
|
|
8
|
+
/** Creates transport connections monitored by a transport manager.
|
|
9
|
+
*
|
|
10
|
+
* When a transport is closed, it might mean the environment does not support
|
|
11
|
+
* it. It's possible that messages get stuck in an intermediate buffer or
|
|
12
|
+
* proxies terminate inactive connections. To combat these problems,
|
|
13
|
+
* assistants monitor the connection lifetime, report unclean exits and
|
|
14
|
+
* adjust ping timeouts to keep the connection active. The decision to disable
|
|
15
|
+
* a transport is the manager's responsibility.
|
|
16
|
+
*
|
|
17
|
+
* @param {TransportManager} manager
|
|
18
|
+
* @param {TransportConnection} transport
|
|
19
|
+
* @param {Object} options
|
|
20
|
+
*/
|
|
21
|
+
export default class AssistantToTheTransportManager {
|
|
22
|
+
manager: TransportManager;
|
|
23
|
+
transport: Transport;
|
|
24
|
+
minPingDelay: number;
|
|
25
|
+
maxPingDelay: number;
|
|
26
|
+
pingDelay: number;
|
|
27
|
+
|
|
28
|
+
constructor(
|
|
29
|
+
manager: TransportManager,
|
|
30
|
+
transport: Transport,
|
|
31
|
+
options: PingDelayOptions,
|
|
32
|
+
) {
|
|
33
|
+
this.manager = manager;
|
|
34
|
+
this.transport = transport;
|
|
35
|
+
this.minPingDelay = options.minPingDelay;
|
|
36
|
+
this.maxPingDelay = options.maxPingDelay;
|
|
37
|
+
this.pingDelay = undefined;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Creates a transport connection.
|
|
41
|
+
*
|
|
42
|
+
* This function has the same API as Transport#createConnection.
|
|
43
|
+
*
|
|
44
|
+
* @param {String} name
|
|
45
|
+
* @param {Number} priority
|
|
46
|
+
* @param {String} key the application key
|
|
47
|
+
* @param {Object} options
|
|
48
|
+
* @returns {TransportConnection}
|
|
49
|
+
*/
|
|
50
|
+
createConnection(
|
|
51
|
+
name: string,
|
|
52
|
+
priority: number,
|
|
53
|
+
key: string,
|
|
54
|
+
options: Object,
|
|
55
|
+
): TransportConnection {
|
|
56
|
+
options = Collections.extend({}, options, {
|
|
57
|
+
activityTimeout: this.pingDelay,
|
|
58
|
+
});
|
|
59
|
+
var connection = this.transport.createConnection(
|
|
60
|
+
name,
|
|
61
|
+
priority,
|
|
62
|
+
key,
|
|
63
|
+
options,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
var openTimestamp = null;
|
|
67
|
+
|
|
68
|
+
var onOpen = function () {
|
|
69
|
+
connection.unbind('open', onOpen);
|
|
70
|
+
connection.bind('closed', onClosed);
|
|
71
|
+
openTimestamp = Util.now();
|
|
72
|
+
};
|
|
73
|
+
var onClosed = (closeEvent) => {
|
|
74
|
+
connection.unbind('closed', onClosed);
|
|
75
|
+
|
|
76
|
+
if (closeEvent.code === 1002 || closeEvent.code === 1003) {
|
|
77
|
+
// we don't want to use transports not obeying the protocol
|
|
78
|
+
this.manager.reportDeath();
|
|
79
|
+
} else if (!closeEvent.wasClean && openTimestamp) {
|
|
80
|
+
// report deaths only for short-living transport
|
|
81
|
+
var lifespan = Util.now() - openTimestamp;
|
|
82
|
+
if (lifespan < 2 * this.maxPingDelay) {
|
|
83
|
+
this.manager.reportDeath();
|
|
84
|
+
this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
connection.bind('open', onOpen);
|
|
90
|
+
return connection;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Returns whether the transport is supported in the environment.
|
|
94
|
+
*
|
|
95
|
+
* This function has the same API as Transport#isSupported. Might return false
|
|
96
|
+
* when the manager decides to kill the transport.
|
|
97
|
+
*
|
|
98
|
+
* @param {Object} environment the environment details (encryption, settings)
|
|
99
|
+
* @returns {Boolean} true when the transport is supported
|
|
100
|
+
*/
|
|
101
|
+
isSupported(environment: string): boolean {
|
|
102
|
+
return this.manager.isAlive() && this.transport.isSupported(environment);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import Factory from '../utils/factory';
|
|
2
|
+
import TransportHooks from './transport_hooks';
|
|
3
|
+
import TransportConnection from './transport_connection';
|
|
4
|
+
import TransportConnectionOptions from './transport_connection_options';
|
|
5
|
+
|
|
6
|
+
/** Provides interface for transport connection instantiation.
|
|
7
|
+
*
|
|
8
|
+
* Takes transport-specific hooks as the only argument, which allow checking
|
|
9
|
+
* for transport support and creating its connections.
|
|
10
|
+
*
|
|
11
|
+
* Supported hooks: * - file - the name of the file to be fetched during initialization
|
|
12
|
+
* - urls - URL scheme to be used by transport
|
|
13
|
+
* - handlesActivityCheck - true when the transport handles activity checks
|
|
14
|
+
* - supportsPing - true when the transport has a ping/activity API
|
|
15
|
+
* - isSupported - tells whether the transport is supported in the environment
|
|
16
|
+
* - getSocket - creates a WebSocket-compatible transport socket
|
|
17
|
+
*
|
|
18
|
+
* See transports.js for specific implementations.
|
|
19
|
+
*
|
|
20
|
+
* @param {Object} hooks object containing all needed transport hooks
|
|
21
|
+
*/
|
|
22
|
+
export default class Transport {
|
|
23
|
+
hooks: TransportHooks;
|
|
24
|
+
|
|
25
|
+
constructor(hooks: TransportHooks) {
|
|
26
|
+
this.hooks = hooks;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Returns whether the transport is supported in the environment.
|
|
30
|
+
*
|
|
31
|
+
* @param {Object} envronment te environment details (encryption, settings)
|
|
32
|
+
* @returns {Boolean} true when the transport is supported
|
|
33
|
+
*/
|
|
34
|
+
isSupported(environment: any): boolean {
|
|
35
|
+
return this.hooks.isSupported(environment);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Creates a transport connection.
|
|
39
|
+
*
|
|
40
|
+
* @param {String} name
|
|
41
|
+
* @param {Number} priority
|
|
42
|
+
* @param {String} key the application key
|
|
43
|
+
* @param {Object} options
|
|
44
|
+
* @returns {TransportConnection}
|
|
45
|
+
*/
|
|
46
|
+
createConnection(
|
|
47
|
+
name: string,
|
|
48
|
+
priority: number,
|
|
49
|
+
key: string,
|
|
50
|
+
options: any,
|
|
51
|
+
): TransportConnection {
|
|
52
|
+
return new TransportConnection(this.hooks, name, priority, key, options);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import Util from '../util';
|
|
2
|
+
import * as Collections from '../utils/collections';
|
|
3
|
+
import { default as EventsDispatcher } from '../events/dispatcher';
|
|
4
|
+
import Logger from '../logger';
|
|
5
|
+
import TransportHooks from './transport_hooks';
|
|
6
|
+
import Socket from '../socket';
|
|
7
|
+
import Runtime from 'runtime';
|
|
8
|
+
import Timeline from '../timeline/timeline';
|
|
9
|
+
import TransportConnectionOptions from './transport_connection_options';
|
|
10
|
+
|
|
11
|
+
/** Provides universal API for transport connections.
|
|
12
|
+
*
|
|
13
|
+
* Transport connection is a low-level object that wraps a connection method
|
|
14
|
+
* and exposes a simple evented interface for the connection state and
|
|
15
|
+
* messaging. It does not implement Pusher-specific WebSocket protocol.
|
|
16
|
+
*
|
|
17
|
+
* Additionally, it fetches resources needed for transport to work and exposes
|
|
18
|
+
* an interface for querying transport features.
|
|
19
|
+
*
|
|
20
|
+
* States:
|
|
21
|
+
* - new - initial state after constructing the object
|
|
22
|
+
* - initializing - during initialization phase, usually fetching resources
|
|
23
|
+
* - intialized - ready to establish a connection
|
|
24
|
+
* - connection - when connection is being established
|
|
25
|
+
* - open - when connection ready to be used
|
|
26
|
+
* - closed - after connection was closed be either side
|
|
27
|
+
*
|
|
28
|
+
* Emits:
|
|
29
|
+
* - error - after the connection raised an error
|
|
30
|
+
*
|
|
31
|
+
* Options:
|
|
32
|
+
* - useTLS - whether connection should be over TLS
|
|
33
|
+
* - hostTLS - host to connect to when connection is over TLS
|
|
34
|
+
* - hostNonTLS - host to connect to when connection is over TLS
|
|
35
|
+
*
|
|
36
|
+
* @param {String} key application key
|
|
37
|
+
* @param {Object} options
|
|
38
|
+
*/
|
|
39
|
+
export default class TransportConnection extends EventsDispatcher {
|
|
40
|
+
hooks: TransportHooks;
|
|
41
|
+
name: string;
|
|
42
|
+
priority: number;
|
|
43
|
+
key: string;
|
|
44
|
+
options: TransportConnectionOptions;
|
|
45
|
+
state: string;
|
|
46
|
+
timeline: Timeline;
|
|
47
|
+
activityTimeout: number;
|
|
48
|
+
id: number;
|
|
49
|
+
socket: Socket;
|
|
50
|
+
beforeOpen: Function;
|
|
51
|
+
initialize: Function;
|
|
52
|
+
|
|
53
|
+
constructor(
|
|
54
|
+
hooks: TransportHooks,
|
|
55
|
+
name: string,
|
|
56
|
+
priority: number,
|
|
57
|
+
key: string,
|
|
58
|
+
options: TransportConnectionOptions,
|
|
59
|
+
) {
|
|
60
|
+
super();
|
|
61
|
+
this.initialize = Runtime.transportConnectionInitializer;
|
|
62
|
+
this.hooks = hooks;
|
|
63
|
+
this.name = name;
|
|
64
|
+
this.priority = priority;
|
|
65
|
+
this.key = key;
|
|
66
|
+
this.options = options;
|
|
67
|
+
|
|
68
|
+
this.state = 'new';
|
|
69
|
+
this.timeline = options.timeline;
|
|
70
|
+
this.activityTimeout = options.activityTimeout;
|
|
71
|
+
this.id = this.timeline.generateUniqueID();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Checks whether the transport handles activity checks by itself.
|
|
75
|
+
*
|
|
76
|
+
* @return {Boolean}
|
|
77
|
+
*/
|
|
78
|
+
handlesActivityChecks(): boolean {
|
|
79
|
+
return Boolean(this.hooks.handlesActivityChecks);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Checks whether the transport supports the ping/pong API.
|
|
83
|
+
*
|
|
84
|
+
* @return {Boolean}
|
|
85
|
+
*/
|
|
86
|
+
supportsPing(): boolean {
|
|
87
|
+
return Boolean(this.hooks.supportsPing);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Tries to establish a connection.
|
|
91
|
+
*
|
|
92
|
+
* @returns {Boolean} false if transport is in invalid state
|
|
93
|
+
*/
|
|
94
|
+
connect(): boolean {
|
|
95
|
+
if (this.socket || this.state !== 'initialized') {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
var url = this.hooks.urls.getInitial(this.key, this.options);
|
|
100
|
+
try {
|
|
101
|
+
this.socket = this.hooks.getSocket(url, this.options);
|
|
102
|
+
} catch (e) {
|
|
103
|
+
Util.defer(() => {
|
|
104
|
+
this.onError(e);
|
|
105
|
+
this.changeState('closed');
|
|
106
|
+
});
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
this.bindListeners();
|
|
111
|
+
|
|
112
|
+
Logger.debug('Connecting', { transport: this.name, url });
|
|
113
|
+
this.changeState('connecting');
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Closes the connection.
|
|
118
|
+
*
|
|
119
|
+
* @return {Boolean} true if there was a connection to close
|
|
120
|
+
*/
|
|
121
|
+
close(): boolean {
|
|
122
|
+
if (this.socket) {
|
|
123
|
+
this.socket.close();
|
|
124
|
+
return true;
|
|
125
|
+
} else {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Sends data over the open connection.
|
|
131
|
+
*
|
|
132
|
+
* @param {String} data
|
|
133
|
+
* @return {Boolean} true only when in the "open" state
|
|
134
|
+
*/
|
|
135
|
+
send(data: any): boolean {
|
|
136
|
+
if (this.state === 'open') {
|
|
137
|
+
// Workaround for MobileSafari bug (see https://gist.github.com/2052006)
|
|
138
|
+
Util.defer(() => {
|
|
139
|
+
if (this.socket) {
|
|
140
|
+
this.socket.send(data);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return true;
|
|
144
|
+
} else {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Sends a ping if the connection is open and transport supports it. */
|
|
150
|
+
ping() {
|
|
151
|
+
if (this.state === 'open' && this.supportsPing()) {
|
|
152
|
+
this.socket.ping();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private onOpen() {
|
|
157
|
+
if (this.hooks.beforeOpen) {
|
|
158
|
+
this.hooks.beforeOpen(
|
|
159
|
+
this.socket,
|
|
160
|
+
this.hooks.urls.getPath(this.key, this.options),
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
this.changeState('open');
|
|
164
|
+
this.socket.onopen = undefined;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private onError(error) {
|
|
168
|
+
this.emit('error', { type: 'WebSocketError', error: error });
|
|
169
|
+
this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
private onClose(closeEvent?: any) {
|
|
173
|
+
if (closeEvent) {
|
|
174
|
+
this.changeState('closed', {
|
|
175
|
+
code: closeEvent.code,
|
|
176
|
+
reason: closeEvent.reason,
|
|
177
|
+
wasClean: closeEvent.wasClean,
|
|
178
|
+
});
|
|
179
|
+
} else {
|
|
180
|
+
this.changeState('closed');
|
|
181
|
+
}
|
|
182
|
+
this.unbindListeners();
|
|
183
|
+
this.socket = undefined;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private onMessage(message) {
|
|
187
|
+
this.emit('message', message);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
private onActivity() {
|
|
191
|
+
this.emit('activity');
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private bindListeners() {
|
|
195
|
+
this.socket.onopen = () => {
|
|
196
|
+
this.onOpen();
|
|
197
|
+
};
|
|
198
|
+
this.socket.onerror = (error) => {
|
|
199
|
+
this.onError(error);
|
|
200
|
+
};
|
|
201
|
+
this.socket.onclose = (closeEvent) => {
|
|
202
|
+
this.onClose(closeEvent);
|
|
203
|
+
};
|
|
204
|
+
this.socket.onmessage = (message) => {
|
|
205
|
+
this.onMessage(message);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
if (this.supportsPing()) {
|
|
209
|
+
this.socket.onactivity = () => {
|
|
210
|
+
this.onActivity();
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
private unbindListeners() {
|
|
216
|
+
if (this.socket) {
|
|
217
|
+
this.socket.onopen = undefined;
|
|
218
|
+
this.socket.onerror = undefined;
|
|
219
|
+
this.socket.onclose = undefined;
|
|
220
|
+
this.socket.onmessage = undefined;
|
|
221
|
+
if (this.supportsPing()) {
|
|
222
|
+
this.socket.onactivity = undefined;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private changeState(state: string, params?: any) {
|
|
228
|
+
this.state = state;
|
|
229
|
+
this.timeline.info(
|
|
230
|
+
this.buildTimelineMessage({
|
|
231
|
+
state: state,
|
|
232
|
+
params: params,
|
|
233
|
+
}),
|
|
234
|
+
);
|
|
235
|
+
this.emit(state, params);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
buildTimelineMessage(message): any {
|
|
239
|
+
return Collections.extend({ cid: this.id }, message);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Factory from '../utils/factory';
|
|
2
|
+
import URLScheme from './url_scheme';
|
|
3
|
+
import Socket from '../socket';
|
|
4
|
+
|
|
5
|
+
interface TransportHooks {
|
|
6
|
+
file?: string;
|
|
7
|
+
urls: URLScheme;
|
|
8
|
+
handlesActivityChecks: boolean;
|
|
9
|
+
supportsPing: boolean;
|
|
10
|
+
isInitialized(): boolean;
|
|
11
|
+
isSupported(environment?: any): boolean;
|
|
12
|
+
getSocket(url: string, options?: any): Socket;
|
|
13
|
+
beforeOpen?: Function;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default TransportHooks;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import AssistantToTheTransportManager from './assistant_to_the_transport_manager';
|
|
2
|
+
import Transport from './transport';
|
|
3
|
+
import PingDelayOptions from './ping_delay_options';
|
|
4
|
+
import Factory from '../utils/factory';
|
|
5
|
+
|
|
6
|
+
export interface TransportManagerOptions extends PingDelayOptions {
|
|
7
|
+
lives?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Keeps track of the number of lives left for a transport.
|
|
11
|
+
*
|
|
12
|
+
* In the beginning of a session, transports may be assigned a number of
|
|
13
|
+
* lives. When an AssistantToTheTransportManager instance reports a transport
|
|
14
|
+
* connection closed uncleanly, the transport loses a life. When the number
|
|
15
|
+
* of lives drops to zero, the transport gets disabled by its manager.
|
|
16
|
+
*
|
|
17
|
+
* @param {Object} options
|
|
18
|
+
*/
|
|
19
|
+
export default class TransportManager {
|
|
20
|
+
options: TransportManagerOptions;
|
|
21
|
+
livesLeft: number;
|
|
22
|
+
|
|
23
|
+
constructor(options: TransportManagerOptions) {
|
|
24
|
+
this.options = options || {};
|
|
25
|
+
this.livesLeft = this.options.lives || Infinity;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Creates a assistant for the transport.
|
|
29
|
+
*
|
|
30
|
+
* @param {Transport} transport
|
|
31
|
+
* @returns {AssistantToTheTransportManager}
|
|
32
|
+
*/
|
|
33
|
+
getAssistant(transport: Transport): AssistantToTheTransportManager {
|
|
34
|
+
return Factory.createAssistantToTheTransportManager(this, transport, {
|
|
35
|
+
minPingDelay: this.options.minPingDelay,
|
|
36
|
+
maxPingDelay: this.options.maxPingDelay,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Returns whether the transport has any lives left.
|
|
41
|
+
*
|
|
42
|
+
* @returns {Boolean}
|
|
43
|
+
*/
|
|
44
|
+
isAlive(): boolean {
|
|
45
|
+
return this.livesLeft > 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Takes one life from the transport. */
|
|
49
|
+
reportDeath() {
|
|
50
|
+
this.livesLeft -= 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Transport from './transport';
|
|
2
|
+
|
|
3
|
+
interface TransportsTable {
|
|
4
|
+
ws: Transport;
|
|
5
|
+
xhr_streaming: Transport;
|
|
6
|
+
xdr_streaming?: Transport;
|
|
7
|
+
xhr_polling: Transport;
|
|
8
|
+
xdr_polling?: Transport;
|
|
9
|
+
sockjs?: Transport;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default TransportsTable;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface URLSchemeParams {
|
|
2
|
+
useTLS: boolean;
|
|
3
|
+
hostTLS: string;
|
|
4
|
+
hostNonTLS: string;
|
|
5
|
+
httpPath: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface URLScheme {
|
|
9
|
+
getInitial(key: string, params: any): string;
|
|
10
|
+
getPath?(key: string, options: any): string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default URLScheme;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import Defaults from '../defaults';
|
|
2
|
+
import { default as URLScheme, URLSchemeParams } from './url_scheme';
|
|
3
|
+
|
|
4
|
+
function getGenericURL(
|
|
5
|
+
baseScheme: string,
|
|
6
|
+
params: URLSchemeParams,
|
|
7
|
+
path: string,
|
|
8
|
+
): string {
|
|
9
|
+
var scheme = baseScheme + (params.useTLS ? 's' : '');
|
|
10
|
+
var host = params.useTLS ? params.hostTLS : params.hostNonTLS;
|
|
11
|
+
return scheme + '://' + host + path;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function getGenericPath(key: string, queryString?: string): string {
|
|
15
|
+
var path = '/app/' + key;
|
|
16
|
+
var query =
|
|
17
|
+
'?protocol=' +
|
|
18
|
+
Defaults.PROTOCOL +
|
|
19
|
+
'&client=js' +
|
|
20
|
+
'&version=' +
|
|
21
|
+
Defaults.VERSION +
|
|
22
|
+
(queryString ? '&' + queryString : '');
|
|
23
|
+
return path + query;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export var ws: URLScheme = {
|
|
27
|
+
getInitial: function (key: string, params: URLSchemeParams): string {
|
|
28
|
+
var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');
|
|
29
|
+
return getGenericURL('ws', params, path);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export var http: URLScheme = {
|
|
34
|
+
getInitial: function (key: string, params: URLSchemeParams): string {
|
|
35
|
+
var path = (params.httpPath || '/pusher') + getGenericPath(key);
|
|
36
|
+
return getGenericURL('http', params, path);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export var sockjs: URLScheme = {
|
|
41
|
+
getInitial: function (key: string, params: URLSchemeParams): string {
|
|
42
|
+
return getGenericURL('http', params, params.httpPath || '/pusher');
|
|
43
|
+
},
|
|
44
|
+
getPath: function (key: string, params: URLSchemeParams): string {
|
|
45
|
+
return getGenericPath(key);
|
|
46
|
+
},
|
|
47
|
+
};
|