Uploaded source

This commit is contained in:
Madiator2011 2021-08-16 12:11:25 +02:00
commit 27c9e79595
1163 changed files with 140572 additions and 0 deletions

64
.env.defaults Normal file
View file

@ -0,0 +1,64 @@
# Copy this file to .env to make modifications
# Base config
MATOMO_URL=https://analytics.lbry.com/
MATOMO_ID=4
WEBPACK_WEB_PORT=9090
WEBPACK_ELECTRON_PORT=9091
WEB_SERVER_PORT=1337
LBRY_WEB_API=https://api.lbry.tv
LBRY_WEB_STREAMING_API=https://cdn.lbryplayer.xyz
LBRY_WEB_BUFFER_API=https://collector-service.api.lbry.tv/api/v1/events/video
COMMENT_SERVER_API=https://comments.lbry.com/api/v2
WELCOME_VERSION=1.0
# Custom Site info
DOMAIN=lbry.tv
URL=https://lbry.tv
THUMBNAIL_CDN_URL=https://image-optimizer.vanwanet.com/?address=
# UI
SITE_TITLE=lbry.tv
SITE_NAME=lbry.tv
SITE_DESCRIPTION=Meet LBRY, an open, free, and community-controlled content wonderland.
SITE_HELP_EMAIL=help@lbry.com
LOGO_TITLE=lbry.tv
SIMPLE_SITE=false
SHOW_ADS=true
YRBL_HAPPY_IMG_URL=https://cdn.lbryplayer.xyz/api/v3/streams/free/yrbl-happy/7aa50a7e5adaf48691935d55e45d697547392929/839d9a
YRBL_SAD_IMG_URL=https://cdn.lbryplayer.xyz/api/v3/streams/free/yrbl-sad/c2d9649633d974e5ffb503925e1f17d951f1bd0f/f262dd
ENABLE_COMMENT_REACTIONS=true
ENABLE_FILE_REACTIONS=false
ENABLE_CREATOR_REACTIONS=false
ENABLE_NO_SOURCE_CLAIMS=false
ENABLE_PREROLL_ADS=false
CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS=4
CHANNEL_STAKED_LEVEL_LIVESTREAM=5
WEB_PUBLISH_SIZE_LIMIT_GB=4
# OG
OG_TITLE_SUFFIX=| lbry.tv
OG_HOMEPAGE_TITLE=lbry.tv
OG_IMAGE_URL=
SITE_CANONICAL_URL=https://lbry.tv
# LOCALE
DEFAULT_LANGUAGE=en
# Custom Settings
# Additional settings for below are found in ui/constants/settings and are for
# preventing user settings from applying to custom sites without overwriting them.
# UNSYNCED_SETTINGS='theme dark_mode_times automatic_dark_mode_enabled'
KNOWN_APP_DOMAINS=lbry.tv,lbry.lat,odysee.com
# Custom Content
# If the following is true, copy custom/homepage.example.js to custom/homepage.js and modify
CUSTOM_HOMEPAGE=false
# Add channels to auto-follow on first run
AUTO_FOLLOW_CHANNELS=lbry://@lbry#3fda836a92faaceedfe398225fb9b2ee2ed1f01a
# Add up to 2 sidebar links:
# PINNED_URI_1=@Lbrylatam#2/Integracionesporseguridad#4
# PINNED_LABEL_1=LBRY LATAM
# PINNED_URI_2=$/discover?t=lbrytvpaidbeta&fee_amount=>0&claim_type=stream&channel_ids=5af39f818f668d8c00943c9326c5201c4fe3c423,cda9c4e92f19d6fe0764524a2012056e06ca2055,760da3ba3dd85830a843beaaed543a89b7a367e7,40c36948f0da072dcba3e4833e90f71e16de78be,e8f68563d242f6ac9784dcbc41dd86c28a9391d6,7236fc5d2783ea7314d9076ae6c8a250e3992d1a,cf7792c2a37d0d76aaaff84aff0b99a8c791429d,8316ac90764fedf3147799b7b81a6575a9cc398e,8627af93c1a1219150f06b698f4b33e6ed2f1c1e,8972a1bd06de5186e5e89292b05aac8aaa817791,c5b0b17838df2f6c31162f64d55f60f34ae8bfc6,f576d5dba905fc179de880c3fe3eb3281ea74f59,97dd77c93c9603cbb2583f3589f7f5a6c92baa43,f399d873e0c37cf24de9569b5f22bbb30a5c6709,dba870d0620d41b2b9a152c961e0c06cf875ccfc,ca1fd651c9d14bf2e5088bb2aa0146ee7aeb2ae0,50ad846a4b1543b847bf3fdafb7b45f6b2f5844c,e09ff5abe9fb44dd0dd0576894a6db60a6211603,7b6f7517f6b816827d076fa0eaad550aa315a4e7,2068452c41d8da3bd68961335da0072a99258a1a,5da63df97c8255ae94a88940695b8471657dd5a1,3645cf2f5d0bdac0523f945be1c3ff60758f7845,4da85b12244839d6368b9290f1619ff9514ab2a8,4ad942982e43326c7700b1b6443049b3cfd82161,55304f219244abf82f684f759cc0c7769242f3b4,8f42e5b592bb7f7a03f4a94a86a41b1236bb099f,e2a014d885a48f5be2dc6409610996337312facb,c18996ca488753f714d36d4654715927c1d7f9c2,ebc4214424cfa683a7046e1f794fea1e44788d84,06b6d6d6a893fb589ec2ded948f5122856921ed5,07e4546674268fc0222b2ca22d31d0549dc217ee,060940e41973d4f7f16d72a2733138e931c35f41,f8d6eccd887c9cebd36b1d42aa349279b7f5c3ed,68098b8426f967b8d04cc566348b5c128823219e,2bfe6cdb24a21bdc1b76fb7c416edd50e9e85945,1f9bb08bfa2259629f4aaa9ed40f97e9a41b6fa1,2f20148495612946675fe1c8ea99171e4d950b81,bc6938fa1e09e840056c2e831abf9664f397c472,2a6194792beac5130641e932b5ac6e5a99b5ca4f,185ba2bd547a5e4a77d29fe6c1484f47db5e058f,29cc7f6081268eaa5b3f2946e0cd0b952a94812c,49389450b1241f5d8f4c8c4271a3eb56bba33965,ffdc62ac2f7549398d3aca9d2119e83d80d588d5,d7a4d2808074b0c55d6b239f69d90e7a4930f943,d58aa4a0b2f6c2504c3abce8de3f1afb71800acc,77ae23dc7eb8a75609881d4548a79e4935a89d37,f79bce8a60fbece671f6265adc39f6469f3b9b8c,051995fdf0af634e4911704057a551e9392e62b1
# PINNED_LABEL_2=Paid Beta

4
.eslintignore Normal file
View file

@ -0,0 +1,4 @@
node_modules/*
./node_modules/**
**/node_modules/**
web/dist/**

62
.eslintrc Normal file
View file

@ -0,0 +1,62 @@
{
"parser": "babel-eslint",
"extends": ["standard", "standard-jsx", "plugin:react/recommended", "plugin:flowtype/recommended"],
"plugins": ["flowtype", "import", "react-hooks"],
"env": {
"browser": true,
"node": true
},
"globals": {
"__static": true,
"i18n": true,
"__": true,
"app": true,
"IS_WEB": true,
"WEBPACK_PORT": true
},
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"brace-style": 0,
"camelcase": 0,
"comma-dangle": ["error", "always-multiline"],
"handle-callback-err": 0,
"indent": 0,
"jsx-quotes": ["error", "prefer-double"],
"new-cap": 0,
"no-console": 1,
"no-control-regex": 0,
"no-multi-spaces": 0,
"no-redeclare": 0,
"no-return-await": 0,
"object-curly-spacing": 0,
"one-var": 0,
"prefer-promise-reject-errors": 0,
"react/jsx-indent": 0,
"react/jsx-no-comment-textnodes": 0,
"react-hooks/exhaustive-deps": "warn",
"react-hooks/rules-of-hooks": "error",
"react/no-unescaped-entities": 0,
"space-before-function-paren": [
"error",
{
"anonymous": "never",
"named": "never",
"asyncArrow": "always"
}
],
"standard/object-curly-even-spacing": 0,
"standard/no-callback-literal": 0,
"react/display-name": 0,
"semi": [
"error",
"always",
{
"omitLastInOneLineBlock": true
}
]
}
}

43
.flowconfig Normal file
View file

@ -0,0 +1,43 @@
[ignore]
.*\.typeface\.json
.*/node_modules/findup/.*
[include]
[libs]
./flow-typed
node_modules/lbry-redux/flow-typed/
node_modules/lbryinc/flow-typed/
[untyped]
.*/node_modules/lbry-redux
.*/node_modules/lbryinc
[lints]
[options]
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue
module.name_mapper='^constants\(.*\)$' -> '<PROJECT_ROOT>/ui/constants\1'
module.name_mapper='^util\(.*\)$' -> '<PROJECT_ROOT>/ui/util\1'
module.name_mapper='^redux\(.*\)$' -> '<PROJECT_ROOT>/ui/redux\1'
module.name_mapper='^types\(.*\)$' -> '<PROJECT_ROOT>/ui/types\1'
module.name_mapper='^component\(.*\)$' -> '<PROJECT_ROOT>/ui/component\1'
module.name_mapper='^page\(.*\)$' -> '<PROJECT_ROOT>/ui/page\1'
module.name_mapper='^lbry\(.*\)$' -> '<PROJECT_ROOT>/ui/lbry\1'
module.name_mapper='^modal\(.*\)$' -> '<PROJECT_ROOT>/ui/modal\1'
module.name_mapper='^app\(.*\)$' -> '<PROJECT_ROOT>/ui/app\1'
module.name_mapper='^native\(.*\)$' -> '<PROJECT_ROOT>/ui/native\1'
module.name_mapper='^analytics\(.*\)$' -> '<PROJECT_ROOT>/ui/analytics\1'
module.name_mapper='^rewards\(.*\)$' -> '<PROJECT_ROOT>/ui/rewards\1'
module.name_mapper='^i18n\(.*\)$' -> '<PROJECT_ROOT>/ui/i18n\1'
module.name_mapper='^effects\(.*\)$' -> '<PROJECT_ROOT>/ui/effects\1'
module.name_mapper='^comments\(.*\)$' -> '<PROJECT_ROOT>/ui/comments\1'
module.name_mapper='^config\(.*\)$' -> '<PROJECT_ROOT>/config\1'
module.name_mapper='^web\/component\(.*\)$' -> '<PROJECT_ROOT>/web/component\1'
module.name_mapper='^web\/effects\(.*\)$' -> '<PROJECT_ROOT>/web/effects\1'
module.name_mapper='^web\/page\(.*\)$' -> '<PROJECT_ROOT>/web/page\1'
module.name_mapper='^homepage\(.*\)$' -> '<PROJECT_ROOT>/ui/util/homepage\1'
[strict]

36
.gitignore vendored Normal file
View file

@ -0,0 +1,36 @@
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
node_modules
dist
/static/lbrynet*
/static/daemon
/static/locales
yarn-error.log
package-lock.json
.transifexrc
.idea/
/build/daemon*
/lbrytv/dist/
/lbrytv/node_modules
/static/lbry-first/
/build/lbryFirst*
/web/dist/*
/web/node_modules/*
/web/.env
/web/.env.defaults
/custom/*
/custom/homepages/*
/custom/content/*
!/custom/content/default.json
!/custom/content/test.json
!/custom/homepages/.gitkeep
!/custom/homepages
!/custom/content
!/custom/homepage.example.js
!/custom/robots.disallowall
!/custom/robots.allowall
.env
diff

9
.lintstagedrc.json Normal file
View file

@ -0,0 +1,9 @@
{
"linters": {
"ui/**/*.{js,jsx,scss,json}": ["prettier --write", "git add"],
"web/**/*.{js,jsx,scss,json}": ["prettier --write", "git add"],
"ui/**/*.{js,jsx}": ["eslint", "flow focus-check --color always", "git add"],
"web/**/*.{js,jsx,scss}": ["eslint", "git add"]
},
"ignore": ["node_modules", "web/dist/**/*", "dist/**/*", "package-lock.json"]
}

5
.prettierrc.json Normal file
View file

@ -0,0 +1,5 @@
{
"trailingComma": "es5",
"printWidth": 120,
"singleQuote": true
}

4
.sentryclirc Normal file
View file

@ -0,0 +1,4 @@
[defaults]
url = https://sentry.lbry.tech/
org = lbry
project = lbry-desktop-web

7
.tx/config Normal file
View file

@ -0,0 +1,7 @@
[main]
host = https://www.transifex.com
[lbry-desktop.app-strings]
source_file = static/app-strings.json
source_lang = en
type = KEYVALUEJSON

1873
CHANGELOG.md Normal file

File diff suppressed because it is too large Load diff

