@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/src/core/user.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import Pusher from './pusher';
|
|
2
|
+
import Logger from './logger';
|
|
3
|
+
import {
|
|
4
|
+
UserAuthenticationData,
|
|
5
|
+
UserAuthenticationCallback,
|
|
6
|
+
} from './auth/options';
|
|
7
|
+
import Channel from './channels/channel';
|
|
8
|
+
import WatchlistFacade from './watchlist';
|
|
9
|
+
import EventsDispatcher from './events/dispatcher';
|
|
10
|
+
import flatPromise from './utils/flat_promise';
|
|
11
|
+
|
|
12
|
+
export default class UserFacade extends EventsDispatcher {
|
|
13
|
+
pusher: Pusher;
|
|
14
|
+
signin_requested: boolean = false;
|
|
15
|
+
user_data: any = null;
|
|
16
|
+
serverToUserChannel: Channel = null;
|
|
17
|
+
signinDonePromise: Promise<any> = null;
|
|
18
|
+
watchlist: WatchlistFacade;
|
|
19
|
+
private _signinDoneResolve: Function = null;
|
|
20
|
+
|
|
21
|
+
public constructor(pusher: Pusher) {
|
|
22
|
+
super(function (eventName, data) {
|
|
23
|
+
Logger.debug('No callbacks on user for ' + eventName);
|
|
24
|
+
});
|
|
25
|
+
this.pusher = pusher;
|
|
26
|
+
this.pusher.connection.bind('state_change', ({ previous, current }) => {
|
|
27
|
+
if (previous !== 'connected' && current === 'connected') {
|
|
28
|
+
this._signin();
|
|
29
|
+
}
|
|
30
|
+
if (previous === 'connected' && current !== 'connected') {
|
|
31
|
+
this._cleanup();
|
|
32
|
+
this._newSigninPromiseIfNeeded();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
this.watchlist = new WatchlistFacade(pusher);
|
|
37
|
+
|
|
38
|
+
this.pusher.connection.bind('message', (event) => {
|
|
39
|
+
var eventName = event.event;
|
|
40
|
+
if (eventName === 'pusher:signin_success') {
|
|
41
|
+
this._onSigninSuccess(event.data);
|
|
42
|
+
}
|
|
43
|
+
if (
|
|
44
|
+
this.serverToUserChannel &&
|
|
45
|
+
this.serverToUserChannel.name === event.channel
|
|
46
|
+
) {
|
|
47
|
+
this.serverToUserChannel.handleEvent(event);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public signin() {
|
|
53
|
+
if (this.signin_requested) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
this.signin_requested = true;
|
|
58
|
+
this._signin();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private _signin() {
|
|
62
|
+
if (!this.signin_requested) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this._newSigninPromiseIfNeeded();
|
|
67
|
+
|
|
68
|
+
if (this.pusher.connection.state !== 'connected') {
|
|
69
|
+
// Signin will be attempted when the connection is connected
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
this.pusher.config.userAuthenticator(
|
|
74
|
+
{
|
|
75
|
+
socketId: this.pusher.connection.socket_id,
|
|
76
|
+
},
|
|
77
|
+
this._onAuthorize,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private _onAuthorize: UserAuthenticationCallback = (
|
|
82
|
+
err,
|
|
83
|
+
authData: UserAuthenticationData,
|
|
84
|
+
) => {
|
|
85
|
+
if (err) {
|
|
86
|
+
Logger.warn(`Error during signin: ${err}`);
|
|
87
|
+
this._cleanup();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
this.pusher.send_event('pusher:signin', {
|
|
92
|
+
auth: authData.auth,
|
|
93
|
+
user_data: authData.user_data,
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Later when we get pusher:singin_success event, the user will be marked as signed in
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
private _onSigninSuccess(data: any) {
|
|
100
|
+
try {
|
|
101
|
+
this.user_data = JSON.parse(data.user_data);
|
|
102
|
+
} catch (e) {
|
|
103
|
+
Logger.error(`Failed parsing user data after signin: ${data.user_data}`);
|
|
104
|
+
this._cleanup();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {
|
|
109
|
+
Logger.error(
|
|
110
|
+
`user_data doesn't contain an id. user_data: ${this.user_data}`,
|
|
111
|
+
);
|
|
112
|
+
this._cleanup();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Signin succeeded
|
|
117
|
+
this._signinDoneResolve();
|
|
118
|
+
this._subscribeChannels();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private _subscribeChannels() {
|
|
122
|
+
const ensure_subscribed = (channel) => {
|
|
123
|
+
if (channel.subscriptionPending && channel.subscriptionCancelled) {
|
|
124
|
+
channel.reinstateSubscription();
|
|
125
|
+
} else if (
|
|
126
|
+
!channel.subscriptionPending &&
|
|
127
|
+
this.pusher.connection.state === 'connected'
|
|
128
|
+
) {
|
|
129
|
+
channel.subscribe();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
this.serverToUserChannel = new Channel(
|
|
134
|
+
`#server-to-user-${this.user_data.id}`,
|
|
135
|
+
this.pusher,
|
|
136
|
+
);
|
|
137
|
+
this.serverToUserChannel.bind_global((eventName, data) => {
|
|
138
|
+
if (
|
|
139
|
+
eventName.indexOf('pusher_internal:') === 0 ||
|
|
140
|
+
eventName.indexOf('pusher:') === 0
|
|
141
|
+
) {
|
|
142
|
+
// ignore internal events
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
this.emit(eventName, data);
|
|
146
|
+
});
|
|
147
|
+
ensure_subscribed(this.serverToUserChannel);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private _cleanup() {
|
|
151
|
+
this.user_data = null;
|
|
152
|
+
if (this.serverToUserChannel) {
|
|
153
|
+
this.serverToUserChannel.unbind_all();
|
|
154
|
+
this.serverToUserChannel.disconnect();
|
|
155
|
+
this.serverToUserChannel = null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (this.signin_requested) {
|
|
159
|
+
// If signin is in progress and cleanup is called,
|
|
160
|
+
// Mark the current signin process as done.
|
|
161
|
+
this._signinDoneResolve();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private _newSigninPromiseIfNeeded() {
|
|
166
|
+
if (!this.signin_requested) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// If there is a promise and it is not resolved, return without creating a new one.
|
|
171
|
+
if (this.signinDonePromise && !(this.signinDonePromise as any).done) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// This promise is never rejected.
|
|
176
|
+
// It gets resolved when the signin process is done whether it failed or succeeded
|
|
177
|
+
const { promise, resolve, reject: _ } = flatPromise();
|
|
178
|
+
(promise as any).done = false;
|
|
179
|
+
const setDone = () => {
|
|
180
|
+
(promise as any).done = true;
|
|
181
|
+
};
|
|
182
|
+
promise.then(setDone).catch(setDone);
|
|
183
|
+
this.signinDonePromise = promise;
|
|
184
|
+
this._signinDoneResolve = resolve;
|
|
185
|
+
}
|
|
186
|
+
}
|
package/src/core/util.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as Collections from './utils/collections';
|
|
2
|
+
import TimedCallback from './utils/timers/timed_callback';
|
|
3
|
+
import { OneOffTimer, PeriodicTimer } from './utils/timers';
|
|
4
|
+
|
|
5
|
+
var Util = {
|
|
6
|
+
now(): number {
|
|
7
|
+
if (Date.now) {
|
|
8
|
+
return Date.now();
|
|
9
|
+
} else {
|
|
10
|
+
return new Date().valueOf();
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
defer(callback: TimedCallback): OneOffTimer {
|
|
15
|
+
return new OneOffTimer(0, callback);
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
/** Builds a function that will proxy a method call to its first argument.
|
|
19
|
+
*
|
|
20
|
+
* Allows partial application of arguments, so additional arguments are
|
|
21
|
+
* prepended to the argument list.
|
|
22
|
+
*
|
|
23
|
+
* @param {String} name method name
|
|
24
|
+
* @return {Function} proxy function
|
|
25
|
+
*/
|
|
26
|
+
method(name: string, ...args: any[]): Function {
|
|
27
|
+
var boundArguments = Array.prototype.slice.call(arguments, 1);
|
|
28
|
+
return function (object) {
|
|
29
|
+
return object[name].apply(object, boundArguments.concat(arguments));
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default Util;
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import base64encode from '../base64';
|
|
2
|
+
import Util from '../util';
|
|
3
|
+
|
|
4
|
+
/** Merges multiple objects into the target argument.
|
|
5
|
+
*
|
|
6
|
+
* For properties that are plain Objects, performs a deep-merge. For the
|
|
7
|
+
* rest it just copies the value of the property.
|
|
8
|
+
*
|
|
9
|
+
* To extend prototypes use it as following:
|
|
10
|
+
* Pusher.Util.extend(Target.prototype, Base.prototype)
|
|
11
|
+
*
|
|
12
|
+
* You can also use it to merge objects without altering them:
|
|
13
|
+
* Pusher.Util.extend({}, object1, object2)
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} target
|
|
16
|
+
* @return {Object} the target argument
|
|
17
|
+
*/
|
|
18
|
+
export function extend<T>(target: any, ...sources: any[]): T {
|
|
19
|
+
for (var i = 0; i < sources.length; i++) {
|
|
20
|
+
var extensions = sources[i];
|
|
21
|
+
for (var property in extensions) {
|
|
22
|
+
if (
|
|
23
|
+
extensions[property] &&
|
|
24
|
+
extensions[property].constructor &&
|
|
25
|
+
extensions[property].constructor === Object
|
|
26
|
+
) {
|
|
27
|
+
target[property] = extend(target[property] || {}, extensions[property]);
|
|
28
|
+
} else {
|
|
29
|
+
target[property] = extensions[property];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return target;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function stringify(): string {
|
|
37
|
+
var m = ['Pusher'];
|
|
38
|
+
for (var i = 0; i < arguments.length; i++) {
|
|
39
|
+
if (typeof arguments[i] === 'string') {
|
|
40
|
+
m.push(arguments[i]);
|
|
41
|
+
} else {
|
|
42
|
+
m.push(safeJSONStringify(arguments[i]));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return m.join(' : ');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function arrayIndexOf(array: any[], item: any): number {
|
|
49
|
+
// MSIE doesn't have array.indexOf
|
|
50
|
+
var nativeIndexOf = Array.prototype.indexOf;
|
|
51
|
+
if (array === null) {
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
if (nativeIndexOf && array.indexOf === nativeIndexOf) {
|
|
55
|
+
return array.indexOf(item);
|
|
56
|
+
}
|
|
57
|
+
for (var i = 0, l = array.length; i < l; i++) {
|
|
58
|
+
if (array[i] === item) {
|
|
59
|
+
return i;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return -1;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Applies a function f to all properties of an object.
|
|
66
|
+
*
|
|
67
|
+
* Function f gets 3 arguments passed:
|
|
68
|
+
* - element from the object
|
|
69
|
+
* - key of the element
|
|
70
|
+
* - reference to the object
|
|
71
|
+
*
|
|
72
|
+
* @param {Object} object
|
|
73
|
+
* @param {Function} f
|
|
74
|
+
*/
|
|
75
|
+
export function objectApply(object: any, f: Function) {
|
|
76
|
+
for (var key in object) {
|
|
77
|
+
if (Object.prototype.hasOwnProperty.call(object, key)) {
|
|
78
|
+
f(object[key], key, object);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Return a list of objects own proerty keys
|
|
84
|
+
*
|
|
85
|
+
* @param {Object} object
|
|
86
|
+
* @returns {Array}
|
|
87
|
+
*/
|
|
88
|
+
export function keys(object: any): string[] {
|
|
89
|
+
var keys = [];
|
|
90
|
+
objectApply(object, function (_, key) {
|
|
91
|
+
keys.push(key);
|
|
92
|
+
});
|
|
93
|
+
return keys;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Return a list of object's own property values
|
|
97
|
+
*
|
|
98
|
+
* @param {Object} object
|
|
99
|
+
* @returns {Array}
|
|
100
|
+
*/
|
|
101
|
+
export function values(object: any): any[] {
|
|
102
|
+
var values = [];
|
|
103
|
+
objectApply(object, function (value) {
|
|
104
|
+
values.push(value);
|
|
105
|
+
});
|
|
106
|
+
return values;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Applies a function f to all elements of an array.
|
|
110
|
+
*
|
|
111
|
+
* Function f gets 3 arguments passed:
|
|
112
|
+
* - element from the array
|
|
113
|
+
* - index of the element
|
|
114
|
+
* - reference to the array
|
|
115
|
+
*
|
|
116
|
+
* @param {Array} array
|
|
117
|
+
* @param {Function} f
|
|
118
|
+
*/
|
|
119
|
+
export function apply(array: any[], f: Function, context?: any) {
|
|
120
|
+
for (var i = 0; i < array.length; i++) {
|
|
121
|
+
f.call(context || global, array[i], i, array);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Maps all elements of the array and returns the result.
|
|
126
|
+
*
|
|
127
|
+
* Function f gets 4 arguments passed:
|
|
128
|
+
* - element from the array
|
|
129
|
+
* - index of the element
|
|
130
|
+
* - reference to the source array
|
|
131
|
+
* - reference to the destination array
|
|
132
|
+
*
|
|
133
|
+
* @param {Array} array
|
|
134
|
+
* @param {Function} f
|
|
135
|
+
*/
|
|
136
|
+
export function map(array: any[], f: Function): any[] {
|
|
137
|
+
var result = [];
|
|
138
|
+
for (var i = 0; i < array.length; i++) {
|
|
139
|
+
result.push(f(array[i], i, array, result));
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Maps all elements of the object and returns the result.
|
|
145
|
+
*
|
|
146
|
+
* Function f gets 4 arguments passed:
|
|
147
|
+
* - element from the object
|
|
148
|
+
* - key of the element
|
|
149
|
+
* - reference to the source object
|
|
150
|
+
* - reference to the destination object
|
|
151
|
+
*
|
|
152
|
+
* @param {Object} object
|
|
153
|
+
* @param {Function} f
|
|
154
|
+
*/
|
|
155
|
+
export function mapObject(object: any, f: Function): any {
|
|
156
|
+
var result = {};
|
|
157
|
+
objectApply(object, function (value, key) {
|
|
158
|
+
result[key] = f(value);
|
|
159
|
+
});
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** Filters elements of the array using a test function.
|
|
164
|
+
*
|
|
165
|
+
* Function test gets 4 arguments passed:
|
|
166
|
+
* - element from the array
|
|
167
|
+
* - index of the element
|
|
168
|
+
* - reference to the source array
|
|
169
|
+
* - reference to the destination array
|
|
170
|
+
*
|
|
171
|
+
* @param {Array} array
|
|
172
|
+
* @param {Function} f
|
|
173
|
+
*/
|
|
174
|
+
export function filter(array: any[], test: Function): any[] {
|
|
175
|
+
test =
|
|
176
|
+
test ||
|
|
177
|
+
function (value) {
|
|
178
|
+
return !!value;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
var result = [];
|
|
182
|
+
for (var i = 0; i < array.length; i++) {
|
|
183
|
+
if (test(array[i], i, array, result)) {
|
|
184
|
+
result.push(array[i]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** Filters properties of the object using a test function.
|
|
191
|
+
*
|
|
192
|
+
* Function test gets 4 arguments passed:
|
|
193
|
+
* - element from the object
|
|
194
|
+
* - key of the element
|
|
195
|
+
* - reference to the source object
|
|
196
|
+
* - reference to the destination object
|
|
197
|
+
*
|
|
198
|
+
* @param {Object} object
|
|
199
|
+
* @param {Function} f
|
|
200
|
+
*/
|
|
201
|
+
export function filterObject(object: Object, test: Function) {
|
|
202
|
+
var result = {};
|
|
203
|
+
objectApply(object, function (value, key) {
|
|
204
|
+
if ((test && test(value, key, object, result)) || Boolean(value)) {
|
|
205
|
+
result[key] = value;
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Flattens an object into a two-dimensional array.
|
|
212
|
+
*
|
|
213
|
+
* @param {Object} object
|
|
214
|
+
* @return {Array} resulting array of [key, value] pairs
|
|
215
|
+
*/
|
|
216
|
+
export function flatten(object: Object): any[] {
|
|
217
|
+
var result = [];
|
|
218
|
+
objectApply(object, function (value, key) {
|
|
219
|
+
result.push([key, value]);
|
|
220
|
+
});
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Checks whether any element of the array passes the test.
|
|
225
|
+
*
|
|
226
|
+
* Function test gets 3 arguments passed:
|
|
227
|
+
* - element from the array
|
|
228
|
+
* - index of the element
|
|
229
|
+
* - reference to the source array
|
|
230
|
+
*
|
|
231
|
+
* @param {Array} array
|
|
232
|
+
* @param {Function} f
|
|
233
|
+
*/
|
|
234
|
+
export function any(array: any[], test: Function): boolean {
|
|
235
|
+
for (var i = 0; i < array.length; i++) {
|
|
236
|
+
if (test(array[i], i, array)) {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/** Checks whether all elements of the array pass the test.
|
|
244
|
+
*
|
|
245
|
+
* Function test gets 3 arguments passed:
|
|
246
|
+
* - element from the array
|
|
247
|
+
* - index of the element
|
|
248
|
+
* - reference to the source array
|
|
249
|
+
*
|
|
250
|
+
* @param {Array} array
|
|
251
|
+
* @param {Function} f
|
|
252
|
+
*/
|
|
253
|
+
export function all(array: any[], test: Function): boolean {
|
|
254
|
+
for (var i = 0; i < array.length; i++) {
|
|
255
|
+
if (!test(array[i], i, array)) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export function encodeParamsObject(data): string {
|
|
263
|
+
return mapObject(data, function (value) {
|
|
264
|
+
if (typeof value === 'object') {
|
|
265
|
+
value = safeJSONStringify(value);
|
|
266
|
+
}
|
|
267
|
+
return encodeURIComponent(base64encode(value.toString()));
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export function buildQueryString(data: any): string {
|
|
272
|
+
var params = filterObject(data, function (value) {
|
|
273
|
+
return value !== undefined;
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
var query = map(
|
|
277
|
+
flatten(encodeParamsObject(params)),
|
|
278
|
+
Util.method('join', '='),
|
|
279
|
+
).join('&');
|
|
280
|
+
|
|
281
|
+
return query;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
|
|
286
|
+
*
|
|
287
|
+
* Remove circular references from an object. Required for JSON.stringify in
|
|
288
|
+
* React Native, which tends to blow up a lot.
|
|
289
|
+
*
|
|
290
|
+
* @param {any} object
|
|
291
|
+
* @return {any} Decycled object
|
|
292
|
+
*/
|
|
293
|
+
export function decycleObject(object: any): any {
|
|
294
|
+
var objects = [],
|
|
295
|
+
paths = [];
|
|
296
|
+
|
|
297
|
+
return (function derez(value, path) {
|
|
298
|
+
var i, name, nu;
|
|
299
|
+
|
|
300
|
+
switch (typeof value) {
|
|
301
|
+
case 'object':
|
|
302
|
+
if (!value) {
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
for (i = 0; i < objects.length; i += 1) {
|
|
306
|
+
if (objects[i] === value) {
|
|
307
|
+
return { $ref: paths[i] };
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
objects.push(value);
|
|
312
|
+
paths.push(path);
|
|
313
|
+
|
|
314
|
+
if (Object.prototype.toString.apply(value) === '[object Array]') {
|
|
315
|
+
nu = [];
|
|
316
|
+
for (i = 0; i < value.length; i += 1) {
|
|
317
|
+
nu[i] = derez(value[i], path + '[' + i + ']');
|
|
318
|
+
}
|
|
319
|
+
} else {
|
|
320
|
+
nu = {};
|
|
321
|
+
for (name in value) {
|
|
322
|
+
if (Object.prototype.hasOwnProperty.call(value, name)) {
|
|
323
|
+
nu[name] = derez(
|
|
324
|
+
value[name],
|
|
325
|
+
path + '[' + JSON.stringify(name) + ']',
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return nu;
|
|
331
|
+
case 'number':
|
|
332
|
+
case 'string':
|
|
333
|
+
case 'boolean':
|
|
334
|
+
return value;
|
|
335
|
+
}
|
|
336
|
+
})(object, '$');
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Provides a cross-browser and cross-platform way to safely stringify objects
|
|
341
|
+
* into JSON. This is particularly necessary for ReactNative, where circular JSON
|
|
342
|
+
* structures throw an exception.
|
|
343
|
+
*
|
|
344
|
+
* @param {any} source The object to stringify
|
|
345
|
+
* @return {string} The serialized output.
|
|
346
|
+
*/
|
|
347
|
+
export function safeJSONStringify(source: any): string {
|
|
348
|
+
try {
|
|
349
|
+
return JSON.stringify(source);
|
|
350
|
+
} catch (e) {
|
|
351
|
+
return JSON.stringify(decycleObject(source));
|
|
352
|
+
}
|
|
353
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';
|
|
2
|
+
import PingDelayOptions from '../transports/ping_delay_options';
|
|
3
|
+
import Transport from '../transports/transport';
|
|
4
|
+
import TransportManager from '../transports/transport_manager';
|
|
5
|
+
import Handshake from '../connection/handshake';
|
|
6
|
+
import TransportConnection from '../transports/transport_connection';
|
|
7
|
+
import SocketHooks from '../http/socket_hooks';
|
|
8
|
+
import HTTPSocket from '../http/http_socket';
|
|
9
|
+
|
|
10
|
+
import Timeline from '../timeline/timeline';
|
|
11
|
+
import {
|
|
12
|
+
default as TimelineSender,
|
|
13
|
+
TimelineSenderOptions,
|
|
14
|
+
} from '../timeline/timeline_sender';
|
|
15
|
+
import PresenceChannel from '../channels/presence_channel';
|
|
16
|
+
import PrivateChannel from '../channels/private_channel';
|
|
17
|
+
import EncryptedChannel from '../channels/encrypted_channel';
|
|
18
|
+
import Channel from '../channels/channel';
|
|
19
|
+
import ConnectionManager from '../connection/connection_manager';
|
|
20
|
+
import ConnectionManagerOptions from '../connection/connection_manager_options';
|
|
21
|
+
import Ajax from '../http/ajax';
|
|
22
|
+
import Channels from '../channels/channels';
|
|
23
|
+
import Pusher from '../pusher';
|
|
24
|
+
import { Config } from '../config';
|
|
25
|
+
import * as nacl from 'tweetnacl';
|
|
26
|
+
|
|
27
|
+
var Factory = {
|
|
28
|
+
createChannels(): Channels {
|
|
29
|
+
return new Channels();
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
createConnectionManager(
|
|
33
|
+
key: string,
|
|
34
|
+
options: ConnectionManagerOptions,
|
|
35
|
+
): ConnectionManager {
|
|
36
|
+
return new ConnectionManager(key, options);
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
createChannel(name: string, pusher: Pusher): Channel {
|
|
40
|
+
return new Channel(name, pusher);
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {
|
|
44
|
+
return new PrivateChannel(name, pusher);
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {
|
|
48
|
+
return new PresenceChannel(name, pusher);
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
createEncryptedChannel(
|
|
52
|
+
name: string,
|
|
53
|
+
pusher: Pusher,
|
|
54
|
+
nacl: nacl,
|
|
55
|
+
): EncryptedChannel {
|
|
56
|
+
return new EncryptedChannel(name, pusher, nacl);
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {
|
|
60
|
+
return new TimelineSender(timeline, options);
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
createHandshake(
|
|
64
|
+
transport: TransportConnection,
|
|
65
|
+
callback: (HandshakePayload) => void,
|
|
66
|
+
): Handshake {
|
|
67
|
+
return new Handshake(transport, callback);
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
createAssistantToTheTransportManager(
|
|
71
|
+
manager: TransportManager,
|
|
72
|
+
transport: Transport,
|
|
73
|
+
options: PingDelayOptions,
|
|
74
|
+
): AssistantToTheTransportManager {
|
|
75
|
+
return new AssistantToTheTransportManager(manager, transport, options);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export default Factory;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import TimedCallback from './timed_callback';
|
|
2
|
+
import { Delay, Scheduler, Canceller } from './scheduling';
|
|
3
|
+
|
|
4
|
+
abstract class Timer {
|
|
5
|
+
protected clear: Canceller;
|
|
6
|
+
protected timer: number | void;
|
|
7
|
+
|
|
8
|
+
constructor(
|
|
9
|
+
set: Scheduler,
|
|
10
|
+
clear: Canceller,
|
|
11
|
+
delay: Delay,
|
|
12
|
+
callback: TimedCallback,
|
|
13
|
+
) {
|
|
14
|
+
this.clear = clear;
|
|
15
|
+
this.timer = set(() => {
|
|
16
|
+
if (this.timer) {
|
|
17
|
+
this.timer = callback(this.timer);
|
|
18
|
+
}
|
|
19
|
+
}, delay);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Returns whether the timer is still running.
|
|
23
|
+
*
|
|
24
|
+
* @return {Boolean}
|
|
25
|
+
*/
|
|
26
|
+
isRunning(): boolean {
|
|
27
|
+
return this.timer !== null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Aborts a timer when it's running. */
|
|
31
|
+
ensureAborted() {
|
|
32
|
+
if (this.timer) {
|
|
33
|
+
this.clear(this.timer);
|
|
34
|
+
this.timer = null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default Timer;
|