main.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /* global DEFAULTS LIMITS WEB_UI PREFS */
  2. import 'core-js';
  3. import 'fast-text-encoding'; // MS Edge support
  4. import 'intl-pluralrules';
  5. import choo from 'choo';
  6. import nanotiming from 'nanotiming';
  7. import routes from './routes';
  8. import getCapabilities from './capabilities';
  9. import controller from './controller';
  10. import dragManager from './dragManager';
  11. import pasteManager from './pasteManager';
  12. import storage from './storage';
  13. import experiments from './experiments';
  14. import * as Sentry from '@sentry/browser';
  15. import './main.css';
  16. import User from './user';
  17. import { getTranslator } from './locale';
  18. import Archive from './archive';
  19. import { setTranslate, locale } from './utils';
  20. if (navigator.doNotTrack !== '1' && window.SENTRY_CONFIG) {
  21. Sentry.init(window.SENTRY_CONFIG);
  22. }
  23. if (process.env.NODE_ENV === 'production') {
  24. nanotiming.disabled = true;
  25. }
  26. (async function start() {
  27. const capabilities = await getCapabilities();
  28. if (
  29. !capabilities.crypto &&
  30. window.location.pathname !== '/unsupported/crypto'
  31. ) {
  32. return window.location.assign('/unsupported/crypto');
  33. }
  34. if (capabilities.serviceWorker) {
  35. try {
  36. await navigator.serviceWorker.register('/serviceWorker.js');
  37. await navigator.serviceWorker.ready;
  38. } catch (e) {
  39. // continue but disable streaming downloads
  40. capabilities.streamDownload = false;
  41. }
  42. }
  43. const translate = await getTranslator(locale());
  44. setTranslate(translate);
  45. // eslint-disable-next-line require-atomic-updates
  46. window.initialState = {
  47. LIMITS,
  48. DEFAULTS,
  49. WEB_UI,
  50. PREFS,
  51. archive: new Archive([], DEFAULTS.EXPIRE_SECONDS, DEFAULTS.DOWNLOADS),
  52. capabilities,
  53. translate,
  54. storage,
  55. sentry: Sentry,
  56. user: new User(storage, LIMITS, window.AUTH_CONFIG),
  57. transfer: null,
  58. fileInfo: null,
  59. locale: locale()
  60. };
  61. const app = routes(choo({ hash: true }));
  62. // eslint-disable-next-line require-atomic-updates
  63. window.app = app;
  64. app.use(experiments);
  65. app.use(controller);
  66. app.use(dragManager);
  67. app.use(pasteManager);
  68. app.mount('body');
  69. })();