201
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,201 @@
# Contribute to LBRY
**First:** if you're unsure or afraid of anything, just ask or submit the issue or pull request anyways. You won't be yelled at for giving your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions, and don't want a wall of rules to get in the way of that.
However, for those individuals who want a bit more guidance on the best way to contribute to the project, read on. This document will cover what we're looking for. By addressing all the points we're looking for, it raises the chances we can quickly merge or address your contributions.
## TL;DR?
- [Here](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+no%3Aassignee)
is a list of help wanted issues.
- Comment on an issue to let us know if you are going to work on it, don't take an issue that someone reserved less than 3 days ago.
- Submit a pull request and get paid in LBC.
- Don't hesitate to contact us with any questions or comments.
## Contents
- [Choose an Issue](#choose-an-issue)
- [Code Overview](#code-overview)
- [Libraries](#libraries)
- [Flow](#flow)
- [Lint](#lint)
- [Code Formatting](#code-formatting)
- [Debug](#debug)
- [Submit a Pull Request](#submit-a-pull-request)
- [Tom's "Voice of the User" Wishlist](#toms-voice-of-the-user-wishlist)
- [Get in Touch](#get-in-touch)
- [More Information](#more-information)
## Choose an Issue
LBRY is an open source project and therefore is developed out in the open for everyone to see. What
you see here are the latest source code changes and issues.
Since LBRY is based on a decentralized community, we believe that the app will be stronger if it
receives contributions from individuals outside the core team -- such as yourself!
To make contributing as easy and rewarding as possible, we have instituted the following system:
- Anyone can view all issues in the system by clicking on the
[Issues](https://github.com/lbryio/lbry-desktop/issues) button at the top of the page. Feel free to
add an issue if you think we have missed something (and you might earn some LBC in the process
because we do tip people for reporting bugs).
- Once on the [Issues](https://github.com/lbryio/lbry-desktop/issues) page, a potential contributor can
filter issues by the
[Help Wanted](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+no%3Aassignee)
label to see a curated list of suggested issues with which community members can help.
- Every
[Help Wanted](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+no%3Aassignee)
issue is ranked on a scale from zero to four.
| Level | Description |
| ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| [**level 0**](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+label%3A%22level%3A+0%22+no%3Aassignee) | Typos and text edits -- a tech-savvy non-programmer can fix these. |
| [**level 1**](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+label%3A%22level%3A+1%22+no%3Aassignee) | Programming issues that require little knowledge of how the LBRY app works. |
| [**level 2**](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+label%3A%22level%3A+2%22+no%3Aassignee) | Issues of average difficulty that require the developer to dig into how the app works a little bit. |
| [**level 3**](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+label%3A%22level%3A+3%22+no%3Aassignee) | Issues that are likely too tricky to be level 2 or require more thinking outside of the box. |
| [**level 4**](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+label%3A%22level%3A+4%22+no%3Aassignee) | Big features or really hard issues. |
The process of ranking issues is highly subjective. The purpose of sorting issues like this is to
give contributors a general idea about the type of issues they are looking at. For instance, it could very well be
the case that a level 1 issue is more difficult than a level 2 issue. This system is meant
to help you find relevant issues, not to prevent you from working on issues that you otherwise
would. If these rankings don't work for you, feel free to ignore them.
Although all contributions should have good UX, the [UX label, when applied in conjunction with Help Wanted](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+label%3Aux+no%3Aassignee), indicates that the contributor ought to implement the feature in a creative way that specifically focuses on providing a good user experience. These issues often have no set instruction for how the experience should be and leave it to the contributor to figure out. This may be challenging for people who do not like UX, but also more fun and rewarding for those who do.
## Code Overview
The entry point for this application is [`electron/index.js`](https://github.com/lbryio/lbry-desktop/blob/master/electron/index.js).
This application is primarily written in JavaScript and is built on [Electron](https://electronjs.org)
while utilizing [React](https://reactjs.org) and [Redux](https://redux.js.org) for UI and
application state.
The project comes with diverse tools for simplifying the development process and for providing
better code quality. It's recommended to make use of them thoroughly during ongoing development. We follow the well-known [Airbnb JavaScript Style Guide](https://airbnb.io/javascript/) for defining
our styling rules and code best practices.
### Libraries
This project uses [lbry-redux](https://github.com/lbryio/lbry-redux) and [lbryionc](https://github.com/lbryio/lbryinc) to share Redux and LBRY API specific code with other LBRY apps. Over time, more Redux code that is suitable to be shared will be moved into lbry-redux. If modifying Redux code, you may be asked to make some of your changes in lbry-redux rather than lbry-desktop. The steps to work with lbry-redux locally can be found [here](https://github.com/lbryio/lbry-redux#local-development).
### Flow
[Flow](https://flow.org/) is a static type checker for JavaScript. Flow checks your code for
errors through static type annotations. For using Flow, you need to add the following
annotation to the beginning of the file you're editing:
`// @flow`
After adding this, you can start adding [type annotations](https://flow.org/en/docs/types/) to
the code.
If you add a project dependency and you want to use it with Flow, you need to import its type
definitions in the project by running:
`$ yarn flow-defs`
### Lint
Code linting is ensured by [ESLint](https://eslint.org/) and [Flow CLI](https://flow.org/en/docs/cli/).
You can lint all the project's sources at any time by running:
`$ yarn lint`
If you desire to lint a specific file or directory you can use:
```
$ yarn eslint 'glob/pattern'
$ yarn flow focus-check 'glob/pattern'
```
In addition to those commands, staged files are automatically linted before commit. Please take the
time to fix all staged files' linting problems before committing or suppress them if necessary.
If you want the linting problems to show up on your IDE or text editor, check out
[ESLint integrations](https://eslint.org/docs/user-guide/integrations).
### Code Formatting
Project's sources are formatted using [Prettier](https://prettier.io/).
Staged files are automatically formatted before commit.
You can also use the following command:
`$ yarn format`
for applying formatting rules to the entire project's code. For formatting a specific file or
directory, use:
`$ yarn prettier 'glob/pattern'`
Editor integrations are available [here](https://prettier.io/docs/en/editors.html).
### Debug
There are a few tools integrated to the project that will ease the process of debugging:
- [Chrome DevTools](https://developer.chrome.com/devtools)
- Also available for the main process as a [remote target](chrome://inspect/#devices).
- [Electron Devtron](https://electronjs.org/devtron)
- [React DevTools](https://github.com/facebook/react-devtools)
- [Redux DevTools](https://github.com/gaearon/redux-devtools)
## Submit a Pull Request
- After deciding what to work on, a potential contributor can
[fork](https://help.github.com/articles/fork-a-repo/) this repository, make his or her changes,
and submit a
[pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/). A
contributor wanting to reserve an issue in advance can leave a comment saying that he or she is
working on it. Contributors should respect other people's efforts to complete issues in a timely
manner and, therefore, not begin working on anything reserved (or updated) within the last 3 days.
If someone has been officially assigned an issue via GitHub's assignment system, it is also not
available. Contributors are encouraged to ask if they have any questions about issue availability.
- The [changelog](https://github.com/lbryio/lbry-desktop/blob/master/CHANGELOG.md) should be updated to
include a reference to the fix/change/addition. See previous entries for format.
- Once the pull request is visible in the LBRY repo, a LBRY team member will review it and make sure
it is up to our standards. At this point, the contributor may have to change his or her code based
on our suggestions and comments.
- Then, upon a satisfactory review of the code, we will merge it and send the contributor a tip (in
LBC) for the contribution.
We are dedicated to being fair and friendly in this process. In **general**, level 4 issues will be
paid more than level 3 issues which will be paid more than level 2, and so on. However, this is not
due to their labeling, but rather how difficult they end up being. Maybe an issue labeled "level 1"
turns out to be very difficult. In this case, we would be **more than happy** to tip accordingly. If
you do good work, we want you to be rewarded for it.
Also, we are here to enable you. We want you to succeed, so do not hesitate to ask questions. If you
need some information or assistance in completing an issue, please let us know! That is what we are
here for-- pushing development forward.
Lastly, don't feel limited by this list. Should LBRY have built-in Tor support? Add it! It's not in
the issue tracker, but maybe it's a good idea. Do you think the search layout is unintuitive? Change
it! We welcome all feedback and suggestions. That said, it may be the case that we do not wish to
incorporate your change if you don't check with us first (also, please check with us especially if
you are planning on adding Tor support :P). If you want to add a feature that is not listed in the
issue tracker, go ahead and [create an issue](https://github.com/lbryio/lbry-desktop/issues/new), and
say in the description that you would like to try to implement it yourself. This way we can tell you
in advance if we will accept your changes and we can point you in the right direction.
# Tom's "Voice of the User" Wishlist
[Anything marked with **both** "Help Wanted" and "Tom's 'Voice of the User' Wishlist"](https://github.com/lbryio/lbry-desktop/issues?q=is%3Aopen+is%3Aissue+label%3A%22Tom%27s+%5C%22Voice+of+the+User%5C%22+Wishlist%22+label%3A%22help+wanted%22+no%3Aassignee)
will earn you an extra 50 LBC on top of what we would otherwise tip you.
# Get in Touch
| Name | Role | Discord | Email |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------- |
| [Tom](https://github.com/tzarebczan) | Community manager. He knows more than anyone about the app and all of its flaws. Reach out to him with any questions about how the app works, if a bug has been reported, or if a feature should be requested. | jiggytom | tom@lbry.com |
| [Sean](https://github.com/seanyesmunt) | The primary engineer working on the app. Feel free to ask any questions about the code. | sean | sean@lbry.com |
Join our Discord [here](https://chat.lbry.com/).
# More Information
More information about contributing to LBRY [here](https://lbry.tech/contribute).

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017-2021 LBRY Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

178
README.md Normal file
View file

@ -0,0 +1,178 @@
<img width="40%" src="https://miro.medium.com/max/5198/1*bTVuL2THG_0mpwmE-n7Ezg.png" />
# LBRY App - https://lbry.tv
This repo contains the UI code that powers the official LBRY desktop app, as well as lbry.tv. The LBRY app is a graphical browser for the decentralized content marketplace provided by the
[LBRY](https://lbry.com) protocol. It is essentially the
[lbry daemon](https://github.com/lbryio/lbry) bundled with a UI using
[Electron](https://electron.atom.io/).
<a href="https://github.com/lbryio/lbry-desktop/blob/master/LICENSE" title="MIT licensed">
<img alt="npm" src="https://img.shields.io/dub/l/vibe-d.svg?style=flat">
</a>
<a href="https://GitHub.com/lbryio/lbry-desktop/releases/" title="GitHub release">
<img src="https://img.shields.io/github/release/lbryio/lbry-desktop.svg"/>
</a>
<a href="https://travis-ci.org/lbryio/lbry-desktop">
<img src="https://travis-ci.org/lbryio/lbry-desktop.svg?branch=master" alt="Build Status" />
</a>
<a href="https://chat.lbry.com">
<img alt="GitHub contributors" src="https://img.shields.io/discord/362322208485277697.svg?logo=discord" alt="chat on Discord">
</a>
<h2>
<a href="https://forthebadge.com" title="forthebadge">
<img alt="forthebadge" src="https://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg">
</a>
<a href="https://forthebadge.com" title="forthebadge">
<img alt="forthebadge" src="https://forthebadge.com/images/badges/approved-by-veridian-dynamics.svg">
</a>
</h2>
![App GIF](https://spee.ch/ba/lbry-joule.gif)
## Table of Contents
1. [Install](#install)
2. [Usage](#usage)
3. [Running from Source](#running-from-source)
4. [Contributing](#contributing)
5. [License](#license)
6. [Security](#security)
7. [Contact](#contact)
## Install
[![Windows](https://img.shields.io/badge/Windows-Install-blue)](https://lbry.com/get/lbry.exe)
[![Linux](https://img.shields.io/badge/Linux-Install-blue)](https://lbry.com/get/lbry.deb)
[![MacOS](https://img.shields.io/badge/MacOS-Install-blue)](https://lbry.com/get/lbry.dmg)
We provide installers for Windows, macOS (v10.12.4, Sierra, or greater), and Debian-based Linux. See community maintained builds section for alternative Linux installations.
| | Windows | macOS | Linux |
| --------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
| Latest Stable Release | [Download](https://lbry.com/get/lbry.exe) | [Download](https://lbry.com/get/lbry.dmg) | [Download](https://lbry.com/get/lbry.deb) |
| Latest Pre-release | [Download](https://lbry.com/get/lbry.pre.exe) | [Download](https://lbry.com/get/lbry.pre.dmg) | [Download](https://lbry.com/get/lbry.pre.deb) |
Our [releases page](https://github.com/lbryio/lbry-desktop/releases) also contains the latest
release, pre-releases, and past builds.
_Note: If the deb fails to install using the Ubuntu Software Center, install manually via `sudo dpkg -i <path to deb>`. You'll need to run `sudo apt-get install -f` if this is the first time installing it to install dependencies_
To install from source or make changes to the application, continue to the next section below.
**Community maintained** builds for Arch Linux and Flatpak are available, see below. These installs will need to be updated manually as the in-app update process only supports Debian installs at this time.
_Note: If coming from a deb install, the directory structure is different and you'll need to [migrate data](https://lbry.com/faq/backup-data)._
| | Flatpak | Arch | Nixpkgs | ARM/ARM64 |
| -------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------- |
| Latest Release | [FlatHub Page](https://flathub.org/apps/details/io.lbry.lbry-app) | [AUR Package](https://aur.archlinux.org/packages/lbry-app-bin/) | [Nixpkgs](https://search.nixos.org/packages?channel=unstable&show=lbry&query=lbry) | [Build Guide](https://lbry.tv/@LBRYarm:5) |
| Maintainers | [@kcSeb](https://keybase.io/kcseb) | [@kcSeb](https://keybase.io/kcseb)/[@TimurKiyivinski](https://github.com/TimurKiyivinski) | [@Enderger](https://github.com/enderger) | [@Madiator2011](https://github.com/kodxana) |
## Usage
Double click the installed application to interact with the LBRY network.
## Running from Source
You can run the web version (lbry.tv), the electron app, or both at the same time.
#### Prerequisites
- [Git](https://git-scm.com/downloads)
- [Node.js](https://nodejs.org/en/download/) (v10 required)
- [Yarn](https://yarnpkg.com/en/docs/install)
1. Clone (or [fork](https://help.github.com/articles/fork-a-repo/)) this repository: `git clone https://github.com/lbryio/lbry-desktop`
2. Change directory into the cloned repository: `cd lbry-desktop`
3. Install the dependencies: `yarn`
#### Run the electron app
`yarn dev`
- If you want to build and launch the production app you can run `yarn build`. This will give you an executable inside the `/dist` folder. We use [electron-builder](https://github.com/electron-userland/electron-builder) to create distributable packages.
#### Run the web app for development
`yarn dev:web`
- This uses webpack-dev-server and includes hot-reloading. If you want to debug the [web server we use in production](https://github.com/lbryio/lbry-desktop/blob/master/src/platforms/web/server.js) you can run `yarn dev:web-server`. This starts a server at `localhost:1337` and does not include hot reloading.
#### Customize the web app
- In root directory, duplicate the .env.default file and rename it to .env then copy the code below and paste it anywhere in the .env file.
```
cp .env.defaults .env
nano .env
```
- To specify your own OG-IMAGE
You can either place a png named v2-og.png in the /custom folder or specify the OG_IMAGE_URL in .env
- To specify your own channels to be followed on first run
`AUTO_FOLLOW_URLS=lbry://@chan#123...a lbry://@chan2#456...a`
- If you want to customize the homepage content
1. add `CUSTOM_HOMEPAGE=true` to the '.env' file
2. copy `/custom/homepage.example.js` to `/custom/homepage.js` and make desired changes to `homepage.js`
- If you want up to two custom sidebar links
```
PINNED_URI_1=@someurl#2/someclaim#4
PINNED_LABEL_1=Linktext
PINNED_URI_2=$/discover?t=tag&[queryparams]
PINNED_LABEL_2=OtherLinkText
```
- Finally `NODE_ENV=production yarn compile:web` to rebuild
_Note: You don't need to edit the .env file in the /web folder - that is copied during compile._
#### Deploy the web app (_experimental_)
1. Create a server with a domain name and a reverse proxy https to port 1337.
2. Install pm2, node v10, yarn
3. Clone this repo
4. Make any customizations as above
5. Run `yarn` to install
6. Run `NODE_ENV=production yarn compile:web` to build
7. Set up pm2 to start ./web/index.js
#### Run both at the same time
Run the two commands above in separate terminal windows
```
yarn dev
// in another terminal window
yarn dev:web
```
#### Resetting your Packages
If the app isn't building, or `yarn xxx` commands aren't working you may need to just reset your `node_modules`. To do so you can run: `rm -r node_modules && yarn` or `del /s /q node_modules && yarn` on Windows.
If you _really_ think something might have gone wrong, you can force your repo to clear everything that doesn't match the repo with `git reset --hard HEAD && git clean -fxd && git pull -r`
## Contributing
We :heart: contributions from everyone and contributions to this project are encouraged, and compensated. We welcome [bug reports](https://github.com/lbryio/lbry-desktop/issues/), [bug fixes](https://github.com/lbryio/lbry-desktop/pulls) and feedback is always appreciated. For more details, see [CONTRIBUTING.md](CONTRIBUTING.md).
## [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/lbryio/lbry-desktop/issues) [![GitHub contributors](https://img.shields.io/github/contributors/lbryio/lbry-desktop.svg)](https://GitHub.com/lbryio/lbry-desktop/graphs/contributors/)
## License
This project is MIT licensed. For the full license, see [LICENSE](LICENSE).
## Security
We take security seriously. Please contact security@lbry.com regarding any security issues. Our PGP key is [here](https://lbry.com/faq/pgp-key) if you need it. Previous versions up to v0.50.2 were signed by [Sean Yesmunt](https://keybase.io/seanyesmunt/key.asc).
New Releases are signed by [Jessop Breth](https://keybase.io/jessopb/key.asc).
## Contact
The primary contact for this project is [@jessopb](https://github.com/jessopb).

0
add Normal file
View file

16
babel.config.js Normal file
View file

@ -0,0 +1,16 @@
module.exports = api => {
api.cache(false);
return {
presets: [['@babel/env', { loose: true, modules: false }], '@babel/react', '@babel/flow'],
plugins: [
'import-glob',
'@babel/plugin-transform-runtime',
['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }],
'@babel/plugin-transform-flow-strip-types',
'@babel/plugin-proposal-class-properties',
'react-hot-loader/babel',
],
ignore: [/node_modules/],
};
};

View file

@ -0,0 +1,12 @@
const fs = require('fs');
module.exports = async function(params) {
const { artifactPaths } = params;
for (var i = 0; i < artifactPaths.length; i++) {
const artifactPath = artifactPaths[i];
if (artifactPath.includes('.blockmap') || artifactPath.includes('.zip')) {
fs.unlinkSync(artifactPath);
}
}
};

33
build/afterSignHook.js Normal file
View file

@ -0,0 +1,33 @@
// See: https://medium.com/@TwitterArchiveEraser/notarize-electron-apps-7a5f988406db
const fs = require('fs');
const path = require('path');
var electron_notarize = require('electron-notarize');
module.exports = async function() {
if (process.env.RUNNER_OS !== 'macOS') {
return;
}
const appId = 'io.lbry.LBRY';
const appPath = path.resolve(__dirname, '../dist/electron/mac/LBRY.app');
if (!fs.existsSync(appPath)) {
throw new Error(`Cannot find application at: ${appPath}`);
}
console.log(`Notarizing ${appId} found at ${appPath}`);
try {
await electron_notarize.notarize({
appBundleId: appId,
appPath: appPath,
appleId: process.env.NOTARIZATION_USERNAME,
appleIdPassword: process.env.NOTARIZATION_PASSWORD,
});
} catch (error) {
console.error(error);
}
console.log(`Done notarizing ${appId}`);
};

BIN
build/background.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

89
build/downloadDaemon.js Normal file
View file

@ -0,0 +1,89 @@
const path = require('path');
const fs = require('fs');
const packageJSON = require('../package.json');
const fetch = require('node-fetch');
const decompress = require('decompress');
const os = require('os');
const del = require('del');
const downloadDaemon = targetPlatform =>
new Promise((resolve, reject) => {
const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate;
const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion;
const daemonDir = path.join(__dirname, '..', packageJSON.lbrySettings.lbrynetDaemonDir);
let daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName;
const currentPlatform = os.platform();
let daemonPlatform = process.env.TARGET || targetPlatform || currentPlatform;
if (daemonPlatform === 'mac' || daemonPlatform === 'darwin') daemonPlatform = 'mac';
if (daemonPlatform === 'win32' || daemonPlatform === 'windows') {
daemonPlatform = 'windows';
daemonFileName += '.exe';
}
const daemonFilePath = path.join(daemonDir, daemonFileName);
const daemonVersionPath = path.join(__dirname, 'daemon.ver');
const tmpZipPath = path.join(__dirname, '..', 'dist', 'daemon.zip');
const daemonURL = daemonURLTemplate.replace(/DAEMONVER/g, daemonVersion).replace(/OSNAME/g, daemonPlatform);
// If a daemon and daemon.ver exists, check to see if it matches the current daemon version
const hasDaemonDownloaded = fs.existsSync(daemonFilePath);
const hasDaemonVersion = fs.existsSync(daemonVersionPath);
let downloadedDaemonVersion;
if (hasDaemonVersion) {
downloadedDaemonVersion = fs.readFileSync(daemonVersionPath, 'utf8');
}
if (hasDaemonDownloaded && hasDaemonVersion && downloadedDaemonVersion === daemonVersion) {
console.log('\x1b[34minfo\x1b[0m Daemon already downloaded');
resolve('Done');
} else {
console.log('\x1b[34minfo\x1b[0m Downloading daemon...');
fetch(daemonURL, {
method: 'GET',
headers: {
'Content-Type': 'application/zip',
},
})
.then(response => response.buffer())
.then(
result =>
new Promise((newResolve, newReject) => {
const distPath = path.join(__dirname, '..', 'dist');
const hasDistFolder = fs.existsSync(distPath);
if (!hasDistFolder) {
fs.mkdirSync(distPath);
}
fs.writeFile(tmpZipPath, result, error => {
if (error) return newReject(error);
return newResolve();
});
})
)
.then(() => del(`${daemonFilePath}*`))
.then()
.then(() =>
decompress(tmpZipPath, daemonDir, {
filter: file => path.basename(file.path) === daemonFileName,
})
)
.then(() => {
console.log(`\x1b[32msuccess\x1b[0m Daemon downloaded! - v${daemonVersion}`);
if (hasDaemonVersion) {
del(daemonVersionPath);
}
fs.writeFileSync(daemonVersionPath, daemonVersion, 'utf8');
resolve('Done');
})
.catch(error => {
console.error(`\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`);
reject(error);
});
}
});
downloadDaemon();

View file

@ -0,0 +1,91 @@
const path = require('path');
const fs = require('fs');
const packageJSON = require('../package.json');
const fetch = require('node-fetch');
const decompress = require('decompress');
const os = require('os');
const del = require('del');
const downloadLBRYFirst = targetPlatform =>
new Promise((resolve, reject) => {
const lbryFirstURLTemplate = packageJSON.lbrySettings.LBRYFirstUrlTemplate;
const lbryFirstVersion = packageJSON.lbrySettings.LBRYFirstVersion;
const lbryFirstDir = path.join(__dirname, '..', packageJSON.lbrySettings.LBRYFirstDir);
let lbryFirstFileName = packageJSON.lbrySettings.LBRYFirstFileName;
const currentPlatform = os.platform();
let lbryFirstPlatform = process.env.TARGET || targetPlatform || currentPlatform;
if (lbryFirstPlatform === 'linux') lbryFirstPlatform = 'Linux';
if (lbryFirstPlatform === 'mac' || lbryFirstPlatform === 'darwin') lbryFirstPlatform = 'Darwin';
if (lbryFirstPlatform === 'win32' || lbryFirstPlatform === 'windows') {
lbryFirstPlatform = 'Windows';
lbryFirstFileName += '.exe';
}
const lbryFirstFilePath = path.join(lbryFirstDir, lbryFirstFileName);
const lbryFirstVersionPath = path.join(__dirname, 'lbryFirst.ver');
const tmpZipPath = path.join(__dirname, '..', 'dist', 'lbryFirst.zip');
const lbryFirstURL = lbryFirstURLTemplate.replace(/LBRYFIRSTVER/g, lbryFirstVersion).replace(/OSNAME/g, lbryFirstPlatform);
console.log('URL:', lbryFirstURL);
// If a lbryFirst and lbryFirst.ver exists, check to see if it matches the current lbryFirst version
const hasLbryFirstDownloaded = fs.existsSync(lbryFirstFilePath);
const hasLbryFirstVersion = fs.existsSync(lbryFirstVersionPath);
let downloadedLbryFirstVersion;
if (hasLbryFirstVersion) {
downloadedLbryFirstVersion = fs.readFileSync(lbryFirstVersionPath, 'utf8');
}
if (hasLbryFirstDownloaded && hasLbryFirstVersion && downloadedLbryFirstVersion === lbryFirstVersion) {
console.log('\x1b[34minfo\x1b[0m LbryFirst already downloaded');
resolve('Done');
} else {
console.log('\x1b[34minfo\x1b[0m Downloading lbryFirst...');
fetch(lbryFirstURL, {
method: 'GET',
headers: {
'Content-Type': 'application/zip',
},
})
.then(response => response.buffer())
.then(
result =>
new Promise((newResolve, newReject) => {
const distPath = path.join(__dirname, '..', 'dist');
const hasDistFolder = fs.existsSync(distPath);
if (!hasDistFolder) {
fs.mkdirSync(distPath);
}
fs.writeFile(tmpZipPath, result, error => {
if (error) return newReject(error);
return newResolve();
});
})
)
.then(() => del(`${lbryFirstFilePath}*`))
.then()
.then(() =>
decompress(tmpZipPath, lbryFirstDir, {
filter: file => path.basename(file.path) === lbryFirstFileName,
})
)
.then(() => {
console.log('\x1b[32msuccess\x1b[0m LbryFirst downloaded!');
if (hasLbryFirstVersion) {
del(lbryFirstVersionPath);
}
fs.writeFileSync(lbryFirstVersionPath, lbryFirstVersion, 'utf8');
resolve('Done');
})
.catch(error => {
console.error(`\x1b[31merror\x1b[0m LbryFirst download failed due to: \x1b[35m${error}\x1b[0m`);
reject(error);
});
}
});
downloadLBRYFirst();

BIN
build/icon.icns Normal file

Binary file not shown.

BIN
build/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
build/icons/128x128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
build/icons/256x256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
build/icons/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
build/icons/48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
build/icons/96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
build/icons/lbry128.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
build/icons/lbry16.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
build/icons/lbry256.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
build/icons/lbry32.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
build/icons/lbry48.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
build/icons/lbry96.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

158
build/signBuildFiles.js Normal file
View file

@ -0,0 +1,158 @@
const { Octokit } = require('@octokit/rest');
const octokit = new Octokit();
var wget = require('node-wget');
const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');
const readline = require('readline');
// Global generated from cli prompt
let versionToSign;
// Why can't I do this with 'fs'? :/
function deleteFolderRecursive(path) {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach(function(file, index) {
var curPath = path + '/' + file;
if (fs.lstatSync(curPath).isDirectory()) {
// recurse
deleteFolderRecursive(curPath);
} else {
// delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
}
// Initial setup
// Create a file to store the hashes (creates a new copy if one exists)
const downloadPath = path.resolve(__dirname, '../dist/releaseDownloads');
const fileToSign = path.resolve(downloadPath, '../hashes.txt');
fs.openSync(fileToSign, 'w');
if (!fs.existsSync(downloadPath)) {
fs.mkdirSync(downloadPath);
} else {
deleteFolderRecursive(downloadPath);
fs.mkdirSync(downloadPath);
}
//
// Below is the actual code that downloads, hashes, and signs the release
//
function cleanUpAfterSigning() {
fs.unlinkSync(fileToSign);
deleteFolderRecursive(downloadPath);
console.log('Good to go captain');
process.exit(0);
}
function signFile() {
console.log('Logging in file with hashes using keybase...');
// All files are hashed and added to hashes.txt
// Sign it with keybase
const fileName = `LBRY_${versionToSign}_sigs.asc`;
const pathForSignedFile = path.resolve(__dirname, `../dist/${fileName}`);
exec(`keybase pgp sign -i ${fileToSign} -c -o ${pathForSignedFile}`, err => {
if (err) {
console.log('Error signing file with keybase');
}
cleanUpAfterSigning();
});
}
function hashFiles() {
console.log('Hashing assets downloaded from github...');
fs.readdir(downloadPath, function(err, items) {
if (err) {
console.log('Error signing files in ', downloadPath);
}
let count = 0;
for (var i = 0; i < items.length; i++) {
const file = items[i];
const filePath = path.resolve(__dirname, '../dist/releaseDownloads/', file);
exec(`sha256sum ${filePath}`, (err, stdout) => {
if (err) {
console.log('Error hashing ', filePath);
}
count += 1;
const hash = stdout.split(' ')[0];
const stringToAppend = `${hash} ${file}\n`;
fs.appendFileSync(fileToSign, stringToAppend);
if (count === items.length - 1) {
signFile();
}
});
}
});
}
let downloadCount = 0;
let fileCountToDownload;
function downloadFile(fileName, url) {
wget(
{
url: url,
dest: `${downloadPath}/`,
},
(error, response, body) => {
console.log(`Finished downloading `, fileName);
downloadCount += 1;
if (downloadCount === fileCountToDownload) {
hashFiles();
}
}
);
}
function downloadAssets() {
console.log('Downloading release assets...');
octokit.repos
.getReleaseByTag({
owner: 'lbryio',
repo: 'lbry-desktop',
tag: versionToSign,
})
.then(({ data }) => {
const release_id = data.id;
return octokit.repos.listReleases({
owner: 'lbryio',
repo: 'lbry-desktop',
release_id,
});
})
.then(({ data }) => {
const releaseToDownload = data.filter(releaseData => releaseData.tag_name === versionToSign)[0];
const assets = releaseToDownload.assets;
fileCountToDownload = assets.length;
assets
.map(({ browser_download_url, name }) => ({ download_url: browser_download_url, name }))
.forEach(({ name, download_url }) => {
const fileName = path.resolve(__dirname, `../dist/releaseDownloads/${name}`);
downloadFile(fileName, download_url);
});
})
.catch(error => console.log('Error downloading releases ', error));
}
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.question('Version to sign: ', function(version) {
const tag = version.startsWith('v') ? version : `v${version}`;
versionToSign = tag;
downloadAssets();
});

56
config.js Normal file
View file

@ -0,0 +1,56 @@
// On Web, this will find .env.defaults and optional .env in web/
// On Desktop App, this will find .env.defaults and optional .env in root dir
require('dotenv-defaults').config({ silent: false });
const config = {
MATOMO_URL: process.env.MATOMO_URL,
MATOMO_ID: process.env.MATOMO_ID,
WEBPACK_WEB_PORT: process.env.WEBPACK_WEB_PORT,
WEBPACK_ELECTRON_PORT: process.env.WEBPACK_ELECTRON_PORT,
WEB_SERVER_PORT: process.env.WEB_SERVER_PORT,
LBRY_WEB_API: process.env.LBRY_WEB_API, //api.lbry.tv',
LBRY_API_URL: process.env.LBRY_API_URL, //api.lbry.com',
LBRY_WEB_STREAMING_API: process.env.LBRY_WEB_STREAMING_API, //cdn.lbryplayer.xyz',
LBRY_WEB_BUFFER_API: process.env.LBRY_WEB_BUFFER_API,
COMMENT_SERVER_API: process.env.COMMENT_SERVER_API,
WELCOME_VERSION: process.env.WELCOME_VERSION,
DOMAIN: process.env.DOMAIN,
SHARE_DOMAIN_URL: process.env.SHARE_DOMAIN_URL,
URL: process.env.URL,
THUMBNAIL_CDN_URL: process.env.THUMBNAIL_CDN_URL,
SITE_TITLE: process.env.SITE_TITLE,
SITE_NAME: process.env.SITE_NAME,
SITE_DESCRIPTION: process.env.SITE_DESCRIPTION,
SITE_HELP_EMAIL: process.env.SITE_HELP_EMAIL,
LOGO_TITLE: process.env.LOGO_TITLE,
OG_TITLE_SUFFIX: process.env.OG_TITLE_SUFFIX,
OG_HOMEPAGE_TITLE: process.env.OG_HOMEPAGE_TITLE,
OG_IMAGE_URL: process.env.OG_IMAGE_URL,
YRBL_HAPPY_IMG_URL: process.env.YRBL_HAPPY_IMG_URL,
YRBL_SAD_IMG_URL: process.env.YRBL_SAD_IMG_URL,
LOGIN_IMG_URL: process.env.LOGIN_IMG_URL,
SITE_CANONICAL_URL: process.env.SITE_CANONICAL_URL,
DEFAULT_LANGUAGE: process.env.DEFAULT_LANGUAGE,
AUTO_FOLLOW_CHANNELS: process.env.AUTO_FOLLOW_CHANNELS,
UNSYNCED_SETTINGS: process.env.UNSYNCED_SETTINGS,
ENABLE_COMMENT_REACTIONS: process.env.ENABLE_COMMENT_REACTIONS === 'true',
ENABLE_FILE_REACTIONS: process.env.ENABLE_FILE_REACTIONS === 'true',
ENABLE_CREATOR_REACTIONS: process.env.ENABLE_CREATOR_REACTIONS === 'true',
ENABLE_NO_SOURCE_CLAIMS: process.env.ENABLE_NO_SOURCE_CLAIMS === 'true',
ENABLE_PREROLL_ADS: process.env.ENABLE_PREROLL_ADS === 'true',
CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS: process.env.CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS,
CHANNEL_STAKED_LEVEL_LIVESTREAM: process.env.CHANNEL_STAKED_LEVEL_LIVESTREAM,
WEB_PUBLISH_SIZE_LIMIT_GB: process.env.WEB_PUBLISH_SIZE_LIMIT_GB,
SIMPLE_SITE: process.env.SIMPLE_SITE === 'true',
SHOW_ADS: process.env.SHOW_ADS === 'true',
PINNED_URI_1: process.env.PINNED_URI_1,
PINNED_LABEL_1: process.env.PINNED_LABEL_1,
PINNED_URI_2: process.env.PINNED_URI_2,
PINNED_LABEL_2: process.env.PINNED_LABEL_2,
KNOWN_APP_DOMAINS: process.env.KNOWN_APP_DOMAINS ? process.env.KNOWN_APP_DOMAINS.split(',') : [],
};
config.URL_LOCAL = `http://localhost:${config.WEB_SERVER_PORT}`;
config.URL_DEV = `http://localhost:${config.WEBPACK_WEB_PORT}`;
module.exports = config;

306
custom/homepage.example.js Normal file
View file

@ -0,0 +1,306 @@
// @flow
/*
Creating custom homepage items
1) in web/ folder, copy `.env.defaults` to `.env` and make CUSTOM_HOMEPAGE=true
2) copy this file to homepage.js
3) Create item objects
{
title, // how the title link displays
link, // where the title link goes
options // what search results populate the homepage item
}
4) rowData.push(item) for each item in the order you want them
Item object examples:
Specific Channel
const LATEST_FROM_%CHANNEL% = {
title: 'Latest From @%channel%',
link: `/@%channelName%:%canonicalId%`,
options: {
orderBy: ['release_time'],
pageSize: 4,
channelIds: ['%channelId%'],
},
};
More complex List of channels with description icon filtering by fee_amount etc are possible
SOME_CHANNEL_IDS = ['channelId1', 'channelId2']
SOME_TAG = '
const SOME_CHANNELS_ITEM = {
title: '#aTitle',
link: `/$/${PAGES.DISCOVER}?${CS.TAGS_KEY}=aTag&fee_amount=>0&${CS.CLAIM_TYPE}=${CS.CLAIM_STREAM}&${
CS.CHANNEL_IDS_KEY
}=${SOME_CHANNEL_IDS.join(',')}`,
help: (
<div className="claim-grid__help">
<Icon
icon={ICONS.HELP}
tooltip
customTooltipText={__(
'Some tooltip text.'
)}
/>
</div>
),
options: { // search options
feeAmount: '>0',
claimType: ['stream'],
tags: ['tagOne', 'tagTwo'],
pageSize: 8,
channelIds: SOME_CHANNEL_IDS,
},
};
*/
import * as PAGES from 'constants/pages';
import * as CS from 'constants/claim_search';
import * as ICONS from 'constants/icons';
import { parseURI } from 'lbry-redux';
import moment from 'moment';
import { toCapitalCase } from 'util/string';
import React from 'react';
import Icon from 'component/common/icon';
export type RowDataItem = {
title: string,
link?: string,
help?: any,
options?: {},
};
export default function GetHomePageRowData(
authenticated: boolean,
showPersonalizedChannels: boolean,
showPersonalizedTags: boolean,
subscribedChannels: Array<Subscription>,
followedTags: Array<Tag>,
showIndividualTags: boolean
) {
let rowData: Array<RowDataItem> = [];
const individualTagDataItems: Array<RowDataItem> = [];
const PAID_BETA_CHANNEL_IDS_KEY = [
'4ee7cfaf1fc50a6df858ed0b99c278d633bccca9',
'5af39f818f668d8c00943c9326c5201c4fe3c423',
'cda9c4e92f19d6fe0764524a2012056e06ca2055',
'760da3ba3dd85830a843beaaed543a89b7a367e7',
'40c36948f0da072dcba3e4833e90f71e16de78be',
'e8f68563d242f6ac9784dcbc41dd86c28a9391d6',
'7236fc5d2783ea7314d9076ae6c8a250e3992d1a',
'8627af93c1a1219150f06b698f4b33e6ed2f1c1e',
'c5b0b17838df2f6c31162f64d55f60f34ae8bfc6',
'f576d5dba905fc179de880c3fe3eb3281ea74f59',
'97dd77c93c9603cbb2583f3589f7f5a6c92baa43',
'f399d873e0c37cf24de9569b5f22bbb30a5c6709',
'dba870d0620d41b2b9a152c961e0c06cf875ccfc',
'ca1fd651c9d14bf2e5088bb2aa0146ee7aeb2ae0',
'50ad846a4b1543b847bf3fdafb7b45f6b2f5844c',
'e09ff5abe9fb44dd0dd0576894a6db60a6211603',
'7b6f7517f6b816827d076fa0eaad550aa315a4e7',
'2068452c41d8da3bd68961335da0072a99258a1a',
'3645cf2f5d0bdac0523f945be1c3ff60758f7845',
'4da85b12244839d6368b9290f1619ff9514ab2a8',
'4ad942982e43326c7700b1b6443049b3cfd82161',
'55304f219244abf82f684f759cc0c7769242f3b4',
'8f42e5b592bb7f7a03f4a94a86a41b1236bb099f',
'e2a014d885a48f5be2dc6409610996337312facb',
'c18996ca488753f714d36d4654715927c1d7f9c2',
'ebc4214424cfa683a7046e1f794fea1e44788d84',
'06b6d6d6a893fb589ec2ded948f5122856921ed5',
'07e4546674268fc0222b2ca22d31d0549dc217ee',
'060940e41973d4f7f16d72a2733138e931c35f41',
'f8d6eccd887c9cebd36b1d42aa349279b7f5c3ed',
'68098b8426f967b8d04cc566348b5c128823219e',
'2bfe6cdb24a21bdc1b76fb7c416edd50e9e85945',
'1f9bb08bfa2259629f4aaa9ed40f97e9a41b6fa1',
'2f20148495612946675fe1c8ea99171e4d950b81',
'bc6938fa1e09e840056c2e831abf9664f397c472',
'2a6194792beac5130641e932b5ac6e5a99b5ca4f',
'185ba2bd547a5e4a77d29fe6c1484f47db5e058f',
'29cc7f6081268eaa5b3f2946e0cd0b952a94812c',
'ffdc62ac2f7549398d3aca9d2119e83d80d588d5',
'd7a4d2808074b0c55d6b239f69d90e7a4930f943',
'd58aa4a0b2f6c2504c3abce8de3f1afb71800acc',
'77ae23dc7eb8a75609881d4548a79e4935a89d37',
'f79bce8a60fbece671f6265adc39f6469f3b9b8c',
'051995fdf0af634e4911704057a551e9392e62b1',
'b0e489f986c345aef23c4a48d91cbcf5a6fdb9ac',
'825aa21c8c0bda4ded3e69a69238763c8cfcc13b',
'49389450b1241f5d8f4c8c4271a3eb56bba33965',
'f3b9973e1725ecb50da3e6fa4d47343c98ef0382',
'321b33d22c8e24ef207e3f357a4573f6a56611f3',
'20d694ada07e740c6fa43a8c324cb7d6e362b5ee',
'cf7792c2a37d0d76aaaff84aff0b99a8c791429d',
'8316ac90764fedf3147799b7b81a6575a9cc398e',
'8972a1bd06de5186e5e89292b05aac8aaa817791',
'5da63df97c8255ae94a88940695b8471657dd5a1',
'f3da2196b5151570d980b34d311ee0973225a68e',
'7644fdb8342624f6c647c79de25610801573fa68',
];
const TV_PAID_BETA_ROW = {
title: '#lbrytvpaidbeta',
link: `/$/${PAGES.DISCOVER}?${CS.TAGS_KEY}=lbrytvpaidbeta&fee_amount=>0&${CS.CLAIM_TYPE}=${CS.CLAIM_STREAM}&${
CS.CHANNEL_IDS_KEY
}=${PAID_BETA_CHANNEL_IDS_KEY.join(',')}`,
help: (
<div className="claim-grid__help">
<Icon
icon={ICONS.HELP}
tooltip
customTooltipText={__(
'Check your rewards page to see if you qualify for paid content reimbursement. Only content in this section qualifies.'
)}
/>
</div>
),
options: {
feeAmount: '>0',
claimType: ['stream'],
tags: ['lbrytvpaidbeta', 'lbry tvpaidbeta'],
pageSize: 8,
channelIds: PAID_BETA_CHANNEL_IDS_KEY,
},
};
if (followedTags.length) {
followedTags.forEach((tag: Tag) => {
individualTagDataItems.push({
title: `Trending for #${toCapitalCase(tag.name)}`,
link: `/$/${PAGES.DISCOVER}?t=${tag.name}`,
options: {
pageSize: 4,
tags: [tag.name],
claimType: ['stream'],
},
});
});
}
const RECENT_FROM_FOLLOWING = {
title: 'Recent From Following',
link: `/$/${PAGES.CHANNELS_FOLLOWING}`,
options: {
orderBy: ['release_time'],
releaseTime:
subscribedChannels.length > 20
? `>${Math.floor(
moment()
.subtract(6, 'months')
.startOf('week')
.unix()
)}`
: `>${Math.floor(
moment()
.subtract(1, 'year')
.startOf('week')
.unix()
)}`,
pageSize: subscribedChannels.length > 3 ? 8 : 4,
channelIds: subscribedChannels.map((subscription: Subscription) => {
const { channelClaimId } = parseURI(subscription.uri);
return channelClaimId;
}),
},
};
const TOP_CONTENT_TODAY = {
title: 'Top Content from Today',
link: `/$/${PAGES.DISCOVER}?${CS.ORDER_BY_KEY}=${CS.ORDER_BY_TOP}&${CS.FRESH_KEY}=${CS.FRESH_DAY}`,
options: {
pageSize: showPersonalizedChannels || showPersonalizedTags ? 4 : 8,
orderBy: ['effective_amount'],
claimType: ['stream'],
releaseTime: `>${Math.floor(
moment()
.subtract(1, 'day')
.startOf('day')
.unix()
)}`,
},
};
const TOP_CHANNELS = {
title: 'Top Channels On LBRY',
link: `/$/${PAGES.DISCOVER}?claim_type=channel&${CS.ORDER_BY_KEY}=${CS.ORDER_BY_TOP}&${CS.FRESH_KEY}=${CS.FRESH_ALL}`,
options: {
orderBy: ['effective_amount'],
claimType: ['channel'],
},
};
const TRENDING_CLASSICS = {
title: 'Trending Classics',
link: `/$/${PAGES.DISCOVER}?${CS.ORDER_BY_KEY}=${CS.ORDER_BY_TRENDING}&${CS.FRESH_KEY}=${CS.FRESH_WEEK}`,
options: {
pageSize: 4,
claimType: ['stream'],
releaseTime: `<${Math.floor(
moment()
.subtract(6, 'month')
.startOf('day')
.unix()
)}`,
},
};
const TRENDING_ON_LBRY = {
title: 'Trending On LBRY',
link: `/$/${PAGES.DISCOVER}`,
options: {
pageSize: showPersonalizedChannels || showPersonalizedTags ? 4 : 8,
},
};
const TRENDING_FOR_TAGS = {
title: 'Trending For Your Tags',
link: `/$/${PAGES.TAGS_FOLLOWING}`,
options: {
tags: followedTags.map(tag => tag.name),
claimType: ['stream'],
},
};
const LATEST_FROM_LBRY = {
title: 'Latest From @lbry',
link: `/@lbry:3f`,
options: {
orderBy: ['release_time'],
pageSize: 4,
channelIds: ['3fda836a92faaceedfe398225fb9b2ee2ed1f01a'],
},
};
const LATEST_FROM_LBRYCAST = {
title: 'Latest From @lbrycast',
link: `/@lbrycast:4`,
options: {
orderBy: ['release_time'],
pageSize: 4,
channelIds: ['4c29f8b013adea4d5cca1861fb2161d5089613ea'],
},
};
if (showPersonalizedChannels) rowData.push(RECENT_FROM_FOLLOWING);
if (showPersonalizedTags && !showIndividualTags) rowData.push(TRENDING_FOR_TAGS);
if (showPersonalizedTags && showIndividualTags) {
individualTagDataItems.forEach((item: RowDataItem) => {
rowData.push(item);
});
}
if (authenticated) {
rowData.push(TV_PAID_BETA_ROW);
}
rowData.push(TOP_CONTENT_TODAY);
rowData.push(TRENDING_ON_LBRY);
if (!showPersonalizedChannels) rowData.push(TOP_CHANNELS);
if (!authenticated) {
rowData.push(TV_PAID_BETA_ROW);
}
rowData.push(TRENDING_CLASSICS);
rowData.push(LATEST_FROM_LBRYCAST);
rowData.push(LATEST_FROM_LBRY);
return rowData;
}

View file

2
custom/robots.allowall Normal file
View file

@ -0,0 +1,2 @@
User-agent: *
Allow: /

View file

@ -0,0 +1,2 @@
User-agent: *
Disallow: /

102
electron-builder.json Normal file
View file

@ -0,0 +1,102 @@
{
"appId": "io.lbry.LBRY",
"productName": "LBRY",
"directories": {
"output": "dist/electron"
},
"files": [
{
"from": "dist/electron/webpack",
"to": "./"
},
{
"from": "dist/electron/static",
"to": "./"
}
],
"extraResources": [
{
"from": "./static/daemon/",
"to": "static/daemon/",
"filter": ["**/*"]
},
{
"from": "./static/lbry-first/",
"to": "static/lbry-first/",
"filter": ["**/*"]
},
{
"from": "./static/img",
"to": "static/img",
"filter": ["**/*"]
},
{
"from": "./static/font",
"to": "static/font",
"filter": ["**/*"]
}
],
"publish": [
{
"provider": "github"
}
],
"mac": {
"category": "public.app-category.entertainment"
},
"dmg": {
"iconSize": 128,
"contents": [
{
"x": 115,
"y": 164
},
{
"x": 387,
"y": 164,
"type": "link",
"path": "/Applications"
}
],
"window": {
"x": 200,
"y": 200,
"width": 500,
"height": 300
},
"background": "./build/background.png"
},
"protocols": [
{
"name": "LBRY URI",
"schemes": ["lbry"],
"role": "Viewer"
}
],
"linux": {
"target": ["AppImage", "deb"],
"executableName": "lbry",
"category": "AudioVideo;Video",
"desktop": {
"MimeType": "x-scheme-handler/lbry"
}
},
"deb": {
"depends": ["gconf2", "gconf-service", "libnotify4", "libappindicator1", "libxtst6", "libnss3"]
},
"nsis": {
"perMachine": true,
"createDesktopShortcut": "always",
"differentialPackage": true
},
"win": {
"target": [
{
"target": "nsis",
"arch": ["x64"]
}
]
},
"artifactName": "${productName}_${version}.${ext}",
"afterSign": "./build/afterSignHook.js"
}

69
electron/Daemon.js Normal file
View file

@ -0,0 +1,69 @@
import path from 'path';
import fs from 'fs';
import { spawn, execSync } from 'child_process';
import { Lbry } from 'lbry-redux';
export default class Daemon {
static lbrynetPath =
process.env.LBRY_DAEMON ||
(process.env.NODE_ENV === 'production'
? path.join(process.resourcesPath, 'static/daemon', 'lbrynet')
: path.join(__static, 'daemon/lbrynet'));
static headersPath =
process.env.LBRY_DAEMON ||
(process.env.NODE_ENV === 'production'
? path.join(process.resourcesPath, 'static/daemon', 'headers')
: path.join(__static, 'daemon/headers'));
subprocess;
handlers;
constructor() {
this.handlers = [];
}
launch() {
let flags = ['start'];
if (fs.existsSync(Daemon.headersPath)) {
flags.push(`--initial-headers=${Daemon.headersPath}`);
}
this.subprocess = spawn(Daemon.lbrynetPath, flags);
this.subprocess.stdout.on('data', data => console.log(`Daemon: ${data}`));
this.subprocess.stderr.on('data', data => console.error(`Daemon: ${data}`));
this.subprocess.on('exit', () => this.fire('exit'));
this.subprocess.on('error', error => console.error(`Daemon error: ${error}`));
}
quit() {
Lbry.stop()
.then()
.catch(() => {
if (process.platform === 'win32') {
try {
execSync(`taskkill /pid ${this.subprocess.pid} /t /f`);
} catch (error) {
console.error(error.message);
}
} else {
this.subprocess.kill();
}
});
}
// Follows the publish/subscribe pattern
// Subscribe method
on(event, handler, context = handler) {
this.handlers.push({ event, handler: handler.bind(context) });
}
// Publish method
fire(event, args) {
this.handlers.forEach(topic => {
if (topic.event === event) topic.handler(args);
});
}
}

View file

@ -0,0 +1,59 @@
import path from 'path';
import { spawn, execSync } from 'child_process';
export default class LbryFirstInstance {
static lbryFirstPath =
process.env.LBRY_FIRST_DAEMON ||
(process.env.NODE_ENV === 'production'
? path.join(process.resourcesPath, 'static/lbry-first', 'lbry-first')
: path.join(__static, 'lbry-first/lbry-first'));
static headersPath =
process.env.LBRY_FIRST_DAEMON ||
(process.env.NODE_ENV === 'production'
? path.join(process.resourcesPath, 'static/lbry-first', 'headers')
: path.join(__static, 'lbry-first/headers'));
subprocess;
handlers;
constructor() {
this.handlers = [];
}
launch() {
let flags = ['serve'];
console.log(`LbryFirst: ${LbryFirstInstance.lbryFirstPath}`);
this.subprocess = spawn(LbryFirstInstance.lbryFirstPath, flags);
this.subprocess.stdout.on('data', data => console.log(`LbryFirst: ${data}`));
this.subprocess.stderr.on('data', data => console.error(`LbryFirst: ${data}`));
this.subprocess.on('exit', () => this.fire('exit'));
this.subprocess.on('error', error => console.error(`LbryFirst error: ${error}`));
}
quit() {
if (process.platform === 'win32') {
try {
execSync(`taskkill /pid ${this.subprocess.pid} /t /f`);
} catch (error) {
console.error(error.message);
}
} else {
this.subprocess.kill();
}
}
// Follows the publish/subscribe pattern
// Subscribe method
on(event, handler, context = handler) {
this.handlers.push({ event, handler: handler.bind(context) });
}
// Publish method
fire(event, args) {
this.handlers.forEach(topic => {
if (topic.event === event) topic.handler(args);
});
}
}

67
electron/createTray.js Normal file
View file

@ -0,0 +1,67 @@
import { app, Menu, Tray } from 'electron';
import path from 'path';
let tray;
export default window => {
let iconPath;
/*
* A maximized window can't be properly
* restored when minimized to the taskbar
* (it will be restored/showed as unmaximized).
*
* window.isMaximized() will also return
* false when minimizing a maximized window.
*
* The safest way to keep track of the
* maximized state using maximize and
* unmaximize events.
*/
let isWindowMaximized = false;
window.on('maximize', () => {
isWindowMaximized = true;
});
window.on('unmaximize', () => {
isWindowMaximized = false;
});
switch (process.platform) {
case 'darwin': {
iconPath = 'static/img/tray/mac/trayTemplate.png';
break;
}
case 'win32': {
iconPath = 'static/img/tray/windows/tray.ico';
break;
}
default: {
iconPath = 'static/img/tray/default/tray.png';
}
}
tray = new Tray(process.env.NODE_ENV === 'development' ? iconPath : path.join(process.resourcesPath, iconPath));
const restoreFromTray = () => {
if (isWindowMaximized) {
window.maximize();
}
window.show();
};
tray.on('double-click', restoreFromTray);
tray.setToolTip('LBRY App');
const template = [
{
label: `Open ${app.name}`,
click: restoreFromTray,
},
{ role: 'quit' },
];
const contextMenu = Menu.buildFromTemplate(template);
tray.setContextMenu(contextMenu);
return tray;
};

224
electron/createWindow.js Normal file
View file

@ -0,0 +1,224 @@
import { WEBPACK_ELECTRON_PORT } from 'config';
import { app, BrowserWindow, dialog, shell, screen, nativeImage } from 'electron';
import isDev from 'electron-is-dev';
import windowStateKeeper from 'electron-window-state';
import SUPPORTED_LANGUAGES from 'constants/supported_languages';
import { SUPPORTED_SUB_LANGUAGE_CODES, SUB_LANG_CODE_LEN } from 'constants/supported_sub_languages';
import SUPPORTED_BROWSER_LANGUAGES from 'constants/supported_browser_languages';
import { TO_TRAY_WHEN_CLOSED } from 'constants/settings';
import setupBarMenu from './menu/setupBarMenu';
import * as PAGES from 'constants/pages';
function GetAppLangCode() {
// https://www.electronjs.org/docs/api/locales
// 1. Gets the user locale.
// 2. Converts unsupported sub-languages to its primary (e.g. "en-GB" -> "en").
// Note that the primary itself may or may not be a supported language
// (up to clients to verify against SUPPORTED_LANGUAGES).
const langCode = app.getLocale();
if (langCode.length === SUB_LANG_CODE_LEN && !SUPPORTED_SUB_LANGUAGE_CODES.includes(langCode)) {
return SUPPORTED_BROWSER_LANGUAGES[langCode.slice(0, 2)];
}
return SUPPORTED_BROWSER_LANGUAGES[langCode];
}
export default appState => {
// Get primary display dimensions from Electron.
const { width, height } = screen.getPrimaryDisplay().workAreaSize;
// Load the previous state with fallback to defaults.
const windowState = windowStateKeeper({
defaultWidth: width,
defaultHeight: height,
});
const startMinimized = (process.argv || []).includes('--hidden');
const windowConfiguration = {
backgroundColor: '#270f34', // Located in src/scss/init/_vars.scss `--color-background--splash`
minWidth: 950,
minHeight: 600,
autoHideMenuBar: true,
titleBarStyle: 'hiddenInset',
show: false,
// Create the window using the state information.
x: windowState.x,
y: windowState.y,
// If state is undefined, create window as maximized.
width: windowState.width === undefined ? width : windowState.width,
height: windowState.height === undefined ? height : windowState.height,
icon: nativeImage.createFromPath('static/img/tray/default/tray.png'),
webPreferences: {
// Disable renderer process's webSecurity on development to enable CORS.
webSecurity: !isDev,
plugins: true,
nodeIntegration: true,
},
};
const lbryProto = 'lbry://';
const lbryProtoQ = 'lbry://?';
const rendererURL = isDev ? `http://localhost:${WEBPACK_ELECTRON_PORT}` : `file://${__dirname}/index.html`;
let window = new BrowserWindow(windowConfiguration);
// Let us register listeners on the window, so we can update the state
// automatically (the listeners will be removed when the window is closed)
// and restore the maximized or full screen state.
windowState.manage(window);
let deepLinkingURI;
if ((process.platform === 'win32' || process.platform === 'linux') && String(process.argv[1]).startsWith('lbry')) {
[, deepLinkingURI] = process.argv || '';
// Keep only command line / deep linked arguments
// Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to
// restore the original URI that was typed.
// - If the URI has no path, Windows adds a trailing slash. LBRY URIs can't have a slash with no
// path, so we just strip it off.
// - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as
// an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well.
// - ? also interpreted as an anchor, remove slash also.
if (process.platform === 'win32') {
deepLinkingURI = deepLinkingURI
.replace(/\/$/, '')
.replace('/#', '#')
.replace('/?', '?');
}
} else {
deepLinkingURI = appState.macDeepLinkingURI || '';
}
// is it a lbry://? pointing to an app page
if (deepLinkingURI.includes(lbryProtoQ)) {
let path = deepLinkingURI.substr(lbryProtoQ.length);
let page = path.indexOf('?') >= 0 ? path.substring(0, path.indexOf('?')) : path;
if (Object.values(PAGES).includes(page)) {
deepLinkingURI = deepLinkingURI.replace(lbryProtoQ, '#/$/');
} else {
deepLinkingURI = '';
}
// else is it a claim
} else if (deepLinkingURI.includes(lbryProto)) {
deepLinkingURI = deepLinkingURI.replace(lbryProto, '#');
} else {
deepLinkingURI = '';
}
setupBarMenu();
window.loadURL(rendererURL + deepLinkingURI);
window.on('close', event => {
if (appState.isQuitting) {
return;
}
if (!appState.autoUpdateAccepted) {
event.preventDefault();
if (window.isFullScreen()) {
window.once('leave-full-screen', () => {
window.hide();
});
window.setFullScreen(false);
} else {
window.hide();
}
}
const getToTrayWhenClosedSetting = window.webContents.executeJavaScript(`localStorage.getItem('${TO_TRAY_WHEN_CLOSED}')`);
getToTrayWhenClosedSetting.then(toTrayWhenClosedSetting => {
const closeApp = toTrayWhenClosedSetting === 'false';
if (closeApp) {
app.quit();
}
});
});
window.on('focus', () => {
window.webContents.send('window-is-focused', null);
});
window.on('unresponsive', () => {
dialog.showMessageBox(
window,
{
type: 'warning',
buttons: ['Wait', 'Quit'],
title: 'LBRY Unresponsive',
defaultId: 1,
message: 'LBRY is not responding. Would you like to quit?',
cancelId: 0,
},
buttonIndex => {
if (buttonIndex === 1) app.quit();
}
);
});
window.once('ready-to-show', () => {
startMinimized ? window.hide() : window.show();
});
// A backup incase https://github.com/electron/electron/issues/7779 happens
window.webContents.once('dom-ready', () => {
startMinimized && window.hide();
});
window.webContents.on('did-finish-load', () => {
window.webContents.session.setUserAgent(`LBRY/${app.getVersion()}`);
// restore the user's previous language - we have to do this from here because only electron process can access app.getLocale()
window.webContents.executeJavaScript("localStorage.getItem('language')").then(storedLanguage => {
const language =
storedLanguage && storedLanguage !== 'undefined' && storedLanguage !== 'null'
? storedLanguage
: GetAppLangCode();
if (language !== 'en' && SUPPORTED_LANGUAGES[language]) {
window.webContents.send('language-set', language);
}
});
});
window.webContents.on('crashed', () => {
window = null;
});
window.webContents.on('new-window', (event, url) => {
event.preventDefault();
shell.openExternal(url);
});
window.webContents.on('update-target-url', (event, url) => {
// Change internal links to the lbry protocol. External (https) links should remain unchanged.
let hoverUrlBase = `http://localhost:${WEBPACK_ELECTRON_PORT}/`;
if (!isDev) {
// Return format of 'update-target-url':
// Linux: file:///@claim
// Windows: file:///C:/@claim
// Use '__dirname' in case installation is not in C:
const path = require('path');
const exeRoot = path.parse(__dirname).root;
if (process.platform === 'win32') {
// Add extra "/" prefix. Convert "C:\" to "C:/"
hoverUrlBase = `file:///` + exeRoot.replace(/\\/g, '/');
} else {
hoverUrlBase = `file://` + exeRoot;
}
}
let dispUrl = url.replace(hoverUrlBase, lbryProto);
// Non-claims don't need the lbry protocol:
if (dispUrl === lbryProto) {
dispUrl = 'Home';
} else if (dispUrl.startsWith(lbryProto + '$/')) {
dispUrl = dispUrl.replace(lbryProto, '/');
}
window.webContents.send('update-target-url', dispUrl);
});
return window;
};

70
electron/devServer.js Normal file
View file

@ -0,0 +1,70 @@
/* eslint-disable no-console */
const { WEBPACK_ELECTRON_PORT } = require('../config');
const chalk = require('chalk');
const webpack = require('webpack');
const merge = require('webpack-merge');
const middleware = require('webpack-dev-middleware');
const express = require('express');
const app = express();
console.log(
chalk.magenta(`Compiling ${chalk.underline('main')} and ${chalk.underline('render')}, this will take a while.`)
);
let [mainConfig, renderConfig] = require('../webpack.electron.config.js');
renderConfig = merge(renderConfig, {
entry: { ui: ['webpack-hot-middleware/client'] },
plugins: [new webpack.HotModuleReplacementPlugin()],
resolve: {
alias: { 'react-dom': '@hot-loader/react-dom' },
symlinks: false,
},
});
const mainCompiler = webpack(mainConfig);
const mainInstance = middleware(mainCompiler, {
logLevel: 'warn',
writeToDisk: filename => {
// console.log(`Writing '${filename}'.`);
return true;
},
});
const renderCompiler = webpack(renderConfig);
const renderInstance = middleware(renderCompiler, {
logLevel: 'warn',
publicPath: '/',
});
app.use(require('webpack-hot-middleware')(renderCompiler));
app.use(renderInstance);
app.use(express.static('dist/electron/static'));
app.listen(WEBPACK_ELECTRON_PORT, () => {
console.log(chalk.yellow.bold(`Renderer listening on port ${WEBPACK_ELECTRON_PORT} (still compiling)`));
});
mainInstance.waitUntilValid(() => console.log(chalk.green(`${chalk.underline('main')} compilation complete.`)));
renderInstance.waitUntilValid(() => console.log(chalk.green(`${chalk.underline('render')} compilation complete.`)));
mainInstance.waitUntilValid(() => {
console.log(chalk.yellow('Spawning electron...'));
const electron = require('electron');
const proc = require('child_process');
const child = proc.spawn(electron, ['./dist/electron/webpack/main.js']);
child.stdout.on('data', data => {
console.log(data.toString());
});
process.on('SIGINT', function() {
console.log('Killing threads...');
child.kill('SIGINT');
process.exit();
});
});
/* eslint-enable no-console */

388
electron/index.js Normal file
View file

@ -0,0 +1,388 @@
/* eslint no-console:0 */
/* eslint space-before-function-paren:0 */
// Module imports
import '@babel/polyfill';
import SemVer from 'semver';
import https from 'https';
import { app, dialog, ipcMain, session, shell } from 'electron';
import { autoUpdater } from 'electron-updater';
import { Lbry } from 'lbry-redux';
import LbryFirstInstance from './LbryFirstInstance';
import Daemon from './Daemon';
import isDev from 'electron-is-dev';
import createTray from './createTray';
import createWindow from './createWindow';
import pjson from '../package.json';
import startSandbox from './startSandbox';
import installDevtools from './installDevtools';
import fs from 'fs';
import path from 'path';
const filePath = path.join(process.resourcesPath, 'static', 'upgradeDisabled');
let upgradeDisabled;
try {
fs.accessSync(filePath, fs.constants.R_OK);
upgradeDisabled = true;
} catch (err) {
upgradeDisabled = false;
}
autoUpdater.autoDownload = !upgradeDisabled;
// This is set to true if an auto update has been downloaded through the Electron
// auto-update system and is ready to install. If the user declined an update earlier,
// it will still install on shutdown.
let autoUpdateDownloaded = false;
// This is used to keep track of whether we are showing the special dialog
// that we show on Windows after you decline an upgrade and close the app later.
let showingAutoUpdateCloseAlert = false;
// Keep a global reference, if you don't, they will be closed automatically when the JavaScript
// object is garbage collected.
let rendererWindow;
let tray; // eslint-disable-line
let daemon;
let lbryFirst;
const appState = {};
if (process.platform !== 'linux') {
app.setAsDefaultProtocolClient('lbry');
}
app.name = 'LBRY';
app.setAppUserModelId('io.lbry.LBRY');
app.commandLine.appendSwitch('force-color-profile', 'srgb');
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors');
if (isDev) {
// Disable security warnings in dev mode:
// https://github.com/electron/electron/blob/master/docs/tutorial/security.md#electron-security-warnings
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true;
}
const startDaemon = async () => {
let isDaemonRunning = false;
await Lbry.status()
.then(() => {
isDaemonRunning = true;
console.log('SDK already running');
})
.catch(() => {
console.log('Starting SDK');
});
if (!isDaemonRunning) {
daemon = new Daemon();
daemon.on('exit', () => {
if (!isDev) {
daemon = null;
if (!appState.isQuitting) {
dialog.showErrorBox(
'Daemon has Exited',
'The daemon may have encountered an unexpected error, or another daemon instance is already running. \n\n' +
'For more information please visit: \n' +
'https://lbry.com/faq/startup-troubleshooting'
);
}
app.quit();
}
});
await daemon.launch();
}
};
let isLbryFirstRunning = false;
const startLbryFirst = async () => {
if (isLbryFirstRunning) {
console.log('LbryFirst already running');
handleLbryFirstLaunched();
return;
}
console.log('LbryFirst: Starting...');
try {
lbryFirst = new LbryFirstInstance();
lbryFirst.on('exit', e => {
if (!isDev) {
lbryFirst = null;
isLbryFirstRunning = false;
if (!appState.isQuitting) {
dialog.showErrorBox(
'LbryFirst has Exited',
'The lbryFirst may have encountered an unexpected error, or another lbryFirst instance is already running. \n\n',
e
);
}
app.quit();
}
});
} catch (e) {
console.log('LbryFirst: Failed to create new instance\n\n', e);
}
console.log('LbryFirst: Running...');
try {
await lbryFirst.launch();
handleLbryFirstLaunched();
} catch (e) {
isLbryFirstRunning = false;
console.log('LbryFirst: Failed to start\n', e);
}
};
const handleLbryFirstLaunched = () => {
isLbryFirstRunning = true;
rendererWindow.webContents.send('lbry-first-launched');
};
// When we are starting the app, ensure there are no other apps already running
const gotSingleInstanceLock = app.requestSingleInstanceLock();
if (!gotSingleInstanceLock) {
// Another instance already has a lock, abort
app.quit();
} else {
app.on('second-instance', (event, argv) => {
// Send the url to the app to navigate first, then focus
if (rendererWindow) {
if ((process.platform === 'win32' || process.platform === 'linux') && String(argv[1]).startsWith('lbry')) {
let URI = argv[1];
// Keep only command line / deep linked arguments
// Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to
// restore the original URI that was typed.
// - If the URI has no path, Windows adds a trailing slash. LBRY URIs can't have a slash with no
// path, so we just strip it off.
// - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as
// an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well.
// - ? also interpreted as an anchor, remove slash also.
if (process.platform === 'win32') {
URI = URI.replace(/\/$/, '')
.replace('/#', '#')
.replace('/?', '?');
}
rendererWindow.webContents.send('open-uri-requested', URI);
}
rendererWindow.show();
}
});
app.on('ready', async () => {
await startDaemon();
startSandbox();
if (isDev) {
await installDevtools();
}
rendererWindow = createWindow(appState);
tray = createTray(rendererWindow);
if (!isDev) {
rendererWindow.webContents.on('devtools-opened', () => {
// Send a message to the renderer process so we can log a security warning
rendererWindow.webContents.send('devtools-is-opened');
});
}
// If an "Origin" header is passed, the SDK will check that it is set to allow that origin in the daemon_settings.yml
// By default, electron sends http://localhost:{port} as the origin for POST requests
// https://github.com/electron/electron/issues/7931#issuecomment-361759277
session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
if (details.method === 'POST' && details.requestHeaders['Content-Type'] === 'application/json-rpc') {
delete details.requestHeaders['Origin'];
}
callback({ cancel: false, requestHeaders: details.requestHeaders });
});
});
}
app.on('activate', () => {
if (rendererWindow) {
rendererWindow.show();
}
});
app.on('will-quit', event => {
if (
process.platform === 'win32' &&
autoUpdateDownloaded &&
!appState.autoUpdateAccepted &&
!showingAutoUpdateCloseAlert
) {
// We're on Win and have an update downloaded, but the user declined it (or closed
// the app without accepting it). Now the user is closing the app, so the new update
// will install. On Mac this is silent, but on Windows they get a confusing permission
// escalation dialog, so we show Windows users a warning dialog first.
showingAutoUpdateCloseAlert = true;
dialog.showMessageBox(
{
type: 'info',
title: 'LBRY Will Upgrade',
message: 'LBRY has a pending upgrade. Please select "Yes" to install it on the prompt shown after this one.',
},
() => {
app.quit();
}
);
event.preventDefault();
return;
}
appState.isQuitting = true;
if (daemon) {
daemon.quit();
event.preventDefault();
}
if (lbryFirst) {
lbryFirst.quit();
event.preventDefault();
}
if (rendererWindow) {
tray.destroy();
rendererWindow = null;
}
});
app.on('will-finish-launching', () => {
// Protocol handler for macOS
app.on('open-url', (event, URL) => {
event.preventDefault();
if (rendererWindow) {
rendererWindow.webContents.send('open-uri-requested', URL);
rendererWindow.show();
} else {
appState.macDeepLinkingURI = URL;
}
});
});
app.on('before-quit', () => {
appState.isQuitting = true;
});
ipcMain.on('upgrade', (event, installerPath) => {
app.on('quit', () => {
console.log('Launching upgrade installer at', installerPath);
// This gets triggered called after *all* other quit-related events, so
// we'll only get here if we're fully prepared and quitting for real.
shell.openPath(installerPath);
});
// what to do if no shutdown in a long time?
console.log('Update downloaded to', installerPath);
console.log('The app will close and you will be prompted to install the latest version of LBRY.');
console.log('After the install is complete, please reopen the app.');
app.quit();
});
autoUpdater.on('update-downloaded', () => {
autoUpdateDownloaded = true;
});
ipcMain.on('autoUpdateAccepted', () => {
appState.autoUpdateAccepted = true;
autoUpdater.quitAndInstall();
});
ipcMain.on('version-info-requested', () => {
function formatRc(ver) {
// Adds dash if needed to make RC suffix SemVer friendly
return ver.replace(/([^-])rc/, '$1-rc');
}
const localVersion = pjson.version;
let result = '';
const onSuccess = res => {
res.on('data', data => {
result += data;
});
res.on('end', () => {
let json;
try {
json = JSON.parse(result);
} catch (e) {
return;
}
const tagName = json.tag_name;
if (tagName) {
const [, remoteVersion] = tagName.match(/^v([\d.]+(?:-?rc\d+)?)$/);
if (!remoteVersion) {
if (rendererWindow) {
rendererWindow.webContents.send('version-info-received', localVersion);
}
} else {
const upgradeAvailable = SemVer.gt(formatRc(remoteVersion), formatRc(localVersion));
if (rendererWindow) {
rendererWindow.webContents.send('version-info-received', {
remoteVersion,
localVersion,
upgradeAvailable,
});
}
}
} else if (rendererWindow) {
rendererWindow.webContents.send('version-info-received', { localVersion });
}
});
};
const requestLatestRelease = (alreadyRedirected = false) => {
const req = https.get(
{
hostname: 'api.github.com',
path: '/repos/lbryio/lbry-desktop/releases/latest',
headers: { 'user-agent': `LBRY/${localVersion}` },
},
res => {
if (res.statusCode === 301 || res.statusCode === 302) {
requestLatestRelease(res.headers.location, true);
} else {
onSuccess(res);
}
}
);
if (alreadyRedirected) return;
req.on('error', err => {
console.log('Failed to get current version from GitHub. Error:', err);
if (rendererWindow) {
rendererWindow.webContents.send('version-info-received', null);
}
});
};
if (upgradeDisabled && rendererWindow) {
rendererWindow.webContents.send('version-info-received', { localVersion });
return;
}
requestLatestRelease();
});
ipcMain.on('launch-lbry-first', async () => {
try {
await startLbryFirst();
} catch (e) {
console.log('Failed to start LbryFirst');
console.log(e);
}
});
process.on('uncaughtException', error => {
console.log(error);
dialog.showErrorBox('Error Encountered', `Caught error: ${error}`);
appState.isQuitting = true;
if (daemon) daemon.quit();
app.exit(1);
});

View file

@ -0,0 +1,11 @@
export default async function installDevtools() {
const { default: installExtension, REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } = require('electron-devtools-installer');
await installExtension(REACT_DEVELOPER_TOOLS)
.then(name => console.log(`Added Extension: ${name}`))
.catch(err => console.log('An error occurred: ', err));
await installExtension(REDUX_DEVTOOLS)
.then(name => console.log(`Added Extension: ${name}`))
.catch(err => console.log('An error occurred: ', err));
}

View file

@ -0,0 +1,127 @@
import { app, Menu, shell } from 'electron';
import { ZOOM } from 'util/zoomWindow';
export default () => {
const template = [
{
label: 'File',
submenu: [{ role: 'quit', accelerator: 'CmdOrCtrl+Q' }],
},
{
label: 'Edit',
submenu: [
{ role: 'undo' },
{ role: 'redo' },
{ type: 'separator' },
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
{ role: 'selectAll' },
],
},
{
label: 'View',
submenu: [
{ role: 'reload' },
{
label: 'Zoom',
submenu: [
{
label: 'Zoom In',
accelerator: 'CmdOrCtrl+=',
click: (menuItem, browserWindow) => {
if (browserWindow) {
browserWindow.webContents.send('zoom-window', ZOOM.INCREMENT);
}
},
},
{
label: 'Zoom Out',
accelerator: 'CmdOrCtrl+-',
click: (menuItem, browserWindow) => {
if (browserWindow) {
browserWindow.webContents.send('zoom-window', ZOOM.DECREMENT);
}
},
},
{
label: 'Reset Zoom',
accelerator: 'CmdOrCtrl+0',
click: (menuItem, browserWindow) => {
if (browserWindow) {
browserWindow.webContents.send('zoom-window', ZOOM.RESET);
}
},
},
],
},
{
label: 'Developer',
submenu: [{ role: 'forcereload' }, { role: 'toggledevtools' }],
},
{ type: 'separator' },
{ role: 'togglefullscreen' },
],
},
{
role: 'window',
submenu: [{ role: 'minimize' }, { role: 'close' }],
},
{
role: 'help',
submenu: [
{
label: 'Learn More',
click: (menuItem, browserWindow) => {
if (browserWindow) {
browserWindow.webContents.send('open-menu', '/help');
} else {
shell.openExternal('https://lbry.com/faq');
}
},
},
{
label: 'Frequently Asked Questions',
click: () => {
shell.openExternal('https://lbry.com/faq');
},
},
{ type: 'separator' },
{
label: 'Report Issue',
click: () => {
shell.openExternal('https://github.com/lbryio/lbry-desktop/issues/new');
},
},
{ type: 'separator' },
{
label: 'Developer API Guide',
click: () => {
shell.openExternal('https://lbry.tech/playground');
},
},
],
},
];
const darwinTemplateAddition = {
label: app.name,
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services', submenu: [] },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ type: 'separator' },
{ role: 'quit' },
],
};
if (process.platform === 'darwin') {
template.unshift(darwinTemplateAddition);
}
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
};

4
electron/sandboxTest.js Normal file
View file

@ -0,0 +1,4 @@
require('@babel/register');
require('@babel/polyfill');
require('./startSandbox.js')();

38
electron/startSandbox.js Normal file
View file

@ -0,0 +1,38 @@
import express from 'express';
import unpackByOutpoint from './unpackByOutpoint';
// Polyfills and `lbry-redux`
global.fetch = require('node-fetch');
global.window = global;
if (typeof global.fetch === 'object') {
global.fetch = global.fetch.default;
}
const { Lbry } = require('lbry-redux');
delete global.window;
export default async function startSandbox() {
const port = 5278;
const sandbox = express();
sandbox.get('/set/:outpoint', async (req, res) => {
const { outpoint } = req.params;
const resolvedPath = await unpackByOutpoint(Lbry, outpoint);
sandbox.use(`/sandbox/${outpoint}/`, express.static(resolvedPath));
res.send(`/sandbox/${outpoint}/`);
});
sandbox
.listen(port, 'localhost', () => console.log(`Sandbox listening on port ${port}.`))
.on('error', err => {
if (err.code === 'EADDRINUSE') {
console.log(
`Server already listening at localhost:${port}. This is probably another LBRY app running. If not, games in the app will not work.`
);
}
});
}

View file

@ -0,0 +1,23 @@
import fs from 'fs';
import path from 'path';
import { unpackDirectory } from 'lbry-format';
async function unpackByOutpoint(lbry, outpoint) {
const { items: claimFiles } = await lbry.file_list({ outpoint, full_status: true, page: 1, page_size: 1 });
if (claimFiles && claimFiles.length) {
const claimFileInfo = claimFiles[0];
const packFilePath = path.resolve(claimFileInfo.download_path);
const unpackPath = path.normalize(path.join(claimFileInfo.download_directory, claimFileInfo.claim_name));
if (!fs.existsSync(unpackPath)) {
await unpackDirectory(unpackPath, {
fileName: packFilePath,
});
}
return unpackPath;
}
}
export default unpackByOutpoint;

2
flow-typed/18nj.js vendored Normal file
View file

@ -0,0 +1,2 @@
// @flow
declare function __(a: string, b?: {}): string;

114
flow-typed/Comment.js vendored Normal file
View file

@ -0,0 +1,114 @@
declare type Comment = {
comment: string, // comment body
comment_id: string, // sha256 digest
claim_id: string, // id linking to the claim this comment
timestamp: number, // integer representing unix-time
is_hidden: boolean, // claim owner may enable/disable this
channel_id: string, // claimId of channel signing this comment
channel_name?: string, // name of channel claim
channel_url?: string, // full lbry url to signing channel
signature?: string, // signature of comment by originating channel
signing_ts?: string, // timestamp used when signing this comment
is_channel_signature_valid?: boolean, // whether or not the signature could be validated
parent_id?: number, // comment_id of comment this is in reply to
is_pinned: boolean,
support_amount: number,
};
declare type PerChannelSettings = {
words?: Array<string>,
comments_enabled?: boolean,
min_tip_amount_comment?: number,
min_tip_amount_super_chat?: number,
slow_mode_min_gap?: number,
};
// todo: relate individual comments to their commentId
declare type CommentsState = {
commentsByUri: { [string]: string },
superChatsByUri: { [string]: { totalAmount: number, comments: Array<Comment> } },
byId: { [string]: Array<string> },
repliesByParentId: { [string]: Array<string> }, // ParentCommentID -> list of reply comments
topLevelCommentsById: { [string]: Array<string> }, // ClaimID -> list of top level comments
commentById: { [string]: Comment },
isLoading: boolean,
myComments: ?Set<string>,
isFetchingReacts: boolean,
myReactsByCommentId: any,
othersReactsByCommentId: any,
pendingCommentReactions: Array<string>,
moderationBlockList: ?Array<string>,
fetchingModerationBlockList: boolean,
blockingByUri: {},
unBlockingByUri: {},
settingsByChannelId: { [string]: PerChannelSettings }, // ChannelID -> settings
fetchingSettings: boolean,
fetchingBlockedWords: boolean,
};
declare type CommentReactParams = {
comment_ids: string,
channel_name: string,
channel_id: string,
react_type: string,
clear_types?: string,
remove?: boolean,
};
declare type CommentListParams = {
page: number,
page_size: number,
claim_id: string,
};
declare type CommentListResponse = {
items: Array<Comment>,
total_amount: number,
};
declare type CommentAbandonParams = {
comment_id: string,
creator_channel_id?: string,
creator_channel_name?: string,
channel_id?: string,
hexdata?: string,
};
declare type CommentCreateParams = {
comment: string,
claim_id: string,
parent_id?: string,
signature: string,
signing_ts: number,
support_tx_id?: string,
};
declare type SuperListParams = {};
declare type ModerationBlockParams = {};
declare type SettingsParams = {
channel_name: string,
channel_id: string,
signature: string,
signing_ts: string,
};
declare type UpdateSettingsParams = {
channel_name: string,
channel_id: string,
signature: string,
signing_ts: string,
comments_enabled?: boolean,
min_tip_amount_comment?: number,
min_tip_amount_super_chat?: number,
slow_mode_min_gap?: number,
}
declare type BlockWordParams = {
channel_name: string,
channel_id: string,
signature: string,
signing_ts: string,
words: string, // CSV list of containing words to block comment on content
};

3
flow-typed/bluebird.js vendored Normal file
View file

@ -0,0 +1,3 @@
declare module 'bluebird' {
declare module.exports: any;
}

3
flow-typed/classnames.js vendored Normal file
View file

@ -0,0 +1,3 @@
declare module 'classnames' {
declare module.exports: any;
}

8
flow-typed/content.js vendored Normal file
View file

@ -0,0 +1,8 @@
// @flow
declare type PlayingUri = {
uri: string,
pathname: string,
commentId?: string,
source?: string,
};

3
flow-typed/electron.js vendored Normal file
View file

@ -0,0 +1,3 @@
declare module 'electron' {
declare module.exports: any;
}

3
flow-typed/formik.js vendored Normal file
View file

@ -0,0 +1,3 @@
declare module 'formik' {
declare module.exports: any;
}

26
flow-typed/homepage.js vendored Normal file
View file

@ -0,0 +1,26 @@
declare type HomepageObject = {
icon: string,
link: string,
options: any,
route: string,
title: string,
}
declare type HomepageData = {
[string]: HomepageObject,
default: any => any,
}
declare type RowDataItem = {
title: any,
link?: string,
help?: any,
icon?: string,
extra?: any,
options?: {
channelIds?: Array<string>,
pageSize: number,
},
route?: string,
hideForUnauth?: boolean,
};

26
flow-typed/livestream.js vendored Normal file
View file

@ -0,0 +1,26 @@
// @flow
declare type LivestreamReplayItem = {
data: {
claimId: string,
deleted: boolean,
deletedAt: ?string,
ffprobe: any,
fileDuration: number, // decimal? float? string?
fileType: string,
fileLocation: string,
fileSize: number,
key: string,
published: boolean,
publishedAt: ?string,
service: string,
thumbnails: Array<string>,
uploadedAt: string, // Date?
},
id: string,
}
declare type LivestreamReplayData = Array<LivestreamReplayItem>;
declare type LivestreamState = {
fetchingById: {},
}

18
flow-typed/location.js vendored Normal file
View file

@ -0,0 +1,18 @@
// @flow
declare type UrlLocation = {
search: string,
hash: string,
host: string,
hostname: string,
href: string,
key: string,
origin: string,
pathname: string,
port: string,
protocol: string,
reload: () => void,
replace: string => void,
search: string,
state: {},
};

43
flow-typed/notification.js vendored Normal file
View file

@ -0,0 +1,43 @@
// @flow
declare type WebNotification = {
active_at: string,
created_at: string,
id: number,
is_app_readable: boolean,
is_device_notified: boolean,
is_emailed: boolean,
is_read: boolean,
is_seen: boolean,
notification_parameters: {
device: {
analytics_label: string,
image_url: string,
is_data_only: boolean,
name: string,
placeholders: ?string,
target: string,
text: string,
title: string,
type: string,
},
dynamic: {
comment_author: string,
reply_author: string,
hash: string,
claim_title: string,
comment?: string,
channel_url: string,
},
email: {},
},
notification_rule: string,
type: string,
updated_at: string,
user_id: number,
group_count?: number,
};
declare type NotificationCategory = {
name: string,
types: ?Array<string>,
};

298
flow-typed/npm/@babel/core_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,298 @@
// flow-typed signature: cc45dc0508740d7ad110ba88458158ac
// flow-typed version: <<STUB>>/@babel/core_v^7.0.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@babel/core'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@babel/core' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@babel/core/lib/config/caching' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/config-chain' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/config-descriptors' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/configuration' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/index-browser' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/index' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/package' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/plugins' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/types' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/files/utils' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/full' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/helpers/config-api' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/helpers/environment' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/index' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/item' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/partial' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/pattern-to-regex' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/plugin' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/util' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/validation/option-assertions' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/validation/options' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/validation/plugins' {
declare module.exports: any;
}
declare module '@babel/core/lib/config/validation/removed' {
declare module.exports: any;
}
declare module '@babel/core/lib/index' {
declare module.exports: any;
}
declare module '@babel/core/lib/parse' {
declare module.exports: any;
}
declare module '@babel/core/lib/tools/build-external-helpers' {
declare module.exports: any;
}
declare module '@babel/core/lib/transform-ast' {
declare module.exports: any;
}
declare module '@babel/core/lib/transform-file-browser' {
declare module.exports: any;
}
declare module '@babel/core/lib/transform-file' {
declare module.exports: any;
}
declare module '@babel/core/lib/transform' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/block-hoist-plugin' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/file/file' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/file/generate' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/file/merge-map' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/index' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/normalize-file' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/normalize-opts' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/plugin-pass' {
declare module.exports: any;
}
declare module '@babel/core/lib/transformation/util/missing-plugin-helper' {
declare module.exports: any;
}
// Filename aliases
declare module '@babel/core/lib/config/caching.js' {
declare module.exports: $Exports<'@babel/core/lib/config/caching'>;
}
declare module '@babel/core/lib/config/config-chain.js' {
declare module.exports: $Exports<'@babel/core/lib/config/config-chain'>;
}
declare module '@babel/core/lib/config/config-descriptors.js' {
declare module.exports: $Exports<'@babel/core/lib/config/config-descriptors'>;
}
declare module '@babel/core/lib/config/files/configuration.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/configuration'>;
}
declare module '@babel/core/lib/config/files/index-browser.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/index-browser'>;
}
declare module '@babel/core/lib/config/files/index.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/index'>;
}
declare module '@babel/core/lib/config/files/package.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/package'>;
}
declare module '@babel/core/lib/config/files/plugins.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/plugins'>;
}
declare module '@babel/core/lib/config/files/types.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/types'>;
}
declare module '@babel/core/lib/config/files/utils.js' {
declare module.exports: $Exports<'@babel/core/lib/config/files/utils'>;
}
declare module '@babel/core/lib/config/full.js' {
declare module.exports: $Exports<'@babel/core/lib/config/full'>;
}
declare module '@babel/core/lib/config/helpers/config-api.js' {
declare module.exports: $Exports<'@babel/core/lib/config/helpers/config-api'>;
}
declare module '@babel/core/lib/config/helpers/environment.js' {
declare module.exports: $Exports<'@babel/core/lib/config/helpers/environment'>;
}
declare module '@babel/core/lib/config/index.js' {
declare module.exports: $Exports<'@babel/core/lib/config/index'>;
}
declare module '@babel/core/lib/config/item.js' {
declare module.exports: $Exports<'@babel/core/lib/config/item'>;
}
declare module '@babel/core/lib/config/partial.js' {
declare module.exports: $Exports<'@babel/core/lib/config/partial'>;
}
declare module '@babel/core/lib/config/pattern-to-regex.js' {
declare module.exports: $Exports<'@babel/core/lib/config/pattern-to-regex'>;
}
declare module '@babel/core/lib/config/plugin.js' {
declare module.exports: $Exports<'@babel/core/lib/config/plugin'>;
}
declare module '@babel/core/lib/config/util.js' {
declare module.exports: $Exports<'@babel/core/lib/config/util'>;
}
declare module '@babel/core/lib/config/validation/option-assertions.js' {
declare module.exports: $Exports<'@babel/core/lib/config/validation/option-assertions'>;
}
declare module '@babel/core/lib/config/validation/options.js' {
declare module.exports: $Exports<'@babel/core/lib/config/validation/options'>;
}
declare module '@babel/core/lib/config/validation/plugins.js' {
declare module.exports: $Exports<'@babel/core/lib/config/validation/plugins'>;
}
declare module '@babel/core/lib/config/validation/removed.js' {
declare module.exports: $Exports<'@babel/core/lib/config/validation/removed'>;
}
declare module '@babel/core/lib/index.js' {
declare module.exports: $Exports<'@babel/core/lib/index'>;
}
declare module '@babel/core/lib/parse.js' {
declare module.exports: $Exports<'@babel/core/lib/parse'>;
}
declare module '@babel/core/lib/tools/build-external-helpers.js' {
declare module.exports: $Exports<'@babel/core/lib/tools/build-external-helpers'>;
}
declare module '@babel/core/lib/transform-ast.js' {
declare module.exports: $Exports<'@babel/core/lib/transform-ast'>;
}
declare module '@babel/core/lib/transform-file-browser.js' {
declare module.exports: $Exports<'@babel/core/lib/transform-file-browser'>;
}
declare module '@babel/core/lib/transform-file.js' {
declare module.exports: $Exports<'@babel/core/lib/transform-file'>;
}
declare module '@babel/core/lib/transform.js' {
declare module.exports: $Exports<'@babel/core/lib/transform'>;
}
declare module '@babel/core/lib/transformation/block-hoist-plugin.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/block-hoist-plugin'>;
}
declare module '@babel/core/lib/transformation/file/file.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/file/file'>;
}
declare module '@babel/core/lib/transformation/file/generate.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/file/generate'>;
}
declare module '@babel/core/lib/transformation/file/merge-map.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/file/merge-map'>;
}
declare module '@babel/core/lib/transformation/index.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/index'>;
}
declare module '@babel/core/lib/transformation/normalize-file.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/normalize-file'>;
}
declare module '@babel/core/lib/transformation/normalize-opts.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/normalize-opts'>;
}
declare module '@babel/core/lib/transformation/plugin-pass.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/plugin-pass'>;
}
declare module '@babel/core/lib/transformation/util/missing-plugin-helper.js' {
declare module.exports: $Exports<'@babel/core/lib/transformation/util/missing-plugin-helper'>;
}

View file

@ -0,0 +1,32 @@
// flow-typed signature: 3350ac60247e5d21911065431eacf53e
// flow-typed version: <<STUB>>/@babel/plugin-proposal-class-properties_v^7.0.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@babel/plugin-proposal-class-properties'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@babel/plugin-proposal-class-properties' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@babel/plugin-proposal-class-properties/lib/index' {
declare module.exports: any;
}
// Filename aliases
declare module '@babel/plugin-proposal-class-properties/lib/index.js' {
declare module.exports: $Exports<'@babel/plugin-proposal-class-properties/lib/index'>;
}

View file

@ -0,0 +1,39 @@
// flow-typed signature: b3034b120832a9a28300dffb95bf7c9d
// flow-typed version: <<STUB>>/@babel/plugin-proposal-decorators_v^7.3.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@babel/plugin-proposal-decorators'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@babel/plugin-proposal-decorators' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@babel/plugin-proposal-decorators/lib/index' {
declare module.exports: any;
}
declare module '@babel/plugin-proposal-decorators/lib/transformer-legacy' {
declare module.exports: any;
}
// Filename aliases
declare module '@babel/plugin-proposal-decorators/lib/index.js' {
declare module.exports: $Exports<'@babel/plugin-proposal-decorators/lib/index'>;
}
declare module '@babel/plugin-proposal-decorators/lib/transformer-legacy.js' {
declare module.exports: $Exports<'@babel/plugin-proposal-decorators/lib/transformer-legacy'>;
}

View file

@ -0,0 +1,32 @@
// flow-typed signature: 10e8f21a7c98ee47f62fa7e5a6a5ab71
// flow-typed version: <<STUB>>/@babel/plugin-transform-flow-strip-types_v^7.2.3/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@babel/plugin-transform-flow-strip-types'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@babel/plugin-transform-flow-strip-types' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@babel/plugin-transform-flow-strip-types/lib/index' {
declare module.exports: any;
}
// Filename aliases
declare module '@babel/plugin-transform-flow-strip-types/lib/index.js' {
declare module.exports: $Exports<'@babel/plugin-transform-flow-strip-types/lib/index'>;
}

View file

@ -0,0 +1,4 @@
// flow-typed signature: ebc6e7724cd1da0d1a8b10de36bd7a94
// flow-typed version: 7b122e75af/@babel/polyfill_v7.x.x/flow_>=v0.30.x
declare module '@babel/polyfill' {}

View file

@ -0,0 +1,32 @@
// flow-typed signature: ad96fb37691315cf15ed6c2a7d890024
// flow-typed version: <<STUB>>/@babel/preset-flow_v^7.0.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@babel/preset-flow'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@babel/preset-flow' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@babel/preset-flow/lib/index' {
declare module.exports: any;
}
// Filename aliases
declare module '@babel/preset-flow/lib/index.js' {
declare module.exports: $Exports<'@babel/preset-flow/lib/index'>;
}

View file

@ -0,0 +1,32 @@
// flow-typed signature: e7347ed70897733b4d136cb0cb8ae5c4
// flow-typed version: <<STUB>>/@babel/preset-react_v^7.0.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@babel/preset-react'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@babel/preset-react' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@babel/preset-react/lib/index' {
declare module.exports: any;
}
// Filename aliases
declare module '@babel/preset-react/lib/index.js' {
declare module.exports: $Exports<'@babel/preset-react/lib/index'>;
}

View file

@ -0,0 +1,47 @@
// flow-typed signature: 5934458d8287c23337a0363563a548f9
// flow-typed version: b77688cf5d/@babel/register_v7.x.x/flow_>=v0.30.x
declare module '@babel/register' {
declare type Ignore = boolean | string | RegExp | (filename: string) => boolean;
declare type Options = {|
ast?: boolean,
auxiliaryCommentAfter?: ?string,
auxiliaryCommentBefore?: ?string,
babelrc?: boolean,
code?: boolean,
comments?: boolean,
compact?: 'auto' | boolean,
configFile?: string | boolean,
env?: Object,
extends?: ?string,
extensions?: Array<string>,
filename?: string,
filenameRelative?: string,
generatorOpts?: Object,
getModuleId?: void | null | (moduleName: string) => string,
highlightCode?: boolean,
ignore?: Ignore | Array<Ignore>,
inputSourceMap?: Object,
minified?: boolean,
moduleId?: string,
moduleIds?: boolean,
moduleRoot?: string,
only?: RegExp,
parserOpts?: Object,
plugins?: Array<[string, Object] | string>,
presets?: Array<string>,
retainLines?: boolean,
resolveModuleSource?: null | (source: string, filename: string) => boolean,
shouldPrintComment?: null | (commentContents: string) => string,
sourceFileName?: string,
sourceMaps?: boolean | 'inline' | 'both',
sourceMapTarget?: string,
sourceRoot?: string,
sourceType?: 'script' | 'module',
wrapPluginVisitorMethod?: null | (pluginAlias: string, visitorType: string, callback: Function) => boolean,
extensions?: Array<string>,
cache?: boolean,
|};
declare module.exports: (options?: Options) => void;
}

View file

@ -0,0 +1,318 @@
// flow-typed signature: 7025e1d060874c9ed272b10b43d6cbd4
// flow-typed version: <<STUB>>/@hot-loader/react-dom_v16.8/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@hot-loader/react-dom'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@hot-loader/react-dom' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@hot-loader/react-dom/cjs/react-dom-server.browser.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-server.browser.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-server.node.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-server.node.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-test-utils.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-test-utils.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fire.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fire.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fire.profiling.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.browser.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.browser.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.node.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.node.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-native-dependencies.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-native-dependencies.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/cjs/react-dom.profiling.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/profiling' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/server.browser' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/server' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/server.node' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/test-utils' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-server.browser.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-server.browser.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-test-utils.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-test-utils.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fire.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fire.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fire.profiling.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fizz.browser.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fizz.browser.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-native-dependencies.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-native-dependencies.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom.development' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom.production.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/umd/react-dom.profiling.min' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/unstable-fizz.browser' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/unstable-fizz' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/unstable-fizz.node' {
declare module.exports: any;
}
declare module '@hot-loader/react-dom/unstable-native-dependencies' {
declare module.exports: any;
}
// Filename aliases
declare module '@hot-loader/react-dom/cjs/react-dom-server.browser.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-server.browser.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-server.browser.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-server.browser.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-server.node.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-server.node.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-server.node.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-server.node.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-test-utils.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-test-utils.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-test-utils.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-test-utils.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fire.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fire.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fire.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fire.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fire.profiling.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fire.profiling.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.browser.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fizz.browser.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.browser.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fizz.browser.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.node.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fizz.node.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-fizz.node.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-fizz.node.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-native-dependencies.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-native-dependencies.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom-unstable-native-dependencies.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom-unstable-native-dependencies.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom.development'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom.production.min'>;
}
declare module '@hot-loader/react-dom/cjs/react-dom.profiling.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/cjs/react-dom.profiling.min'>;
}
declare module '@hot-loader/react-dom/index' {
declare module.exports: $Exports<'@hot-loader/react-dom'>;
}
declare module '@hot-loader/react-dom/index.js' {
declare module.exports: $Exports<'@hot-loader/react-dom'>;
}
declare module '@hot-loader/react-dom/profiling.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/profiling'>;
}
declare module '@hot-loader/react-dom/server.browser.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/server.browser'>;
}
declare module '@hot-loader/react-dom/server.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/server'>;
}
declare module '@hot-loader/react-dom/server.node.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/server.node'>;
}
declare module '@hot-loader/react-dom/test-utils.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/test-utils'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-server.browser.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-server.browser.development'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-server.browser.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-server.browser.production.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-test-utils.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-test-utils.development'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-test-utils.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-test-utils.production.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fire.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-fire.development'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fire.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-fire.production.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fire.profiling.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-fire.profiling.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fizz.browser.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-fizz.browser.development'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-fizz.browser.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-fizz.browser.production.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-native-dependencies.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-native-dependencies.development'>;
}
declare module '@hot-loader/react-dom/umd/react-dom-unstable-native-dependencies.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom-unstable-native-dependencies.production.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom.development.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom.development'>;
}
declare module '@hot-loader/react-dom/umd/react-dom.production.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom.production.min'>;
}
declare module '@hot-loader/react-dom/umd/react-dom.profiling.min.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/umd/react-dom.profiling.min'>;
}
declare module '@hot-loader/react-dom/unstable-fizz.browser.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/unstable-fizz.browser'>;
}
declare module '@hot-loader/react-dom/unstable-fizz.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/unstable-fizz'>;
}
declare module '@hot-loader/react-dom/unstable-fizz.node.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/unstable-fizz.node'>;
}
declare module '@hot-loader/react-dom/unstable-native-dependencies.js' {
declare module.exports: $Exports<'@hot-loader/react-dom/unstable-native-dependencies'>;
}

18
flow-typed/npm/@lbry/color_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,18 @@
// flow-typed signature: 3213370d53d43337e039b1f99b90ad98
// flow-typed version: <<STUB>>/@lbry/color_v^1.0.2/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@lbry/color'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@lbry/color' {
declare module.exports: any;
}

View file

@ -0,0 +1,18 @@
// flow-typed signature: 8b77537ae4d6c835866e04a70a0ad6f3
// flow-typed version: <<STUB>>/@lbry/components_v^2.2.4/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@lbry/components'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@lbry/components' {
declare module.exports: any;
}

18
flow-typed/npm/@types/three_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,18 @@
// flow-typed signature: e85a840886c4c445a0e0d1b1c1b20fef
// flow-typed version: <<STUB>>/@types/three_v^0.93.1/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* '@types/three'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@types/three' {
declare module.exports: any;
}

View file

@ -0,0 +1,33 @@
// flow-typed signature: 0179aaf62abe5de0fea307e93b07f0fd
// flow-typed version: <<STUB>>/async-exit-hook_v^2.0.1/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'async-exit-hook'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'async-exit-hook' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
// Filename aliases
declare module 'async-exit-hook/index' {
declare module.exports: $Exports<'async-exit-hook'>;
}
declare module 'async-exit-hook/index.js' {
declare module.exports: $Exports<'async-exit-hook'>;
}

109
flow-typed/npm/babel-eslint_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,109 @@
// flow-typed signature: 7deec821536f1597fae1f6cd21e9ef81
// flow-typed version: <<STUB>>/babel-eslint_v^10.0.1/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'babel-eslint'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'babel-eslint' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'babel-eslint/lib/analyze-scope' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/attachComments' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/convertComments' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/convertTemplateType' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/index' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/toAST' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/toToken' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/toTokens' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/index' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/parse-with-scope' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/parse' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/visitor-keys' {
declare module.exports: any;
}
// Filename aliases
declare module 'babel-eslint/lib/analyze-scope.js' {
declare module.exports: $Exports<'babel-eslint/lib/analyze-scope'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/attachComments.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/attachComments'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/convertComments.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/convertComments'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/convertTemplateType.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/convertTemplateType'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/index.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/index'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/toAST.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toAST'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/toToken.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toToken'>;
}
declare module 'babel-eslint/lib/babylon-to-espree/toTokens.js' {
declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toTokens'>;
}
declare module 'babel-eslint/lib/index.js' {
declare module.exports: $Exports<'babel-eslint/lib/index'>;
}
declare module 'babel-eslint/lib/parse-with-scope.js' {
declare module.exports: $Exports<'babel-eslint/lib/parse-with-scope'>;
}
declare module 'babel-eslint/lib/parse.js' {
declare module.exports: $Exports<'babel-eslint/lib/parse'>;
}
declare module 'babel-eslint/lib/visitor-keys.js' {
declare module.exports: $Exports<'babel-eslint/lib/visitor-keys'>;
}

60
flow-typed/npm/babel-loader_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,60 @@
// flow-typed signature: 67633ab172e0306588506ec8c9dfb0c5
// flow-typed version: <<STUB>>/babel-loader_v^8.0.5/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'babel-loader'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'babel-loader' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'babel-loader/lib/cache' {
declare module.exports: any;
}
declare module 'babel-loader/lib/Error' {
declare module.exports: any;
}
declare module 'babel-loader/lib/index' {
declare module.exports: any;
}
declare module 'babel-loader/lib/injectCaller' {
declare module.exports: any;
}
declare module 'babel-loader/lib/transform' {
declare module.exports: any;
}
// Filename aliases
declare module 'babel-loader/lib/cache.js' {
declare module.exports: $Exports<'babel-loader/lib/cache'>;
}
declare module 'babel-loader/lib/Error.js' {
declare module.exports: $Exports<'babel-loader/lib/Error'>;
}
declare module 'babel-loader/lib/index.js' {
declare module.exports: $Exports<'babel-loader/lib/index'>;
}
declare module 'babel-loader/lib/injectCaller.js' {
declare module.exports: $Exports<'babel-loader/lib/injectCaller'>;
}
declare module 'babel-loader/lib/transform.js' {
declare module.exports: $Exports<'babel-loader/lib/transform'>;
}

View file

@ -0,0 +1,32 @@
// flow-typed signature: a0883da47931ce64ec28c9da060c809c
// flow-typed version: <<STUB>>/babel-plugin-add-module-exports_v^1.0.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'babel-plugin-add-module-exports'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'babel-plugin-add-module-exports' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'babel-plugin-add-module-exports/lib/index' {
declare module.exports: any;
}
// Filename aliases
declare module 'babel-plugin-add-module-exports/lib/index.js' {
declare module.exports: $Exports<'babel-plugin-add-module-exports/lib/index'>;
}

View file

@ -0,0 +1,52 @@
// flow-typed signature: cb570215f71dc62ada0fe7396fcaa472
// flow-typed version: <<STUB>>/babel-plugin-transform-imports_v^1.5.1/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'babel-plugin-transform-imports'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'babel-plugin-transform-imports' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'babel-plugin-transform-imports/test/invalidTransform' {
declare module.exports: any;
}
declare module 'babel-plugin-transform-imports/test/tests' {
declare module.exports: any;
}
declare module 'babel-plugin-transform-imports/test/transform' {
declare module.exports: any;
}
// Filename aliases
declare module 'babel-plugin-transform-imports/index' {
declare module.exports: $Exports<'babel-plugin-transform-imports'>;
}
declare module 'babel-plugin-transform-imports/index.js' {
declare module.exports: $Exports<'babel-plugin-transform-imports'>;
}
declare module 'babel-plugin-transform-imports/test/invalidTransform.js' {
declare module.exports: $Exports<'babel-plugin-transform-imports/test/invalidTransform'>;
}
declare module 'babel-plugin-transform-imports/test/tests.js' {
declare module.exports: $Exports<'babel-plugin-transform-imports/test/tests'>;
}
declare module 'babel-plugin-transform-imports/test/transform.js' {
declare module.exports: $Exports<'babel-plugin-transform-imports/test/transform'>;
}

329
flow-typed/npm/bluebird_v3.x.x.js vendored Normal file
View file

@ -0,0 +1,329 @@
// flow-typed signature: e0974d6c2c04803a78c4faa3e848c72a
// flow-typed version: 34fbdaa6f3/bluebird_v3.x.x/flow_>=v0.70.x
type Bluebird$RangeError = Error;
type Bluebird$CancellationErrors = Error;
type Bluebird$TimeoutError = Error;
type Bluebird$RejectionError = Error;
type Bluebird$OperationalError = Error;
type Bluebird$ConcurrencyOption = {
concurrency: number
};
type Bluebird$SpreadOption = {
spread: boolean
};
type Bluebird$MultiArgsOption = {
multiArgs: boolean
};
type Bluebird$BluebirdConfig = {
warnings?: boolean,
longStackTraces?: boolean,
cancellation?: boolean,
monitoring?: boolean
};
declare class Bluebird$PromiseInspection<T> {
isCancelled(): boolean;
isFulfilled(): boolean;
isRejected(): boolean;
pending(): boolean;
reason(): any;
value(): T;
}
type Bluebird$PromisifyOptions = {|
multiArgs?: boolean,
context: any
|};
declare type Bluebird$PromisifyAllOptions = {
suffix?: string,
filter?: (
name: string,
func: Function,
target?: any,
passesDefaultFilter?: boolean
) => boolean,
// The promisifier gets a reference to the original method and should return a function which returns a promise
promisifier?: (originalMethod: Function) => () => Bluebird$Promise<any>
};
declare type $Promisable<T> = Promise<T> | T;
declare class Bluebird$Disposable<R> {}
declare class Bluebird$Promise<+R> extends Promise<R> {
static RangeError: Class<Bluebird$RangeError>;
static CancellationErrors: Class<Bluebird$CancellationErrors>;
static TimeoutError: Class<Bluebird$TimeoutError>;
static RejectionError: Class<Bluebird$RejectionError>;
static OperationalError: Class<Bluebird$OperationalError>;
static Defer: Class<Bluebird$Defer>;
static PromiseInspection: Class<Bluebird$PromiseInspection<*>>;
static all<T>(
Promises: $Promisable<Iterable<$Promisable<T>>>
): Bluebird$Promise<Array<T>>;
static props(
input: Object | Map<*, *> | $Promisable<Object | Map<*, *>>
): Bluebird$Promise<*>;
static any<T, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>
): Bluebird$Promise<T>;
static race<T, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>
): Bluebird$Promise<T>;
static reject<T>(error?: any): Bluebird$Promise<T>;
static resolve<T>(object?: $Promisable<T>): Bluebird$Promise<T>;
static some<T, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>,
count: number
): Bluebird$Promise<Array<T>>;
static join<T, A>(
value1: $Promisable<A>,
handler: (a: A) => $Promisable<T>
): Bluebird$Promise<T>;
static join<T, A, B>(
value1: $Promisable<A>,
value2: $Promisable<B>,
handler: (a: A, b: B) => $Promisable<T>
): Bluebird$Promise<T>;
static join<T, A, B, C>(
value1: $Promisable<A>,
value2: $Promisable<B>,
value3: $Promisable<C>,
handler: (a: A, b: B, c: C) => $Promisable<T>
): Bluebird$Promise<T>;
static map<T, U, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>,
mapper: (item: T, index: number, arrayLength: number) => $Promisable<U>,
options?: Bluebird$ConcurrencyOption
): Bluebird$Promise<Array<U>>;
static mapSeries<T, U, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>,
mapper: (item: T, index: number, arrayLength: number) => $Promisable<U>
): Bluebird$Promise<Array<U>>;
static reduce<T, U, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>,
reducer: (
total: U,
current: T,
index: number,
arrayLength: number
) => $Promisable<U>,
initialValue?: $Promisable<U>
): Bluebird$Promise<U>;
static filter<T, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>,
filterer: (
item: T,
index: number,
arrayLength: number
) => $Promisable<boolean>,
option?: Bluebird$ConcurrencyOption
): Bluebird$Promise<Array<T>>;
static each<T, Elem: $Promisable<T>>(
Promises: Iterable<Elem> | $Promisable<Iterable<Elem>>,
iterator: (
item: T,
index: number,
arrayLength: number
) => $Promisable<mixed>
): Bluebird$Promise<Array<T>>;
static try<T>(
fn: () => $Promisable<T>,
args: ?Array<any>,
ctx: ?any
): Bluebird$Promise<T>;
static attempt<T>(
fn: () => $Promisable<T>,
args: ?Array<any>,
ctx: ?any
): Bluebird$Promise<T>;
static delay<T>(ms: number, value: $Promisable<T>): Bluebird$Promise<T>;
static delay(ms: number): Bluebird$Promise<void>;
static config(config: Bluebird$BluebirdConfig): void;
static defer(): Bluebird$Defer;
static setScheduler(
scheduler: (callback: (...args: Array<any>) => void) => void
): void;
static promisify(
nodeFunction: Function,
receiver?: Bluebird$PromisifyOptions
): Function;
static promisifyAll(
target: Object | Array<Object>,
options?: Bluebird$PromisifyAllOptions
): void;
static coroutine(generatorFunction: Function): Function;
static spawn<T>(generatorFunction: Function): Promise<T>;
// It doesn't seem possible to have type-generics for a variable number of arguments.
// Handle up to 3 arguments, then just give up and accept 'any'.
static method<T, R: $Promisable<T>>(fn: () => R): () => Bluebird$Promise<T>;
static method<T, R: $Promisable<T>, A>(
fn: (a: A) => R
): (a: A) => Bluebird$Promise<T>;
static method<T, R: $Promisable<T>, A, B>(
fn: (a: A, b: B) => R
): (a: A, b: B) => Bluebird$Promise<T>;
static method<T, R: $Promisable<T>, A, B, C>(
fn: (a: A, b: B, c: C) => R
): (a: A, b: B, c: C) => Bluebird$Promise<T>;
static method<T, R: $Promisable<T>>(
fn: (...args: any) => R
): (...args: any) => Bluebird$Promise<T>;
static cast<T>(value: $Promisable<T>): Bluebird$Promise<T>;
// static bind(ctx: any): Bluebird$Promise<void>;
static is(value: any): boolean;
static longStackTraces(): void;
static onPossiblyUnhandledRejection(handler: (reason: any) => any): void;
static fromCallback<T>(
resolver: (fn: (error: ?Error, value?: T) => any) => any,
options?: Bluebird$MultiArgsOption
): Bluebird$Promise<T>;
constructor(
callback: (
resolve: (result?: $Promisable<R>) => void,
reject: (error?: any) => void,
onCancel?: (fn?: () => void) => void,
) => mixed
): void;
then(onFulfill: null | void, onReject: null | void): Bluebird$Promise<R>;
then<U>(
onFulfill: null | void,
onReject: (error: any) => Promise<U> | U
): Bluebird$Promise<R | U>;
then<U>(
onFulfill: (value: R) => Promise<U> | U,
onReject: null | void | ((error: any) => Promise<U> | U)
): Bluebird$Promise<U>;
catch(onReject: null | void): Promise<R>;
catch<U>(onReject?: (error: any) => $Promisable<U>): Bluebird$Promise<U>;
catch<U, ErrorT: Error>(
err: Class<ErrorT>,
onReject: (error: ErrorT) => $Promisable<U>
): Bluebird$Promise<U>;
catch<U, ErrorT: Error>(
err1: Class<ErrorT>,
err2: Class<ErrorT>,
onReject: (error: ErrorT) => $Promisable<U>
): Bluebird$Promise<U>;
catch<U, ErrorT: Error>(
err1: Class<ErrorT>,
err2: Class<ErrorT>,
err3: Class<ErrorT>,
onReject: (error: ErrorT) => $Promisable<U>
): Bluebird$Promise<U>;
caught<U, ErrorT: Error>(
err: Class<ErrorT>,
onReject: (error: Error) => $Promisable<U>
): Bluebird$Promise<U>;
caught<U, ErrorT: Error>(
err1: Class<ErrorT>,
err2: Class<ErrorT>,
onReject: (error: ErrorT) => $Promisable<U>
): Bluebird$Promise<U>;
caught<U, ErrorT: Error>(
err1: Class<ErrorT>,
err2: Class<ErrorT>,
err3: Class<ErrorT>,
onReject: (error: ErrorT) => $Promisable<U>
): Bluebird$Promise<U>;
caught<U>(onReject: (error: any) => $Promisable<U>): Bluebird$Promise<U>;
error<U>(onReject?: (error: any) => ?$Promisable<U>): Bluebird$Promise<U>;
done<U>(
onFulfill?: (value: R) => mixed,
onReject?: (error: any) => mixed
): void;
finally<T>(onDone?: (value: R) => mixed): Bluebird$Promise<T>;
lastly<T>(onDone?: (value: R) => mixed): Bluebird$Promise<T>;
tap<T>(onDone?: (value: R) => mixed): Bluebird$Promise<T>;
delay(ms: number): Bluebird$Promise<R>;
timeout(ms: number, message?: string): Bluebird$Promise<R>;
cancel(): void;
// bind(ctx: any): Bluebird$Promise<R>;
call(propertyName: string, ...args: Array<any>): Bluebird$Promise<any>;
throw(reason: Error): Bluebird$Promise<R>;
thenThrow(reason: Error): Bluebird$Promise<R>;
all<T>(): Bluebird$Promise<Array<T>>;
any<T>(): Bluebird$Promise<T>;
some<T>(count: number): Bluebird$Promise<Array<T>>;
race<T>(): Bluebird$Promise<T>;
map<T, U>(
mapper: (item: T, index: number, arrayLength: number) => $Promisable<U>,
options?: Bluebird$ConcurrencyOption
): Bluebird$Promise<Array<U>>;
mapSeries<T, U>(
mapper: (item: T, index: number, arrayLength: number) => $Promisable<U>
): Bluebird$Promise<Array<U>>;
reduce<T, U>(
reducer: (
total: T,
item: U,
index: number,
arrayLength: number
) => $Promisable<T>,
initialValue?: $Promisable<T>
): Bluebird$Promise<T>;
filter<T>(
filterer: (
item: T,
index: number,
arrayLength: number
) => $Promisable<boolean>,
options?: Bluebird$ConcurrencyOption
): Bluebird$Promise<Array<T>>;
each<T, U>(
iterator: (item: T, index: number, arrayLength: number) => $Promisable<U>
): Bluebird$Promise<Array<T>>;
asCallback<T>(
callback: (error: ?any, value?: T) => any,
options?: Bluebird$SpreadOption
): void;
return<T>(value: T): Bluebird$Promise<T>;
thenReturn<T>(value: T): Bluebird$Promise<T>;
spread<T>(...args: Array<T>): Bluebird$Promise<*>;
reflect(): Bluebird$Promise<Bluebird$PromiseInspection<*>>;
isFulfilled(): boolean;
isRejected(): boolean;
isPending(): boolean;
isResolved(): boolean;
value(): R;
reason(): any;
disposer(
disposer: (value: R, promise: Promise<*>) => void
): Bluebird$Disposable<R>;
static using<T, A>(
disposable: Bluebird$Disposable<T>,
handler: (value: T) => $Promisable<A>
): Bluebird$Promise<A>;
suppressUnhandledRejections(): void;
}
declare class Bluebird$Defer {
promise: Bluebird$Promise<*>;
resolve: (value: any) => any;
reject: (value: any) => any;
}
declare module "bluebird" {
declare module.exports: typeof Bluebird$Promise;
declare type Disposable<T> = Bluebird$Disposable<T>;
}

98
flow-typed/npm/chalk_v2.x.x.js vendored Normal file
View file

@ -0,0 +1,98 @@
// flow-typed signature: db5b2cdde8db39d47e27cc8ab84f89bf
// flow-typed version: d662d43161/chalk_v2.x.x/flow_>=v0.25.x
// From: https://github.com/chalk/chalk/blob/master/index.js.flow
declare module "chalk" {
declare type TemplateStringsArray = $ReadOnlyArray<string>;
declare type Level = $Values<{
None: 0,
Basic: 1,
Ansi256: 2,
TrueColor: 3
}>;
declare type ChalkOptions = {|
enabled?: boolean,
level?: Level
|};
declare type ColorSupport = {|
level: Level,
hasBasic: boolean,
has256: boolean,
has16m: boolean
|};
declare interface Chalk {
(...text: string[]): string,
(text: TemplateStringsArray, ...placeholders: string[]): string,
constructor(options?: ChalkOptions): Chalk,
enabled: boolean,
level: Level,
rgb(r: number, g: number, b: number): Chalk,
hsl(h: number, s: number, l: number): Chalk,
hsv(h: number, s: number, v: number): Chalk,
hwb(h: number, w: number, b: number): Chalk,
bgHex(color: string): Chalk,
bgKeyword(color: string): Chalk,
bgRgb(r: number, g: number, b: number): Chalk,
bgHsl(h: number, s: number, l: number): Chalk,
bgHsv(h: number, s: number, v: number): Chalk,
bgHwb(h: number, w: number, b: number): Chalk,
hex(color: string): Chalk,
keyword(color: string): Chalk,
+reset: Chalk,
+bold: Chalk,
+dim: Chalk,
+italic: Chalk,
+underline: Chalk,
+inverse: Chalk,
+hidden: Chalk,
+strikethrough: Chalk,
+visible: Chalk,
+black: Chalk,
+red: Chalk,
+green: Chalk,
+yellow: Chalk,
+blue: Chalk,
+magenta: Chalk,
+cyan: Chalk,
+white: Chalk,
+gray: Chalk,
+grey: Chalk,
+blackBright: Chalk,
+redBright: Chalk,
+greenBright: Chalk,
+yellowBright: Chalk,
+blueBright: Chalk,
+magentaBright: Chalk,
+cyanBright: Chalk,
+whiteBright: Chalk,
+bgBlack: Chalk,
+bgRed: Chalk,
+bgGreen: Chalk,
+bgYellow: Chalk,
+bgBlue: Chalk,
+bgMagenta: Chalk,
+bgCyan: Chalk,
+bgWhite: Chalk,
+bgBlackBright: Chalk,
+bgRedBright: Chalk,
+bgGreenBright: Chalk,
+bgYellowBright: Chalk,
+bgBlueBright: Chalk,
+bgMagentaBright: Chalk,
+bgCyanBright: Chalk,
+bgWhiteBrigh: Chalk,
supportsColor: ColorSupport
}
declare module.exports: Chalk;
}

23
flow-typed/npm/classnames_v2.x.x.js vendored Normal file
View file

@ -0,0 +1,23 @@
// flow-typed signature: cf86673cc32d185bdab1d2ea90578d37
// flow-typed version: 614bf49aa8/classnames_v2.x.x/flow_>=v0.25.x
type $npm$classnames$Classes =
| string
| { [className: string]: * }
| false
| void
| null;
declare module "classnames" {
declare module.exports: (
...classes: Array<$npm$classnames$Classes | $npm$classnames$Classes[]>
) => string;
}
declare module "classnames/bind" {
declare module.exports: $Exports<"classnames">;
}
declare module "classnames/dedupe" {
declare module.exports: $Exports<"classnames">;
}

1761
flow-typed/npm/codemirror_vx.x.x.js vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,95 @@
// flow-typed signature: 5b28287a475ee10170991509ccc86844
// flow-typed version: <<STUB>>/copy-webpack-plugin_v^4.6.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'copy-webpack-plugin'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'copy-webpack-plugin' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'copy-webpack-plugin/dist/index' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/preProcessPattern' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/processPattern' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/utils/escape' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/utils/isObject' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/utils/promisify' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/utils/readFilePromise' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/utils/readPromise' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/utils/statPromise' {
declare module.exports: any;
}
declare module 'copy-webpack-plugin/dist/writeFile' {
declare module.exports: any;
}
// Filename aliases
declare module 'copy-webpack-plugin/dist/index.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/index'>;
}
declare module 'copy-webpack-plugin/dist/preProcessPattern.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/preProcessPattern'>;
}
declare module 'copy-webpack-plugin/dist/processPattern.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/processPattern'>;
}
declare module 'copy-webpack-plugin/dist/utils/escape.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/utils/escape'>;
}
declare module 'copy-webpack-plugin/dist/utils/isObject.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/utils/isObject'>;
}
declare module 'copy-webpack-plugin/dist/utils/promisify.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/utils/promisify'>;
}
declare module 'copy-webpack-plugin/dist/utils/readFilePromise.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/utils/readFilePromise'>;
}
declare module 'copy-webpack-plugin/dist/utils/readPromise.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/utils/readPromise'>;
}
declare module 'copy-webpack-plugin/dist/utils/statPromise.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/utils/statPromise'>;
}
declare module 'copy-webpack-plugin/dist/writeFile.js' {
declare module.exports: $Exports<'copy-webpack-plugin/dist/writeFile'>;
}

129
flow-typed/npm/country-data_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,129 @@
// flow-typed signature: 9ac14a1f40af643c7a1cda684c6d14c6
// flow-typed version: <<STUB>>/country-data_v^0.0.31/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'country-data'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'country-data' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'country-data/data/continents' {
declare module.exports: any;
}
declare module 'country-data/data/country_csv_to_json' {
declare module.exports: any;
}
declare module 'country-data/data/currency_csv_to_json' {
declare module.exports: any;
}
declare module 'country-data/data/language_csv_to_json' {
declare module.exports: any;
}
declare module 'country-data/data/normalize_csv' {
declare module.exports: any;
}
declare module 'country-data/data/regions' {
declare module.exports: any;
}
declare module 'country-data/lookup' {
declare module.exports: any;
}
declare module 'country-data/test/calling-codes' {
declare module.exports: any;
}
declare module 'country-data/test/countries' {
declare module.exports: any;
}
declare module 'country-data/test/cross-references' {
declare module.exports: any;
}
declare module 'country-data/test/currencies' {
declare module.exports: any;
}
declare module 'country-data/test/languages' {
declare module.exports: any;
}
declare module 'country-data/test/lookup' {
declare module.exports: any;
}
declare module 'country-data/test/regions' {
declare module.exports: any;
}
// Filename aliases
declare module 'country-data/data/continents.js' {
declare module.exports: $Exports<'country-data/data/continents'>;
}
declare module 'country-data/data/country_csv_to_json.js' {
declare module.exports: $Exports<'country-data/data/country_csv_to_json'>;
}
declare module 'country-data/data/currency_csv_to_json.js' {
declare module.exports: $Exports<'country-data/data/currency_csv_to_json'>;
}
declare module 'country-data/data/language_csv_to_json.js' {
declare module.exports: $Exports<'country-data/data/language_csv_to_json'>;
}
declare module 'country-data/data/normalize_csv.js' {
declare module.exports: $Exports<'country-data/data/normalize_csv'>;
}
declare module 'country-data/data/regions.js' {
declare module.exports: $Exports<'country-data/data/regions'>;
}
declare module 'country-data/index' {
declare module.exports: $Exports<'country-data'>;
}
declare module 'country-data/index.js' {
declare module.exports: $Exports<'country-data'>;
}
declare module 'country-data/lookup.js' {
declare module.exports: $Exports<'country-data/lookup'>;
}
declare module 'country-data/test/calling-codes.js' {
declare module.exports: $Exports<'country-data/test/calling-codes'>;
}
declare module 'country-data/test/countries.js' {
declare module.exports: $Exports<'country-data/test/countries'>;
}
declare module 'country-data/test/cross-references.js' {
declare module.exports: $Exports<'country-data/test/cross-references'>;
}
declare module 'country-data/test/currencies.js' {
declare module.exports: $Exports<'country-data/test/currencies'>;
}
declare module 'country-data/test/languages.js' {
declare module.exports: $Exports<'country-data/test/languages'>;
}
declare module 'country-data/test/lookup.js' {
declare module.exports: $Exports<'country-data/test/lookup'>;
}
declare module 'country-data/test/regions.js' {
declare module.exports: $Exports<'country-data/test/regions'>;
}

60
flow-typed/npm/cross-env_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,60 @@
// flow-typed signature: 4b0f550a8e6f64b3a26538a2e3435a5a
// flow-typed version: <<STUB>>/cross-env_v^5.2.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'cross-env'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'cross-env' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'cross-env/dist/bin/cross-env-shell' {
declare module.exports: any;
}
declare module 'cross-env/dist/bin/cross-env' {
declare module.exports: any;
}
declare module 'cross-env/dist/command' {
declare module.exports: any;
}
declare module 'cross-env/dist/index' {
declare module.exports: any;
}
declare module 'cross-env/dist/variable' {
declare module.exports: any;
}
// Filename aliases
declare module 'cross-env/dist/bin/cross-env-shell.js' {
declare module.exports: $Exports<'cross-env/dist/bin/cross-env-shell'>;
}
declare module 'cross-env/dist/bin/cross-env.js' {
declare module.exports: $Exports<'cross-env/dist/bin/cross-env'>;
}
declare module 'cross-env/dist/command.js' {
declare module.exports: $Exports<'cross-env/dist/command'>;
}
declare module 'cross-env/dist/index.js' {
declare module.exports: $Exports<'cross-env/dist/index'>;
}
declare module 'cross-env/dist/variable.js' {
declare module.exports: $Exports<'cross-env/dist/variable'>;
}

102
flow-typed/npm/css-loader_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,102 @@
// flow-typed signature: 4c1b3e9c5881b71f8fa1de27757c7fab
// flow-typed version: <<STUB>>/css-loader_v^2.1.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'css-loader'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'css-loader' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'css-loader/dist/cjs' {
declare module.exports: any;
}
declare module 'css-loader/dist/CssSyntaxError' {
declare module.exports: any;
}
declare module 'css-loader/dist/index' {
declare module.exports: any;
}
declare module 'css-loader/dist/plugins/index' {
declare module.exports: any;
}
declare module 'css-loader/dist/plugins/postcss-icss-parser' {
declare module.exports: any;
}
declare module 'css-loader/dist/plugins/postcss-import-parser' {
declare module.exports: any;
}
declare module 'css-loader/dist/plugins/postcss-url-parser' {
declare module.exports: any;
}
declare module 'css-loader/dist/runtime/api' {
declare module.exports: any;
}
declare module 'css-loader/dist/runtime/url-escape' {
declare module.exports: any;
}
declare module 'css-loader/dist/utils' {
declare module.exports: any;
}
declare module 'css-loader/dist/Warning' {
declare module.exports: any;
}
// Filename aliases
declare module 'css-loader/dist/cjs.js' {
declare module.exports: $Exports<'css-loader/dist/cjs'>;
}
declare module 'css-loader/dist/CssSyntaxError.js' {
declare module.exports: $Exports<'css-loader/dist/CssSyntaxError'>;
}
declare module 'css-loader/dist/index.js' {
declare module.exports: $Exports<'css-loader/dist/index'>;
}
declare module 'css-loader/dist/plugins/index.js' {
declare module.exports: $Exports<'css-loader/dist/plugins/index'>;
}
declare module 'css-loader/dist/plugins/postcss-icss-parser.js' {
declare module.exports: $Exports<'css-loader/dist/plugins/postcss-icss-parser'>;
}
declare module 'css-loader/dist/plugins/postcss-import-parser.js' {
declare module.exports: $Exports<'css-loader/dist/plugins/postcss-import-parser'>;
}
declare module 'css-loader/dist/plugins/postcss-url-parser.js' {
declare module.exports: $Exports<'css-loader/dist/plugins/postcss-url-parser'>;
}
declare module 'css-loader/dist/runtime/api.js' {
declare module.exports: $Exports<'css-loader/dist/runtime/api'>;
}
declare module 'css-loader/dist/runtime/url-escape.js' {
declare module.exports: $Exports<'css-loader/dist/runtime/url-escape'>;
}
declare module 'css-loader/dist/utils.js' {
declare module.exports: $Exports<'css-loader/dist/utils'>;
}
declare module 'css-loader/dist/Warning.js' {
declare module.exports: $Exports<'css-loader/dist/Warning'>;
}

228
flow-typed/npm/dat.gui_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,228 @@
// flow-typed signature: de6eecdb020f5cf0c91faf3cf35d53bf
// flow-typed version: <<STUB>>/dat.gui_v^0.7.2/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'dat.gui'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'dat.gui' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'dat.gui/build/dat.gui' {
declare module.exports: any;
}
declare module 'dat.gui/build/dat.gui.min' {
declare module.exports: any;
}
declare module 'dat.gui/build/dat.gui.module' {
declare module.exports: any;
}
declare module 'dat.gui/rollup.config' {
declare module.exports: any;
}
declare module 'dat.gui/rollup.config.min' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/color/Color' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/color/interpret' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/color/math' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/color/toString' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/BooleanController' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/ColorController' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/Controller' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/ControllerFactory' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/FunctionController' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/NumberController' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/NumberControllerBox' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/NumberControllerSlider' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/OptionController' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/controllers/StringController' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/dom/CenteredDiv' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/dom/dom' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/gui/GUI' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/gui/saveDialogue.html' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/index' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/utils/common' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/utils/css' {
declare module.exports: any;
}
declare module 'dat.gui/src/dat/utils/requestAnimationFrame' {
declare module.exports: any;
}
declare module 'dat.gui/tests/jquery' {
declare module.exports: any;
}
declare module 'dat.gui/tests/qunit' {
declare module.exports: any;
}
// Filename aliases
declare module 'dat.gui/build/dat.gui.js' {
declare module.exports: $Exports<'dat.gui/build/dat.gui'>;
}
declare module 'dat.gui/build/dat.gui.min.js' {
declare module.exports: $Exports<'dat.gui/build/dat.gui.min'>;
}
declare module 'dat.gui/build/dat.gui.module.js' {
declare module.exports: $Exports<'dat.gui/build/dat.gui.module'>;
}
declare module 'dat.gui/rollup.config.js' {
declare module.exports: $Exports<'dat.gui/rollup.config'>;
}
declare module 'dat.gui/rollup.config.min.js' {
declare module.exports: $Exports<'dat.gui/rollup.config.min'>;
}
declare module 'dat.gui/src/dat/color/Color.js' {
declare module.exports: $Exports<'dat.gui/src/dat/color/Color'>;
}
declare module 'dat.gui/src/dat/color/interpret.js' {
declare module.exports: $Exports<'dat.gui/src/dat/color/interpret'>;
}
declare module 'dat.gui/src/dat/color/math.js' {
declare module.exports: $Exports<'dat.gui/src/dat/color/math'>;
}
declare module 'dat.gui/src/dat/color/toString.js' {
declare module.exports: $Exports<'dat.gui/src/dat/color/toString'>;
}
declare module 'dat.gui/src/dat/controllers/BooleanController.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/BooleanController'>;
}
declare module 'dat.gui/src/dat/controllers/ColorController.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/ColorController'>;
}
declare module 'dat.gui/src/dat/controllers/Controller.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/Controller'>;
}
declare module 'dat.gui/src/dat/controllers/ControllerFactory.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/ControllerFactory'>;
}
declare module 'dat.gui/src/dat/controllers/FunctionController.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/FunctionController'>;
}
declare module 'dat.gui/src/dat/controllers/NumberController.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/NumberController'>;
}
declare module 'dat.gui/src/dat/controllers/NumberControllerBox.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/NumberControllerBox'>;
}
declare module 'dat.gui/src/dat/controllers/NumberControllerSlider.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/NumberControllerSlider'>;
}
declare module 'dat.gui/src/dat/controllers/OptionController.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/OptionController'>;
}
declare module 'dat.gui/src/dat/controllers/StringController.js' {
declare module.exports: $Exports<'dat.gui/src/dat/controllers/StringController'>;
}
declare module 'dat.gui/src/dat/dom/CenteredDiv.js' {
declare module.exports: $Exports<'dat.gui/src/dat/dom/CenteredDiv'>;
}
declare module 'dat.gui/src/dat/dom/dom.js' {
declare module.exports: $Exports<'dat.gui/src/dat/dom/dom'>;
}
declare module 'dat.gui/src/dat/gui/GUI.js' {
declare module.exports: $Exports<'dat.gui/src/dat/gui/GUI'>;
}
declare module 'dat.gui/src/dat/gui/saveDialogue.html.js' {
declare module.exports: $Exports<'dat.gui/src/dat/gui/saveDialogue.html'>;
}
declare module 'dat.gui/src/dat/index.js' {
declare module.exports: $Exports<'dat.gui/src/dat/index'>;
}
declare module 'dat.gui/src/dat/utils/common.js' {
declare module.exports: $Exports<'dat.gui/src/dat/utils/common'>;
}
declare module 'dat.gui/src/dat/utils/css.js' {
declare module.exports: $Exports<'dat.gui/src/dat/utils/css'>;
}
declare module 'dat.gui/src/dat/utils/requestAnimationFrame.js' {
declare module.exports: $Exports<'dat.gui/src/dat/utils/requestAnimationFrame'>;
}
declare module 'dat.gui/tests/jquery.js' {
declare module.exports: $Exports<'dat.gui/tests/jquery'>;
}
declare module 'dat.gui/tests/qunit.js' {
declare module.exports: $Exports<'dat.gui/tests/qunit'>;
}

