@cendarsoss/pusher-js 8.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/.editorconfig +14 -0
  2. package/.github/ISSUE_TEMPLATE.md +11 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  4. package/.github/dependabot.yml +14 -0
  5. package/.github/stale.yml +26 -0
  6. package/.github/workflows/release.yml +112 -0
  7. package/.github/workflows/release_pr.yml +43 -0
  8. package/.github/workflows/run-tests.yml +62 -0
  9. package/.gitmodules +3 -0
  10. package/.prettierrc +2 -0
  11. package/CHANGELOG.md +928 -0
  12. package/DELTA_COMPRESSION.md +365 -0
  13. package/DELTA_USAGE.md +179 -0
  14. package/IMPLEMENTATION_SUMMARY.md +261 -0
  15. package/IMPORT_GUIDE.md +638 -0
  16. package/LIBRARY_STRUCTURE_ANALYSIS.md +940 -0
  17. package/LICENCE +19 -0
  18. package/Makefile +14 -0
  19. package/README.md +709 -0
  20. package/TAG_FILTERING_CLIENT.md +471 -0
  21. package/bower.json +19 -0
  22. package/bun.lock +2695 -0
  23. package/dist/node/filter.js +252 -0
  24. package/dist/node/filter.js.map +1 -0
  25. package/dist/node/pusher.js +4434 -0
  26. package/dist/node/pusher.js.map +1 -0
  27. package/dist/web/filter.mjs +252 -0
  28. package/dist/web/filter.mjs.map +1 -0
  29. package/dist/web/pusher.mjs +5889 -0
  30. package/dist/web/pusher.mjs.map +1 -0
  31. package/examples/delta-compression-example.html +372 -0
  32. package/examples/delta-seamless-example.html +185 -0
  33. package/index.d.ts +36 -0
  34. package/integration_tests_server/index.js +176 -0
  35. package/integration_tests_server/package-lock.json +1177 -0
  36. package/integration_tests_server/package.json +15 -0
  37. package/interactive/.env +16 -0
  38. package/interactive/CONFLATION_TEST.md +73 -0
  39. package/interactive/DELTA_COMPRESSION_TESTING.md +262 -0
  40. package/interactive/bun.lock +208 -0
  41. package/interactive/package-lock.json +1075 -0
  42. package/interactive/package.json +32 -0
  43. package/interactive/public/app.js +1363 -0
  44. package/interactive/public/bundle-entry.js +14 -0
  45. package/interactive/public/conflation-test.html +508 -0
  46. package/interactive/public/conflation-test.js +785 -0
  47. package/interactive/public/delta-compression.js +1090 -0
  48. package/interactive/public/dist/bundle.js +5857 -0
  49. package/interactive/public/index.html +392 -0
  50. package/interactive/public/main.js +20 -0
  51. package/interactive/public/style.css +823 -0
  52. package/interactive/server.js +246 -0
  53. package/interactive/test-bundle.html +89 -0
  54. package/interactive/test-delta.js +146 -0
  55. package/node.js +1 -0
  56. package/package.json +94 -0
  57. package/pusher-with-encryption/index.js +1 -0
  58. package/react-native/index.d.ts +29 -0
  59. package/react-native/index.js +1 -0
  60. package/spec/config/jasmine/helpers/reporter.js +14 -0
  61. package/spec/config/jasmine/integration.json +13 -0
  62. package/spec/config/jasmine/unit.json +13 -0
  63. package/spec/config/jasmine/webpack.integration.js +33 -0
  64. package/spec/config/jasmine/webpack.unit.js +30 -0
  65. package/spec/config/karma/available_browsers.json +4957 -0
  66. package/spec/config/karma/config.ci.js +25 -0
  67. package/spec/config/karma/config.common.js +50 -0
  68. package/spec/config/karma/config.integration.js +26 -0
  69. package/spec/config/karma/config.unit.js +10 -0
  70. package/spec/config/karma/config.worker.js +34 -0
  71. package/spec/config/karma/integration.js +24 -0
  72. package/spec/config/karma/unit.js +20 -0
  73. package/spec/javascripts/helpers/mocks.js +274 -0
  74. package/spec/javascripts/helpers/node/integration.js +33 -0
  75. package/spec/javascripts/helpers/node/mock-dom-dependencies.ts +1 -0
  76. package/spec/javascripts/helpers/pusher_integration.js +1 -0
  77. package/spec/javascripts/helpers/pusher_integration_class.ts +12 -0
  78. package/spec/javascripts/helpers/timers/promises.js +9 -0
  79. package/spec/javascripts/helpers/waitsFor.js +37 -0
  80. package/spec/javascripts/helpers/web/integration.js +44 -0
  81. package/spec/javascripts/helpers/worker/mock-dom-dependencies.js +1 -0
  82. package/spec/javascripts/integration/core/cluster_config_spec.js +153 -0
  83. package/spec/javascripts/integration/core/falling_back_spec.js +195 -0
  84. package/spec/javascripts/integration/core/pusher_spec/index.js +68 -0
  85. package/spec/javascripts/integration/core/pusher_spec/test_builder.js +715 -0
  86. package/spec/javascripts/integration/core/timeout_configuration_spec.js +200 -0
  87. package/spec/javascripts/integration/core/transport_lists_spec.js +103 -0
  88. package/spec/javascripts/integration/index.node.js +12 -0
  89. package/spec/javascripts/integration/index.web.js +63 -0
  90. package/spec/javascripts/integration/index.worker.js +13 -0
  91. package/spec/javascripts/integration/web/dom/jsonp_spec.js +97 -0
  92. package/spec/javascripts/integration/web/dom/script_request_spec.js +90 -0
  93. package/spec/javascripts/polyfills/index.js +105 -0
  94. package/spec/javascripts/unit/core/channels/channel_spec.js +355 -0
  95. package/spec/javascripts/unit/core/channels/channels_spec.js +94 -0
  96. package/spec/javascripts/unit/core/channels/encrypted_channel_spec.js +343 -0
  97. package/spec/javascripts/unit/core/channels/presence_channel_spec.js +553 -0
  98. package/spec/javascripts/unit/core/channels/private_channel_spec.js +182 -0
  99. package/spec/javascripts/unit/core/config_spec.js +507 -0
  100. package/spec/javascripts/unit/core/connection/connection_manager_spec.js +656 -0
  101. package/spec/javascripts/unit/core/connection/connection_spec.js +286 -0
  102. package/spec/javascripts/unit/core/connection/handshake_spec.js +160 -0
  103. package/spec/javascripts/unit/core/connection/protocol_spec.js +420 -0
  104. package/spec/javascripts/unit/core/defaults_spec.js +26 -0
  105. package/spec/javascripts/unit/core/events_dispatcher_spec.js +385 -0
  106. package/spec/javascripts/unit/core/http/http_polling_socket_spec.js +60 -0
  107. package/spec/javascripts/unit/core/http/http_request_spec.js +185 -0
  108. package/spec/javascripts/unit/core/http/http_socket_spec.js +370 -0
  109. package/spec/javascripts/unit/core/http/http_streaming_socket_spec.js +56 -0
  110. package/spec/javascripts/unit/core/http/http_xhr_request_spec.js +164 -0
  111. package/spec/javascripts/unit/core/logger_spec.js +133 -0
  112. package/spec/javascripts/unit/core/pusher_spec.js +613 -0
  113. package/spec/javascripts/unit/core/pusher_with_encryption_spec.js +18 -0
  114. package/spec/javascripts/unit/core/strategies/best_connected_ever_strategy_spec.js +104 -0
  115. package/spec/javascripts/unit/core/strategies/delayed_strategy_spec.js +95 -0
  116. package/spec/javascripts/unit/core/strategies/first_connected_strategy_spec.js +68 -0
  117. package/spec/javascripts/unit/core/strategies/if_strategy_spec.js +165 -0
  118. package/spec/javascripts/unit/core/strategies/sequential_strategy_spec.js +213 -0
  119. package/spec/javascripts/unit/core/strategies/transport_strategy_spec.js +250 -0
  120. package/spec/javascripts/unit/core/strategies/websocket_prioritized_cached_strategy_spec.js +400 -0
  121. package/spec/javascripts/unit/core/timeline/timeline_spec.js +153 -0
  122. package/spec/javascripts/unit/core/transports/assistant_to_the_transport_manager_spec.js +223 -0
  123. package/spec/javascripts/unit/core/transports/hosts_and_ports_spec.js +85 -0
  124. package/spec/javascripts/unit/core/transports/transport_connection_spec.js +585 -0
  125. package/spec/javascripts/unit/core/transports/transport_manager_spec.js +64 -0
  126. package/spec/javascripts/unit/core/user_spec.js +303 -0
  127. package/spec/javascripts/unit/core/utils/periodic_timer_spec.js +74 -0
  128. package/spec/javascripts/unit/core/utils/timers_spec.js +157 -0
  129. package/spec/javascripts/unit/core/utils/url_store_spec.js +14 -0
  130. package/spec/javascripts/unit/core/watchlist_spec.js +48 -0
  131. package/spec/javascripts/unit/core_with_runtime/auth/channel_authorizer_spec.js +137 -0
  132. package/spec/javascripts/unit/core_with_runtime/auth/deprecated_channel_authorizer_spec.js +48 -0
  133. package/spec/javascripts/unit/core_with_runtime/auth/user_authorizer_spec.js +128 -0
  134. package/spec/javascripts/unit/core_with_runtime/readme.md +5 -0
  135. package/spec/javascripts/unit/index.node.js +11 -0
  136. package/spec/javascripts/unit/index.web.js +12 -0
  137. package/spec/javascripts/unit/index.worker.js +11 -0
  138. package/spec/javascripts/unit/isomorphic/transports/hosts_and_ports_spec.js +82 -0
  139. package/spec/javascripts/unit/isomorphic/transports/transports_spec.js +202 -0
  140. package/spec/javascripts/unit/node/timeline_sender_spec.js +83 -0
  141. package/spec/javascripts/unit/web/dom/dependency_loader_spec.js +249 -0
  142. package/spec/javascripts/unit/web/dom/jsonp_request_spec.js +130 -0
  143. package/spec/javascripts/unit/web/dom/script_receiver_factory_spec.js +68 -0
  144. package/spec/javascripts/unit/web/http/http_xdomain_request_spec.js +222 -0
  145. package/spec/javascripts/unit/web/pusher_authorizer_spec.js +64 -0
  146. package/spec/javascripts/unit/web/timeline/timeline_sender_spec.js +131 -0
  147. package/spec/javascripts/unit/web/transports/hosts_and_ports_spec.js +127 -0
  148. package/spec/javascripts/unit/web/transports/transports_spec.js +444 -0
  149. package/spec/javascripts/unit/worker/channel_authorizer_spec.js +156 -0
  150. package/spec/javascripts/unit/worker/timeline_sender_spec.js +76 -0
  151. package/src/core/auth/auth_transports.ts +18 -0
  152. package/src/core/auth/channel_authorizer.ts +64 -0
  153. package/src/core/auth/deprecated_channel_authorizer.ts +56 -0
  154. package/src/core/auth/options.ts +76 -0
  155. package/src/core/auth/user_authenticator.ts +62 -0
  156. package/src/core/base64.ts +49 -0
  157. package/src/core/channels/channel.ts +173 -0
  158. package/src/core/channels/channel_table.ts +7 -0
  159. package/src/core/channels/channels.ts +86 -0
  160. package/src/core/channels/encrypted_channel.ts +150 -0
  161. package/src/core/channels/filter.ts +342 -0
  162. package/src/core/channels/members.ts +80 -0
  163. package/src/core/channels/metadata.ts +5 -0
  164. package/src/core/channels/presence_channel.ts +113 -0
  165. package/src/core/channels/private_channel.ts +25 -0
  166. package/src/core/config.ts +189 -0
  167. package/src/core/connection/callbacks.ts +21 -0
  168. package/src/core/connection/connection.ts +160 -0
  169. package/src/core/connection/connection_manager.ts +371 -0
  170. package/src/core/connection/connection_manager_options.ts +14 -0
  171. package/src/core/connection/handshake/handshake_payload.ts +10 -0
  172. package/src/core/connection/handshake/index.ts +90 -0
  173. package/src/core/connection/protocol/action.ts +8 -0
  174. package/src/core/connection/protocol/message-types.ts +11 -0
  175. package/src/core/connection/protocol/protocol.ts +166 -0
  176. package/src/core/defaults.ts +66 -0
  177. package/src/core/delta/channel_state.ts +194 -0
  178. package/src/core/delta/decoders.ts +129 -0
  179. package/src/core/delta/index.ts +10 -0
  180. package/src/core/delta/manager.ts +504 -0
  181. package/src/core/delta/types.ts +60 -0
  182. package/src/core/errors.ts +69 -0
  183. package/src/core/events/callback.ts +6 -0
  184. package/src/core/events/callback_registry.ts +75 -0
  185. package/src/core/events/callback_table.ts +7 -0
  186. package/src/core/events/dispatcher.ts +84 -0
  187. package/src/core/http/ajax.ts +24 -0
  188. package/src/core/http/http_factory.ts +16 -0
  189. package/src/core/http/http_polling_socket.ts +24 -0
  190. package/src/core/http/http_request.ts +81 -0
  191. package/src/core/http/http_socket.ts +220 -0
  192. package/src/core/http/http_streaming_socket.ts +19 -0
  193. package/src/core/http/request_hooks.ts +9 -0
  194. package/src/core/http/socket_hooks.ts +11 -0
  195. package/src/core/http/state.ts +7 -0
  196. package/src/core/http/url_location.ts +6 -0
  197. package/src/core/logger.ts +66 -0
  198. package/src/core/options.ts +61 -0
  199. package/src/core/pusher-licence.js +7 -0
  200. package/src/core/pusher-with-encryption.js +1 -0
  201. package/src/core/pusher-with-encryption.ts +14 -0
  202. package/src/core/pusher.js +10 -0
  203. package/src/core/pusher.ts +412 -0
  204. package/src/core/reachability.ts +7 -0
  205. package/src/core/socket.ts +14 -0
  206. package/src/core/strategies/best_connected_ever_strategy.ts +81 -0
  207. package/src/core/strategies/delayed_strategy.ts +48 -0
  208. package/src/core/strategies/first_connected_strategy.ts +31 -0
  209. package/src/core/strategies/if_strategy.ts +34 -0
  210. package/src/core/strategies/sequential_strategy.ts +129 -0
  211. package/src/core/strategies/strategy.ts +8 -0
  212. package/src/core/strategies/strategy_builder.ts +67 -0
  213. package/src/core/strategies/strategy_options.ts +18 -0
  214. package/src/core/strategies/strategy_runner.ts +6 -0
  215. package/src/core/strategies/transport_strategy.ts +144 -0
  216. package/src/core/strategies/websocket_prioritized_cached_strategy.ts +157 -0
  217. package/src/core/timeline/level.ts +7 -0
  218. package/src/core/timeline/timeline.ts +90 -0
  219. package/src/core/timeline/timeline_sender.ts +33 -0
  220. package/src/core/timeline/timeline_transport.ts +11 -0
  221. package/src/core/transports/assistant_to_the_transport_manager.ts +104 -0
  222. package/src/core/transports/ping_delay_options.ts +7 -0
  223. package/src/core/transports/transport.ts +54 -0
  224. package/src/core/transports/transport_connection.ts +241 -0
  225. package/src/core/transports/transport_connection_options.ts +8 -0
  226. package/src/core/transports/transport_hooks.ts +16 -0
  227. package/src/core/transports/transport_manager.ts +52 -0
  228. package/src/core/transports/transports_table.ts +12 -0
  229. package/src/core/transports/url_scheme.ts +13 -0
  230. package/src/core/transports/url_schemes.ts +47 -0
  231. package/src/core/user.ts +186 -0
  232. package/src/core/util.ts +34 -0
  233. package/src/core/utils/collections.ts +353 -0
  234. package/src/core/utils/factory.ts +79 -0
  235. package/src/core/utils/flat_promise.ts +10 -0
  236. package/src/core/utils/timers/abstract_timer.ts +39 -0
  237. package/src/core/utils/timers/index.ts +39 -0
  238. package/src/core/utils/timers/scheduling.ts +11 -0
  239. package/src/core/utils/timers/timed_callback.ts +5 -0
  240. package/src/core/utils/url_store.ts +48 -0
  241. package/src/core/watchlist.ts +31 -0
  242. package/src/d.ts/constants/index.d.ts +5 -0
  243. package/src/d.ts/faye-websocket/faye-websocket.d.ts +21 -0
  244. package/src/d.ts/global/global.d.ts +1 -0
  245. package/src/d.ts/module/module.d.ts +12 -0
  246. package/src/d.ts/tweetnacl-util/index.d.ts +6 -0
  247. package/src/d.ts/window/events.d.ts +4 -0
  248. package/src/d.ts/window/sockjs.d.ts +3 -0
  249. package/src/d.ts/window/websocket.d.ts +4 -0
  250. package/src/d.ts/window/xmlhttprequest.d.ts +3 -0
  251. package/src/filter.ts +5 -0
  252. package/src/index.ts +8 -0
  253. package/src/runtimes/interface.ts +60 -0
  254. package/src/runtimes/isomorphic/auth/xhr_auth.ts +90 -0
  255. package/src/runtimes/isomorphic/default_strategy.ts +155 -0
  256. package/src/runtimes/isomorphic/http/http.ts +32 -0
  257. package/src/runtimes/isomorphic/http/http_xhr_request.ts +35 -0
  258. package/src/runtimes/isomorphic/runtime.ts +62 -0
  259. package/src/runtimes/isomorphic/timeline/xhr_timeline.ts +50 -0
  260. package/src/runtimes/isomorphic/transports/transport_connection_initializer.ts +19 -0
  261. package/src/runtimes/isomorphic/transports/transports.ts +83 -0
  262. package/src/runtimes/node/net_info.ts +10 -0
  263. package/src/runtimes/node/runtime.ts +68 -0
  264. package/src/runtimes/react-native/net_info.ts +42 -0
  265. package/src/runtimes/react-native/runtime.ts +65 -0
  266. package/src/runtimes/web/auth/jsonp_auth.ts +51 -0
  267. package/src/runtimes/web/browser.ts +24 -0
  268. package/src/runtimes/web/default_strategy.ts +201 -0
  269. package/src/runtimes/web/dom/dependencies.ts +16 -0
  270. package/src/runtimes/web/dom/dependency_loader.ts +93 -0
  271. package/src/runtimes/web/dom/json2.js +486 -0
  272. package/src/runtimes/web/dom/jsonp_request.ts +52 -0
  273. package/src/runtimes/web/dom/script_receiver.ts +8 -0
  274. package/src/runtimes/web/dom/script_receiver_factory.ts +57 -0
  275. package/src/runtimes/web/dom/script_request.ts +85 -0
  276. package/src/runtimes/web/http/http.ts +8 -0
  277. package/src/runtimes/web/http/http_xdomain_request.ts +37 -0
  278. package/src/runtimes/web/net_info.ts +50 -0
  279. package/src/runtimes/web/runtime.ts +174 -0
  280. package/src/runtimes/web/timeline/jsonp_timeline.ts +34 -0
  281. package/src/runtimes/web/transports/transport_connection_initializer.ts +39 -0
  282. package/src/runtimes/web/transports/transports.ts +67 -0
  283. package/src/runtimes/worker/auth/fetch_auth.ts +69 -0
  284. package/src/runtimes/worker/net_info.ts +10 -0
  285. package/src/runtimes/worker/runtime.ts +75 -0
  286. package/src/runtimes/worker/timeline/fetch_timeline.ts +39 -0
  287. package/tsconfig.json +18 -0
  288. package/types/spec/javascripts/helpers/node/mock-dom-dependencies.d.ts +1 -0
  289. package/types/spec/javascripts/helpers/pusher_integration_class.d.ts +4 -0
  290. package/types/src/core/auth/auth_transports.d.ts +9 -0
  291. package/types/src/core/auth/channel_authorizer.d.ts +3 -0
  292. package/types/src/core/auth/deprecated_channel_authorizer.d.ts +18 -0
  293. package/types/src/core/auth/options.d.ts +48 -0
  294. package/types/src/core/auth/user_authenticator.d.ts +3 -0
  295. package/types/src/core/base64.d.ts +1 -0
  296. package/types/src/core/channels/channel.d.ts +25 -0
  297. package/types/src/core/channels/channel_table.d.ts +5 -0
  298. package/types/src/core/channels/channels.d.ts +12 -0
  299. package/types/src/core/channels/encrypted_channel.d.ts +15 -0
  300. package/types/src/core/channels/filter.d.ts +33 -0
  301. package/types/src/core/channels/members.d.ts +14 -0
  302. package/types/src/core/channels/metadata.d.ts +4 -0
  303. package/types/src/core/channels/presence_channel.d.ts +13 -0
  304. package/types/src/core/channels/private_channel.d.ts +5 -0
  305. package/types/src/core/config.d.ts +31 -0
  306. package/types/src/core/connection/callbacks.d.ts +18 -0
  307. package/types/src/core/connection/connection.d.ts +16 -0
  308. package/types/src/core/connection/connection_manager.d.ts +50 -0
  309. package/types/src/core/connection/connection_manager_options.d.ts +11 -0
  310. package/types/src/core/connection/handshake/handshake_payload.d.ts +8 -0
  311. package/types/src/core/connection/handshake/index.d.ts +12 -0
  312. package/types/src/core/connection/protocol/action.d.ts +7 -0
  313. package/types/src/core/connection/protocol/message-types.d.ts +10 -0
  314. package/types/src/core/connection/protocol/protocol.d.ts +10 -0
  315. package/types/src/core/defaults.d.ts +26 -0
  316. package/types/src/core/delta/channel_state.d.ts +23 -0
  317. package/types/src/core/delta/decoders.d.ts +12 -0
  318. package/types/src/core/delta/index.d.ts +4 -0
  319. package/types/src/core/delta/manager.d.ts +27 -0
  320. package/types/src/core/delta/types.d.ts +50 -0
  321. package/types/src/core/errors.d.ts +28 -0
  322. package/types/src/core/events/callback.d.ts +5 -0
  323. package/types/src/core/events/callback_registry.d.ts +11 -0
  324. package/types/src/core/events/callback_table.d.ts +5 -0
  325. package/types/src/core/events/dispatcher.d.ts +14 -0
  326. package/types/src/core/http/ajax.d.ts +16 -0
  327. package/types/src/core/http/http_factory.d.ts +13 -0
  328. package/types/src/core/http/http_polling_socket.d.ts +3 -0
  329. package/types/src/core/http/http_request.d.ts +17 -0
  330. package/types/src/core/http/http_socket.d.ts +32 -0
  331. package/types/src/core/http/http_streaming_socket.d.ts +3 -0
  332. package/types/src/core/http/request_hooks.d.ts +6 -0
  333. package/types/src/core/http/socket_hooks.d.ts +8 -0
  334. package/types/src/core/http/state.d.ts +6 -0
  335. package/types/src/core/http/url_location.d.ts +5 -0
  336. package/types/src/core/logger.d.ts +11 -0
  337. package/types/src/core/options.d.ts +36 -0
  338. package/types/src/core/pusher-with-encryption.d.ts +5 -0
  339. package/types/src/core/pusher.d.ts +56 -0
  340. package/types/src/core/reachability.d.ts +5 -0
  341. package/types/src/core/socket.d.ts +12 -0
  342. package/types/src/core/strategies/best_connected_ever_strategy.d.ts +10 -0
  343. package/types/src/core/strategies/delayed_strategy.d.ts +15 -0
  344. package/types/src/core/strategies/first_connected_strategy.d.ts +8 -0
  345. package/types/src/core/strategies/if_strategy.d.ts +10 -0
  346. package/types/src/core/strategies/sequential_strategy.d.ts +16 -0
  347. package/types/src/core/strategies/strategy.d.ts +6 -0
  348. package/types/src/core/strategies/strategy_builder.d.ts +5 -0
  349. package/types/src/core/strategies/strategy_options.d.ts +16 -0
  350. package/types/src/core/strategies/strategy_runner.d.ts +5 -0
  351. package/types/src/core/strategies/transport_strategy.d.ts +15 -0
  352. package/types/src/core/strategies/websocket_prioritized_cached_strategy.d.ts +20 -0
  353. package/types/src/core/timeline/level.d.ts +6 -0
  354. package/types/src/core/timeline/timeline.d.ts +25 -0
  355. package/types/src/core/timeline/timeline_sender.d.ts +13 -0
  356. package/types/src/core/timeline/timeline_transport.d.ts +6 -0
  357. package/types/src/core/transports/assistant_to_the_transport_manager.d.ts +14 -0
  358. package/types/src/core/transports/ping_delay_options.d.ts +6 -0
  359. package/types/src/core/transports/transport.d.ts +8 -0
  360. package/types/src/core/transports/transport_connection.d.ts +35 -0
  361. package/types/src/core/transports/transport_connection_options.d.ts +6 -0
  362. package/types/src/core/transports/transport_hooks.d.ts +13 -0
  363. package/types/src/core/transports/transport_manager.d.ts +14 -0
  364. package/types/src/core/transports/transports_table.d.ts +10 -0
  365. package/types/src/core/transports/url_scheme.d.ts +11 -0
  366. package/types/src/core/transports/url_schemes.d.ts +4 -0
  367. package/types/src/core/user.d.ts +21 -0
  368. package/types/src/core/util.d.ts +8 -0
  369. package/types/src/core/utils/collections.d.ts +18 -0
  370. package/types/src/core/utils/factory.d.ts +29 -0
  371. package/types/src/core/utils/flat_promise.d.ts +6 -0
  372. package/types/src/core/utils/timers/abstract_timer.d.ts +10 -0
  373. package/types/src/core/utils/timers/index.d.ts +9 -0
  374. package/types/src/core/utils/timers/scheduling.d.ts +8 -0
  375. package/types/src/core/utils/timers/timed_callback.d.ts +4 -0
  376. package/types/src/core/utils/url_store.d.ts +4 -0
  377. package/types/src/core/watchlist.d.ts +8 -0
  378. package/types/src/runtimes/interface.d.ts +43 -0
  379. package/types/src/runtimes/isomorphic/auth/xhr_auth.d.ts +3 -0
  380. package/types/src/runtimes/isomorphic/default_strategy.d.ts +5 -0
  381. package/types/src/runtimes/isomorphic/http/http.d.ts +3 -0
  382. package/types/src/runtimes/isomorphic/http/http_xhr_request.d.ts +3 -0
  383. package/types/src/runtimes/isomorphic/runtime.d.ts +2 -0
  384. package/types/src/runtimes/isomorphic/timeline/xhr_timeline.d.ts +6 -0
  385. package/types/src/runtimes/isomorphic/transports/transport_connection_initializer.d.ts +1 -0
  386. package/types/src/runtimes/isomorphic/transports/transports.d.ts +5 -0
  387. package/types/src/runtimes/node/net_info.d.ts +6 -0
  388. package/types/src/runtimes/node/runtime.d.ts +3 -0
  389. package/types/src/runtimes/react-native/net_info.d.ts +8 -0
  390. package/types/src/runtimes/react-native/runtime.d.ts +3 -0
  391. package/types/src/runtimes/web/auth/jsonp_auth.d.ts +3 -0
  392. package/types/src/runtimes/web/browser.d.ts +19 -0
  393. package/types/src/runtimes/web/default_strategy.d.ts +5 -0
  394. package/types/src/runtimes/web/dom/dependencies.d.ts +4 -0
  395. package/types/src/runtimes/web/dom/dependency_loader.d.ts +10 -0
  396. package/types/src/runtimes/web/dom/jsonp_request.d.ts +10 -0
  397. package/types/src/runtimes/web/dom/script_receiver.d.ts +7 -0
  398. package/types/src/runtimes/web/dom/script_receiver_factory.d.ts +10 -0
  399. package/types/src/runtimes/web/dom/script_request.d.ts +9 -0
  400. package/types/src/runtimes/web/http/http.d.ts +2 -0
  401. package/types/src/runtimes/web/http/http_xdomain_request.d.ts +3 -0
  402. package/types/src/runtimes/web/net_info.d.ts +7 -0
  403. package/types/src/runtimes/web/runtime.d.ts +3 -0
  404. package/types/src/runtimes/web/timeline/jsonp_timeline.d.ts +6 -0
  405. package/types/src/runtimes/web/transports/transport_connection_initializer.d.ts +1 -0
  406. package/types/src/runtimes/web/transports/transports.d.ts +2 -0
  407. package/types/src/runtimes/worker/auth/fetch_auth.d.ts +3 -0
  408. package/types/src/runtimes/worker/net_info.d.ts +6 -0
  409. package/types/src/runtimes/worker/runtime.d.ts +3 -0
  410. package/types/src/runtimes/worker/timeline/fetch_timeline.d.ts +6 -0
  411. package/vite.config.js +52 -0
  412. package/vite.config.node.js +72 -0
  413. package/webpack/config.node.js +26 -0
  414. package/webpack/config.react-native.js +35 -0
  415. package/webpack/config.shared.js +50 -0
  416. package/webpack/config.web.js +36 -0
  417. package/webpack/config.worker.js +42 -0
  418. package/webpack/dev.server.js +17 -0
  419. package/webpack/hosting_config.js +6 -0
  420. package/with-encryption/index.d.ts +29 -0
  421. package/with-encryption/index.js +4 -0
  422. package/worker/index.d.ts +29 -0
  423. package/worker/index.js +1 -0
  424. package/worker/with-encryption/index.d.ts +29 -0
  425. package/worker/with-encryption/index.js +1 -0
