Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #68

Open
wants to merge 135 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
135cb88
#36 Refactor: migrate to cyberway
IvanBlacky Feb 28, 2019
7051891
#36 Fix: connection to services
IvanBlacky Feb 28, 2019
81bf220
#36 Chore: styles
IvanBlacky Feb 28, 2019
1bbdb41
#36 Fix: resolve review comments
IvanBlacky Feb 28, 2019
68a0733
#36 Refactor: remove unused
IvanBlacky Feb 28, 2019
36da8c7
#36 Refactor: remove unused
IvanBlacky Feb 28, 2019
99f82e0
#36 Chore: styles
IvanBlacky Feb 28, 2019
451c45a
#36 Refactor: error handling
IvanBlacky Feb 28, 2019
c10c5f6
#36 Refactor: transfer handling
IvanBlacky Feb 28, 2019
bfa3895
#36 Feat: check actions presence
IvanBlacky Feb 28, 2019
c240901
#36 Refactor: resolve review comments
IvanBlacky Feb 28, 2019
09e82a2
#37 Feat: send ref block num
IvanBlacky Feb 28, 2019
29d915f
#37 Feat: add ref block num
IvanBlacky Feb 28, 2019
64df6b9
#37 Docs: add ref block num docs
IvanBlacky Mar 4, 2019
8d07ed9
#36 Refactor: make docker-compose work
IvanBlacky Mar 5, 2019
dab98d0
#36 Fix: add healthcheck config
IvanBlacky Mar 5, 2019
bff7873
#36 Feat: add new data structure support (with mocked prism response)
IvanBlacky Mar 11, 2019
2b95797
#40 Feat: add unread flag
IvanBlacky Mar 13, 2019
6cc1e45
#36 Refactor: get user back
IvanBlacky Mar 13, 2019
1987fbe
#36 Refactor: resolve review comments
IvanBlacky Mar 18, 2019
6700329
#36 Feat: add new data structure
IvanBlacky Mar 29, 2019
4aa5ba3
#36 Fix: add error handling
IvanBlacky Mar 29, 2019
049922c
#36 Fix: add error handling
IvanBlacky Mar 29, 2019
8f37cbd
#36 Fix: add default community
IvanBlacky Mar 29, 2019
81537d1
#36 Feat: add repost handling
IvanBlacky Apr 2, 2019
d48fd5f
#36 Fix: reduce sleep time
IvanBlacky Apr 2, 2019
839013e
#41 Feat: implement prism integration
IvanBlacky Apr 2, 2019
dfc831f
#36: Refactor: slightly changed naming
IvanBlacky Apr 3, 2019
ac8639c
#36 Feat: add wait for transaction
IvanBlacky Apr 17, 2019
1ce8a76
#36 Feat: add parent post for votes
IvanBlacky Apr 17, 2019
63e2292
#36 Fix: all types for history & remove todo
IvanBlacky Apr 18, 2019
1efd2e2
#36 Fix: connection reset error handling
IvanBlacky Apr 18, 2019
a251513
#36 Fix: gls issuer transfer sender
IvanBlacky Apr 18, 2019
e58f7d1
#36 Fix: mentions resolve name
IvanBlacky Apr 18, 2019
3a4a627
#36 Fix: mentions regex
IvanBlacky Apr 18, 2019
336e676
#36 Fix: mentions + refactor
IvanBlacky Apr 18, 2019
b8bd33f
#36 Fix: mentions + refactor
IvanBlacky Apr 18, 2019
973e9f7
#36 Fix: mentions and replies
IvanBlacky Apr 18, 2019
788ae2d
#36 Fix: no receiver
IvanBlacky Apr 19, 2019
1d4bedf
#36 Fix: logging
IvanBlacky Apr 19, 2019
d9f8cb9
#36 Fix: logging
IvanBlacky Apr 19, 2019
3c71149
#36 Fix: error handling
IvanBlacky Apr 19, 2019
8e3850a
#36 Feat: add curator/author rewards
IvanBlacky Apr 19, 2019
57e9cc0
#36 Fix: prism <--> bc sync issue
IvanBlacky Apr 19, 2019
1b11c80
#36 Fix: prism <--> bc sync issue
IvanBlacky Apr 19, 2019
9c535c5
#36 Fix: post/comment
IvanBlacky Apr 19, 2019
48650d4
#36 Fix: pinner/pinning
IvanBlacky Apr 29, 2019
3e7fde8
#43 Feat: add witness vote support
IvanBlacky May 14, 2019
6ad07a5
Fix: add app name support
IvanBlacky May 16, 2019
1ae2a0d
Fix: parent post
IvanBlacky May 21, 2019
e1bbc98
Refactor: update prism integration, remove unused code etc.
IvanBlacky May 27, 2019
8874731
Refactor: fix transfer duplicates; witness console.log; unused code
IvanBlacky May 28, 2019
b7e7a8a
Refactor: split transfers and rewards etc
IvanBlacky May 29, 2019
26e2fac
Refactor: packages, metrics etc.
IvanBlacky Jun 6, 2019
97288d0
Fix: method name
IvanBlacky Jun 6, 2019
012165c
Merge pull request #49 from GolosChain/refactror
IvanBlacky Jun 6, 2019
2016aae
Fix: remove log
IvanBlacky Jun 6, 2019
1ded985
Merge branch '36-parse-cyberway-events' of https://github.com/GolosCh…
IvanBlacky Jun 6, 2019
46fe47f
Refactor: remove warn for reverted transactions
IvanBlacky Jun 10, 2019
9373e06
Fix: reward parsing
IvanBlacky Jun 14, 2019
33237dc
Fix: reward parsing: duplicates
IvanBlacky Jun 14, 2019
31337a7
Fix: reward parsing: memo for author
IvanBlacky Jun 14, 2019
19361a2
Refactor: resolve review comments
IvanBlacky Jun 14, 2019
5142f53
Refactor: resolve review comments (2)
IvanBlacky Jun 14, 2019
4f8f11a
Refactor: introduce regexp memo parsing
IvanBlacky Jun 17, 2019
ebf8d31
Refactor: remove unused logging
IvanBlacky Jun 17, 2019
6aadbcb
Merge pull request #50 from GolosChain/36-parse-cyberway-events
Format-X22 Jun 17, 2019
e93b41b
Fix: isArray check
IvanBlacky Jun 17, 2019
eabd4e1
Merge pull request #52 from GolosChain/fix-bad-types
Format-X22 Jun 17, 2019
98ea097
Feat: add benefeciary rewards support
IvanBlacky Jun 17, 2019
40d687e
Fix: typo
IvanBlacky Jun 18, 2019
6a38716
Merge pull request #54 from GolosChain/fix-reblog
Format-X22 Jun 18, 2019
7b30ab9
Merge pull request #53 from GolosChain/add-benefeciary-rewards
Format-X22 Jun 18, 2019
24a535a
Fix: typo
IvanBlacky Jun 18, 2019
ca2e3f8
#23 Update core.
Format-X22 Jun 19, 2019
858a082
#44 Validation.
Format-X22 Jun 19, 2019
2d738d9
#44 App in blacklist validation.
Format-X22 Jun 20, 2019
e902451
#44 Black list + stubs.
Format-X22 Jun 21, 2019
3ca7859
#44 Event cleaner fix + app in model.
Format-X22 Jun 21, 2019
3dba86b
#44 History API app.
Format-X22 Jun 21, 2019
c19efdf
#44 Abstract registrator + stubs.
Format-X22 Jun 21, 2019
3918ecc
#44 WitnessVote.
Format-X22 Jun 21, 2019
1263e34
#44 Registrator refactoring.
Format-X22 Jun 21, 2019
a4ef85e
#44 Remove Message event type.
Format-X22 Jun 21, 2019
a90aaa4
#44 Refactor entity metadata getter.
Format-X22 Jun 21, 2019
38c04d6
#44 Reformat model.
Format-X22 Jun 21, 2019
55d3fb9
#44 Add global error handler.
Format-X22 Jun 21, 2019
9373c54
#44 Error handlers stubs.
Format-X22 Jun 21, 2019
47652a8
#44 Subscribe + Transfer + Witness.
Format-X22 Jun 21, 2019
ac1bf3b
#44 Vote.
Format-X22 Jun 24, 2019
43f661b
#44 Transfer + Reward.
Format-X22 Jun 24, 2019
d72583e
#44 Reply.
Format-X22 Jun 24, 2019
7cc84e1
#44 Mention.
Format-X22 Jun 24, 2019
f09b495
#44 Repost.
Format-X22 Jun 24, 2019
cfffe38
#44 Delete content.
Format-X22 Jun 26, 2019
0c71e54
#44 Refactor data mapping.
Format-X22 Jun 26, 2019
4120436
Merge pull request #55 from GolosChain/44_app_specify
Format-X22 Jul 3, 2019
bd478eb
Docker hotfix.
Format-X22 Jul 3, 2019
0071e6d
Docker hotfix 2.
Format-X22 Jul 3, 2019
2d0d694
Receiver hotfix.
Format-X22 Jul 3, 2019
825d756
Notify structure fix.
Format-X22 Jul 4, 2019
6705d2b
Docker hotfix 3.
Format-X22 Jul 5, 2019
cbedb03
Npm fix.
Format-X22 Jul 5, 2019
9f7168e
Mention hotfix.
Format-X22 Jul 5, 2019
2373cd8
Event expiration hotfix.
Format-X22 Jul 9, 2019
6f80b4f
Refactor: make buulk transfers work
IvanBlacky Jul 9, 2019
1c3298a
Merge pull request #61 from GolosChain/fix-rewards-transfers
Format-X22 Jul 16, 2019
ac9e271
Update core.
Format-X22 Jul 17, 2019
eb66cfc
Update core 2.
Format-X22 Jul 17, 2019
80e6adb
#32 Update packages.
Format-X22 Jul 18, 2019
f90a4f6
#32 Event "transfer" for all apps.
Format-X22 Jul 18, 2019
a952fc7
#32 Fix witness vote.
Format-X22 Jul 18, 2019
c5b0766
#32 Fix witness vote 2.
Format-X22 Jul 18, 2019
fb71791
Add benefactor reward doc.
Format-X22 Jul 24, 2019
db5a4b2
Fix post reply.
Format-X22 Jul 24, 2019
49b39c5
#64 Actualize doc.
Format-X22 Jul 26, 2019
8016318
Merge pull request #65 from GolosChain/32_notify_fixes
Format-X22 Jul 26, 2019
28b45f1
#11 History validation fix.
Format-X22 Jul 30, 2019
0ab15fc
Merge pull request #67 from GolosChain/11_validation_fix
Format-X22 Jul 31, 2019
e77bd07
Fix: rewards
IvanBlacky Aug 13, 2019
6cb1d33
Hotfix: hardcode only gls app
IvanBlacky Aug 13, 2019
5d09514
Hotfix: contentId
IvanBlacky Aug 13, 2019
2a87f0b
Hotfix: contentId
IvanBlacky Aug 13, 2019
e93bc29
Fix: unknown type issue
IvanBlacky Aug 16, 2019
c0ce569
Fix: add missing dependency
IvanBlacky Aug 16, 2019
292cbad
feat: add "GLS_DISABLE_PUSH" env (#70)
bacher Sep 9, 2019
d56b85b
fix: fix reply error (#71)
bacher Sep 9, 2019
96cb79f
feat: add env GLS_MAX_NOTIFICATION_DELAY for limiting max delay (#73)
bacher Sep 9, 2019
7b9b6f0
fix: use cyberway-core-service
bacher Sep 26, 2019
a5bb5fc
fix: use cyberway-core-service (2)
bacher Sep 26, 2019
1eb0e30
fix: update prism connection (#74)
bacher Sep 26, 2019
7b25fca
Fix: add missing dependency (#75)
IvanBlacky Oct 23, 2019
82cd915
Fix mention notification (#76)
IvanBlacky Oct 23, 2019
cef06ce
refactor: update core-service version
bacher Dec 9, 2019
72ac35a
fix: remove mongo-exporter
bacher Dec 9, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,12 @@ GLS_CONNECTOR_PORT=3000
GLS_BLOCKCHAIN_CONNECT=wss://ws.golos.io
GLS_BLOCKCHAIN_SUBSCRIBE_TIMEOUT=60000
GLS_PUSH_CONNECT=
GLS_DISABLE_PUSH=
GLS_MAX_NOTIFICATION_DELAY=
MONGODB_EXPORTER_USER=
MONGODB_EXPORTER_PASS=
GLS_PRISM_CONNECT=
GLS_PRISM_API_CONNECT=
GLS_BLOCKCHAIN_BROADCASTER_SERVER_NAME=
GLS_BLOCKCHAIN_BROADCASTER_CLIENT_NAME=
GLS_BLOCKCHAIN_BROADCASTER_CONNECT=
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
node_modules
db
.env
.npmrc
.vscode
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM node:8
FROM node:10
WORKDIR /usr/src/app
COPY ./package*.json ./
RUN npm install --only=production
COPY ./src/ ./src
CMD [ "node", "./src/index.js" ]
CMD [ "node", "./src/index.js" ]
150 changes: 150 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
# NOTIFY-SERVICE

**NOTIFY-SERVICE** является сервисом рассылки уведомлений для CyberWay.
Сервис извлекает из блокчейна необходимые данные, определяет произошедшие события и группирует их,
сохраняя в базе данных.
Историю можно выгрузить по запросу, указав тип интересуемого события.
Если пользователь онлайн - он получает уведомления в реальном времени через связанный сервис ONLINE-NOTIFY-SERVICE.
Также происходят уведомления через push для пользователей мобильных устройств и web-push для браузеров, используется PUSH-SERVICE.
Данные хранятся ограниченное время, после чего удаляются из базы данных.

##### API JSON-RPC

```
history: // Получение истории пользователя
fromId <number>(null) // ID последнего события после которого формировать выдачу, если нужно
limit <number>(10) [1..100] // Количество событий, которое нужно получить
markAsViewed <boolean>(true) // Пометить полученные эвенты как уже просмотренные.
freshOnly <boolean> // Вернуть ли только не прочитанные
user <string> // Идентификатор пользователя
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
types
<'all'|[string(eventType)]>('all') // Массив типов необходимых событий или строка 'all' для всех сразу
[
upvote // лайк (голос)
| downvote // дизлайк
| transfer // перевод средств
| reply // ответ на пост или комментарий
| subscribe // подписка на блог
| unsubscribe // отписка от блога
| mention // упоминание в посте, заголовке поста или в комменте (через @)
| repost // репост
| reward // награда пользователю
| curatorReward // награда куратору
| benefeciaryReward // награда бенефициару
| witnessVote // голос за делегата
| witnessCancelVote // отмена голоса за делегата
]

historyFresh: // Возвращает количество непрочитанных уведомлений из истории уведомлений
user <string> // Идентификатор пользователя
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]

markAsViewed: // Помечает указанные эвенты пользователя как прочитанные
user <string> // Идентификатор пользователя
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
ids <[string]> // Массив ID эвентов.


markAllAsViewed: // Помечает все эвенты пользователя как прочитанные
user <string> // Идентификатор пользователя
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]

getBlackList: // Возвращает черный список пользователя
owner <string> // Имя пользователя-инициатора

addToBlackList: // Добавляет пользователя в черный список
owner <string> // Имя пользователя-инициатора
banned <string> // Имя пользователя для добавления

removeFromBlackList: // Исключает пользователя из черного списка
owner <string> // Имя пользователя-инициатора
banned <string> // Имя пользователя для исключения
```

##### Формат данных

```
// Общий вид ответа

total <number> // Общее число хранимых эвентов
totalByTypes <{string(type): number}> // Число хранимых эвентов по типу
// Также содержит summary - сумму всех полей
fresh <number> // Общее число непросмотренных эвентов
freshByTypes <{string(type): number}> // Число непросмотренных эвентов по типу
// Также содержит summary - сумму всех полей
unread <number> // Общее число непрочитанных эвентов
unreadByTypes <{string(type): number}> // Число непрочитанных эвентов по типу
// Также содержит summary - сумму всех полей
data: <[object]> // Данные эвентов в виде массива объектов
eventType <string> // Тип эвента
fresh <boolean> // Пометка того является ли эвент непросмотренным
unread <boolean> // Пометка того является ли эвент непрочитанным
...data // Данные, относящиеся к конкретному эвенту
```

##### Возможные переменные окружения `ENV`

- `GLS_ONLINE_NOTIFY_CONNECT` _(обязательно)_ - адрес подключения к микросервису онлайн нотификаций.

- `GLS_PUSH_CONNECT` _(обязательно)_ - адрес подключения к микросервису рассылки push-уведомлений.

- `GLS_PRISM_CONNECT` _(обязательно)_ - адрес подключения к микросервису призмы в обычном режиме.

- `GLS_PRISM_API_CONNECT` - адрес подключения к микросервису призмы в API режиме. (Если не задано то берется `GLS_PRISM_CONNECT`).

- `GLS_DISABLE_PUSH` - отключить отсылку push'ей.

- `EVENT_EXPIRATION` - время в миллисекундах, после которого эвент будет удален из истории.
Дефолтное значение - `1000 * 60 * 60 * 24 * 30` (1 месяц)

- `GLS_GATE_HOST` _(обязательно)_ - адрес, который будет использован для входящих подключений связи микросервисов.
Дефолтное значение при запуске без докера - `127.0.0.1`

- `GLS_GATE_PORT` _(обязательно)_ - адрес порта, который будет использован для входящих подключений связи микросервисов.
Дефолтное значение при запуске без докера - `3000`

- `GLS_METRICS_HOST` _(обязательно)_ - адрес хоста для метрик StatsD.
Дефолтное значение при запуске без докера - `127.0.0.1`
- `GLS_METRICS_PORT` _(обязательно)_ - адрес порта для метрик StatsD.
Дефолтное значение при запуске без докера - `8125`

- `GLS_MONGO_CONNECT` - строка подключения к базе MongoDB.
Дефолтное значение - `mongodb://mongo/admin`

- `GLS_DAY_START` - время начала нового дня в часах относительно UTC, используется для таких вещей как валидация "1 пост в сутки".
Дефолтное значение - `3` (день начинается в 00:00 по Москве).

- `GLS_BLOCKCHAIN_BROADCASTER_SERVER_NAME` - имя сервера рассыльщика блоков.

- `GLS_BLOCKCHAIN_BROADCASTER_CLIENT_NAME` - имя клиента для подключения к рассыльщику блоков.

- `GLS_BLOCKCHAIN_BROADCASTER_CONNECT` - строка подключения к рассыльщику блоков, может содержать авторизацию.

- `GLS_MAX_NOTIFICATION_DELAY` _(по умолчанию 10800000 = 3ч.)_ - максимальная задержка при отправки нотификации относительно времени самого события.

##### Запуск

Для запуска сервиса достаточно вызвать команду `docker-compose up --build` в корне проекта, предварительно указав
необходимые `ENV` переменные.

##### Примечания

- В случае удаления поста/комментария - он будет удален и из истории нотификаций, однако оповещение удаления не рассылается.
- В случае снятия голоса или флага (значение голоса выставляется в 0) оповещение не рассылается.
Loading