33
flow-typed/npm/decompress_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,33 @@
// flow-typed signature: 8af82484309a657c7a61b42663f509c3
// flow-typed version: <<STUB>>/decompress_v^4.2.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'decompress'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'decompress' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
// Filename aliases
declare module 'decompress/index' {
declare module.exports: $Exports<'decompress'>;
}
declare module 'decompress/index.js' {
declare module.exports: $Exports<'decompress'>;
}

50
flow-typed/npm/del_v3.x.x.js vendored Normal file
View file

@ -0,0 +1,50 @@
// flow-typed signature: 4d9e8253b9b9c1a25b55cc2d1f40b40e
// flow-typed version: 77852b4474/del_v3.x.x/flow_>=v0.25.x
type $npm$del$Patterns = string[] | string;
type $npm$del$Options = {
force?: boolean,
dryRun?: boolean,
concurrency?: number,
// remaining options are passed through to node-glob:
cwd?: string,
root?: string,
dot?: boolean,
nomount?: boolean,
mark?: boolean,
nosort?: boolean,
stat?: boolean,
silent?: boolean,
strict?: boolean,
cache?: Object,
statCache?: Object,
symlinks?: Object,
realpathCache?: Object,
nounique?: boolean,
nonull?: boolean,
debug?: boolean,
nobrace?: boolean,
noglobstar?: boolean,
noext?: boolean,
nocase?: boolean,
matchBase?: boolean,
nodir?: boolean,
ignore?: string | string[],
follow?: boolean,
realpath?: boolean,
absolute?: boolean
};
declare module "del" {
declare class Del {
(
patterns: $npm$del$Patterns,
options?: $npm$del$Options
): Promise<string[]>,
sync(patterns: $npm$del$Patterns, options?: $npm$del$Options): string[]
}
declare module.exports: Del;
}