@@ -0,0 +1,85 @@
1
+ import ScriptReceiver from './script_receiver';
2
+
3
+ /** Sends a generic HTTP GET request using a script tag.
4
+ *
5
+ * By constructing URL in a specific way, it can be used for loading
6
+ * JavaScript resources or JSONP requests. It can notify about errors, but
7
+ * only in certain environments. Please take care of monitoring the state of
8
+ * the request yourself.
9
+ *
10
+ * @param {String} src
11
+ */
12
+ export default class ScriptRequest {
13
+ src: string;
14
+ script: any;
15
+ errorScript: any;
16
+
17
+ constructor(src: string) {
18
+ this.src = src;
19
+ }
20
+
21
+ send(receiver: ScriptReceiver) {
22
+ var self = this;
23
+ var errorString = 'Error loading ' + self.src;
24
+
25
+ self.script = document.createElement('script');
26
+ self.script.id = receiver.id;
27
+ self.script.src = self.src;
28
+ self.script.type = 'text/javascript';
29
+ self.script.charset = 'UTF-8';
30
+
31
+ if (self.script.addEventListener) {
32
+ self.script.onerror = function () {
33
+ receiver.callback(errorString);
34
+ };
35
+ self.script.onload = function () {
36
+ receiver.callback(null);
37
+ };
38
+ } else {
39
+ self.script.onreadystatechange = function () {
40
+ if (
41
+ self.script.readyState === 'loaded' ||
42
+ self.script.readyState === 'complete'
43
+ ) {
44
+ receiver.callback(null);
45
+ }
46
+ };
47
+ }
48
+
49
+ // Opera<11.6 hack for missing onerror callback
50
+ if (
51
+ self.script.async === undefined &&
52
+ (<any>document).attachEvent &&
53
+ /opera/i.test(navigator.userAgent)
54
+ ) {
55
+ self.errorScript = document.createElement('script');
56
+ self.errorScript.id = receiver.id + '_error';
57
+ self.errorScript.text = receiver.name + "('" + errorString + "');";
58
+ self.script.async = self.errorScript.async = false;
59
+ } else {
60
+ self.script.async = true;
61
+ }
62
+
63
+ var head = document.getElementsByTagName('head')[0];
64
+ head.insertBefore(self.script, head.firstChild);
65
+ if (self.errorScript) {
66
+ head.insertBefore(self.errorScript, self.script.nextSibling);
67
+ }
68
+ }
69
+
70
+ /** Cleans up the DOM remains of the script request. */
71
+ cleanup() {
72
+ if (this.script) {
73
+ this.script.onload = this.script.onerror = null;
74
+ this.script.onreadystatechange = null;
75
+ }
76
+ if (this.script && this.script.parentNode) {
77
+ this.script.parentNode.removeChild(this.script);
78
+ }
79
+ if (this.errorScript && this.errorScript.parentNode) {
80
+ this.errorScript.parentNode.removeChild(this.errorScript);
81
+ }
82
+ this.script = null;
83
+ this.errorScript = null;
84
+ }
85
+ }
@@ -0,0 +1,8 @@
1
+ import xdrHooks from './http_xdomain_request';
2
+ import HTTP from 'isomorphic/http/http';
3
+
4
+ HTTP.createXDR = function (method, url) {
5
+ return this.createRequest(xdrHooks, method, url);
6
+ };
7
+
8
+ export default HTTP;
@@ -0,0 +1,37 @@
1
+ import HTTPRequest from 'core/http/http_request';
2
+ import RequestHooks from 'core/http/request_hooks';
3
+ import Ajax from 'core/http/ajax';
4
+ import * as Errors from 'core/errors';
5
+
6
+ var hooks: RequestHooks = {
7
+ getRequest: function (socket: HTTPRequest): Ajax {
8
+ var xdr = new (<any>window).XDomainRequest();
9
+ xdr.ontimeout = function () {
10
+ socket.emit('error', new Errors.RequestTimedOut());
11
+ socket.close();
12
+ };
13
+ xdr.onerror = function (e) {
14
+ socket.emit('error', e);
15
+ socket.close();
16
+ };
17
+ xdr.onprogress = function () {
18
+ if (xdr.responseText && xdr.responseText.length > 0) {
19
+ socket.onChunk(200, xdr.responseText);
20
+ }
21
+ };
22
+ xdr.onload = function () {
23
+ if (xdr.responseText && xdr.responseText.length > 0) {
24
+ socket.onChunk(200, xdr.responseText);
25
+ }
26
+ socket.emit('finished', 200);
27
+ socket.close();
28
+ };
29
+ return xdr;
30
+ },
31
+ abortRequest: function (xdr: Ajax) {
32
+ xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;
33
+ xdr.abort();
34
+ },
35
+ };
36
+
37
+ export default hooks;
@@ -0,0 +1,50 @@
1
+ import Reachability from 'core/reachability';
2
+ import { default as EventsDispatcher } from 'core/events/dispatcher';
3
+
4
+ /** Really basic interface providing network availability info.
5
+ *
6
+ * Emits:
7
+ * - online - when browser goes online
8
+ * - offline - when browser goes offline
9
+ */
10
+ export class NetInfo extends EventsDispatcher implements Reachability {
11
+ constructor() {
12
+ super();
13
+ var self = this;
14
+ // This is okay, as IE doesn't support this stuff anyway.
15
+ if (window.addEventListener !== undefined) {
16
+ window.addEventListener(
17
+ 'online',
18
+ function () {
19
+ self.emit('online');
20
+ },
21
+ false,
22
+ );
23
+ window.addEventListener(
24
+ 'offline',
25
+ function () {
26
+ self.emit('offline');
27
+ },
28
+ false,
29
+ );
30
+ }
31
+ }
32
+
33
+ /** Returns whether browser is online or not
34
+ *
35
+ * Offline means definitely offline (no connection to router).
36
+ * Inverse does NOT mean definitely online (only currently supported in Safari
37
+ * and even there only means the device has a connection to the router).
38
+ *
39
+ * @return {Boolean}
40
+ */
41
+ isOnline(): boolean {
42
+ if (window.navigator.onLine === undefined) {
43
+ return true;
44
+ } else {
45
+ return window.navigator.onLine;
46
+ }
47
+ }
48
+ }
49
+
50
+ export var Network = new NetInfo();
@@ -0,0 +1,174 @@
1
+ import Browser from './browser';
2
+ import { Dependencies, DependenciesReceivers } from './dom/dependencies';
3
+ import { AuthTransport, AuthTransports } from 'core/auth/auth_transports';
4
+ import xhrAuth from 'isomorphic/auth/xhr_auth';
5
+ import jsonpAuth from './auth/jsonp_auth';
6
+ import TimelineTransport from 'core/timeline/timeline_transport';
7
+ import TimelineSender from 'core/timeline/timeline_sender';
8
+ import ScriptRequest from './dom/script_request';
9
+ import JSONPRequest from './dom/jsonp_request';
10
+ import * as Collections from 'core/utils/collections';
11
+ import { ScriptReceivers } from './dom/script_receiver_factory';
12
+ import jsonpTimeline from './timeline/jsonp_timeline';
13
+ import Transports from './transports/transports';
14
+ import Ajax from 'core/http/ajax';
15
+ import { Network } from './net_info';
16
+ import getDefaultStrategy from './default_strategy';
17
+ import transportConnectionInitializer from './transports/transport_connection_initializer';
18
+ import HTTPFactory from './http/http';
19
+ import HTTPRequest from 'core/http/http_request';
20
+
21
+ var Runtime: Browser = {
22
+ // for jsonp auth
23
+ nextAuthCallbackID: 1,
24
+ auth_callbacks: {},
25
+ ScriptReceivers,
26
+ DependenciesReceivers,
27
+ getDefaultStrategy,
28
+ Transports,
29
+ transportConnectionInitializer,
30
+ HTTPFactory,
31
+
32
+ TimelineTransport: jsonpTimeline,
33
+
34
+ getXHRAPI() {
35
+ return window.XMLHttpRequest;
36
+ },
37
+
38
+ getWebSocketAPI() {
39
+ return window.WebSocket || window.MozWebSocket;
40
+ },
41
+
42
+ setup(PusherClass): void {
43
+ (<any>window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.
44
+ var initializeOnDocumentBody = () => {
45
+ this.onDocumentBody(PusherClass.ready);
46
+ };
47
+ if (!(<any>window).JSON) {
48
+ Dependencies.load('json2', {}, initializeOnDocumentBody);
49
+ } else {
50
+ initializeOnDocumentBody();
51
+ }
52
+ },
53
+
54
+ getDocument(): Document {
55
+ return document;
56
+ },
57
+
58
+ getProtocol(): string {
59
+ return this.getDocument().location.protocol;
60
+ },
61
+
62
+ getAuthorizers(): AuthTransports {
63
+ return { ajax: xhrAuth, jsonp: jsonpAuth };
64
+ },
65
+
66
+ onDocumentBody(callback: Function) {
67
+ if (document.body) {
68
+ callback();
69
+ } else {
70
+ setTimeout(() => {
71
+ this.onDocumentBody(callback);
72
+ }, 0);
73
+ }
74
+ },
75
+
76
+ createJSONPRequest(url: string, data: any): JSONPRequest {
77
+ return new JSONPRequest(url, data);
78
+ },
79
+
80
+ createScriptRequest(src: string): ScriptRequest {
81
+ return new ScriptRequest(src);
82
+ },
83
+
84
+ getLocalStorage() {
85
+ try {
86
+ return window.localStorage;
87
+ } catch (e) {
88
+ return undefined;
89
+ }
90
+ },
91
+
92
+ createXHR(): Ajax {
93
+ if (this.getXHRAPI()) {
94
+ return this.createXMLHttpRequest();
95
+ } else {
96
+ return this.createMicrosoftXHR();
97
+ }
98
+ },
99
+
100
+ createXMLHttpRequest(): Ajax {
101
+ var Constructor = this.getXHRAPI();
102
+ return new Constructor();
103
+ },
104
+
105
+ createMicrosoftXHR(): Ajax {
106
+ return new ActiveXObject('Microsoft.XMLHTTP');
107
+ },
108
+
109
+ getNetwork() {
110
+ return Network;
111
+ },
112
+
113
+ createWebSocket(url: string): any {
114
+ var Constructor = this.getWebSocketAPI();
115
+ return new Constructor(url);
116
+ },
117
+
118
+ createSocketRequest(method: string, url: string): HTTPRequest {
119
+ if (this.isXHRSupported()) {
120
+ return this.HTTPFactory.createXHR(method, url);
121
+ } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {
122
+ return this.HTTPFactory.createXDR(method, url);
123
+ } else {
124
+ throw 'Cross-origin HTTP requests are not supported';
125
+ }
126
+ },
127
+
128
+ isXHRSupported(): boolean {
129
+ var Constructor = this.getXHRAPI();
130
+ return (
131
+ Boolean(Constructor) && new Constructor().withCredentials !== undefined
132
+ );
133
+ },
134
+
135
+ isXDRSupported(useTLS?: boolean): boolean {
136
+ var protocol = useTLS ? 'https:' : 'http:';
137
+ var documentProtocol = this.getProtocol();
138
+ return (
139
+ Boolean(<any>window['XDomainRequest']) && documentProtocol === protocol
140
+ );
141
+ },
142
+
143
+ addUnloadListener(listener: any) {
144
+ if (window.addEventListener !== undefined) {
145
+ window.addEventListener('unload', listener, false);
146
+ } else if (window.attachEvent !== undefined) {
147
+ window.attachEvent('onunload', listener);
148
+ }
149
+ },
150
+
151
+ removeUnloadListener(listener: any) {
152
+ if (window.addEventListener !== undefined) {
153
+ window.removeEventListener('unload', listener, false);
154
+ } else if (window.detachEvent !== undefined) {
155
+ window.detachEvent('onunload', listener);
156
+ }
157
+ },
158
+
159
+ randomInt(max: number): number {
160
+ /**
161
+ * Return values in the range of [0, 1[
162
+ */
163
+ const random = function () {
164
+ const crypto = window.crypto || window['msCrypto'];
165
+ const random = crypto.getRandomValues(new Uint32Array(1))[0];
166
+
167
+ return random / 2 ** 32;
168
+ };
169
+
170
+ return Math.floor(random() * max);
171
+ },
172
+ };
173
+
174
+ export default Runtime;
@@ -0,0 +1,34 @@
1
+ import TimelineSender from 'core/timeline/timeline_sender';
2
+ import TimelineTransport from 'core/timeline/timeline_transport';
3
+ import Browser from 'runtime';
4
+ import { AuthTransport } from 'core/auth/auth_transports';
5
+ import { ScriptReceivers } from '../dom/script_receiver_factory';
6
+
7
+ var getAgent = function (sender: TimelineSender, useTLS: boolean) {
8
+ return function (data: any, callback: Function) {
9
+ var scheme = 'http' + (useTLS ? 's' : '') + '://';
10
+ var url =
11
+ scheme + (sender.host || sender.options.host) + sender.options.path;
12
+ var request = Browser.createJSONPRequest(url, data);
13
+
14
+ var receiver = Browser.ScriptReceivers.create(function (error, result) {
15
+ ScriptReceivers.remove(receiver);
16
+ request.cleanup();
17
+
18
+ if (result && result.host) {
19
+ sender.host = result.host;
20
+ }
21
+ if (callback) {
22
+ callback(error, result);
23
+ }
24
+ });
25
+ request.send(receiver);
26
+ };
27
+ };
28
+
29
+ var jsonp = {
30
+ name: 'jsonp',
31
+ getAgent,
32
+ };
33
+
34
+ export default jsonp;
@@ -0,0 +1,39 @@
1
+ import { Dependencies } from '../dom/dependencies';
2
+
3
+ /** Initializes the transport.
4
+ *
5
+ * Fetches resources if needed and then transitions to initialized.
6
+ */
7
+ export default function () {
8
+ var self = this;
9
+
10
+ self.timeline.info(
11
+ self.buildTimelineMessage({
12
+ transport: self.name + (self.options.useTLS ? 's' : ''),
13
+ }),
14
+ );
15
+
16
+ if (self.hooks.isInitialized()) {
17
+ self.changeState('initialized');
18
+ } else if (self.hooks.file) {
19
+ self.changeState('initializing');
20
+ Dependencies.load(
21
+ self.hooks.file,
22
+ { useTLS: self.options.useTLS },
23
+ function (error, callback) {
24
+ if (self.hooks.isInitialized()) {
25
+ self.changeState('initialized');
26
+ callback(true);
27
+ } else {
28
+ if (error) {
29
+ self.onError(error);
30
+ }
31
+ self.onClose();
32
+ callback(false);
33
+ }
34
+ },
35
+ );
36
+ } else {
37
+ self.onClose();
38
+ }
39
+ }
@@ -0,0 +1,67 @@
1
+ import {
2
+ default as Transports,
3
+ streamingConfiguration,
4
+ pollingConfiguration,
5
+ } from 'isomorphic/transports/transports';
6
+ import Transport from 'core/transports/transport';
7
+ import TransportHooks from 'core/transports/transport_hooks';
8
+ import * as URLSchemes from 'core/transports/url_schemes';
9
+ import Runtime from 'runtime';
10
+ import { Dependencies } from '../dom/dependencies';
11
+ import * as Collections from 'core/utils/collections';
12
+
13
+ var SockJSTransport = new Transport(<TransportHooks>{
14
+ file: 'sockjs',
15
+ urls: URLSchemes.sockjs,
16
+ handlesActivityChecks: true,
17
+ supportsPing: false,
18
+
19
+ isSupported: function () {
20
+ return true;
21
+ },
22
+ isInitialized: function () {
23
+ return window.SockJS !== undefined;
24
+ },
25
+ getSocket: function (url, options) {
26
+ return new window.SockJS(url, null, {
27
+ js_path: Dependencies.getPath('sockjs', {
28
+ useTLS: options.useTLS,
29
+ }),
30
+ ignore_null_origin: options.ignoreNullOrigin,
31
+ });
32
+ },
33
+ beforeOpen: function (socket, path) {
34
+ socket.send(
35
+ JSON.stringify({
36
+ path: path,
37
+ }),
38
+ );
39
+ },
40
+ });
41
+
42
+ var xdrConfiguration = {
43
+ isSupported: function (environment): boolean {
44
+ var yes = Runtime.isXDRSupported(environment.useTLS);
45
+ return yes;
46
+ },
47
+ };
48
+
49
+ /** HTTP streaming transport using XDomainRequest (IE 8,9). */
50
+ var XDRStreamingTransport = new Transport(
51
+ <TransportHooks>(
52
+ Collections.extend({}, streamingConfiguration, xdrConfiguration)
53
+ ),
54
+ );
55
+
56
+ /** HTTP long-polling transport using XDomainRequest (IE 8,9). */
57
+ var XDRPollingTransport = new Transport(
58
+ <TransportHooks>(
59
+ Collections.extend({}, pollingConfiguration, xdrConfiguration)
60
+ ),
61
+ );
62
+
63
+ Transports.xdr_streaming = XDRStreamingTransport;
64
+ Transports.xdr_polling = XDRPollingTransport;
65
+ Transports.sockjs = SockJSTransport;
66
+
67
+ export default Transports;
@@ -0,0 +1,69 @@
1
+ import AbstractRuntime from 'runtimes/interface';
2
+ import { AuthTransport } from 'core/auth/auth_transports';
3
+ import {
4
+ AuthRequestType,
5
+ AuthTransportCallback,
6
+ InternalAuthOptions,
7
+ } from 'core/auth/options';
8
+ import { HTTPAuthError } from 'core/errors';
9
+
10
+ var fetchAuth: AuthTransport = function (
11
+ context: AbstractRuntime,
12
+ query: string,
13
+ authOptions: InternalAuthOptions,
14
+ authRequestType: AuthRequestType,
15
+ callback: AuthTransportCallback,
16
+ ) {
17
+ var headers = new Headers();
18
+ headers.set('Content-Type', 'application/x-www-form-urlencoded');
19
+
20
+ for (var headerName in authOptions.headers) {
21
+ headers.set(headerName, authOptions.headers[headerName]);
22
+ }
23
+
24
+ if (authOptions.headersProvider != null) {
25
+ const dynamicHeaders = authOptions.headersProvider();
26
+ for (var headerName in dynamicHeaders) {
27
+ headers.set(headerName, dynamicHeaders[headerName]);
28
+ }
29
+ }
30
+
31
+ var body = query;
32
+ var request = new Request(authOptions.endpoint, {
33
+ headers,
34
+ body,
35
+ credentials: 'same-origin',
36
+ method: 'POST',
37
+ });
38
+
39
+ return fetch(request)
40
+ .then((response) => {
41
+ let { status } = response;
42
+ if (status === 200) {
43
+ // manually parse the json so we can provide a more helpful error in
44
+ // failure case
45
+ return response.text();
46
+ }
47
+ throw new HTTPAuthError(
48
+ status,
49
+ `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`,
50
+ );
51
+ })
52
+ .then((data) => {
53
+ let parsedData;
54
+ try {
55
+ parsedData = JSON.parse(data);
56
+ } catch (e) {
57
+ throw new HTTPAuthError(
58
+ 200,
59
+ `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`,
60
+ );
61
+ }
62
+ callback(null, parsedData);
63
+ })
64
+ .catch((err) => {
65
+ callback(err, null);
66
+ });
67
+ };
68
+
69
+ export default fetchAuth;
@@ -0,0 +1,10 @@
1
+ import { default as EventsDispatcher } from 'core/events/dispatcher';
2
+ import Reachability from 'core/reachability';
3
+
4
+ export class NetInfo extends EventsDispatcher implements Reachability {
5
+ isOnline(): boolean {
6
+ return true;
7
+ }
8
+ }
9
+
10
+ export var Network = new NetInfo();
@@ -0,0 +1,75 @@
1
+ import Isomorphic from 'isomorphic/runtime';
2
+ import Runtime from '../interface';
3
+ import { Network } from './net_info';
4
+ import fetchAuth from './auth/fetch_auth';
5
+ import { AuthTransports } from 'core/auth/auth_transports';
6
+ import fetchTimeline from './timeline/fetch_timeline';
7
+
8
+ // Very verbose but until unavoidable until
9
+ // TypeScript 2.1, when spread attributes will be
10
+ // supported
11
+ const {
12
+ getDefaultStrategy,
13
+ Transports,
14
+ setup,
15
+ getProtocol,
16
+ isXHRSupported,
17
+ getLocalStorage,
18
+ createXHR,
19
+ createWebSocket,
20
+ addUnloadListener,
21
+ removeUnloadListener,
22
+ transportConnectionInitializer,
23
+ createSocketRequest,
24
+ HTTPFactory,
25
+ } = Isomorphic;
26
+
27
+ const Worker: Runtime = {
28
+ getDefaultStrategy,
29
+ Transports,
30
+ setup,
31
+ getProtocol,
32
+ isXHRSupported,
33
+ getLocalStorage,
34
+ createXHR,
35
+ createWebSocket,
36
+ addUnloadListener,
37
+ removeUnloadListener,
38
+ transportConnectionInitializer,
39
+ createSocketRequest,
40
+ HTTPFactory,
41
+
42
+ TimelineTransport: fetchTimeline,
43
+
44
+ getAuthorizers(): AuthTransports {
45
+ return { ajax: fetchAuth };
46
+ },
47
+
48
+ getWebSocketAPI() {
49
+ return WebSocket;
50
+ },
51
+
52
+ getXHRAPI() {
53
+ return XMLHttpRequest;
54
+ },
55
+
56
+ getNetwork() {
57
+ return Network;
58
+ },
59
+
60
+ randomInt(max: number): number {
61
+ /**
62
+ * Return values in the range of [0, 1[
63
+ */
64
+ const random = function () {
65
+ const crypto = globalThis.crypto || globalThis['msCrypto'];
66
+ const random = crypto.getRandomValues(new Uint32Array(1))[0];
67
+
68
+ return random / 2 ** 32;
69
+ };
70
+
71
+ return Math.floor(random() * max);
72
+ },
73
+ };
74
+
75
+ export default Worker;
@@ -0,0 +1,39 @@
1
+ import Logger from 'core/logger';
2
+ import TimelineSender from 'core/timeline/timeline_sender';
3
+ import * as Collections from 'core/utils/collections';
4
+ import Util from 'core/util';
5
+ import Runtime from 'runtime';
6
+ import TimelineTransport from 'core/timeline/timeline_transport';
7
+
8
+ var getAgent = function (sender: TimelineSender, useTLS: boolean) {
9
+ return function (data: any, callback: Function) {
10
+ var scheme = 'http' + (useTLS ? 's' : '') + '://';
11
+ var url =
12
+ scheme + (sender.host || sender.options.host) + sender.options.path;
13
+ var query = Collections.buildQueryString(data);
14
+ url += '/' + 2 + '?' + query;
15
+
16
+ fetch(url)
17
+ .then((response) => {
18
+ if (response.status !== 200) {
19
+ throw `received ${response.status} from stats.pusher.com`;
20
+ }
21
+ return response.json();
22
+ })
23
+ .then(({ host }) => {
24
+ if (host) {
25
+ sender.host = host;
26
+ }
27
+ })
28
+ .catch((err) => {
29
+ Logger.debug('TimelineSender Error: ', err);
30
+ });
31
+ };
32
+ };
33
+
34
+ var fetchTimeline = {
35
+ name: 'xhr',
36
+ getAgent,
37
+ };
38
+
39
+ export default fetchTimeline;