46
flow-typed/npm/devtron_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,46 @@
// flow-typed signature: 5de60706042bc30bc14137b58c6ed418
// flow-typed version: <<STUB>>/devtron_v^1.4.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'devtron'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'devtron' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'devtron/api' {
declare module.exports: any;
}
declare module 'devtron/out/browser-globals' {
declare module.exports: any;
}
declare module 'devtron/out/index' {
declare module.exports: any;
}
// Filename aliases
declare module 'devtron/api.js' {
declare module.exports: $Exports<'devtron/api'>;
}
declare module 'devtron/out/browser-globals.js' {
declare module.exports: $Exports<'devtron/out/browser-globals'>;
}
declare module 'devtron/out/index.js' {
declare module.exports: $Exports<'devtron/out/index'>;
}

View file

@ -0,0 +1,46 @@
// flow-typed signature: 3c0ff501d98f81d7c038268edb616ce8
// flow-typed version: <<STUB>>/dom-scroll-into-view_v^1.2.1/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'dom-scroll-into-view'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'dom-scroll-into-view' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'dom-scroll-into-view/lib/dom-scroll-into-view' {
declare module.exports: any;
}
declare module 'dom-scroll-into-view/lib/index' {
declare module.exports: any;
}
declare module 'dom-scroll-into-view/lib/util' {
declare module.exports: any;
}
// Filename aliases
declare module 'dom-scroll-into-view/lib/dom-scroll-into-view.js' {
declare module.exports: $Exports<'dom-scroll-into-view/lib/dom-scroll-into-view'>;
}
declare module 'dom-scroll-into-view/lib/index.js' {
declare module.exports: $Exports<'dom-scroll-into-view/lib/index'>;
}
declare module 'dom-scroll-into-view/lib/util.js' {
declare module.exports: $Exports<'dom-scroll-into-view/lib/util'>;
}

View file

@ -0,0 +1,67 @@
// flow-typed signature: fb956bb4623bc969695376edde76eb27
// flow-typed version: <<STUB>>/electron-builder_v^20.38.4/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-builder'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-builder' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'electron-builder/out/builder' {
declare module.exports: any;
}
declare module 'electron-builder/out/cli/cli' {
declare module.exports: any;
}
declare module 'electron-builder/out/cli/create-self-signed-cert' {
declare module.exports: any;
}
declare module 'electron-builder/out/cli/install-app-deps' {
declare module.exports: any;
}
declare module 'electron-builder/out/cli/start' {
declare module.exports: any;
}
declare module 'electron-builder/out/index' {
declare module.exports: any;
}
// Filename aliases
declare module 'electron-builder/out/builder.js' {
declare module.exports: $Exports<'electron-builder/out/builder'>;
}
declare module 'electron-builder/out/cli/cli.js' {
declare module.exports: $Exports<'electron-builder/out/cli/cli'>;
}
declare module 'electron-builder/out/cli/create-self-signed-cert.js' {
declare module.exports: $Exports<'electron-builder/out/cli/create-self-signed-cert'>;
}
declare module 'electron-builder/out/cli/install-app-deps.js' {
declare module.exports: $Exports<'electron-builder/out/cli/install-app-deps'>;
}
declare module 'electron-builder/out/cli/start.js' {
declare module.exports: $Exports<'electron-builder/out/cli/start'>;
}
declare module 'electron-builder/out/index.js' {
declare module.exports: $Exports<'electron-builder/out/index'>;
}

View file

@ -0,0 +1,67 @@
// flow-typed signature: 6e6d65e1d72b5d8beb9c80e7effc7f0a
// flow-typed version: <<STUB>>/electron-devtools-installer_v^2.2.3/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-devtools-installer'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-devtools-installer' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'electron-devtools-installer/dist/downloadChromeExtension' {
declare module.exports: any;
}
declare module 'electron-devtools-installer/dist/index' {
declare module.exports: any;
}
declare module 'electron-devtools-installer/dist/utils' {
declare module.exports: any;
}
declare module 'electron-devtools-installer/src/downloadChromeExtension' {
declare module.exports: any;
}
declare module 'electron-devtools-installer/src/index' {
declare module.exports: any;
}
declare module 'electron-devtools-installer/src/utils' {
declare module.exports: any;
}
// Filename aliases
declare module 'electron-devtools-installer/dist/downloadChromeExtension.js' {
declare module.exports: $Exports<'electron-devtools-installer/dist/downloadChromeExtension'>;
}
declare module 'electron-devtools-installer/dist/index.js' {
declare module.exports: $Exports<'electron-devtools-installer/dist/index'>;
}
declare module 'electron-devtools-installer/dist/utils.js' {
declare module.exports: $Exports<'electron-devtools-installer/dist/utils'>;
}
declare module 'electron-devtools-installer/src/downloadChromeExtension.js' {
declare module.exports: $Exports<'electron-devtools-installer/src/downloadChromeExtension'>;
}
declare module 'electron-devtools-installer/src/index.js' {
declare module.exports: $Exports<'electron-devtools-installer/src/index'>;
}
declare module 'electron-devtools-installer/src/utils.js' {
declare module.exports: $Exports<'electron-devtools-installer/src/utils'>;
}

33
flow-typed/npm/electron-dl_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,33 @@
// flow-typed signature: 0ef4d53fd7331462be80654f50b1984f
// flow-typed version: <<STUB>>/electron-dl_v^1.11.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-dl'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-dl' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
// Filename aliases
declare module 'electron-dl/index' {
declare module.exports: $Exports<'electron-dl'>;
}
declare module 'electron-dl/index.js' {
declare module.exports: $Exports<'electron-dl'>;
}

View file

@ -0,0 +1,33 @@
// flow-typed signature: 3c84c73400ce0360b931c44d6018aaf1
// flow-typed version: <<STUB>>/electron-is-dev_v^0.3.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-is-dev'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-is-dev' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
// Filename aliases
declare module 'electron-is-dev/index' {
declare module.exports: $Exports<'electron-is-dev'>;
}
declare module 'electron-is-dev/index.js' {
declare module.exports: $Exports<'electron-is-dev'>;
}

108
flow-typed/npm/electron-log_vx.x.x.js vendored Normal file
View file

@ -0,0 +1,108 @@
// flow-typed signature: 139eafe063e827f93b06a1ee48b58eea
// flow-typed version: <<STUB>>/electron-log_v^2.2.12/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-log'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-log' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'electron-log/lib/format' {
declare module.exports: any;
}
declare module 'electron-log/lib/log' {
declare module.exports: any;
}
declare module 'electron-log/lib/original-console' {
declare module.exports: any;
}
declare module 'electron-log/lib/transports/console' {
declare module.exports: any;
}
declare module 'electron-log/lib/transports/file/find-log-path' {
declare module.exports: any;
}
declare module 'electron-log/lib/transports/file/get-app-name' {
declare module.exports: any;
}
declare module 'electron-log/lib/transports/file/index' {
declare module.exports: any;
}
declare module 'electron-log/lib/transports/log-s' {
declare module.exports: any;
}
declare module 'electron-log/lib/transports/renderer-console' {
declare module.exports: any;
}
declare module 'electron-log/main' {
declare module.exports: any;
}
declare module 'electron-log/renderer' {
declare module.exports: any;
}
// Filename aliases
declare module 'electron-log/index' {
declare module.exports: $Exports<'electron-log'>;
}
declare module 'electron-log/index.js' {
declare module.exports: $Exports<'electron-log'>;
}
declare module 'electron-log/lib/format.js' {
declare module.exports: $Exports<'electron-log/lib/format'>;
}
declare module 'electron-log/lib/log.js' {
declare module.exports: $Exports<'electron-log/lib/log'>;
}
declare module 'electron-log/lib/original-console.js' {
declare module.exports: $Exports<'electron-log/lib/original-console'>;
}
declare module 'electron-log/lib/transports/console.js' {
declare module.exports: $Exports<'electron-log/lib/transports/console'>;
}
declare module 'electron-log/lib/transports/file/find-log-path.js' {
declare module.exports: $Exports<'electron-log/lib/transports/file/find-log-path'>;
}
declare module 'electron-log/lib/transports/file/get-app-name.js' {
declare module.exports: $Exports<'electron-log/lib/transports/file/get-app-name'>;
}
declare module 'electron-log/lib/transports/file/index.js' {
declare module.exports: $Exports<'electron-log/lib/transports/file/index'>;
}
declare module 'electron-log/lib/transports/log-s.js' {
declare module.exports: $Exports<'electron-log/lib/transports/log-s'>;
}
declare module 'electron-log/lib/transports/renderer-console.js' {
declare module.exports: $Exports<'electron-log/lib/transports/renderer-console'>;
}
declare module 'electron-log/main.js' {
declare module.exports: $Exports<'electron-log/main'>;
}
declare module 'electron-log/renderer.js' {
declare module.exports: $Exports<'electron-log/renderer'>;
}

View file

@ -0,0 +1,53 @@
// flow-typed signature: bc2488f144e2cdd85f8de1a45a3dbaf2
// flow-typed version: <<STUB>>/electron-publisher-s3_v^20.8.1/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-publisher-s3'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-publisher-s3' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'electron-publisher-s3/out/BaseS3Publisher' {
declare module.exports: any;
}
declare module 'electron-publisher-s3/out/s3Publisher' {
declare module.exports: any;
}
declare module 'electron-publisher-s3/out/spacesPublisher' {
declare module.exports: any;
}
declare module 'electron-publisher-s3/out/uploader' {
declare module.exports: any;
}
// Filename aliases
declare module 'electron-publisher-s3/out/BaseS3Publisher.js' {
declare module.exports: $Exports<'electron-publisher-s3/out/BaseS3Publisher'>;
}
declare module 'electron-publisher-s3/out/s3Publisher.js' {
declare module.exports: $Exports<'electron-publisher-s3/out/s3Publisher'>;
}
declare module 'electron-publisher-s3/out/spacesPublisher.js' {
declare module.exports: $Exports<'electron-publisher-s3/out/spacesPublisher'>;
}
declare module 'electron-publisher-s3/out/uploader.js' {
declare module.exports: $Exports<'electron-publisher-s3/out/uploader'>;
}

View file

@ -0,0 +1,186 @@
// flow-typed signature: 693c56939bca45d8334f4ef5520295b1
// flow-typed version: <<STUB>>/electron-updater_v^4.0.0/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-updater'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-updater' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'electron-updater/out/AppAdapter' {
declare module.exports: any;
}
declare module 'electron-updater/out/AppImageUpdater' {
declare module.exports: any;
}
declare module 'electron-updater/out/AppUpdater' {
declare module.exports: any;
}
declare module 'electron-updater/out/BaseUpdater' {
declare module.exports: any;
}
declare module 'electron-updater/out/differentialDownloader/DataSplitter' {
declare module.exports: any;
}
declare module 'electron-updater/out/differentialDownloader/DifferentialDownloader' {
declare module.exports: any;
}
declare module 'electron-updater/out/differentialDownloader/downloadPlanBuilder' {
declare module.exports: any;
}
declare module 'electron-updater/out/differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader' {
declare module.exports: any;
}
declare module 'electron-updater/out/differentialDownloader/GenericDifferentialDownloader' {
declare module.exports: any;
}
declare module 'electron-updater/out/differentialDownloader/multipleRangeDownloader' {
declare module.exports: any;
}
declare module 'electron-updater/out/DownloadedUpdateHelper' {
declare module.exports: any;
}
declare module 'electron-updater/out/ElectronAppAdapter' {
declare module.exports: any;
}
declare module 'electron-updater/out/electronHttpExecutor' {
declare module.exports: any;
}
declare module 'electron-updater/out/MacUpdater' {
declare module.exports: any;
}
declare module 'electron-updater/out/main' {
declare module.exports: any;
}
declare module 'electron-updater/out/NsisUpdater' {
declare module.exports: any;
}
declare module 'electron-updater/out/providerFactory' {
declare module.exports: any;
}
declare module 'electron-updater/out/providers/BintrayProvider' {
declare module.exports: any;
}
declare module 'electron-updater/out/providers/GenericProvider' {
declare module.exports: any;
}
declare module 'electron-updater/out/providers/GitHubProvider' {
declare module.exports: any;
}
declare module 'electron-updater/out/providers/PrivateGitHubProvider' {
declare module.exports: any;
}
declare module 'electron-updater/out/providers/Provider' {
declare module.exports: any;
}
declare module 'electron-updater/out/windowsExecutableCodeSignatureVerifier' {
declare module.exports: any;
}
// Filename aliases
declare module 'electron-updater/out/AppAdapter.js' {
declare module.exports: $Exports<'electron-updater/out/AppAdapter'>;
}
declare module 'electron-updater/out/AppImageUpdater.js' {
declare module.exports: $Exports<'electron-updater/out/AppImageUpdater'>;
}
declare module 'electron-updater/out/AppUpdater.js' {
declare module.exports: $Exports<'electron-updater/out/AppUpdater'>;
}
declare module 'electron-updater/out/BaseUpdater.js' {
declare module.exports: $Exports<'electron-updater/out/BaseUpdater'>;
}
declare module 'electron-updater/out/differentialDownloader/DataSplitter.js' {
declare module.exports: $Exports<'electron-updater/out/differentialDownloader/DataSplitter'>;
}
declare module 'electron-updater/out/differentialDownloader/DifferentialDownloader.js' {
declare module.exports: $Exports<'electron-updater/out/differentialDownloader/DifferentialDownloader'>;
}
declare module 'electron-updater/out/differentialDownloader/downloadPlanBuilder.js' {
declare module.exports: $Exports<'electron-updater/out/differentialDownloader/downloadPlanBuilder'>;
}
declare module 'electron-updater/out/differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader.js' {
declare module.exports: $Exports<'electron-updater/out/differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader'>;
}
declare module 'electron-updater/out/differentialDownloader/GenericDifferentialDownloader.js' {
declare module.exports: $Exports<'electron-updater/out/differentialDownloader/GenericDifferentialDownloader'>;
}
declare module 'electron-updater/out/differentialDownloader/multipleRangeDownloader.js' {
declare module.exports: $Exports<'electron-updater/out/differentialDownloader/multipleRangeDownloader'>;
}
declare module 'electron-updater/out/DownloadedUpdateHelper.js' {
declare module.exports: $Exports<'electron-updater/out/DownloadedUpdateHelper'>;
}
declare module 'electron-updater/out/ElectronAppAdapter.js' {
declare module.exports: $Exports<'electron-updater/out/ElectronAppAdapter'>;
}
declare module 'electron-updater/out/electronHttpExecutor.js' {
declare module.exports: $Exports<'electron-updater/out/electronHttpExecutor'>;
}
declare module 'electron-updater/out/MacUpdater.js' {
declare module.exports: $Exports<'electron-updater/out/MacUpdater'>;
}
declare module 'electron-updater/out/main.js' {
declare module.exports: $Exports<'electron-updater/out/main'>;
}
declare module 'electron-updater/out/NsisUpdater.js' {
declare module.exports: $Exports<'electron-updater/out/NsisUpdater'>;
}
declare module 'electron-updater/out/providerFactory.js' {
declare module.exports: $Exports<'electron-updater/out/providerFactory'>;
}
declare module 'electron-updater/out/providers/BintrayProvider.js' {
declare module.exports: $Exports<'electron-updater/out/providers/BintrayProvider'>;
}
declare module 'electron-updater/out/providers/GenericProvider.js' {
declare module.exports: $Exports<'electron-updater/out/providers/GenericProvider'>;
}
declare module 'electron-updater/out/providers/GitHubProvider.js' {
declare module.exports: $Exports<'electron-updater/out/providers/GitHubProvider'>;
}
declare module 'electron-updater/out/providers/PrivateGitHubProvider.js' {
declare module.exports: $Exports<'electron-updater/out/providers/PrivateGitHubProvider'>;
}
declare module 'electron-updater/out/providers/Provider.js' {
declare module.exports: $Exports<'electron-updater/out/providers/Provider'>;
}
declare module 'electron-updater/out/windowsExecutableCodeSignatureVerifier.js' {
declare module.exports: $Exports<'electron-updater/out/windowsExecutableCodeSignatureVerifier'>;
}

View file

@ -0,0 +1,235 @@
// flow-typed signature: b2525aab5150a9b02d85d0d46aa3572c
// flow-typed version: <<STUB>>/electron-webpack_v^2.6.2/flow_v0.94.0
/**
* This is an autogenerated libdef stub for:
*
* 'electron-webpack'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'electron-webpack' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'electron-webpack/out/cli' {
declare module.exports: any;
}
declare module 'electron-webpack/out/config' {
declare module.exports: any;
}
declare module 'electron-webpack/out/configurators/dll' {
declare module.exports: any;
}
declare module 'electron-webpack/out/configurators/eslint' {
declare module.exports: any;
}
declare module 'electron-webpack/out/configurators/js' {
declare module.exports: any;
}
declare module 'electron-webpack/out/configurators/ts' {
declare module.exports: any;
}
declare module 'electron-webpack/out/configurators/vue/vue-main-dev-entry' {
declare module.exports: any;
}
declare module 'electron-webpack/out/configurators/vue/vue' {
declare module.exports: any;
}
declare module 'electron-webpack/out/core' {
declare module.exports: any;
}
declare module 'electron-webpack/out/dev/ChildProcessManager' {
declare module.exports: any;
}
declare module 'electron-webpack/out/dev/dev-runner' {
declare module.exports: any;
}
declare module 'electron-webpack/out/dev/devUtil' {
declare module.exports: any;
}
declare module 'electron-webpack/out/dev/WebpackDevServerManager' {
declare module.exports: any;
}
declare module 'electron-webpack/out/electron-builder' {
declare module.exports: any;
}
declare module 'electron-webpack/out/electron-main-hmr/HmrClient' {
declare module.exports: any;
}
declare module 'electron-webpack/out/electron-main-hmr/HmrServer' {
declare module.exports: any;
}
declare module 'electron-webpack/out/electron-main-hmr/main-hmr' {
declare module.exports: any;
}
declare module 'electron-webpack/out/main' {
declare module.exports: any;
}
declare module 'electron-webpack/out/plugins/WatchMatchPlugin' {
declare module.exports: any;
}
declare module 'electron-webpack/out/plugins/WebpackRemoveOldAssetsPlugin' {
declare module.exports: any;
}
declare module 'electron-webpack/out/targets/BaseTarget' {
declare module.exports: any;
}
declare module 'electron-webpack/out/targets/MainTarget' {
declare module.exports: any;
}
declare module 'electron-webpack/out/targets/RendererTarget' {
declare module.exports: any;
}
declare module 'electron-webpack/out/util' {
declare module.exports: any;
}
declare module 'electron-webpack/vue-renderer-entry' {
declare module.exports: any;
}
declare module 'electron-webpack/webpack.app.config' {
declare module.exports: any;
}
declare module 'electron-webpack/webpack.main.config' {
declare module.exports: any;
}
declare module 'electron-webpack/webpack.renderer.config' {
declare module.exports: any;
}
declare module 'electron-webpack/webpack.renderer.dll.config' {
declare module.exports: any;
}
declare module 'electron-webpack/webpack.test.config' {
declare module.exports: any;
}
// Filename aliases
declare module 'electron-webpack/out/cli.js' {
declare module.exports: $Exports<'electron-webpack/out/cli'>;
}
declare module 'electron-webpack/out/config.js' {
declare module.exports: $Exports<'electron-webpack/out/config'>;
}
declare module 'electron-webpack/out/configurators/dll.js' {
declare module.exports: $Exports<'electron-webpack/out/configurators/dll'>;
}
declare module 'electron-webpack/out/configurators/eslint.js' {
declare module.exports: $Exports<'electron-webpack/out/configurators/eslint'>;
}
declare module 'electron-webpack/out/configurators/js.js' {
declare module.exports: $Exports<'electron-webpack/out/configurators/js'>;
}
declare module 'electron-webpack/out/configurators/ts.js' {
declare module.exports: $Exports<'electron-webpack/out/configurators/ts'>;
}
declare module 'electron-webpack/out/configurators/vue/vue-main-dev-entry.js' {
declare module.exports: $Exports<'electron-webpack/out/configurators/vue/vue-main-dev-entry'>;
}
declare module 'electron-webpack/out/configurators/vue/vue.js' {
declare module.exports: $Exports<'electron-webpack/out/configurators/vue/vue'>;
}
declare module 'electron-webpack/out/core.js' {
declare module.exports: $Exports<'electron-webpack/out/core'>;
}
declare module 'electron-webpack/out/dev/ChildProcessManager.js' {
declare module.exports: $Exports<'electron-webpack/out/dev/ChildProcessManager'>;
}
declare module 'electron-webpack/out/dev/dev-runner.js' {
declare module.exports: $Exports<'electron-webpack/out/dev/dev-runner'>;
}
declare module 'electron-webpack/out/dev/devUtil.js' {
declare module.exports: $Exports<'electron-webpack/out/dev/devUtil'>;
}
declare module 'electron-webpack/out/dev/WebpackDevServerManager.js' {
declare module.exports: $Exports<'electron-webpack/out/dev/WebpackDevServerManager'>;
}
declare module 'electron-webpack/out/electron-builder.js' {
declare module.exports: $Exports<'electron-webpack/out/electron-builder'>;
}
declare module 'electron-webpack/out/electron-main-hmr/HmrClient.js' {
declare module.exports: $Exports<'electron-webpack/out/electron-main-hmr/HmrClient'>;
}
declare module 'electron-webpack/out/electron-main-hmr/HmrServer.js' {
declare module.exports: $Exports<'electron-webpack/out/electron-main-hmr/HmrServer'>;
}
declare module 'electron-webpack/out/electron-main-hmr/main-hmr.js' {
declare module.exports: $Exports<'electron-webpack/out/electron-main-hmr/main-hmr'>;
}
declare module 'electron-webpack/out/main.js' {
declare module.exports: $Exports<'electron-webpack/out/main'>;
}
declare module 'electron-webpack/out/plugins/WatchMatchPlugin.js' {
declare module.exports: $Exports<'electron-webpack/out/plugins/WatchMatchPlugin'>;
}
declare module 'electron-webpack/out/plugins/WebpackRemoveOldAssetsPlugin.js' {
declare module.exports: $Exports<'electron-webpack/out/plugins/WebpackRemoveOldAssetsPlugin'>;
}
declare module 'electron-webpack/out/targets/BaseTarget.js' {
declare module.exports: $Exports<'electron-webpack/out/targets/BaseTarget'>;
}
declare module 'electron-webpack/out/targets/MainTarget.js' {
declare module.exports: $Exports<'electron-webpack/out/targets/MainTarget'>;
}
declare module 'electron-webpack/out/targets/RendererTarget.js' {
declare module.exports: $Exports<'electron-webpack/out/targets/RendererTarget'>;
}
declare module 'electron-webpack/out/util.js' {
declare module.exports: $Exports<'electron-webpack/out/util'>;
}
declare module 'electron-webpack/vue-renderer-entry.js' {
declare module.exports: $Exports<'electron-webpack/vue-renderer-entry'>;
}
declare module 'electron-webpack/webpack.app.config.js' {
declare module.exports: $Exports<'electron-webpack/webpack.app.config'>;
}
declare module 'electron-webpack/webpack.main.config.js' {
declare module.exports: $Exports<'electron-webpack/webpack.main.config'>;
}
declare module 'electron-webpack/webpack.renderer.config.js' {
declare module.exports: $Exports<'electron-webpack/webpack.renderer.config'>;
}
declare module 'electron-webpack/webpack.renderer.dll.config.js' {
declare module.exports: $Exports<'electron-webpack/webpack.renderer.dll.config'>;
}
declare module 'electron-webpack/webpack.test.config.js' {
declare module.exports: $Exports<'electron-webpack/webpack.test.config'>;
}

Some files were not shown because too many files have changed in this diff Show more