Compare commits

...

141 commits

Author SHA1 Message Date
kevkevin
ebcc2e0703
fix: disabling pingHubInterval since it is causing large queries (#813) 2024-07-16 08:59:30 -05:00
github-actions[bot]
f879688d62 [ci commit] Update proto files and types 2024-04-10 16:04:41 +00:00
github-actions[bot]
92a66aa3d4 [ci commit] Lint and format code 2024-04-10 16:04:11 +00:00
Evan Feenstra
332923b13b
Merge pull request #808 from stakwork/fix/edit-tribe
update: ensured empty string app_url are saved
2024-04-10 09:02:50 -07:00
Oluwatobi Bamidele
63d82c88c3 update: ensured empty string app_url are saved 2024-04-10 15:46:35 +01:00
github-actions[bot]
3843f44199 [ci commit] Update proto files and types 2024-04-01 20:30:22 +00:00
github-actions[bot]
d190bd85f2 [ci commit] Lint and format code 2024-04-01 20:29:53 +00:00
Evan Feenstra
78cd8a0548 fix interceptTribeMsgForHiddenCmds 2024-04-01 13:28:28 -07:00
github-actions[bot]
3330338f4a [ci commit] Update proto files and types 2024-03-28 16:50:45 +00:00
github-actions[bot]
6970098eb9 [ci commit] Automatic build 2024-03-28 16:50:26 +00:00
github-actions[bot]
3dc5029c37 [ci commit] Lint and format code 2024-03-28 16:50:15 +00:00
Evan Feenstra
c0962f5f27
Merge pull request #807 from stakwork/update/kick-bot
Update/kick bot
2024-03-28 09:48:50 -07:00
Oluwatobi Bamidele
48d023e96b update: ensured install and uninstall commands entered by the admin is not visible to users 2024-03-27 21:01:24 +01:00
Oluwatobi Bamidele
f54d2f5bbb update: hide install and uninstall response 2024-03-27 20:03:03 +01:00
Oluwatobi Bamidele
57f77c5884 update: hide all commands related to kick bot 2024-03-27 19:24:47 +01:00
Oluwatobi Bamidele
50272a7d7e update: ensured help command response are hidden 2024-03-27 19:05:45 +01:00
github-actions[bot]
7bf43c4a49 [ci commit] Update proto files and types 2024-03-22 14:50:31 +00:00
github-actions[bot]
9dfaff50ff [ci commit] Lint and format code 2024-03-22 14:50:02 +00:00
Evan Feenstra
e27d93257c
Merge pull request #806 from stakwork/update/second-brain-url
Update/second brain url
2024-03-22 07:48:45 -07:00
Oluwatobi Bamidele
36d4ebf010 update: update second_brain_url on tribe server 2024-03-21 22:14:25 +01:00
Oluwatobi Bamidele
d16c1de085 feat: added second_brain_url to create tribe on tribe server 2024-03-21 22:09:23 +01:00
github-actions[bot]
ca62559eca [ci commit] Update proto files and types 2024-03-19 20:07:29 +00:00
github-actions[bot]
ee4299692e [ci commit] Lint and format code 2024-03-19 20:07:00 +00:00
Evan Feenstra
30cef93979
Merge pull request #805 from stakwork/feat/second_brain_url
Feat/second brain url
2024-03-19 13:05:38 -07:00
Oluwatobi Bamidele
5b271982a0 update: added second brain url to update tribe 2024-03-19 19:09:31 +01:00
Oluwatobi Bamidele
5a7b191db1 feat: add second_brain_url when creating a tribe 2024-03-19 18:57:44 +01:00
Oluwatobi Bamidele
205a0fa455 feat: added second_brain_url column to chats table 2024-03-19 18:54:03 +01:00
github-actions[bot]
a3b3528a2c [ci commit] Update proto files and types 2024-02-08 00:07:55 +00:00
github-actions[bot]
a28d55e705 [ci commit] Lint and format code 2024-02-08 00:07:25 +00:00
Evan Feenstra
4e99a468ba
Merge pull request #802 from stakwork/update/only_pubkey
Update/only pubkey
2024-02-07 16:05:56 -08:00
Oluwatobi Bamidele
ca66dbe5e5 Merge branch 'master' into update/only_pubkey 2024-02-07 23:36:27 +01:00
Oluwatobi Bamidele
2a47d076b3 update: only_pubkey takes multiple pubkey by seperating commas 2024-02-07 23:34:51 +01:00
github-actions[bot]
c8818b82a6 [ci commit] Update proto files and types 2024-02-05 20:52:56 +00:00
github-actions[bot]
a9c6c0a654 [ci commit] Lint and format code 2024-02-05 20:52:26 +00:00
Evan Feenstra
226c851fcf
Merge pull request #801 from stakwork/update/receipt_pubkey
Update/receipt pubkey
2024-02-05 12:51:07 -08:00
Oluwatobi Bamidele
25c31b12a5 update: added recipient pubkey 2024-02-02 23:10:23 +01:00
Oluwatobi Bamidele
fbe3d5b294 update: added recipient pubkey to bot pay api 2024-02-02 22:04:34 +01:00
github-actions[bot]
70667d583d [ci commit] Update proto files and types 2024-01-30 20:55:02 +00:00
github-actions[bot]
32b3b27a82 [ci commit] Lint and format code 2024-01-30 20:54:31 +00:00
Evan Feenstra
fc11ae7e18
Merge pull request #800 from stakwork/fix/pay-by-bot
Fix/pay by bot
2024-01-30 12:53:08 -08:00
Oluwatobi Bamidele
36773e3a3c update: direct payment can also have content for bot payment 2024-01-30 21:16:53 +01:00
Oluwatobi Bamidele
49a3c53f11 update: if reply_uuid is not provided bot pay should be a direct payment 2024-01-30 21:04:50 +01:00
Oluwatobi Bamidele
aa13d7d374 fix: bot payment should actually send payment to recipient 2024-01-30 20:52:25 +01:00
github-actions[bot]
f0fef0912e [ci commit] Update proto files and types 2023-12-14 20:55:02 +00:00
github-actions[bot]
51c57673ae [ci commit] Lint and format code 2023-12-14 20:54:31 +00:00
Evan Feenstra
f63b20769a Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-14 12:53:02 -08:00
Evan Feenstra
0d78b4a6a9 also rm hmac key and pushkit token from contact 2023-12-14 12:52:53 -08:00
github-actions[bot]
e1df351fc6 [ci commit] Update proto files and types 2023-12-14 20:49:50 +00:00
github-actions[bot]
2d7cfb58dd [ci commit] Lint and format code 2023-12-14 20:49:20 +00:00
Evan Feenstra
4af0fd7400 Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-14 12:47:55 -08:00
Evan Feenstra
62c8c6b837 fix accounting tenant 2023-12-14 12:47:48 -08:00
github-actions[bot]
e941be6cd2 [ci commit] Update proto files and types 2023-12-14 20:39:09 +00:00
github-actions[bot]
feed373785 [ci commit] Lint and format code 2023-12-14 20:38:38 +00:00
Evan Feenstra
a238fcbb79 Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-14 12:37:12 -08:00
Evan Feenstra
e523ef2da2 dont truncate 2023-12-14 12:37:03 -08:00
github-actions[bot]
a62896f390 [ci commit] Update proto files and types 2023-12-14 20:24:01 +00:00
github-actions[bot]
f97f6ba492 [ci commit] Lint and format code 2023-12-14 20:23:30 +00:00
Evan Feenstra
aacc9a6d0b Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-14 12:21:51 -08:00
Evan Feenstra
180b668537 fix destroy non owner contacts 2023-12-14 12:21:43 -08:00
github-actions[bot]
d884d8059f [ci commit] Update proto files and types 2023-12-14 18:36:24 +00:00
github-actions[bot]
fddadf30e3 [ci commit] Lint and format code 2023-12-14 18:35:54 +00:00
Evan Feenstra
ec7d097bf3 Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-14 10:34:27 -08:00
Evan Feenstra
8cfcb67d99 make sure tenant exists before deleting 2023-12-14 10:34:09 -08:00
github-actions[bot]
7dcd835334 [ci commit] Update proto files and types 2023-12-14 18:13:38 +00:00
github-actions[bot]
a5f85a9424 [ci commit] Lint and format code 2023-12-14 18:13:07 +00:00
Evan Feenstra
63795be857 test clear can be hit without the config 2023-12-14 10:11:39 -08:00
github-actions[bot]
ca64cfa5c3 [ci commit] Update proto files and types 2023-12-08 18:05:11 +00:00
github-actions[bot]
7c5a97a92a [ci commit] Lint and format code 2023-12-08 18:04:39 +00:00
Evan Feenstra
8e61585431 Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-08 10:03:14 -08:00
Evan Feenstra
8da979190c move limiter to after logger 2023-12-08 10:03:02 -08:00
github-actions[bot]
031dd7d311 [ci commit] Update proto files and types 2023-12-08 17:49:37 +00:00
github-actions[bot]
14041b6a7b [ci commit] Lint and format code 2023-12-08 17:49:07 +00:00
Evan Feenstra
b14b3c81e2 move rate limiter to top level 2023-12-08 09:47:41 -08:00
github-actions[bot]
75400e5949 [ci commit] Update proto files and types 2023-12-01 18:20:20 +00:00
github-actions[bot]
4297586fa9 [ci commit] Lint and format code 2023-12-01 18:19:50 +00:00
Evan Feenstra
b8d26056f3 Merge branch 'master' of github.com:stakwork/sphinx-relay 2023-12-01 10:18:32 -08:00
Evan Feenstra
6d4050aa33 limit 10 per second 2023-12-01 10:18:13 -08:00
github-actions[bot]
8805e21b56 [ci commit] Update proto files and types 2023-12-01 17:31:14 +00:00
github-actions[bot]
cc8d704a4b [ci commit] Lint and format code 2023-12-01 17:30:43 +00:00
Evan Feenstra
72c4a749a8 rate limit all 2023-12-01 09:29:28 -08:00
github-actions[bot]
70be899cbe [ci commit] Update proto files and types 2023-10-30 22:12:50 +00:00
github-actions[bot]
775a5d541d [ci commit] Automatic build 2023-10-30 22:12:21 +00:00
github-actions[bot]
4df2a11d20 [ci commit] Lint and format code 2023-10-30 22:12:04 +00:00
uncleJim21
942ae31d49
add endpoint that can mark a given chat as read/unread (#776)
* add endpoint that can mark a given chat as read/unread

* attempt to resolve build issues

* try again

* test: added new test for marking messages as unread

* commit to force CI/CD to run again

* remove unnecessary notification

---------

Co-authored-by: kevkevin <oapallikunnel@gmail.com>
2023-10-30 17:06:02 -05:00
dependabot[bot]
7d1ab81a99
build(deps): bump browserify-sign from 4.2.1 to 4.2.2 (#783)
Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-30 17:04:02 -05:00
dependabot[bot]
bd114eecc9
build(deps): bump crypto-js from 4.1.1 to 4.2.0 (#782)
Bumps [crypto-js](https://github.com/brix/crypto-js) from 4.1.1 to 4.2.0.
- [Commits](https://github.com/brix/crypto-js/compare/4.1.1...4.2.0)

---
updated-dependencies:
- dependency-name: crypto-js
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-30 17:03:33 -05:00
github-actions[bot]
ebfd4947f8 [ci commit] Update proto files and types 2023-10-19 23:16:17 +00:00
github-actions[bot]
74bc26a570 [ci commit] Automatic build 2023-10-19 23:15:54 +00:00
github-actions[bot]
460901c7f0 [ci commit] Lint and format code 2023-10-19 23:15:39 +00:00
kevkevin
bf61d8b5ef
fix: updated workflow id for saving call recording (#780) 2023-10-19 18:14:10 -05:00
github-actions[bot]
ec56a8f44d [ci commit] Update proto files and types 2023-10-16 17:21:51 +00:00
github-actions[bot]
bd954e1eda [ci commit] Lint and format code 2023-10-16 17:21:10 +00:00
Evan Feenstra
5c3381d193 fetch invoice can use payment hash or payment req 2023-10-16 10:19:12 -07:00
github-actions[bot]
4cb0df77ab [ci commit] Update proto files and types 2023-10-10 21:25:13 +00:00
github-actions[bot]
8fdf059e58 [ci commit] Lint and format code 2023-10-10 21:24:32 +00:00
Bamidele Oluwatobi
35a77045c5
Fix/socket hang (#773)
* update: added sleep before delete tribe

* update: added sleep to the tribe test

* update: added sleep to trime image

* update: resolved sleep inport to correct path
2023-10-10 16:22:43 -05:00
github-actions[bot]
23c802f97d [ci commit] Update proto files and types 2023-10-10 18:31:33 +00:00
github-actions[bot]
f46a681539 [ci commit] Lint and format code 2023-10-10 18:30:52 +00:00
Evan Feenstra
ac8cf8a8a0
Merge pull request #775 from stakwork/update/getlsat
update: search active lsat based off issuer
2023-10-10 11:29:05 -07:00
Oluwatobi Bamidele
d1fcb17291 fix: stopped converting msat to sats 2023-10-10 18:49:27 +01:00
Oluwatobi Bamidele
4031e969bf update: search active lsat based off issuer 2023-10-09 23:45:23 +01:00
github-actions[bot]
47cf764b9e [ci commit] Update proto files and types 2023-09-22 23:11:00 +00:00
github-actions[bot]
1186eb4c53 [ci commit] Automatic build 2023-09-22 23:10:36 +00:00
github-actions[bot]
6634f09b33 [ci commit] Lint and format code 2023-09-22 23:10:21 +00:00
Evan Feenstra
8c4c584df1
Merge pull request #772 from stakwork/fix/lsat-self-payment
update: fixed self payment for lsat
2023-09-22 16:08:44 -07:00
Oluwatobi Bamidele
2836b14407 update: fixed self payment for lsat 2023-09-22 20:37:14 +01:00
github-actions[bot]
a3b339366b [ci commit] Update proto files and types 2023-09-20 17:03:52 +00:00
github-actions[bot]
4a983809d4 [ci commit] Lint and format code 2023-09-20 17:03:13 +00:00
Evan Feenstra
fea5499c2f
Merge pull request #768 from stakwork/feat/getcontact
feat: added get contact by id endpoint
2023-09-20 10:01:41 -07:00
github-actions[bot]
79de490838 [ci commit] Update proto files and types 2023-09-20 15:55:17 +00:00
github-actions[bot]
0f752a2709 [ci commit] Lint and format code 2023-09-20 15:54:24 +00:00
Evan Feenstra
f3f44d956b
Merge pull request #770 from stakwork/update/external-bot-only-owner
update: external bot can specify only_owner value via api
2023-09-20 08:52:18 -07:00
Evan Feenstra
e2208c8b3e
Merge pull request #771 from stakwork/update/send-error-res
Update/send error res
2023-09-20 08:51:13 -07:00
Oluwatobi Bamidele
8a21c22648 update: added success and failure to create invoice 2023-09-20 16:12:58 +01:00
Oluwatobi Bamidele
aee3c2c2f0 update: added failure with response to sendpayment 2023-09-20 15:59:50 +01:00
Oluwatobi Bamidele
0e73cbf18d update: added failureWithResponse to purchase attachment 2023-09-20 15:42:44 +01:00
Oluwatobi Bamidele
6b7f63a248 update: added failureWithResponse to send attachment message 2023-09-20 15:41:11 +01:00
Oluwatobi Bamidele
778be6d454 update: external bot can specify only_owner value via api 2023-09-20 01:52:11 +01:00
github-actions[bot]
403d5254a3 [ci commit] Update proto files and types 2023-09-19 21:31:49 +00:00
github-actions[bot]
fa18e2a7b7 [ci commit] Automatic build 2023-09-19 21:31:20 +00:00
github-actions[bot]
e2c1aa6298 [ci commit] Lint and format code 2023-09-19 21:31:02 +00:00
Evan Feenstra
f5dfeac10c
Merge pull request #769 from stakwork/send-msg-err
Send msg err
2023-09-19 14:29:12 -07:00
Oluwatobi Bamidele
106d442fb1 refactore: added the correct response type 2023-09-19 20:55:07 +01:00
Oluwatobi Bamidele
e95583e37e update: boost-fail test 2023-09-19 20:33:11 +01:00
Evan Feenstra
a3494a0e9b failureWithResponse 2023-09-19 10:37:23 -07:00
Evan Feenstra
3da8a7af21 better send msg error 2023-09-19 10:35:38 -07:00
Oluwatobi Bamidele
60fa081710 feat: added get contact by id endpoint 2023-09-18 17:02:45 +01:00
github-actions[bot]
05576ce88f [ci commit] Update proto files and types 2023-09-14 18:27:50 +00:00
github-actions[bot]
7fb2c5d249 [ci commit] Automatic build 2023-09-14 18:27:21 +00:00
github-actions[bot]
e35f080607 [ci commit] Lint and format code 2023-09-14 18:27:03 +00:00
Evan Feenstra
4cd9a6d167
Merge pull request #765 from stakwork/fix/only_pubkey
update: handled condition, if user not found
2023-09-14 11:25:13 -07:00
Evan Feenstra
8b78d669fb
Merge pull request #766 from kevkevinpal/percentInvoice
added a percent value to the invoice instead of fixed, we can make th…
2023-09-14 11:24:39 -07:00
kevkevin
fe892744c5
added a percent value to the invoice instead of fixed, we can make this an env var in the future 2023-09-13 12:13:13 -05:00
Oluwatobi Bamidele
9b054c4315 update: handled condition, if user not found 2023-09-13 15:47:41 +01:00
github-actions[bot]
175facde94 [ci commit] Update proto files and types 2023-09-12 19:01:05 +00:00
github-actions[bot]
8383974589 [ci commit] Lint and format code 2023-09-12 19:00:27 +00:00
Evan Feenstra
e3fcc0d723
Merge pull request #764 from stakwork/feat/only_pubkey
Feat/only pubkey
2023-09-12 11:58:58 -07:00
Oluwatobi Bamidele
1767df865e update: updated bot response to listen for only_pubkey 2023-09-12 15:32:54 +01:00
Oluwatobi Bamidele
c112c98a2f update: updated sphinx-bot package from 0.2.42 to 0.2.43 2023-09-12 00:18:55 +01:00
kevkevin
ce6e4758e7
Build job (#763)
* updating workflow to check if [ci commit] is in the message and if it is we wont run the jobs below

* moved the statment into the rest of the code
2023-09-08 11:39:20 -05:00
kevkevin
5ecbd66c19
updating workflow to check if [ci commit] is in the message and if it is we wont run the jobs below (#762) 2023-09-08 11:36:01 -05:00
114 changed files with 1287 additions and 359 deletions

View file

@ -52,6 +52,7 @@ jobs:
'externalHostedBot',
'spamGoneBot',
'mlBot',
'markMessageUnread',
]
node: [16]
steps:

View file

@ -19,20 +19,25 @@ jobs:
run: npm i
- name: lint, format, build and push automatic fixes
run: |
COMMIT_MESSAGE=$(git log --format=%B -n 1 ${{ github.sha }})
if [[ $COMMIT_MESSAGE == *"[ci commit]"* ]]; then
echo "Commit message contains [ci commit], exiting workflow."
exit 0
fi
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
shopt -s globstar
npm run lint || echo -n
npx prettier --config .prettierrc --ignore-path .prettierignore -w *.ts src/**/*.ts
git add *.ts src
git commit -m '[skip ci] Lint and format code' || echo -n
git commit -m '[ci commit] Lint and format code' || echo -n
git push
npm run build
git add dist --force
git commit -m '[skip ci] Automatic build' || echo -n
git commit -m '[ci commit] Automatic build' || echo -n
git push
bash grpc_gen_types.sh
npm run build
git add src/grpc/types src/grpc/proto.ts dist --force
git commit -m '[skip ci] Update proto files and types' || echo -n
git commit -m '[ci commit] Update proto files and types' || echo -n
git push

17
app.ts
View file

@ -5,7 +5,7 @@ import * as cors from 'cors'
import * as https from 'https'
import * as http from 'http'
import logger, { logging, sphinxLogger } from './src/utils/logger'
import { pingHubInterval, checkInvitesHubInterval } from './src/hub'
import { checkInvitesHubInterval } from './src/hub'
import { genUsersInterval } from './src/utils/proxy'
import {
setupDatabase,
@ -25,6 +25,7 @@ import * as cert from './src/utils/cert'
import { loadConfig } from './src/utils/config'
import { Req } from './src/types'
import { leadershipBoardInterval } from './src/utils/leadershipboard'
import rateLimit from 'express-rate-limit'
// force UTC time
process.env.TZ = 'UTC'
@ -46,7 +47,7 @@ async function start() {
mainSetup()
// // IF NOT UNLOCK, go ahead and start this now
if (config.hub_api_url && !config.unlock) {
pingHubInterval(30000)
//pingHubInterval(30000)
genUsersInterval(60000)
}
}
@ -72,12 +73,19 @@ async function finishSetup() {
}
if (config.unlock) {
// IF UNLOCK, start this only after unlocked!
pingHubInterval(15000)
//pingHubInterval(15000)
}
leadershipBoardInterval(1800000)
setupDone()
}
const limiter = rateLimit({
windowMs: 1000, // 1 second
max: 10, // Limit each IP to 2 requests per `window` (here, per 1 second)
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})
//
function setupApp() {
return new Promise(async (resolve) => {
@ -103,6 +111,9 @@ function setupApp() {
if (logging.Express) {
app.use(logger)
}
app.use(limiter)
app.use(
cors({
allowedHeaders: [

8
dist/app.js vendored
View file

@ -28,6 +28,7 @@ const grpc = require("./src/grpc/subscribe");
const cert = require("./src/utils/cert");
const config_1 = require("./src/utils/config");
const leadershipboard_1 = require("./src/utils/leadershipboard");
const express_rate_limit_1 = require("express-rate-limit");
// force UTC time
process.env.TZ = 'UTC';
const env = process.env.NODE_ENV || 'development';
@ -81,6 +82,12 @@ function finishSetup() {
(0, setup_1.setupDone)();
});
}
const limiter = (0, express_rate_limit_1.default)({
windowMs: 1000,
max: 10,
standardHeaders: true,
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
});
//
function setupApp() {
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
@ -103,6 +110,7 @@ function setupApp() {
if (logger_1.logging.Express) {
app.use(logger_1.default);
}
app.use(limiter);
app.use(cors({
allowedHeaders: [
'X-Requested-With',

2
dist/app.js.map vendored

File diff suppressed because one or more lines are too long

View file

@ -168,7 +168,8 @@ function init() {
},
{ name: 'Help', value: '/kick help' },
])
.setThumbnail(botSVG);
.setThumbnail(botSVG)
.setOnlyOwner(true);
message.channel.send({ embed });
return;
}

File diff suppressed because one or more lines are too long

View file

@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.init = void 0;
exports.init = exports.adminsOnlyBot = void 0;
// import * as SphinxBot from '../../../sphinx-bot'
const Sphinx = require("sphinx-bot");
const botapi_1 = require("../controllers/botapi");
@ -79,6 +79,7 @@ const builtInBotNames = {
spam_gone: 'SpamGoneBot',
[`${ml_1.ML_PREFIX.substring(1)}`]: ml_1.ML_BOTNAME,
};
exports.adminsOnlyBot = ['kick'];
function init() {
const client = new Sphinx.Client();
client.login('_', botapi_1.finalAction);
@ -108,7 +109,8 @@ function init() {
if (existing) {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(botName + ' already installed');
.setDescription(botName + ' already installed')
.setOnlyOwner(exports.adminsOnlyBot.includes(botName) || false);
return message.channel.send({ embed });
}
const msgTypes = builtInBotMsgTypes[botName] || [
@ -132,7 +134,8 @@ function init() {
const theName = builtInBotNames[botName] || 'Bot';
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(theName + ' has been installed!');
.setDescription(theName + ' has been installed!')
.setOnlyOwner(exports.adminsOnlyBot.includes(botName) || false);
message.channel.send({ embed });
}
else {
@ -144,7 +147,8 @@ function init() {
if (existing) {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(botName + ' already installed');
.setDescription(botName + ' already installed')
.setOnlyOwner(exports.adminsOnlyBot.includes(botName) || false);
return message.channel.send({ embed });
}
// bot from tribes registry
@ -159,7 +163,8 @@ function init() {
else {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription('No bot with that name');
.setDescription('No bot with that name')
.setOnlyOwner(exports.adminsOnlyBot.includes(botName) || false);
message.channel.send({ embed });
}
}
@ -182,13 +187,15 @@ function init() {
yield existing2.destroy();
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(botName2 + ' has been removed');
.setDescription(botName2 + ' has been removed')
.setOnlyOwner(exports.adminsOnlyBot.includes(botName2) || false);
return message.channel.send({ embed });
}
else {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription('Cant find a bot by that name');
.setDescription('Cant find a bot by that name')
.setOnlyOwner(exports.adminsOnlyBot.includes(botName2) || false);
return message.channel.send({ embed });
}
case 'search':

File diff suppressed because one or more lines are too long

View file

@ -178,7 +178,7 @@ function sendToStakwork(apikey, callId, filePathAndName, webhook, ownerPubkey, f
},
body: JSON.stringify({
name: `${callId} file`,
workflow_id: 6173,
workflow_id: 12346,
workflow_params: {
set_var: {
attributes: {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -20,15 +20,39 @@ const logger_1 = require("../../utils/logger");
const index_1 = require("./index");
function broadcast(a) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, content, bot_name, msg_uuid, reply_uuid, parent_id, bot_pic, only_owner, only_user, } = a;
const { amount, content, bot_name, msg_uuid, reply_uuid, parent_id, bot_pic, only_owner, only_user, only_pubkey, } = a;
logger_1.sphinxLogger.info(`=> BOT BROADCAST`);
const ret = yield (0, index_1.validateAction)(a);
if (!ret)
return;
const { chat, owner } = ret;
const tenant = owner.id;
if (only_user) {
chat.contactIds = `[${only_user}]`;
if (only_user || only_pubkey) {
if (only_pubkey) {
const pubkeysArray = only_pubkey.split(',');
const userIds = [];
for (let i = 0; i < pubkeysArray.length; i++) {
const publicKey = pubkeysArray[i];
try {
const user = (yield models_1.models.Contact.findOne({
where: { tenant, publicKey },
}));
if (user)
userIds.push(user.id);
}
catch (error) {
logger_1.sphinxLogger.error(`=> ERROR GETTING USER WITH THIS PUBKEY ${publicKey} ${error}`, logger_1.logging.Bots);
}
}
if (userIds.length === 0) {
logger_1.sphinxLogger.error(`=> USERS WITH PUBKEYS PROVIDED DO NOT EXIST`, logger_1.logging.Bots);
return;
}
chat.contactIds = JSON.stringify([...userIds]);
}
else {
chat.contactIds = `[${only_user}]`;
}
}
const encryptedForMeText = rsa.encrypt(owner.contactKey, content || '');
const encryptedText = rsa.encrypt(chat.groupKey, content || '');
@ -52,7 +76,7 @@ function broadcast(a) {
updatedAt: date,
senderAlias: alias,
tenant,
onlyOwner: only_owner || only_user ? true : false,
onlyOwner: only_owner || only_user || only_pubkey ? true : false,
};
if (parent_id)
msg.parentId = parent_id;

View file

@ -1 +1 @@
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../../../src/controllers/botapi/broadcast.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../../../src/controllers/botapi/broadcast.ts"],"names":[],"mappings":"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"}

View file

@ -134,7 +134,7 @@ function processAction(req, res) {
return (0, res_1.failure)(res, 'failed to parse webhook body json');
}
}
const { action, bot_id, bot_secret, pubkey, amount, content, chat_uuid, msg_uuid, reply_uuid, recipient_id, parent_id, } = body;
const { action, bot_id, bot_secret, pubkey, amount, content, chat_uuid, msg_uuid, reply_uuid, recipient_id, parent_id, only_pubkey, only_owner, recipient_pubkey, } = body;
if (!bot_id)
return (0, res_1.failure)(res, 'no bot_id');
const bot = (yield models_1.models.Bot.findOne({ where: { id: bot_id } }));
@ -167,6 +167,9 @@ function processAction(req, res) {
reply_uuid: reply_uuid || '',
parent_id: parent_id || 0,
recipient_id: recipient_id ? parseInt(recipient_id) : 0,
only_pubkey: only_pubkey || '',
only_owner: only_owner || false,
recipient_pubkey: recipient_pubkey || '',
};
try {
const r = yield finalAction(a);

File diff suppressed because one or more lines are too long

View file

@ -17,13 +17,14 @@ const socket = require("../../utils/socket");
const constants_1 = require("../../constants");
const logger_1 = require("../../utils/logger");
const errMsgString_1 = require("../../utils/errMsgString");
const rsa = require("../../crypto/rsa");
const index_1 = require("./index");
function pay(a) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, bot_name, msg_uuid, reply_uuid, recipient_id, parent_id } = a;
const { amount, bot_name, msg_uuid, reply_uuid, recipient_id, parent_id, content, recipient_pubkey, } = a;
logger_1.sphinxLogger.info(`=> BOT PAY ${JSON.stringify(a, null, 2)}`);
if (!a.recipient_id)
return logger_1.sphinxLogger.error(`no recipient_id`);
if (!recipient_id && !recipient_pubkey)
return logger_1.sphinxLogger.error(`no recipient detail`);
const ret = yield (0, index_1.validateAction)(a);
if (!ret)
return;
@ -31,27 +32,44 @@ function pay(a) {
const tenant = owner.id;
const alias = bot_name || owner.alias;
const botContactId = -1;
const encryptedForMeText = rsa.encrypt(owner.contactKey, content || '');
const encryptedText = rsa.encrypt(chat.groupKey, content || '');
const textMap = { chat: encryptedText };
let recipient_detail;
if (recipient_pubkey) {
try {
const user = (yield models_1.models.Contact.findOne({
where: { tenant, publicKey: recipient_pubkey },
}));
if (!user) {
logger_1.sphinxLogger.error(`=> RECIPIENT PUBKEY DOES NOT EXIST IN ADMIN RECORD`, logger_1.logging.Bots);
return;
}
recipient_detail = user.id;
}
catch (error) {
logger_1.sphinxLogger.error(`=> RECIPIENT PUBKEY ERROR ${error}`, logger_1.logging.Bots);
return;
}
}
else {
recipient_detail = recipient_id;
}
const date = new Date();
date.setMilliseconds(0);
const msg = {
chatId: chat.id,
uuid: msg_uuid || short.generate(),
type: constants_1.default.message_types.boost,
sender: botContactId,
amount: amount || 0,
date: date,
status: constants_1.default.statuses.confirmed,
replyUuid: reply_uuid || '',
createdAt: date,
updatedAt: date,
senderAlias: alias,
tenant,
};
const msg = Object.assign({ chatId: chat.id, uuid: msg_uuid || short.generate(), type: reply_uuid
? constants_1.default.message_types.boost
: constants_1.default.message_types.direct_payment, sender: botContactId, amount: amount || 0, date: date, status: constants_1.default.statuses.confirmed, replyUuid: reply_uuid || '', createdAt: date, updatedAt: date, senderAlias: alias, tenant }, (reply_uuid
? {}
: {
messageContent: encryptedForMeText,
remoteMessageContent: JSON.stringify(textMap),
}));
if (parent_id)
msg.parentId = parent_id;
const message = (yield models_1.models.Message.create(msg));
socket.sendJson({
type: 'boost',
type: reply_uuid ? 'boost' : 'direct_payment',
response: jsonUtils.messageToJson(message, chat, owner),
}, tenant);
yield network.sendMessage({
@ -65,7 +83,10 @@ function pay(a) {
replyUuid: message.replyUuid,
parentId: message.parentId || 0,
},
type: constants_1.default.message_types.boost,
amount: amount || 0,
type: reply_uuid
? constants_1.default.message_types.boost
: constants_1.default.message_types.direct_payment,
success: () => ({ success: true }),
failure: (e) => __awaiter(this, void 0, void 0, function* () {
const errorMsg = (0, errMsgString_1.errMsgString)(e);
@ -76,7 +97,7 @@ function pay(a) {
return logger_1.sphinxLogger.error(e);
}),
isForwarded: true,
realSatsContactId: recipient_id,
realSatsContactId: recipient_detail,
});
});
}

View file

@ -1 +1 @@
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../../../src/controllers/botapi/pay.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oCAAmC;AACnC,yCAAwC;AACxC,yCAA8C;AAC9C,8CAA6C;AAC7C,6CAA4C;AAC5C,+CAAuC;AACvC,+CAAiD;AACjD,2DAAuD;AACvD,mCAAgD;AAEhD,SAA8B,GAAG,CAAC,CAAS;;QACzC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;QAE7E,qBAAY,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;QAC7D,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE,OAAO,qBAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACjE,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAc,EAAC,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;QAC3B,MAAM,MAAM,GAAW,KAAK,CAAC,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAA;QACrC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAA;QAEvB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,GAAG,GAA4C;YACnD,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAE,mBAAS,CAAC,aAAa,CAAC,KAAK;YACnC,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,mBAAS,CAAC,QAAQ,CAAC,SAAS;YACpC,SAAS,EAAE,UAAU,IAAI,EAAE;YAC3B,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,KAAK;YAClB,MAAM;SACP,CAAA;QACD,IAAI,SAAS;YAAE,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAA;QACvC,MAAM,OAAO,GAAY,CAAC,MAAM,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAY,CAAA;QACtE,MAAM,CAAC,QAAQ,CACb;YACE,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;SACxD,EACD,MAAM,CACP,CAAA;QAED,MAAM,OAAO,CAAC,WAAW,CAAC;YACxB,IAAI,EAAE,IAAW;YACjB,MAAM,kCACD,KAAK,CAAC,UAAU,KACnB,KAAK,EACL,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,mBAAS,CAAC,UAAU,CAAC,KAAK,GACjC;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;aAChC;YACD,IAAI,EAAE,mBAAS,CAAC,aAAa,CAAC,KAAK;YACnC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClC,OAAO,EAAE,CAAO,CAAC,EAAE,EAAE;gBACnB,MAAM,QAAQ,GAAG,IAAA,2BAAY,EAAC,CAAC,CAAC,CAAA;gBAChC,MAAM,OAAO,CAAC,MAAM,CAAC;oBACnB,YAAY,EAAE,QAAQ;oBACtB,MAAM,EAAE,mBAAS,CAAC,QAAQ,CAAC,MAAM;iBAClC,CAAC,CAAA;gBACF,OAAO,qBAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,YAAY;SAChC,CAAC,CAAA;IACJ,CAAC;CAAA;AAnED,sBAmEC"}
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../../../src/controllers/botapi/pay.ts"],"names":[],"mappings":"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"}

View file

@ -371,7 +371,7 @@ function editTribe(req, res) {
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
const tenant = req.owner.id;
const { name, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, feed_url, feed_type, pin, call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook, } = req.body;
const { name, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, feed_url, feed_type, pin, call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook, second_brain_url, } = req.body;
const { id } = req.params;
if (!id)
return (0, res_1.failure)(res, 'group id is required');
@ -426,6 +426,7 @@ function editTribe(req, res) {
owner_pubkey: owner.publicKey,
pin: pin || '',
profile_filters: profile_filters || '',
second_brain_url,
});
}
catch (e) {
@ -448,9 +449,9 @@ function editTribe(req, res) {
obj.escrowMillis = escrow_millis;
if (unlisted || unlisted === false)
obj.unlisted = unlisted;
if (app_url)
if (app_url || app_url === '')
obj.appUrl = app_url;
if (feed_url)
if (feed_url || feed_url === '')
obj.feedUrl = feed_url;
if (feed_type)
obj.feedType = feed_type;
@ -468,6 +469,8 @@ function editTribe(req, res) {
obj.stakworkApiKey = stakwork_api_key;
if (stakwork_webhook)
obj.stakworkWebhook = stakwork_webhook;
if (second_brain_url || second_brain_url === '')
obj.secondBrainUrl = second_brain_url;
if (Object.keys(obj).length > 0) {
yield chat.update(obj);
}
@ -843,7 +846,7 @@ exports.replayChatHistory = replayChatHistory;
* @param {Object} [profile_filters] - The profile filters for the chat.
* @returns {Promise<Object>} - An object containing the tribe chat parameters.
*/
function createTribeChatParams(owner, contactIds, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url, feed_type, tenant, pin, profile_filters, call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook) {
function createTribeChatParams(owner, contactIds, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url, feed_type, tenant, pin, profile_filters, call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook, second_brain_url) {
return __awaiter(this, void 0, void 0, function* () {
const date = new Date();
date.setMilliseconds(0);
@ -885,6 +888,7 @@ function createTribeChatParams(owner, contactIds, name, img, price_per_message,
jitsiServer: jitsi_server || '',
stakworkApiKey: stakwork_api_key || '',
stakworkWebhook: stakwork_webhook || '',
secondBrainUrl: second_brain_url || '',
};
});
}

File diff suppressed because one or more lines are too long

View file

@ -261,7 +261,7 @@ function createGroupChat(req, res) {
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
const tenant = req.owner.id;
const { name, is_tribe, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, feed_url, feed_type, pin, call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook, } = req.body;
const { name, is_tribe, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, feed_url, feed_type, pin, call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook, second_brain_url, } = req.body;
let { profile_filters } = req.body;
if (profile_filters) {
if (!Array.isArray(profile_filters)) {
@ -300,7 +300,7 @@ function createGroupChat(req, res) {
let chatParams;
let okToCreate = true;
if (is_tribe) {
chatParams = (yield (0, chatTribes_1.createTribeChatParams)(owner, contact_ids, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, req.body.private, app_url, feed_url, feed_type, tenant, pin, profile_filters || '', call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook));
chatParams = (yield (0, chatTribes_1.createTribeChatParams)(owner, contact_ids, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, req.body.private, app_url, feed_url, feed_type, tenant, pin, profile_filters || '', call_recording, meme_server_location, jitsi_server, stakwork_api_key, stakwork_webhook, second_brain_url));
if (chatParams.uuid) {
// publish to tribe server
try {
@ -326,6 +326,7 @@ function createGroupChat(req, res) {
owner_route_hint: owner.routeHint || '',
pin: pin || '',
profile_filters: profile_filters || '',
second_brain_url: second_brain_url || '',
});
}
catch (e) {

File diff suppressed because one or more lines are too long

View file

@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.unblockContact = exports.blockContact = exports.getLatestContacts = exports.receiveConfirmContactKey = exports.receiveContactKey = exports.deleteContact = exports.createContact = exports.exchangeKeys = exports.updateContact = exports.getHmacKey = exports.registerHmacKey = exports.generateToken = exports.generateOwnerWithExternalSigner = exports.getContactsForChat = exports.getContacts = void 0;
exports.getContactById = exports.unblockContact = exports.blockContact = exports.getLatestContacts = exports.receiveConfirmContactKey = exports.receiveContactKey = exports.deleteContact = exports.createContact = exports.exchangeKeys = exports.updateContact = exports.getHmacKey = exports.registerHmacKey = exports.generateToken = exports.generateOwnerWithExternalSigner = exports.getContactsForChat = exports.getContacts = void 0;
const crypto = require("crypto");
const sequelize_1 = require("sequelize");
const moment = require("moment");
@ -704,4 +704,27 @@ const unblockContact = (req, res) => __awaiter(void 0, void 0, void 0, function*
switchBlock(res, req.owner.id, contactId, false);
});
exports.unblockContact = unblockContact;
const getContactById = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
const tenant = req.owner.id;
try {
const contactId = parseInt(req.params.contact_id);
if (!contactId) {
return (0, res_1.failure)(res, 'provide a valid contact id');
}
const contact = (yield models_1.models.Contact.findOne({
where: { id: contactId, tenant },
}));
if (!contact) {
return (0, res_1.failure)(res, 'contact does not exist');
}
return (0, res_1.success)(res, jsonUtils.contactToJson(contact));
}
catch (error) {
logger_1.sphinxLogger.error(error, logger_1.logging.DB);
return (0, res_1.failure)(res, error);
}
});
exports.getContactById = getContactById;
//# sourceMappingURL=contacts.js.map

File diff suppressed because one or more lines are too long

View file

@ -243,26 +243,21 @@ function clearForTesting(req, res) {
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
const tenant = req.owner.id;
if (!config.allow_test_clearing) {
return (0, res_1.failure)(res, 'nope');
}
if (config.allow_test_clearing !== 'true') {
return (0, res_1.failure)(res, 'nope');
}
if (!tenant)
return (0, res_1.failure)(res, 'no tenant');
try {
yield models_1.models.Chat.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Subscription.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Accounting.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Bot.destroy({ truncate: true, where: { tenant } });
yield models_1.models.BotMember.destroy({ truncate: true, where: { tenant } });
yield models_1.models.ChatBot.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Invite.destroy({ truncate: true, where: { tenant } });
yield models_1.models.MediaKey.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Message.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Timer.destroy({ truncate: true, where: { tenant } });
yield models_1.models.Chat.destroy({ where: { tenant } });
yield models_1.models.Subscription.destroy({ where: { tenant } });
yield models_1.models.Bot.destroy({ where: { tenant } });
yield models_1.models.BotMember.destroy({ where: { tenant } });
yield models_1.models.ChatBot.destroy({ where: { tenant } });
yield models_1.models.Invite.destroy({ where: { tenant } });
yield models_1.models.MediaKey.destroy({ where: { tenant } });
yield models_1.models.Message.destroy({ where: { tenant } });
yield models_1.models.Timer.destroy({ where: { tenant } });
yield models_1.models.Contact.destroy({
where: {
isOwner: { [sequelize_1.Op.ne]: 1 },
isOwner: { [sequelize_1.Op.or]: [false, null] },
tenant,
},
});
@ -275,6 +270,8 @@ function clearForTesting(req, res) {
contactKey: '',
alias: '',
deviceId: '',
hmacKey: '',
pushKitToken: '',
});
(0, res_1.success)(res, { clean: true });
}

File diff suppressed because one or more lines are too long

View file

@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ACTIONS = exports.set = void 0;
const express_rate_limit_1 = require("express-rate-limit");
const models_1 = require("../models");
const auth_1 = require("../auth");
const gitinfo = require("../utils/gitinfo");
@ -42,12 +41,6 @@ const lsats = require("./lsats");
const action = require("./actionHistory");
const feeds = require("./getFeeds");
const contentFeedStatus = require("./contentFeedStatus");
const limiter = (0, express_rate_limit_1.default)({
windowMs: 1000,
max: 2,
standardHeaders: true,
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
});
function set(app) {
return __awaiter(this, void 0, void 0, function* () {
builtInBots.init();
@ -89,8 +82,7 @@ function set(app) {
app.delete('/contacts/:id', contacts.deleteContact);
app.get('/latest_contacts', contacts.getLatestContacts);
app.post('/generate_external', contacts.generateOwnerWithExternalSigner);
app.post('/hmac_key', contacts.registerHmacKey);
app.get('/hmac_key', contacts.getHmacKey);
app.get('/contact/:contact_id', contacts.getContactById);
app.post('/profile', personal.createPeopleProfile);
app.delete('/profile', personal.deletePersonProfile);
app.post('/delete_ticket', personal.deleteTicketByAdmin);
@ -107,11 +99,11 @@ function set(app) {
app.get('/badge_per_tribe/:chat_id', personal.getBadgePerTribe);
app.post('/remove_badge', personal.removeBadgeFromTribe);
app.put('/reissue_badge', personal.reissueBadge);
app.get('/msgs', messages.getMsgs);
app.get('/allmessages', messages.getAllMessages);
app.get('/messages', messages.getMessages);
app.delete('/message/:id', messages.deleteMessage);
app.post('/messages/:chat_id/read', messages.readMessages);
app.post('/messages/:chat_id/toggleChatReadUnread', messages.toggleChatReadUnread);
app.post('/messages/clear', messages.clearMessages);
app.delete('/messages', messages.disappearingMessages);
app.get('/message/:uuid', messages.getMessageByUuid);
@ -201,8 +193,9 @@ function set(app) {
app.delete('/default_tribe/:id', auth_1.proxyAdminMiddleware, admin.removeDefaultJoinTribe);
app.get('/tribes', auth_1.proxyAdminMiddleware, admin.listTribes);
app.get('/admin_balance', auth_1.proxyAdminMiddleware, admin.adminBalance);
// rate limit these routes:
app.use(limiter);
app.get('/msgs', messages.getMsgs);
app.post('/hmac_key', contacts.registerHmacKey);
app.get('/hmac_key', contacts.getHmacKey);
app.post('/messages', messages.sendMessage);
app.post('/contacts/:id/keys', contacts.exchangeKeys);
app.post('/contacts', contacts.createContact);

File diff suppressed because one or more lines are too long

View file

@ -202,8 +202,13 @@ const createInvoice = (req, res) => __awaiter(void 0, void 0, void 0, function*
id: message.id,
invoice: message.paymentRequest,
},
success: () => __awaiter(void 0, void 0, void 0, function* () {
(0, res_1.success)(res, jsonUtils.messageToJson(message, chat));
}),
failure: (error) => __awaiter(void 0, void 0, void 0, function* () {
(0, res_1.failureWithResponse)(res, error, jsonUtils.messageToJson(message, chat));
}),
});
(0, res_1.success)(res, jsonUtils.messageToJson(message, chat));
}
}
catch (err) {
@ -235,12 +240,24 @@ function getInvoice(req, res) {
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
const payment_request = req.query.payment_request;
if (!payment_request) {
return (0, res_1.failure)(res, 'Invalid payment request');
let payment_hash = req.query.payment_hash;
if (!payment_request && !payment_hash) {
return (0, res_1.failure)(res, 'No payment request or hash');
}
if (!payment_hash) {
try {
const decodedPaymentRequest = bolt11.decode(payment_request);
payment_hash =
((_a = decodedPaymentRequest.tags.find((t) => t.tagName === 'payment_hash')) === null || _a === void 0 ? void 0 : _a.data) || '';
}
catch (e) {
return (0, res_1.failure)(res, e);
}
}
if (!payment_hash) {
return (0, res_1.failure)(res, 'No payment hash');
}
try {
const decodedPaymentRequest = bolt11.decode(payment_request);
const payment_hash = ((_a = decodedPaymentRequest.tags.find((t) => t.tagName === 'payment_hash')) === null || _a === void 0 ? void 0 : _a.data) || '';
const invoice = yield Lightning.getInvoiceHandler(payment_hash, req.owner.publicKey);
return (0, res_1.success)(res, invoice);
}

File diff suppressed because one or more lines are too long

View file

@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteLsat = exports.updateLsat = exports.listLsats = exports.getActiveLsat = exports.getLsat = exports.saveLsat = exports.payForLsat = void 0;
const lsat_js_1 = require("lsat-js");
const bolt11 = require("@boltz/bolt11");
const models_1 = require("../models");
const logger_1 = require("../utils/logger");
const res_1 = require("../utils/res");
@ -47,6 +48,12 @@ function lsatAlreadyExists(lsat) {
return false;
});
}
function extractPubkeyAndPaymentHashFromPaymentRequest(payment_request) {
var _a;
const decodedPaymentRequest = bolt11.decode(payment_request);
const payment_hash = ((_a = decodedPaymentRequest.tags.find((t) => t.tagName === 'payment_hash')) === null || _a === void 0 ? void 0 : _a.data) || '';
return { payment_hash, public_key: decodedPaymentRequest.payeeNodeKey };
}
function payForLsat(paymentRequest) {
return __awaiter(this, void 0, void 0, function* () {
if (!paymentRequest) {
@ -84,7 +91,18 @@ function saveLsat(req, res) {
}
let preimage;
try {
preimage = yield payForLsat(paymentRequest);
//Decode payment request
const ownerPubkey = req.owner.publicKey;
const { payment_hash, public_key } = extractPubkeyAndPaymentHashFromPaymentRequest(paymentRequest);
//check if pubkey from request is the same with owner's pubkey
if (public_key !== ownerPubkey) {
preimage = yield payForLsat(paymentRequest);
}
else {
// search for invoice
const invoice = yield Lightning.getInvoiceHandler(payment_hash, ownerPubkey, true);
preimage = invoice.preimage;
}
}
catch (e) {
logger_1.sphinxLogger.error(['[pay for lsat] Problem paying for lsat:', e], logger_1.logging.Lsat);
@ -143,9 +161,14 @@ function getActiveLsat(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const tenant = req.owner.id;
logger_1.sphinxLogger.info(`=> getActiveLsat`, logger_1.logging.Express);
const issuer = req.query.issuer;
const where = { tenant, status: 1 };
if (issuer) {
where['issuer'] = issuer;
}
try {
const lsat = (yield models_1.models.Lsat.findOne({
where: { tenant, status: 1 },
where,
}));
if (!lsat) {
return res

File diff suppressed because one or more lines are too long

View file

@ -155,7 +155,7 @@ const sendAttachmentMessage = (req, res) => __awaiter(void 0, void 0, void 0, fu
errorMessage,
status: constants_1.default.statuses.failed,
});
return resUtils.failure(res, errorMessage || error);
return resUtils.failureWithResponse(res, errorMessage || error, jsonUtils.messageToJson(message, chat));
}),
});
}
@ -244,7 +244,7 @@ const purchase = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
failure: (error) => __awaiter(void 0, void 0, void 0, function* () {
const errorMessage = (0, errMsgString_1.errMsgString)(error);
yield message.update({ errorMessage, status: constants_1.default.statuses.failed });
resUtils.failure(res, errorMessage || error);
resUtils.failureWithResponse(res, errorMessage || error, jsonUtils.messageToJson(message, chat));
}),
});
});

File diff suppressed because one or more lines are too long

View file

@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeDeleteMessageCronJobs = exports.receiveVoip = exports.disappearingMessages = exports.clearMessages = exports.readMessages = exports.receiveDeleteMessage = exports.receiveRepayment = exports.receiveBoost = exports.receiveMessage = exports.sendMessage = exports.deleteMessage = exports.getMsgs = exports.getAllMessages = exports.getMessages = exports.getMessageByUuid = void 0;
exports.initializeDeleteMessageCronJobs = exports.receiveVoip = exports.disappearingMessages = exports.clearMessages = exports.readMessages = exports.toggleChatReadUnread = exports.receiveDeleteMessage = exports.receiveRepayment = exports.receiveBoost = exports.receiveMessage = exports.sendMessage = exports.deleteMessage = exports.getMsgs = exports.getAllMessages = exports.getMessages = exports.getMessageByUuid = void 0;
const sequelize_1 = require("sequelize");
const underscore_1 = require("underscore");
const short = require("short-uuid");
@ -27,6 +27,7 @@ const logger_1 = require("../utils/logger");
const tribes_1 = require("../utils/tribes");
const config_1 = require("../utils/config");
const reversal_1 = require("../utils/reversal");
const errMsgString_1 = require("../utils/errMsgString");
const confirmations_1 = require("./confirmations");
// store all current running jobs in memory
const jobs = {};
@ -414,6 +415,19 @@ const sendMessage = (req, res) => __awaiter(void 0, void 0, void 0, function* ()
amount: amount || 0,
type: msgtype,
message: msgToSend,
success: function () {
(0, res_1.success)(res, jsonUtils.messageToJson(message, chat));
},
failure: function (error) {
return __awaiter(this, void 0, void 0, function* () {
const errMsg = (0, errMsgString_1.errMsgString)(error);
yield message.update({
status: constants_1.default.statuses.failed,
errorMessage: errMsg,
});
(0, res_1.failureWithResponse)(res, errMsg, jsonUtils.messageToJson(message, chat));
});
},
};
if (isTribeOwner && realSatsContactId) {
sendMessageParams.realSatsContactId = realSatsContactId;
@ -425,7 +439,6 @@ const sendMessage = (req, res) => __awaiter(void 0, void 0, void 0, function* ()
// final send
// console.log('==> FINAL SEND MSG PARAMS', sendMessageParams)
yield network.sendMessage(sendMessageParams);
(0, res_1.success)(res, jsonUtils.messageToJson(message, chat));
});
exports.sendMessage = sendMessage;
/**
@ -633,6 +646,69 @@ const receiveDeleteMessage = (payload) => __awaiter(void 0, void 0, void 0, func
});
exports.receiveDeleteMessage = receiveDeleteMessage;
/**
Either makes all messages of a chat read or it marks the last message of the given chat as unread.
@param {Req} req - The request object containing the chat ID.
@param {Res} res - The response object used to send the updated chat information.
@returns {Promise<void>} - An empty promise.
*/
const toggleChatReadUnread = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
//
try {
const requestBody = JSON.parse(req.rawBody);
//We want to mark the chat as read
if (requestBody.shouldMarkAsUnread === false) {
// Call the readMessages function with the same req and res objects
const result = yield (0, exports.readMessages)(req, res);
return result; // Exit the function after calling readMessages
}
//we want to mark the last message + chat as unread
const chat_id = req.params.chat_id;
const owner = req.owner;
const tenant = owner.id;
// Find the latest message that is not from the user and has been read
const latestMessage = yield models_1.models.Message.findOne({
where: {
sender: {
[sequelize_1.Op.ne]: owner.id,
},
chatId: chat_id,
[sequelize_1.Op.or]: [{ seen: true }, { seen: null }],
tenant,
},
order: [['date', 'DESC']],
});
// Update just the latest message found in the database to mark it as unseen
if (latestMessage) {
yield latestMessage.update({ seen: false });
}
//mark the chat as unseen
const chat = (yield models_1.models.Chat.findOne({
where: { id: chat_id, tenant },
}));
if (chat) {
(0, hub_1.resetNotifyTribeCount)(parseInt(chat_id));
yield chat.update({ seen: false });
(0, res_1.success)(res, {});
socket.sendJson({
type: 'chat_unseen',
response: jsonUtils.chatToJson(chat),
}, tenant);
}
else {
(0, res_1.failure)(res, 'no chat');
}
}
catch (error) {
return (0, res_1.failureWithResponse)(res, 'Invalid JSON body', {
error: error.message,
});
}
});
exports.toggleChatReadUnread = toggleChatReadUnread;
/**
Updates the messages in the specified chat to mark them as seen by the owner and sends a notification to the other chat members.
@param {Req} req - The request object containing the chat ID.
@ -684,7 +760,7 @@ const clearMessages = (req, res) => __awaiter(void 0, void 0, void 0, function*
if (!req.owner)
return (0, res_1.failure)(res, 'no owner');
const tenant = req.owner.id;
yield models_1.models.Message.destroy({ where: { tenant }, truncate: true });
yield models_1.models.Message.destroy({ where: { tenant } });
(0, res_1.success)(res, {});
});
exports.clearMessages = clearMessages;

File diff suppressed because one or more lines are too long

View file

@ -128,13 +128,7 @@ const sendPayment = (req, res) => __awaiter(void 0, void 0, void 0, function* ()
status: constants_1.default.statuses.failed,
errorMessage: errMsg,
});
res.status(400);
res.json({
success: false,
error: errMsg,
response: jsonUtils.messageToJson(message, chat),
});
res.end();
(0, res_1.failureWithResponse)(res, errMsg, jsonUtils.messageToJson(message, chat));
}),
});
});

File diff suppressed because one or more lines are too long

View file

@ -254,7 +254,7 @@ function sendPayment(payment_request, ownerPubkey) {
if ((0, proxy_1.isProxy)(lightning)) {
const opts = {
payment_request,
fee_limit: { fixed: 100 },
fee_limit: { percent: 7 },
};
lightning.sendPaymentSync(opts, (err, response) => {
if (err || !response) {
@ -485,7 +485,7 @@ function keysendMessage(opts, ownerPubkey) {
// too long! need to send serial
const n = Math.ceil(opts.data.length / MAX_MSG_LENGTH);
let success = false;
let fail = false;
let fail = null;
let res = null;
const ts = new Date().valueOf();
// WEAVE MESSAGE If TOO LARGE
@ -501,20 +501,29 @@ function keysendMessage(opts, ownerPubkey) {
}
catch (e) {
logger_1.sphinxLogger.error(e);
fail = true;
fail = e;
}
}
if (success && !fail) {
resolve(res);
}
else {
reject(new Error('fail'));
reject(new Error(keysendErrorString(fail)));
}
});
});
});
}
exports.keysendMessage = keysendMessage;
function keysendErrorString(e) {
if (!e)
return 'failed keysend';
if (typeof e === 'string')
return e;
if (e.toString)
return e.toString();
return 'failed keysend';
}
function signAscii(ascii, ownerPubkey) {
return __awaiter(this, void 0, void 0, function* () {
const sig = yield signMessage(ascii_to_hexa(ascii), ownerPubkey);
@ -1060,7 +1069,7 @@ function ascii_to_hexa(str) {
}
return arr1.join('');
}
function getInvoiceHandler(payment_hash, ownerPubkey) {
function getInvoiceHandler(payment_hash, ownerPubkey, showPreImage) {
return __awaiter(this, void 0, void 0, function* () {
logger_1.sphinxLogger.info('getInvoice', logger_1.logging.Lightning);
const payment_hash_bytes = Buffer.from(payment_hash, 'hex');
@ -1082,10 +1091,10 @@ function getInvoiceHandler(payment_hash, ownerPubkey) {
settled: response === null || response === void 0 ? void 0 : response.settled,
payment_request: response === null || response === void 0 ? void 0 : response.payment_request,
payment_hash: response === null || response === void 0 ? void 0 : response.r_hash.toString('hex'),
preimage: (response === null || response === void 0 ? void 0 : response.settled)
preimage: (response === null || response === void 0 ? void 0 : response.settled) || showPreImage
? response === null || response === void 0 ? void 0 : response.r_preimage.toString('hex')
: '',
amount: convertMsatToSat(response.amt_paid),
amount: response.amt_paid_sat,
};
resolve(invoice);
}
@ -1107,14 +1116,20 @@ function getInvoiceHandler(payment_hash, ownerPubkey) {
amount: convertMsatToSat(((_a = res === null || res === void 0 ? void 0 : res.amount_received_msat) === null || _a === void 0 ? void 0 : _a.msat) || 0),
settled: res.status.toLowerCase() === 'paid' ? true : false,
payment_request: res.bolt11,
preimage: res.status.toLowerCase() === 'paid'
preimage: res.status.toLowerCase() === 'paid' || showPreImage
? res.payment_preimage.toString('hex')
: '',
payment_hash: res.payment_hash.toString('hex'),
};
resolve(invoice);
}
resolve({});
resolve({
amount: 0,
settled: false,
payment_hash: '',
payment_request: '',
preimage: '',
});
}
});
}

File diff suppressed because one or more lines are too long

View file

@ -198,6 +198,10 @@ __decorate([
sequelize_typescript_1.Column,
__metadata("design:type", String)
], Chat.prototype, "preview", void 0);
__decorate([
sequelize_typescript_1.Column,
__metadata("design:type", String)
], Chat.prototype, "secondBrainUrl", void 0);
Chat = __decorate([
(0, sequelize_typescript_1.Table)({ tableName: 'sphinx_chats', underscored: true })
], Chat);

View file

@ -1 +1 @@
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/models/sql/chat.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAqE;AAGtD,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,4BAAW;CAmJ5C,CAAA;AAlJC;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,IAAI;KACpB,CAAC;;gCACQ;AAEV;IAAC,6BAAM;;kCACK;AAEZ;IAAC,6BAAM;;kCACK;AAEZ;IAAC,6BAAM;;sCACS;AAEhB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,MAAM,CAAC;;kCACZ;AAEZ;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,MAAM,CAAC;;oCACV;AAEd;IAAC,6BAAM;;wCACW;AAElB;IAAC,6BAAM;;qCACS;AAEhB;IAAC,6BAAM;8BACI,IAAI;uCAAA;AAEf;IAAC,6BAAM;8BACI,IAAI;uCAAA;AAEf;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;qCACc;AAEhB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;sCACN;AAEhB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;6CACC;AAEvB;IAAC,6BAAM;;kCACK;AAEZ;IAAC,6BAAM;;yCACY;AAEnB;IAAC,6BAAM;;6CACgB;AAEvB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACJ;AAEpB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACJ;AAEpB;IAAC,IAAA,6BAAM,EAAC;QACN,2BAA2B;QAC3B,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,mBAAmB;KACpB,CAAC;;sCACe;AAEjB;IAAC,6BAAM;;qCACS;AAEhB;IAAC,6BAAM;;yCACY;AAEnB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;kCACW;AAEb;IAAC,6BAAM;;oCACO;AAEd;IAAC,6BAAM;;qCACQ;AAEf;IAAC,6BAAM;;sCACS;AAEhB;IAAC,6BAAM;;kCACK;AAEZ;IAAC,6BAAM;;wCACW;AAElB;IAAC,6BAAM;;qCACQ;AAEf;IAAC,6BAAM;;oCACO;AAEd;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC;;gDACyB;AAE3B;IAAC,6BAAM;;iCACI;AAEX;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,MAAM,CAAC;;oCACV;AAEd;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;4CACA;AAGtB;IAAC,6BAAM;;2CACc;AAErB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;gDACI;AAE1B;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;yCACH;AAEnB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;4CACA;AAEtB;IAAC,IAAA,6BAAM,EAAC,+BAAQ,CAAC,IAAI,CAAC;;6CACC;AAEvB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;yCACkB;AAEpB;IAAC,6BAAM;;qCACQ;AAlJI,IAAI;IADxB,IAAA,4BAAK,EAAC,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;GACnC,IAAI,CAmJxB;kBAnJoB,IAAI"}
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/models/sql/chat.ts"],"names":[],"mappings":"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"}

View file

@ -21,7 +21,7 @@ const logger_1 = require("../utils/logger");
const config_1 = require("../utils/config");
const errMsgString_1 = require("../utils/errMsgString");
const proxy_1 = require("../utils/proxy");
const ml_1 = require("../builtin/ml");
const mother_1 = require("../builtin/mother");
const intercept = require("./intercept");
const receive_1 = require("./receive");
const config = (0, config_1.loadConfig)();
@ -423,27 +423,47 @@ function compareAliases(alias1, alias2) {
});
return match;
}
function updateMessageToIsOnlyOwner(uuid, tenant) {
return __awaiter(this, void 0, void 0, function* () {
yield models_1.models.Message.update({
onlyOwner: true,
}, { where: { uuid, tenant } });
});
}
function interceptTribeMsgForHiddenCmds(msg, tenant) {
return __awaiter(this, void 0, void 0, function* () {
const hideAllCommandsBot = ['/kick', '/ml'];
try {
const content = msg.message.content;
const splitedContent = (content && content.split(' ')) || [];
if (splitedContent.length < 1)
return false;
// must be a "/" bot command
if (!splitedContent[0].startsWith('/')) {
return false;
}
if (splitedContent[0] === '/bot') {
if (mother_1.adminsOnlyBot.includes(splitedContent[2])) {
yield updateMessageToIsOnlyOwner(msg.message.uuid, tenant);
return true;
}
return false;
}
const newChat = (yield models_1.models.Chat.findOne({
where: { uuid: msg.chat.uuid },
}));
const bots = (yield models_1.models.ChatBot.findAll({
where: { tenant, chatId: newChat.id },
}));
const content = msg.message.content;
const splitedContent = (content && content.split(' ')) || [];
for (let i = 0; i < bots.length; i++) {
const bot = bots[i];
const isHidden = bot.botPrefix === splitedContent[0] &&
bot.hiddenCommands &&
JSON.parse(bot.hiddenCommands).includes(splitedContent[1]);
const isPersonal = bot.botPrefix === ml_1.ML_PREFIX;
if (isHidden || isPersonal) {
yield models_1.models.Message.update({
onlyOwner: true,
}, { where: { uuid: msg.message.uuid, tenant } });
const isDefaultHide = bot.botPrefix === splitedContent[0] &&
hideAllCommandsBot.includes(bot.botPrefix);
if (isHidden || isDefaultHide) {
yield updateMessageToIsOnlyOwner(msg.message.uuid, tenant);
return true;
}
}

File diff suppressed because one or more lines are too long

View file

@ -59,7 +59,7 @@ function boostFail(t, index1, index2, index3) {
//NODE1 SENDS A BOOST ON NODE2'S MESSAGE
// const boost = await sendBoost(t, node1, node2, tribeMessage2, 11, tribe)
const boost = yield (0, msg_1.boostAsMessage)(t, tribe, node1, tribeMessage2, 1100000000000);
t.true(boost.success);
t.false(boost.success);
//Node 2 should not get the boost message, because the boost should fail
const checkNode2 = yield (0, get_1.shouldNotGetNewMsgs)(t, node2, boost.response.uuid);
t.true(checkNode2, 'Node2 should not receive the boost message');

View file

@ -1 +1 @@
{"version":3,"file":"boostFail.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/boostFail.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"boostFail.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/boostFail.test.ts"],"names":[],"mappings":"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"}

View file

@ -48,17 +48,11 @@ function invoices(t, node1, node2) {
//Create an Invoice by node 2
yield helpers.sleep(1000);
const createdInvoice2 = yield (0, invoices_1.createInvoice)(t, node2, 12, 'test invoice');
if (node1.alias === 'alice' && node2.alias === 'virtualNode0') {
console.log(createdInvoice2);
}
const paymentRequest2 = createdInvoice2.response.invoice;
t.truthy(paymentRequest2, 'Payment request should have been created');
//Get Invoice details by node 2
const invoiceDetail3 = yield (0, invoices_1.getInvoice)(t, node2, paymentRequest2);
const invoicePaymentRequest2 = invoiceDetail3.response.payment_request;
if (node1.alias === 'alice' && node2.alias === 'virtualNode0') {
console.log(invoiceDetail3);
}
t.truthy(invoicePaymentRequest2, `Payment request should exist for ${node2.alias} when testing with ${node1.alias}`);
//Payment request gotten from getInvoice should equal payment request from create invoice
t.true(paymentRequest2 === invoicePaymentRequest2, 'Payment request gotten from getInvoice should equal payment request from create invoice');

View file

@ -1 +1 @@
{"version":3,"file":"invoices.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/invoices.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"invoices.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/invoices.test.ts"],"names":[],"mappings":"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"}

View file

@ -0,0 +1,97 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.unreadMessages = void 0;
const ava_1 = require("ava");
const helpers_1 = require("../utils/helpers");
const del_1 = require("../utils/del");
const save_1 = require("../utils/save");
const msg_1 = require("../utils/msg");
const nodes_1 = require("../nodes");
/*
npx ava src/tests/controllers/deleteMessages.test.ts --verbose --serial --timeout=2m
*/
(0, ava_1.default)('test message mark unread: create tribe, join tribe, send messages, read messages, mark unread messages, check number of messages, leave tribe, delete tribe', (t) => __awaiter(void 0, void 0, void 0, function* () {
yield unreadMessages(t, 0, 1, 2);
}));
function unreadMessages(t, index1, index2, index3) {
return __awaiter(this, void 0, void 0, function* () {
//TWO NODES SEND IMAGES WITHIN A TRIBE ===>
let node1 = nodes_1.default[index1];
let node2 = nodes_1.default[index2];
let node3 = nodes_1.default[index3];
t.truthy(node3, 'this test requires three nodes');
console.log(`Checking boost messages in tribe for ${node1.alias} and ${node2.alias} and ${node3.alias}`);
//NODE1 CREATES A TRIBE
let tribe = yield (0, save_1.createTribe)(t, node1);
t.truthy(tribe, 'tribe should have been created by node1');
//NODE2 JOINS TRIBE CREATED BY NODE1
if (node1.routeHint)
tribe.owner_route_hint = node1.routeHint;
let join = yield (0, save_1.joinTribe)(t, node2, tribe);
t.true(join, 'node2 should join tribe');
//NODE3 JOINS TRIBE CREATED BY NODE1
if (node1.routeHint)
tribe.owner_route_hint = node1.routeHint;
let join2 = yield (0, save_1.joinTribe)(t, node3, tribe);
t.true(join2, 'node3 should join tribe');
//NODE1 SENDS A MESSAGE IN THE TRIBE AND NODE2 CHECKS TO SEE IF THEY RECEIVED THE MESSAGE
const text = (0, helpers_1.randomText)();
let tribeMessage1 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node1, node2, text, tribe);
t.truthy(tribeMessage1, 'node1 should send message to tribe');
//NODE2 SENDS A MESSAGE IN THE TRIBE AND NODE3 CHECKS TO SEE IF THEY RECEIVED THE MESSAGE
const text2 = (0, helpers_1.randomText)();
let tribeMessage2 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node2, node3, text2, tribe);
t.truthy(tribeMessage2, 'node2 should send message to tribe');
//NODE3 SENDS A MESSAGE IN THE TRIBE AND NODE1 CHECKS TO SEE IF THEY RECEIVED THE MESSAGE
const text3 = (0, helpers_1.randomText)();
let tribeMessage3 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node3, node1, text3, tribe);
t.truthy(tribeMessage3, 'node3 should send message to tribe');
const text4 = (0, helpers_1.randomText)();
let tribeMessage4 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node3, node1, text4, tribe);
t.truthy(tribeMessage4, 'node3 should send message to tribe');
const text5 = (0, helpers_1.randomText)();
let tribeMessage5 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node3, node1, text5, tribe);
t.truthy(tribeMessage5, 'node3 should send message to tribe');
const text6 = (0, helpers_1.randomText)();
let tribeMessage6 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node3, node1, text6, tribe);
t.truthy(tribeMessage6, 'node3 should send message to tribe');
const text7 = (0, helpers_1.randomText)();
let tribeMessage7 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node3, node1, text7, tribe);
t.truthy(tribeMessage7, 'node3 should send message to tribe');
const text8 = (0, helpers_1.randomText)();
let tribeMessage8 = yield (0, msg_1.sendTribeMessageAndCheckDecryption)(t, node3, node1, text8, tribe);
t.truthy(tribeMessage8, 'node3 should send message to tribe');
const tribeMessages = yield (0, msg_1.getTribeMessages)(t, node1, tribe);
t.true(tribeMessages.length === 10, 'The total number of message left should be 10');
yield (0, msg_1.readMessages)(node1, tribe);
// Mark messaages as read here
const tribeMessages1 = yield (0, msg_1.getTribeMessages)(t, node1, tribe);
t.true(tribeMessages1[0].chat.seen === 1, 'last message should be read');
// check that we have less message
// mark messages as unread
yield (0, msg_1.markUnread)(node1, tribe);
// check that we have more messages now
const tribeMessages2 = yield (0, msg_1.getTribeMessages)(t, node1, tribe);
t.true(tribeMessages2[0].chat.seen === 0, 'last message should be unread');
//NODE2 LEAVES TRIBE
let left2 = yield (0, del_1.leaveTribe)(t, node2, tribe);
t.true(left2, 'node2 should leave tribe');
//NODE3 LEAVES TRIBE
let left3 = yield (0, del_1.leaveTribe)(t, node3, tribe);
t.true(left3, 'node3 should leave tribe');
//NODE1 DELETES TRIBE
let delTribe2 = yield (0, del_1.deleteTribe)(t, node1, tribe);
t.true(delTribe2, 'node1 should delete tribe');
});
}
exports.unreadMessages = unreadMessages;
//# sourceMappingURL=markMessageUnread.test.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"markMessageUnread.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/markMessageUnread.test.ts"],"names":[],"mappings":"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"}

View file

@ -48,6 +48,7 @@ function paidTribeImages(t, node1, node2) {
//NODE2 LEAVES TRIBE
let left2 = yield (0, del_1.leaveTribe)(t, node2, tribe);
t.true(left2, 'node2 should leave tribe');
yield (0, helpers_1.sleep)(2000);
//NODE1 DELETES TRIBE
let delTribe2 = yield (0, del_1.deleteTribe)(t, node1, tribe);
t.true(delTribe2, 'node1 should delete tribe');

View file

@ -1 +1 @@
{"version":3,"file":"paidTribeImages.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/paidTribeImages.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAA4C;AAC5C,oCAA4B;AAC5B,wDAA+D;AAC/D,8CAA0C;AAC1C,sCAAwC;AACxC,sCAAsD;AACtD,wCAAsD;AAQtD,aAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAO,CAA4B,EAAE,EAAE;IAClE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAK,CAAC,CAAC,CAAA;IAC5B,MAAM,IAAA,iBAAO,EAAC,eAAK,EAAE,CAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAA,CAAC,CAAA;AAEF,SAAsB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;;QACnD,+CAA+C;QAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAEhD,uBAAuB;QACvB,IAAI,KAAK,GAAG,MAAM,IAAA,kBAAW,EAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACvC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAA;QAE1D,oCAAoC;QACpC,IAAI,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAA;QAC7D,IAAI,IAAI,GAAG,MAAM,IAAA,gBAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;QAEvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,0BAAW,CAAA;QACzB,MAAM,KAAK,GAAG,EAAE,CAAA;QAChB,MAAM,SAAS,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QACvE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAA;QAEpD,+BAA+B;QAC/B,MAAM,MAAM,GAAG,yBAAU,CAAA;QACzB,MAAM,MAAM,GAAG,EAAE,CAAA;QACjB,MAAM,UAAU,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC1E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAA;QAErD,oBAAoB;QACpB,IAAI,KAAK,GAAG,MAAM,IAAA,gBAAU,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAA;QAEzC,qBAAqB;QACrB,IAAI,SAAS,GAAG,MAAM,IAAA,iBAAW,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAA;IAChD,CAAC;CAAA;AAhCD,0CAgCC"}
{"version":3,"file":"paidTribeImages.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/paidTribeImages.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAA4C;AAC5C,oCAA4B;AAC5B,wDAA+D;AAC/D,8CAAiD;AACjD,sCAAwC;AACxC,sCAAsD;AACtD,wCAAsD;AAQtD,aAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAO,CAA4B,EAAE,EAAE;IAClE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAK,CAAC,CAAC,CAAA;IAC5B,MAAM,IAAA,iBAAO,EAAC,eAAK,EAAE,CAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAA,CAAC,CAAA;AAEF,SAAsB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;;QACnD,+CAA+C;QAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAEhD,uBAAuB;QACvB,IAAI,KAAK,GAAG,MAAM,IAAA,kBAAW,EAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACvC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAA;QAE1D,oCAAoC;QACpC,IAAI,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAA;QAC7D,IAAI,IAAI,GAAG,MAAM,IAAA,gBAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;QAEvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,0BAAW,CAAA;QACzB,MAAM,KAAK,GAAG,EAAE,CAAA;QAChB,MAAM,SAAS,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QACvE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAA;QAEpD,+BAA+B;QAC/B,MAAM,MAAM,GAAG,yBAAU,CAAA;QACzB,MAAM,MAAM,GAAG,EAAE,CAAA;QACjB,MAAM,UAAU,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC1E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAA;QAErD,oBAAoB;QACpB,IAAI,KAAK,GAAG,MAAM,IAAA,gBAAU,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAA;QAEzC,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;QAEjB,qBAAqB;QACrB,IAAI,SAAS,GAAG,MAAM,IAAA,iBAAW,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAA;IAChD,CAAC;CAAA;AAlCD,0CAkCC"}

View file

@ -44,6 +44,7 @@ function tribeTest(t, node1, node2) {
//NODE2 LEAVES THE TRIBE
let left = yield (0, del_1.leaveTribe)(t, node2, tribe);
t.true(left, 'node2 should leave tribe');
yield (0, helpers_1.sleep)(2000);
//NODE1 DELETES THE TRIBE
let delTribe = yield (0, del_1.deleteTribe)(t, node1, tribe);
t.true(delTribe, 'node1 should delete tribe');

View file

@ -1 +1 @@
{"version":3,"file":"tribe.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/tribe.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"tribe.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/tribe.test.ts"],"names":[],"mappings":"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"}

View file

@ -76,6 +76,7 @@ function tribeEdit(t, node1, node2) {
console.log('leave tribe');
let left = yield (0, del_1.leaveTribe)(t, node2, tribe);
t.true(left, 'node2 should leave tribe');
yield (0, helpers_1.sleep)(2000);
//NODE1 DELETES THE TRIBE
console.log('delete tribe');
let delTribe = yield (0, del_1.deleteTribe)(t, node1, tribe);

View file

@ -1 +1 @@
{"version":3,"file":"tribeEdit.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/tribeEdit.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"tribeEdit.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/tribeEdit.test.ts"],"names":[],"mappings":"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"}

View file

@ -48,6 +48,7 @@ function tribeImages(t, node1, node2) {
//NODE2 LEAVES TRIBE
let left2 = yield (0, del_1.leaveTribe)(t, node2, tribe);
t.true(left2, 'node2 should leave tribe');
yield (0, helpers_1.sleep)(2000);
//NODE1 DELETES TRIBE
let delTribe2 = yield (0, del_1.deleteTribe)(t, node1, tribe);
t.true(delTribe2, 'node1 should delete tribe');

View file

@ -1 +1 @@
{"version":3,"file":"tribeImages.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/tribeImages.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAsB;AACtB,8CAA0C;AAC1C,oCAA4B;AAC5B,wCAAsD;AACtD,sCAAsD;AACtD,sCAAwC;AACxC,wDAA+D;AAE/D;;EAEE;AAEF,IAAA,aAAI,EAAC,oFAAoF,EAAE,CAAO,CAAC,EAAE,EAAE;IACrG,MAAM,IAAA,iBAAO,EAAC,eAAK,EAAE,CAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAA,CAAC,CAAA;AAEF,SAAsB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;;QAC/C,2CAA2C;QAE3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAE1E,uBAAuB;QACvB,IAAI,KAAK,GAAG,MAAM,IAAA,kBAAW,EAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACvC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAA;QAE1D,oCAAoC;QACpC,IAAI,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAA;QAC7D,IAAI,IAAI,GAAG,MAAM,IAAA,gBAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;QAEvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,0BAAW,CAAA;QACzB,MAAM,SAAS,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAChE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAA;QAEpD,+BAA+B;QAC/B,MAAM,MAAM,GAAG,yBAAU,CAAA;QACzB,MAAM,UAAU,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAClE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAA;QAErD,oBAAoB;QACpB,IAAI,KAAK,GAAG,MAAM,IAAA,gBAAU,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAA;QAEzC,qBAAqB;QACrB,IAAI,SAAS,GAAG,MAAM,IAAA,iBAAW,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAA;IAChD,CAAC;CAAA;AA/BD,kCA+BC"}
{"version":3,"file":"tribeImages.test.js","sourceRoot":"","sources":["../../../../src/tests/controllers/tribeImages.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAsB;AACtB,8CAAiD;AACjD,oCAA4B;AAC5B,wCAAsD;AACtD,sCAAsD;AACtD,sCAAwC;AACxC,wDAA+D;AAE/D;;EAEE;AAEF,IAAA,aAAI,EAAC,oFAAoF,EAAE,CAAO,CAAC,EAAE,EAAE;IACrG,MAAM,IAAA,iBAAO,EAAC,eAAK,EAAE,CAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAA,CAAC,CAAA;AAEF,SAAsB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;;QAC/C,2CAA2C;QAE3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAE1E,uBAAuB;QACvB,IAAI,KAAK,GAAG,MAAM,IAAA,kBAAW,EAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACvC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAA;QAE1D,oCAAoC;QACpC,IAAI,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAA;QAC7D,IAAI,IAAI,GAAG,MAAM,IAAA,gBAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;QAEvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,0BAAW,CAAA;QACzB,MAAM,SAAS,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAChE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAA;QAEpD,+BAA+B;QAC/B,MAAM,MAAM,GAAG,yBAAU,CAAA;QACzB,MAAM,UAAU,GAAG,MAAM,IAAA,eAAS,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAClE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAA;QAErD,oBAAoB;QACpB,IAAI,KAAK,GAAG,MAAM,IAAA,gBAAU,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAA;QAEzC,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;QAEjB,qBAAqB;QACrB,IAAI,SAAS,GAAG,MAAM,IAAA,iBAAW,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAA;IAChD,CAAC;CAAA;AAjCD,kCAiCC"}

View file

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.decryptMessage = exports.getTribeMessages = exports.sendDirectPayment = exports.sendTribeDirectPayment = exports.getSpecificMsg = exports.getAllMessages = exports.sendMessage = exports.payStream = exports.appRejMember = exports.payInvoice = exports.sendInvoice = exports.sendTribeMessage = exports.sendEscrowMsg = exports.sendPayment = exports.sendImage = exports.boostAsMessage = exports.sendBoost = exports.checkMessageDecryption = exports.sendTribeMessageAndCheckDecryption = exports.sendMessageAndCheckDecryption = void 0;
exports.readMessages = exports.markUnread = exports.decryptMessage = exports.getTribeMessages = exports.sendDirectPayment = exports.sendTribeDirectPayment = exports.getSpecificMsg = exports.getAllMessages = exports.sendMessage = exports.payStream = exports.appRejMember = exports.payInvoice = exports.sendInvoice = exports.sendTribeMessage = exports.sendEscrowMsg = exports.sendPayment = exports.sendImage = exports.boostAsMessage = exports.sendBoost = exports.checkMessageDecryption = exports.sendTribeMessageAndCheckDecryption = exports.sendMessageAndCheckDecryption = void 0;
var sendMessageAndCheckDecryption_1 = require("./sendMessageAndCheckDecryption");
Object.defineProperty(exports, "sendMessageAndCheckDecryption", { enumerable: true, get: function () { return sendMessageAndCheckDecryption_1.sendMessageAndCheckDecryption; } });
var sendTribeMessageAndCheckDecryption_1 = require("./sendTribeMessageAndCheckDecryption");
@ -39,4 +39,8 @@ var getTribeMessages_1 = require("./getTribeMessages");
Object.defineProperty(exports, "getTribeMessages", { enumerable: true, get: function () { return getTribeMessages_1.getTribeMessages; } });
var decryptMsg_1 = require("./decryptMsg");
Object.defineProperty(exports, "decryptMessage", { enumerable: true, get: function () { return decryptMsg_1.decryptMessage; } });
var markUnread_1 = require("./markUnread");
Object.defineProperty(exports, "markUnread", { enumerable: true, get: function () { return markUnread_1.markUnread; } });
var readMessages_1 = require("./readMessages");
Object.defineProperty(exports, "readMessages", { enumerable: true, get: function () { return readMessages_1.readMessages; } });
//# sourceMappingURL=index.js.map

View file

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/tests/utils/msg/index.ts"],"names":[],"mappings":";;;AAAA,iFAA+E;AAAtE,8IAAA,6BAA6B,OAAA;AACtC,2FAAyF;AAAhF,wJAAA,kCAAkC,OAAA;AAC3C,mEAAiE;AAAxD,gIAAA,sBAAsB,OAAA;AAC/B,yCAAuD;AAA9C,sGAAA,SAAS,OAAA;AAAE,2GAAA,cAAc,OAAA;AAClC,yCAAuC;AAA9B,sGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,yCAAuC;AAA9B,sGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,mDAAiD;AAAxC,gHAAA,cAAc,OAAA;AACvB,yDAAoD;AAA3C,mHAAA,cAAc,OAAA;AACvB,mEAGiC;AAF/B,gIAAA,sBAAsB,OAAA;AACtB,2HAAA,iBAAiB,OAAA;AAEnB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,2CAA6C;AAApC,4GAAA,cAAc,OAAA"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/tests/utils/msg/index.ts"],"names":[],"mappings":";;;AAAA,iFAA+E;AAAtE,8IAAA,6BAA6B,OAAA;AACtC,2FAAyF;AAAhF,wJAAA,kCAAkC,OAAA;AAC3C,mEAAiE;AAAxD,gIAAA,sBAAsB,OAAA;AAC/B,yCAAuD;AAA9C,sGAAA,SAAS,OAAA;AAAE,2GAAA,cAAc,OAAA;AAClC,yCAAuC;AAA9B,sGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,yCAAuC;AAA9B,sGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,mDAAiD;AAAxC,gHAAA,cAAc,OAAA;AACvB,yDAAoD;AAA3C,mHAAA,cAAc,OAAA;AACvB,mEAGiC;AAF/B,gIAAA,sBAAsB,OAAA;AACtB,2HAAA,iBAAiB,OAAA;AAEnB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,2CAA6C;AAApC,4GAAA,cAAc,OAAA;AACvB,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,4GAAA,YAAY,OAAA"}

22
dist/src/tests/utils/msg/markUnread.js vendored Normal file
View file

@ -0,0 +1,22 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.markUnread = void 0;
const helpers_1 = require("../helpers");
const http = require("ava-http");
function markUnread(node, chat_id) {
return __awaiter(this, void 0, void 0, function* () {
const msg = yield http.post(node.external_ip + `/messages/${chat_id.id}/toggleChatReadUnread`, (0, helpers_1.makeArgs)(node, { shouldMarkAsUnread: true }));
return msg.response.new_messages;
});
}
exports.markUnread = markUnread;
//# sourceMappingURL=markUnread.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"markUnread.js","sourceRoot":"","sources":["../../../../../src/tests/utils/msg/markUnread.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,wCAAqC;AACrC,iCAAgC;AAEhC,SAAsB,UAAU,CAAC,IAAgB,EAAE,OAAa;;QAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,WAAW,GAAG,aAAa,OAAO,CAAC,EAAE,uBAAuB,EACjE,IAAA,kBAAQ,EAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAC7C,CAAA;QACD,OAAO,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAA;IAClC,CAAC;CAAA;AAND,gCAMC"}

View file

@ -0,0 +1,22 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.readMessages = void 0;
const helpers_1 = require("../helpers");
const http = require("ava-http");
function readMessages(node, chat_id) {
return __awaiter(this, void 0, void 0, function* () {
const msg = yield http.post(node.external_ip + `/messages/${chat_id.id}/read`, (0, helpers_1.makeArgs)(node));
return msg.response.new_messages;
});
}
exports.readMessages = readMessages;
//# sourceMappingURL=readMessages.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"readMessages.js","sourceRoot":"","sources":["../../../../../src/tests/utils/msg/readMessages.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,wCAAqC;AACrC,iCAAgC;AAEhC,SAAsB,YAAY,CAAC,IAAgB,EAAE,OAAa;;QAChE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,WAAW,GAAG,aAAa,OAAO,CAAC,EAAE,OAAO,EACjD,IAAA,kBAAQ,EAAC,IAAI,CAAC,CACf,CAAA;QACD,OAAO,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAA;IAClC,CAAC;CAAA;AAND,oCAMC"}

View file

@ -65,9 +65,14 @@ function boostAsMessage(t, tribe, node, replyMessage, amount) {
message_price: 0,
};
//node1 sends a boost on node2's message
const msg = yield http.post(node.external_ip + '/messages', (0, helpers_1.makeArgs)(node, v));
t.true(msg.success, 'msg should exist');
return msg;
try {
const msg = yield http.post(node.external_ip + '/messages', (0, helpers_1.makeArgs)(node, v));
t.true(msg.success, 'msg should exist');
return msg;
}
catch (error) {
return error.error;
}
});
}
exports.boostAsMessage = boostAsMessage;

View file

@ -1 +1 @@
{"version":3,"file":"sendBoost.js","sourceRoot":"","sources":["../../../../../src/tests/utils/msg/sendBoost.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"sendBoost.js","sourceRoot":"","sources":["../../../../../src/tests/utils/msg/sendBoost.ts"],"names":[],"mappings":"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"}

View file

@ -3,9 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.errMsgString = void 0;
function errMsgString(error) {
let errMsg = '';
if (!error)
return 'failure';
if (typeof error === 'string') {
errMsg = error;
}
else if (error.toString) {
errMsg = error.toString();
}
else {
errMsg = error === null || error === void 0 ? void 0 : error.message;
}

View file

@ -1 +1 @@
{"version":3,"file":"errMsgString.js","sourceRoot":"","sources":["../../../src/utils/errMsgString.ts"],"names":[],"mappings":";;;AAAA,SAAgB,YAAY,CAAC,KAAK;IAChC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,GAAG,KAAK,CAAA;KACf;SAAM;QACL,MAAM,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAA;KACxB;IACD,IAAI,MAAM,KAAK,yBAAyB,EAAE;QACxC,MAAM,GAAG,gBAAgB,CAAA;KAC1B;IACD,IAAI,MAAM,KAAK,qCAAqC,EAAE;QACpD,MAAM,GAAG,sBAAsB,CAAA;KAChC;IACD,IAAI,MAAM,KAAK,0CAA0C,EAAE;QACzD,MAAM,GAAG,2BAA2B,CAAA;KACrC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAjBD,oCAiBC"}
{"version":3,"file":"errMsgString.js","sourceRoot":"","sources":["../../../src/utils/errMsgString.ts"],"names":[],"mappings":";;;AAAA,SAAgB,YAAY,CAAC,KAA4B;IACvD,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,GAAG,KAAK,CAAA;KACf;SAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;KAC1B;SAAM;QACL,MAAM,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAA;KACxB;IACD,IAAI,MAAM,KAAK,yBAAyB,EAAE;QACxC,MAAM,GAAG,gBAAgB,CAAA;KAC1B;IACD,IAAI,MAAM,KAAK,qCAAqC,EAAE;QACpD,MAAM,GAAG,sBAAsB,CAAA;KAChC;IACD,IAAI,MAAM,KAAK,0CAA0C,EAAE;QACzD,MAAM,GAAG,2BAA2B,CAAA;KACrC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AApBD,oCAoBC"}

View file

@ -379,6 +379,7 @@ function migrate() {
addTableColumn('sphinx_messages', 'error_message', 'TEXT');
addTableColumn('sphinx_messages', 'thread_uuid', 'TEXT');
addTableColumn('sphinx_timers', 'msg_uuid', 'TEXT');
addTableColumn('sphinx_chats', 'second_brain_url', 'TEXT');
});
}
exports.default = migrate;

File diff suppressed because one or more lines are too long

14
dist/src/utils/res.js vendored
View file

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.unauthorized = exports.failure200 = exports.failure = exports.success = void 0;
exports.failureWithResponse = exports.unauthorized = exports.failure200 = exports.failure = exports.success = void 0;
const logger_1 = require("./logger");
function success(res, json) {
res.status(200);
@ -22,6 +22,18 @@ function failure(res, e) {
res.end();
}
exports.failure = failure;
function failureWithResponse(res, e, json) {
const errorMessage = (e && e.message) || e;
// sphinxLogger.error(`--> failure: ${errorMessage}`)
res.status(400);
res.json({
success: false,
error: errorMessage,
response: json,
});
res.end();
}
exports.failureWithResponse = failureWithResponse;
function failure200(res, e) {
res.status(200);
res.json({

View file

@ -1 +1 @@
{"version":3,"file":"res.js","sourceRoot":"","sources":["../../../src/utils/res.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAEvC,SAAS,OAAO,CAAC,GAAG,EAAE,IAAI;IACxB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AA4BQ,0BAAO;AA1BhB,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;IACrB,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,qBAAY,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAA;IAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,YAAY;KACpB,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAiBiB,0BAAO;AAfzB,SAAS,UAAU,CAAC,GAAG,EAAE,CAAC;IACxB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;KAC7B,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAQ0B,gCAAU;AANrC,SAAS,YAAY,CAAC,GAAG;IACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC1D,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAEsC,oCAAY"}
{"version":3,"file":"res.js","sourceRoot":"","sources":["../../../src/utils/res.ts"],"names":[],"mappings":";;;AACA,qCAAuC;AAEvC,SAAS,OAAO,CAAC,GAAQ,EAAE,IAAI;IAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAwCQ,0BAAO;AAtChB,SAAS,OAAO,CAAC,GAAQ,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,qBAAY,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAA;IAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,YAAY;KACpB,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AA6BiB,0BAAO;AA3BzB,SAAS,mBAAmB,CAAC,GAAQ,EAAE,CAAC,EAAE,IAAI;IAC5C,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,qDAAqD;IACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAiBoD,kDAAmB;AAfxE,SAAS,UAAU,CAAC,GAAQ,EAAE,CAAC;IAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;KAC7B,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAQ0B,gCAAU;AANrC,SAAS,YAAY,CAAC,GAAQ;IAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC1D,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAEsC,oCAAY"}

View file

@ -362,7 +362,7 @@ function getTribeOwnersChatByUUID(uuid) {
});
}
exports.getTribeOwnersChatByUUID = getTribeOwnersChatByUUID;
function declare({ uuid, name, description, tags, img, group_key, host, price_per_message, price_to_join, owner_alias, owner_pubkey, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url, feed_type, owner_route_hint, pin, profile_filters, }) {
function declare({ uuid, name, description, tags, img, group_key, host, price_per_message, price_to_join, owner_alias, owner_pubkey, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url, feed_type, owner_route_hint, pin, profile_filters, second_brain_url, }) {
return __awaiter(this, void 0, void 0, function* () {
try {
let protocol = 'https';
@ -391,6 +391,7 @@ function declare({ uuid, name, description, tags, img, group_key, host, price_pe
owner_route_hint: owner_route_hint || '',
pin: pin || '',
profile_filters,
second_brain_url,
}),
headers: { 'Content-Type': 'application/json' },
});
@ -406,7 +407,7 @@ function declare({ uuid, name, description, tags, img, group_key, host, price_pe
});
}
exports.declare = declare;
function edit({ uuid, host, name, description, tags, img, price_per_message, price_to_join, owner_alias, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url, feed_type, deleted, owner_route_hint, owner_pubkey, pin, profile_filters, }) {
function edit({ uuid, host, name, description, tags, img, price_per_message, price_to_join, owner_alias, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url, feed_type, deleted, owner_route_hint, owner_pubkey, pin, profile_filters, second_brain_url, }) {
return __awaiter(this, void 0, void 0, function* () {
try {
const token = yield genSignedTimestamp(owner_pubkey);
@ -435,6 +436,7 @@ function edit({ uuid, host, name, description, tags, img, price_per_message, pri
owner_route_hint: owner_route_hint || '',
pin: pin || '',
profile_filters,
second_brain_url: second_brain_url || '',
}),
headers: { 'Content-Type': 'application/json' },
});

File diff suppressed because one or more lines are too long

67
package-lock.json generated
View file

@ -72,7 +72,7 @@
"short-uuid": "^3.1.1",
"sjcl": "^1.0.8",
"socket.io": "^4.4.1",
"sphinx-bot": "^0.2.42",
"sphinx-bot": "^0.2.43",
"sqlite3": "5.0.11",
"tail": "^2.0.3",
"ts-jest": "^28.0.8",
@ -4709,20 +4709,22 @@
"license": "MIT"
},
"node_modules/browserify-sign": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
"integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
"license": "ISC",
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz",
"integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==",
"dependencies": {
"bn.js": "^5.1.1",
"browserify-rsa": "^4.0.1",
"bn.js": "^5.2.1",
"browserify-rsa": "^4.1.0",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"elliptic": "^6.5.3",
"elliptic": "^6.5.4",
"inherits": "^2.0.4",
"parse-asn1": "^5.1.5",
"readable-stream": "^3.6.0",
"safe-buffer": "^5.2.0"
"parse-asn1": "^5.1.6",
"readable-stream": "^3.6.2",
"safe-buffer": "^5.2.1"
},
"engines": {
"node": ">= 4"
}
},
"node_modules/browserify-sign/node_modules/bn.js": {
@ -5914,10 +5916,9 @@
}
},
"node_modules/crypto-js": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==",
"license": "MIT"
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/crypto-random-string": {
"version": "2.0.0",
@ -15420,9 +15421,9 @@
"license": "CC0-1.0"
},
"node_modules/sphinx-bot": {
"version": "0.2.42",
"resolved": "https://registry.npmjs.org/sphinx-bot/-/sphinx-bot-0.2.42.tgz",
"integrity": "sha512-EHN5Gj9PfbB6CisHqdAz7rTRzN6oJAjSHR0G5D9gr3IpyWEEC7RYFWJjlJVvS5YvUs+JqP+8O1pZr2Y5tp4wWw==",
"version": "0.2.43",
"resolved": "https://registry.npmjs.org/sphinx-bot/-/sphinx-bot-0.2.43.tgz",
"integrity": "sha512-yCUpLzjN/l+tJwx58odyU5b3BTc8DJgDKiUTBbLaaXW42YVo3wcT7hVG84VjqHBu8FBwGLhmYEYvVN4CBli4dQ==",
"dependencies": {
"@types/cors": "^2.8.7",
"@types/express": "^4.17.8",
@ -21141,19 +21142,19 @@
}
},
"browserify-sign": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
"integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz",
"integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==",
"requires": {
"bn.js": "^5.1.1",
"browserify-rsa": "^4.0.1",
"bn.js": "^5.2.1",
"browserify-rsa": "^4.1.0",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"elliptic": "^6.5.3",
"elliptic": "^6.5.4",
"inherits": "^2.0.4",
"parse-asn1": "^5.1.5",
"readable-stream": "^3.6.0",
"safe-buffer": "^5.2.0"
"parse-asn1": "^5.1.6",
"readable-stream": "^3.6.2",
"safe-buffer": "^5.2.1"
},
"dependencies": {
"bn.js": {
@ -22022,9 +22023,9 @@
}
},
"crypto-js": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"crypto-random-string": {
"version": "2.0.0",
@ -28763,9 +28764,9 @@
"dev": true
},
"sphinx-bot": {
"version": "0.2.42",
"resolved": "https://registry.npmjs.org/sphinx-bot/-/sphinx-bot-0.2.42.tgz",
"integrity": "sha512-EHN5Gj9PfbB6CisHqdAz7rTRzN6oJAjSHR0G5D9gr3IpyWEEC7RYFWJjlJVvS5YvUs+JqP+8O1pZr2Y5tp4wWw==",
"version": "0.2.43",
"resolved": "https://registry.npmjs.org/sphinx-bot/-/sphinx-bot-0.2.43.tgz",
"integrity": "sha512-yCUpLzjN/l+tJwx58odyU5b3BTc8DJgDKiUTBbLaaXW42YVo3wcT7hVG84VjqHBu8FBwGLhmYEYvVN4CBli4dQ==",
"requires": {
"@types/cors": "^2.8.7",
"@types/express": "^4.17.8",

View file

@ -14,7 +14,7 @@
"start-password": "USE_PASSWORD=true ts-node ./app.ts",
"start-hosting": "HOSTING_PROVIDER=true ts-node ./app.ts",
"prod": "cp config/app.json dist/config/app.json && cp config/config.json dist/config/config.json && env NODE_ENV=production node dist/app.js",
"tsc": "rm -rf dist/ && npx tsc && cp -r public dist/public",
"tsc": "rm -rf dist/ && npx tsc",
"dev": "rm -rf dist/ && tsc && cp -r public dist/public && node --inspect ./dist/app.js",
"build-binaries": "rm -rf dist/ && tsc && cp config/app.json dist/config/app.json && cp config/config.json dist/config/config.json && pkg . --target node12-alpine-x64,node12-macos-x64 --out-path binaries",
"start-ecs": "cp config/app.json dist/config/app.json && cp config/config.json dist/config/config.json && export NODE_ENV=production && node --max-old-space-size=128 dist/app.js",
@ -100,7 +100,7 @@
"short-uuid": "^3.1.1",
"sjcl": "^1.0.8",
"socket.io": "^4.4.1",
"sphinx-bot": "^0.2.42",
"sphinx-bot": "^0.2.43",
"sqlite3": "5.0.11",
"tail": "^2.0.3",
"ts-jest": "^28.0.8",

View file

@ -178,6 +178,7 @@ export function init() {
{ name: 'Help', value: '/kick help' },
])
.setThumbnail(botSVG)
.setOnlyOwner(true)
message.channel.send({ embed })
return
}

View file

@ -75,6 +75,8 @@ const builtInBotNames = {
[`${ML_PREFIX.substring(1)}`]: ML_BOTNAME,
}
export const adminsOnlyBot = ['kick']
export function init() {
const client = new Sphinx.Client()
client.login('_', finalAction)
@ -105,6 +107,7 @@ export function init() {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(botName + ' already installed')
.setOnlyOwner(adminsOnlyBot.includes(botName) || false)
return message.channel.send({ embed })
}
const msgTypes = builtInBotMsgTypes[botName] || [
@ -129,6 +132,7 @@ export function init() {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(theName + ' has been installed!')
.setOnlyOwner(adminsOnlyBot.includes(botName) || false)
message.channel.send({ embed })
} else {
const chat = await getTribeOwnersChatByUUID(message.channel.id)
@ -141,6 +145,7 @@ export function init() {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(botName + ' already installed')
.setOnlyOwner(adminsOnlyBot.includes(botName) || false)
return message.channel.send({ embed })
}
// bot from tribes registry
@ -155,6 +160,7 @@ export function init() {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription('No bot with that name')
.setOnlyOwner(adminsOnlyBot.includes(botName) || false)
message.channel.send({ embed })
}
}
@ -178,11 +184,13 @@ export function init() {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(botName2 + ' has been removed')
.setOnlyOwner(adminsOnlyBot.includes(botName2) || false)
return message.channel.send({ embed })
} else {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription('Cant find a bot by that name')
.setOnlyOwner(adminsOnlyBot.includes(botName2) || false)
return message.channel.send({ embed })
}

View file

@ -212,7 +212,7 @@ export async function sendToStakwork(
},
body: JSON.stringify({
name: `${callId} file`,
workflow_id: 6173,
workflow_id: 12346,
workflow_params: {
set_var: {
attributes: {

View file

@ -143,7 +143,7 @@ export async function listUsers(req: Req, res: Res): Promise<void> {
}
}
export async function listTribes(req: Req, res: Response): Promise<void> {
export async function listTribes(req: Req, res: Res): Promise<void> {
if (!req.admin) return failure(res, 'no owner')
const tenant: number = req.admin.id
const chats: Chat[] = (await models.Chat.findAll({

View file

@ -1,11 +1,11 @@
import * as short from 'short-uuid'
import * as network from '../../network'
import { models, Message, ChatRecord } from '../../models'
import { models, Message, ChatRecord, ContactRecord } from '../../models'
import * as rsa from '../../crypto/rsa'
import * as jsonUtils from '../../utils/json'
import * as socket from '../../utils/socket'
import constants from '../../constants'
import { sphinxLogger } from '../../utils/logger'
import { sphinxLogger, logging } from '../../utils/logger'
import { ChatPlusMembers } from '../../network/send'
import { Action, validateAction } from './index'
@ -20,6 +20,7 @@ export default async function broadcast(a: Action): Promise<void> {
bot_pic,
only_owner,
only_user,
only_pubkey,
} = a
sphinxLogger.info(`=> BOT BROADCAST`)
@ -28,8 +29,36 @@ export default async function broadcast(a: Action): Promise<void> {
const { chat, owner } = ret
const tenant: number = owner.id
if (only_user) {
chat.contactIds = `[${only_user}]`
if (only_user || only_pubkey) {
if (only_pubkey) {
const pubkeysArray = only_pubkey.split(',')
const userIds: number[] = []
for (let i = 0; i < pubkeysArray.length; i++) {
const publicKey = pubkeysArray[i]
try {
const user = (await models.Contact.findOne({
where: { tenant, publicKey },
})) as ContactRecord
if (user) userIds.push(user.id)
} catch (error) {
sphinxLogger.error(
`=> ERROR GETTING USER WITH THIS PUBKEY ${publicKey} ${error}`,
logging.Bots
)
}
}
if (userIds.length === 0) {
sphinxLogger.error(
`=> USERS WITH PUBKEYS PROVIDED DO NOT EXIST`,
logging.Bots
)
return
}
chat.contactIds = JSON.stringify([...userIds])
} else {
chat.contactIds = `[${only_user}]`
}
}
const encryptedForMeText = rsa.encrypt(owner.contactKey, content || '')
@ -55,7 +84,7 @@ export default async function broadcast(a: Action): Promise<void> {
updatedAt: date,
senderAlias: alias,
tenant,
onlyOwner: only_owner || only_user ? true : false,
onlyOwner: only_owner || only_user || only_pubkey ? true : false,
}
if (parent_id) msg.parentId = parent_id
if (bot_pic) msg.senderPic = bot_pic

View file

@ -48,6 +48,8 @@ export interface Action {
bot_pic?: string
only_owner?: boolean
only_user?: number
only_pubkey?: string
recipient_pubkey?: string
}
export async function processWebhook(req: Req, res: Res): Promise<void> {
@ -171,6 +173,9 @@ export async function processAction(req: Req, res: Res): Promise<void> {
reply_uuid,
recipient_id,
parent_id,
only_pubkey,
only_owner,
recipient_pubkey,
} = body
if (!bot_id) return failure(res, 'no bot_id')
@ -204,6 +209,9 @@ export async function processAction(req: Req, res: Res): Promise<void> {
reply_uuid: reply_uuid || '',
parent_id: parent_id || 0,
recipient_id: recipient_id ? parseInt(recipient_id) : 0,
only_pubkey: only_pubkey || '',
only_owner: only_owner || false,
recipient_pubkey: recipient_pubkey || '',
}
try {

View file

@ -1,31 +1,69 @@
import * as short from 'short-uuid'
import * as network from '../../network'
import { models, Message } from '../../models'
import { models, Message, ContactRecord } from '../../models'
import * as jsonUtils from '../../utils/json'
import * as socket from '../../utils/socket'
import constants from '../../constants'
import { sphinxLogger } from '../../utils/logger'
import { logging, sphinxLogger } from '../../utils/logger'
import { errMsgString } from '../../utils/errMsgString'
import * as rsa from '../../crypto/rsa'
import { Action, validateAction } from './index'
export default async function pay(a: Action): Promise<void> {
const { amount, bot_name, msg_uuid, reply_uuid, recipient_id, parent_id } = a
const {
amount,
bot_name,
msg_uuid,
reply_uuid,
recipient_id,
parent_id,
content,
recipient_pubkey,
} = a
sphinxLogger.info(`=> BOT PAY ${JSON.stringify(a, null, 2)}`)
if (!a.recipient_id) return sphinxLogger.error(`no recipient_id`)
if (!recipient_id && !recipient_pubkey)
return sphinxLogger.error(`no recipient detail`)
const ret = await validateAction(a)
if (!ret) return
const { chat, owner } = ret
const tenant: number = owner.id
const alias = bot_name || owner.alias
const botContactId = -1
const encryptedForMeText = rsa.encrypt(owner.contactKey, content || '')
const encryptedText = rsa.encrypt(chat.groupKey, content || '')
const textMap = { chat: encryptedText }
let recipient_detail
if (recipient_pubkey) {
try {
const user = (await models.Contact.findOne({
where: { tenant, publicKey: recipient_pubkey },
})) as ContactRecord
if (!user) {
sphinxLogger.error(
`=> RECIPIENT PUBKEY DOES NOT EXIST IN ADMIN RECORD`,
logging.Bots
)
return
}
recipient_detail = user.id
} catch (error) {
sphinxLogger.error(`=> RECIPIENT PUBKEY ERROR ${error}`, logging.Bots)
return
}
} else {
recipient_detail = recipient_id
}
const date = new Date()
date.setMilliseconds(0)
const msg: { [k: string]: string | number | Date } = {
chatId: chat.id,
uuid: msg_uuid || short.generate(),
type: constants.message_types.boost,
type: reply_uuid
? constants.message_types.boost
: constants.message_types.direct_payment,
sender: botContactId, // tribe owner is escrow holder
amount: amount || 0,
date: date,
@ -35,12 +73,18 @@ export default async function pay(a: Action): Promise<void> {
updatedAt: date,
senderAlias: alias,
tenant,
...(reply_uuid
? {}
: {
messageContent: encryptedForMeText,
remoteMessageContent: JSON.stringify(textMap),
}),
}
if (parent_id) msg.parentId = parent_id
const message: Message = (await models.Message.create(msg)) as Message
socket.sendJson(
{
type: 'boost',
type: reply_uuid ? 'boost' : 'direct_payment',
response: jsonUtils.messageToJson(message, chat, owner),
},
tenant
@ -62,7 +106,10 @@ export default async function pay(a: Action): Promise<void> {
replyUuid: message.replyUuid,
parentId: message.parentId || 0,
},
type: constants.message_types.boost,
amount: amount || 0,
type: reply_uuid
? constants.message_types.boost
: constants.message_types.direct_payment,
success: () => ({ success: true }),
failure: async (e) => {
const errorMsg = errMsgString(e)
@ -73,6 +120,6 @@ export default async function pay(a: Action): Promise<void> {
return sphinxLogger.error(e)
},
isForwarded: true,
realSatsContactId: recipient_id,
realSatsContactId: recipient_detail,
})
}

View file

@ -417,6 +417,7 @@ export async function editTribe(req: Req, res: Res): Promise<void | Response> {
jitsi_server,
stakwork_api_key,
stakwork_webhook,
second_brain_url,
} = req.body
const { id } = req.params
@ -473,6 +474,7 @@ export async function editTribe(req: Req, res: Res): Promise<void | Response> {
owner_pubkey: owner.publicKey,
pin: pin || '',
profile_filters: profile_filters || '',
second_brain_url,
})
} catch (e) {
okToUpdate = false
@ -489,8 +491,8 @@ export async function editTribe(req: Req, res: Res): Promise<void | Response> {
if (escrow_amount || escrow_amount === 0) obj.escrowAmount = escrow_amount
if (escrow_millis || escrow_millis === 0) obj.escrowMillis = escrow_millis
if (unlisted || unlisted === false) obj.unlisted = unlisted
if (app_url) obj.appUrl = app_url
if (feed_url) obj.feedUrl = feed_url
if (app_url || app_url === '') obj.appUrl = app_url
if (feed_url || feed_url === '') obj.feedUrl = feed_url
if (feed_type) obj.feedType = feed_type
if (req.body.private || req.body.private === false)
obj.private = req.body.private
@ -501,6 +503,8 @@ export async function editTribe(req: Req, res: Res): Promise<void | Response> {
if (jitsi_server) obj.jitsiServer = jitsi_server
if (stakwork_api_key) obj.stakworkApiKey = stakwork_api_key
if (stakwork_webhook) obj.stakworkWebhook = stakwork_webhook
if (second_brain_url || second_brain_url === '')
obj.secondBrainUrl = second_brain_url
if (Object.keys(obj).length > 0) {
await chat.update(obj)
}
@ -945,7 +949,8 @@ export async function createTribeChatParams(
meme_server_location: string,
jitsi_server: string,
stakwork_api_key: string,
stakwork_webhook: string
stakwork_webhook: string,
second_brain_url: string
): Promise<{ [k: string]: any }> {
const date = new Date()
date.setMilliseconds(0)
@ -988,6 +993,7 @@ export async function createTribeChatParams(
jitsiServer: jitsi_server || '',
stakworkApiKey: stakwork_api_key || '',
stakworkWebhook: stakwork_webhook || '',
secondBrainUrl: second_brain_url || '',
}
}

View file

@ -186,7 +186,7 @@ export async function receiveGroupKick(payload: Payload): Promise<void> {
* @param {Response} res - The response object used to send the list of chats.
* @returns {Promise<void>}
*/
export async function getChats(req: Req, res: Response): Promise<void> {
export async function getChats(req: Req, res: Res): Promise<void> {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
const chats: Chat[] = (await models.Chat.findAll({
@ -204,7 +204,7 @@ export async function getChats(req: Req, res: Response): Promise<void> {
* @param {Response} res - The response object used to send the updated chat.
* @returns {Promise<void>}
*/
export async function setNotifyLevel(req: Req, res: Response): Promise<void> {
export async function setNotifyLevel(req: Req, res: Res): Promise<void> {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
const chatId = req.params['chat_id']
@ -233,7 +233,7 @@ export async function setNotifyLevel(req: Req, res: Response): Promise<void> {
* @param {Response} res - The response object used to send the updated chat.
* @returns {Promise<void>}
*/
export async function mute(req: Req, res: Response): Promise<void> {
export async function mute(req: Req, res: Res): Promise<void> {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
@ -265,7 +265,7 @@ export async function mute(req: Req, res: Response): Promise<void> {
// just add self here if tribes
// or can u add contacts as members?
export async function createGroupChat(req: Req, res: Response): Promise<void> {
export async function createGroupChat(req: Req, res: Res): Promise<void> {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
@ -289,6 +289,7 @@ export async function createGroupChat(req: Req, res: Response): Promise<void> {
jitsi_server,
stakwork_api_key,
stakwork_webhook,
second_brain_url,
} = req.body
let { profile_filters } = req.body
@ -353,7 +354,8 @@ export async function createGroupChat(req: Req, res: Response): Promise<void> {
meme_server_location,
jitsi_server,
stakwork_api_key,
stakwork_webhook
stakwork_webhook,
second_brain_url
)) as Chat
if (chatParams.uuid) {
// publish to tribe server
@ -380,6 +382,7 @@ export async function createGroupChat(req: Req, res: Response): Promise<void> {
owner_route_hint: owner.routeHint || '',
pin: pin || '',
profile_filters: profile_filters || '',
second_brain_url: second_brain_url || '',
})
} catch (e) {
sphinxLogger.error(`=> couldnt create tribe ${e}`)
@ -432,7 +435,7 @@ export async function createGroupChat(req: Req, res: Response): Promise<void> {
}
// only owner can do for tribe?
export async function addGroupMembers(req: Req, res: Response): Promise<void> {
export async function addGroupMembers(req: Req, res: Res): Promise<void> {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
@ -482,7 +485,7 @@ export async function addGroupMembers(req: Req, res: Response): Promise<void> {
})
}
export const deleteChat = async (req: Req, res: Response): Promise<void> => {
export const deleteChat = async (req: Req, res: Res): Promise<void> => {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
@ -544,10 +547,7 @@ export const deleteChat = async (req: Req, res: Response): Promise<void> => {
success(res, { chat_id: id })
}
export const addTribeMember = async (
req: Req,
res: Response
): Promise<void> => {
export const addTribeMember = async (req: Req, res: Res): Promise<void> => {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
const { chat_id, pub_key, photo_url, route_hint, alias, contact_key } =

View file

@ -812,3 +812,26 @@ export const unblockContact = async (req: Req, res: Res): Promise<void> => {
const contactId = parseInt(req.params.contact_id as string)
switchBlock(res, req.owner.id, contactId, false)
}
export const getContactById = async (req: Req, res: Res): Promise<void> => {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
try {
const contactId = parseInt(req.params.contact_id as string)
if (!contactId) {
return failure(res, 'provide a valid contact id')
}
const contact: Contact = (await models.Contact.findOne({
where: { id: contactId, tenant },
})) as Contact
if (!contact) {
return failure(res, 'contact does not exist')
}
return success(res, jsonUtils.contactToJson(contact))
} catch (error) {
sphinxLogger.error(error, logging.DB)
return failure(res, error)
}
}

View file

@ -224,28 +224,20 @@ async function asyncForEach(array, callback) {
export async function clearForTesting(req: Req, res) {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
if (!config.allow_test_clearing) {
return failure(res, 'nope')
}
if (config.allow_test_clearing !== 'true') {
return failure(res, 'nope')
}
if (!tenant) return failure(res, 'no tenant')
try {
await models.Chat.destroy({ truncate: true, where: { tenant } })
await models.Subscription.destroy({ truncate: true, where: { tenant } })
await models.Accounting.destroy({ truncate: true, where: { tenant } })
await models.Bot.destroy({ truncate: true, where: { tenant } })
await models.BotMember.destroy({ truncate: true, where: { tenant } })
await models.ChatBot.destroy({ truncate: true, where: { tenant } })
await models.Invite.destroy({ truncate: true, where: { tenant } })
await models.MediaKey.destroy({ truncate: true, where: { tenant } })
await models.Message.destroy({ truncate: true, where: { tenant } })
await models.Timer.destroy({ truncate: true, where: { tenant } })
await models.Chat.destroy({ where: { tenant } })
await models.Subscription.destroy({ where: { tenant } })
await models.Bot.destroy({ where: { tenant } })
await models.BotMember.destroy({ where: { tenant } })
await models.ChatBot.destroy({ where: { tenant } })
await models.Invite.destroy({ where: { tenant } })
await models.MediaKey.destroy({ where: { tenant } })
await models.Message.destroy({ where: { tenant } })
await models.Timer.destroy({ where: { tenant } })
await models.Contact.destroy({
where: {
isOwner: { [Op.ne]: 1 },
isOwner: { [Op.or]: [false, null] },
tenant,
},
})
@ -258,6 +250,8 @@ export async function clearForTesting(req: Req, res) {
contactKey: '',
alias: '',
deviceId: '',
hmacKey: '',
pushKitToken: '',
})
success(res, { clean: true })
} catch (e) {

View file

@ -1,4 +1,3 @@
import rateLimit from 'express-rate-limit'
import { models, Message } from '../models'
import { proxyAdminMiddleware as pamid } from '../auth'
import * as gitinfo from '../utils/gitinfo'
@ -32,13 +31,6 @@ import * as action from './actionHistory'
import * as feeds from './getFeeds'
import * as contentFeedStatus from './contentFeedStatus'
const limiter = rateLimit({
windowMs: 1000, // 1 second
max: 2, // Limit each IP to 2 requests per `window` (here, per 1 second)
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})
export async function set(app) {
builtInBots.init()
@ -92,8 +84,7 @@ export async function set(app) {
app.delete('/contacts/:id', contacts.deleteContact)
app.get('/latest_contacts', contacts.getLatestContacts)
app.post('/generate_external', contacts.generateOwnerWithExternalSigner)
app.post('/hmac_key', contacts.registerHmacKey)
app.get('/hmac_key', contacts.getHmacKey)
app.get('/contact/:contact_id', contacts.getContactById)
app.post('/profile', personal.createPeopleProfile)
app.delete('/profile', personal.deletePersonProfile)
@ -112,11 +103,14 @@ export async function set(app) {
app.post('/remove_badge', personal.removeBadgeFromTribe)
app.put('/reissue_badge', personal.reissueBadge)
app.get('/msgs', messages.getMsgs)
app.get('/allmessages', messages.getAllMessages)
app.get('/messages', messages.getMessages)
app.delete('/message/:id', messages.deleteMessage)
app.post('/messages/:chat_id/read', messages.readMessages)
app.post(
'/messages/:chat_id/toggleChatReadUnread',
messages.toggleChatReadUnread
)
app.post('/messages/clear', messages.clearMessages)
app.delete('/messages', messages.disappearingMessages)
app.get('/message/:uuid', messages.getMessageByUuid)
@ -228,8 +222,9 @@ export async function set(app) {
app.get('/tribes', pamid, admin.listTribes)
app.get('/admin_balance', pamid, admin.adminBalance)
// rate limit these routes:
app.use(limiter)
app.get('/msgs', messages.getMsgs)
app.post('/hmac_key', contacts.registerHmacKey)
app.get('/hmac_key', contacts.getHmacKey)
app.post('/messages', messages.sendMessage)

View file

@ -9,7 +9,7 @@ import * as jsonUtils from '../utils/json'
import { decodePaymentRequest } from '../utils/decode'
import * as helpers from '../helpers'
import { sendNotification } from '../hub'
import { success, failure } from '../utils/res'
import { success, failure, failureWithResponse } from '../utils/res'
import * as network from '../network'
import { Payload } from '../network'
import constants from '../constants'
@ -219,9 +219,17 @@ export const createInvoice = async (req: Req, res: Response): Promise<void> => {
id: message.id,
invoice: message.paymentRequest,
},
success: async () => {
success(res, jsonUtils.messageToJson(message, chat))
},
failure: async (error) => {
failureWithResponse(
res,
error,
jsonUtils.messageToJson(message, chat)
)
},
})
success(res, jsonUtils.messageToJson(message, chat))
}
} catch (err) {
sphinxLogger.error(`addInvoice error: ${err}`)
@ -250,15 +258,25 @@ export const listInvoices = async (req: Req, res: Response): Promise<void> => {
export async function getInvoice(req: Req, res: Response): Promise<void> {
if (!req.owner) return failure(res, 'no owner')
const payment_request = req.query.payment_request as string
let payment_hash = req.query.payment_hash as string
if (!payment_request) {
return failure(res, 'Invalid payment request')
if (!payment_request && !payment_hash) {
return failure(res, 'No payment request or hash')
}
if (!payment_hash) {
try {
const decodedPaymentRequest = bolt11.decode(payment_request)
payment_hash =
(decodedPaymentRequest.tags.find((t) => t.tagName === 'payment_hash')
?.data as string) || ('' as string)
} catch (e) {
return failure(res, e)
}
}
if (!payment_hash) {
return failure(res, 'No payment hash')
}
try {
const decodedPaymentRequest = bolt11.decode(payment_request)
const payment_hash =
(decodedPaymentRequest.tags.find((t) => t.tagName === 'payment_hash')
?.data as string) || ('' as string)
const invoice = await Lightning.getInvoiceHandler(
payment_hash,
req.owner.publicKey

View file

@ -1,10 +1,12 @@
import { Lsat as LsatB } from 'lsat-js'
import { Response, Request } from 'express'
import * as bolt11 from '@boltz/bolt11'
import { models, Lsat as LsatT } from '../models'
import { logging, sphinxLogger } from '../utils/logger'
import { failure, success } from '../utils/res'
import * as Lightning from '../grpc/lightning'
import constants from '../constants'
import { Req } from '../types'
export interface LsatRequestBody {
paymentRequest: string
@ -52,6 +54,16 @@ async function lsatAlreadyExists(lsat): Promise<boolean> {
return false
}
function extractPubkeyAndPaymentHashFromPaymentRequest(
payment_request: string
) {
const decodedPaymentRequest = bolt11.decode(payment_request)
const payment_hash =
(decodedPaymentRequest.tags.find((t) => t.tagName === 'payment_hash')
?.data as string) || ('' as string)
return { payment_hash, public_key: decodedPaymentRequest.payeeNodeKey }
}
export async function payForLsat(
paymentRequest: string
): Promise<string | void> {
@ -73,7 +85,7 @@ export async function payForLsat(
}
export async function saveLsat(
req: RelayRequest,
req: Req,
res: Response
): Promise<void | Response> {
const tenant: number = req.owner.id
@ -111,7 +123,22 @@ export async function saveLsat(
let preimage: string | void
try {
preimage = await payForLsat(paymentRequest)
//Decode payment request
const ownerPubkey = req.owner.publicKey
const { payment_hash, public_key } =
extractPubkeyAndPaymentHashFromPaymentRequest(paymentRequest)
//check if pubkey from request is the same with owner's pubkey
if (public_key !== ownerPubkey) {
preimage = await payForLsat(paymentRequest)
} else {
// search for invoice
const invoice = await Lightning.getInvoiceHandler(
payment_hash,
ownerPubkey,
true
)
preimage = invoice.preimage
}
} catch (e) {
sphinxLogger.error(
['[pay for lsat] Problem paying for lsat:', e],
@ -178,9 +205,16 @@ export async function getActiveLsat(
): Promise<void | Response> {
const tenant = req.owner.id
sphinxLogger.info(`=> getActiveLsat`, logging.Express)
const issuer = req.query.issuer as string
const where = { tenant, status: 1 }
if (issuer) {
where['issuer'] = issuer
}
try {
const lsat: LsatT = (await models.Lsat.findOne({
where: { tenant, status: 1 },
where,
})) as LsatT
if (!lsat) {
return res

View file

@ -163,7 +163,11 @@ export const sendAttachmentMessage = async (req: Req, res) => {
errorMessage,
status: constants.statuses.failed,
})
return resUtils.failure(res, errorMessage || error)
return resUtils.failureWithResponse(
res,
errorMessage || error,
jsonUtils.messageToJson(message, chat)
)
},
})
} catch (error) {
@ -259,7 +263,11 @@ export const purchase = async (req: Req, res) => {
failure: async (error) => {
const errorMessage = errMsgString(error)
await message.update({ errorMessage, status: constants.statuses.failed })
resUtils.failure(res, errorMessage || error)
resUtils.failureWithResponse(
res,
errorMessage || error,
jsonUtils.messageToJson(message, chat)
)
},
})
}

View file

@ -18,7 +18,7 @@ import {
import * as socket from '../utils/socket'
import * as jsonUtils from '../utils/json'
import * as helpers from '../helpers'
import { failure, success } from '../utils/res'
import { failure, success, failureWithResponse } from '../utils/res'
import * as timers from '../utils/timers'
import * as network from '../network'
import { Payload } from '../network'
@ -30,6 +30,7 @@ import { ChatPlusMembers } from '../network/send'
import { getCacheMsg } from '../utils/tribes'
import { loadConfig } from '../utils/config'
import { onReceiveReversal } from '../utils/reversal'
import { errMsgString } from '../utils/errMsgString'
import { sendConfirmation } from './confirmations'
interface ExtentedMessage extends Message {
@ -485,6 +486,17 @@ export const sendMessage = async (req: Req, res: Res): Promise<void> => {
amount: amount || 0,
type: msgtype,
message: msgToSend,
success: function () {
success(res, jsonUtils.messageToJson(message, chat))
},
failure: async function (error) {
const errMsg = errMsgString(error)
await message.update({
status: constants.statuses.failed,
errorMessage: errMsg,
})
failureWithResponse(res, errMsg, jsonUtils.messageToJson(message, chat))
},
}
if (isTribeOwner && realSatsContactId) {
sendMessageParams.realSatsContactId = realSatsContactId
@ -497,7 +509,6 @@ export const sendMessage = async (req: Req, res: Res): Promise<void> => {
// final send
// console.log('==> FINAL SEND MSG PARAMS', sendMessageParams)
await network.sendMessage(sendMessageParams)
success(res, jsonUtils.messageToJson(message, chat))
}
/**
@ -786,6 +797,75 @@ export const receiveDeleteMessage = async (payload: Payload): Promise<void> => {
)
}
/**
Either makes all messages of a chat read or it marks the last message of the given chat as unread.
@param {Req} req - The request object containing the chat ID.
@param {Res} res - The response object used to send the updated chat information.
@returns {Promise<void>} - An empty promise.
*/
export const toggleChatReadUnread = async (
req: Req,
res: Res
): Promise<void> => {
if (!req.owner) return failure(res, 'no owner')
//
try {
const requestBody = JSON.parse(req.rawBody)
//We want to mark the chat as read
if (requestBody.shouldMarkAsUnread === false) {
// Call the readMessages function with the same req and res objects
const result = await readMessages(req, res)
return result // Exit the function after calling readMessages
}
//we want to mark the last message + chat as unread
const chat_id = req.params.chat_id
const owner = req.owner
const tenant: number = owner.id
// Find the latest message that is not from the user and has been read
const latestMessage = await models.Message.findOne({
where: {
sender: {
[Op.ne]: owner.id,
},
chatId: chat_id,
[Op.or]: [{ seen: true }, { seen: null }],
tenant,
},
order: [['date', 'DESC']],
})
// Update just the latest message found in the database to mark it as unseen
if (latestMessage) {
await latestMessage.update({ seen: false })
}
//mark the chat as unseen
const chat: Chat = (await models.Chat.findOne({
where: { id: chat_id, tenant },
})) as Chat
if (chat) {
resetNotifyTribeCount(parseInt(chat_id))
await chat.update({ seen: false })
success(res, {})
socket.sendJson(
{
type: 'chat_unseen',
response: jsonUtils.chatToJson(chat),
},
tenant
)
} else {
failure(res, 'no chat')
}
} catch (error) {
return failureWithResponse(res, 'Invalid JSON body', {
error: error.message,
})
}
}
/**
Updates the messages in the specified chat to mark them as seen by the owner and sends a notification to the other chat members.
@ -844,7 +924,7 @@ export const clearMessages = async (req: Req, res: Res): Promise<void> => {
if (!req.owner) return failure(res, 'no owner')
const tenant: number = req.owner.id
await models.Message.destroy({ where: { tenant }, truncate: true })
await models.Message.destroy({ where: { tenant } })
success(res, {})
}

View file

@ -5,7 +5,7 @@ import { sendNotification } from '../hub'
import * as socket from '../utils/socket'
import * as jsonUtils from '../utils/json'
import * as helpers from '../helpers'
import { failure, success } from '../utils/res'
import { failure, failureWithResponse, success } from '../utils/res'
import { tokenFromTerms } from '../utils/ldat'
import * as network from '../network'
import { Payload } from '../network'
@ -143,13 +143,7 @@ export const sendPayment = async (req: Req, res: Res): Promise<void> => {
status: constants.statuses.failed,
errorMessage: errMsg,
})
res.status(400)
res.json({
success: false,
error: errMsg,
response: jsonUtils.messageToJson(message, chat),
})
res.end()
failureWithResponse(res, errMsg, jsonUtils.messageToJson(message, chat))
},
})
}

View file

@ -11,7 +11,7 @@ import { loadConfig } from '../utils/config'
import { isProxy, loadProxyLightning } from '../utils/proxy'
import { logging, sphinxLogger } from '../utils/logger'
import * as zbase32 from '../utils/zbase32'
import { Req } from '../types'
import { Req, InvoiceRes } from '../types'
import { loadProto } from './proto'
/* eslint-disable import/no-unresolved */
import { LightningClient } from './types/lnrpc/Lightning'
@ -321,7 +321,7 @@ export async function sendPayment(
if (isProxy(lightning)) {
const opts = {
payment_request,
fee_limit: { fixed: 100 },
fee_limit: { percent: 7 },
}
lightning.sendPaymentSync(opts, (err, response) => {
if (err || !response) {
@ -557,7 +557,7 @@ export async function keysendMessage(
// too long! need to send serial
const n = Math.ceil(opts.data.length / MAX_MSG_LENGTH)
let success = false
let fail = false
let fail: Error | string | null = null
let res: any = null
const ts = new Date().valueOf()
// WEAVE MESSAGE If TOO LARGE
@ -579,17 +579,24 @@ export async function keysendMessage(
await sleep(432)
} catch (e) {
sphinxLogger.error(e)
fail = true
fail = e
}
}
if (success && !fail) {
resolve(res)
} else {
reject(new Error('fail'))
reject(new Error(keysendErrorString(fail)))
}
})
}
function keysendErrorString(e: any): string {
if (!e) return 'failed keysend'
if (typeof e === 'string') return e
if (e.toString) return e.toString()
return 'failed keysend'
}
export async function signAscii(
ascii: string,
ownerPubkey?: string
@ -1241,8 +1248,9 @@ function ascii_to_hexa(str) {
export async function getInvoiceHandler(
payment_hash: string,
ownerPubkey?: string
) {
ownerPubkey?: string,
showPreImage?: boolean
): Promise<InvoiceRes> {
sphinxLogger.info('getInvoice', logging.Lightning)
const payment_hash_bytes = Buffer.from(payment_hash, 'hex')
return new Promise(async (resolve, reject) => {
@ -1263,10 +1271,11 @@ export async function getInvoiceHandler(
settled: response?.settled,
payment_request: response?.payment_request,
payment_hash: response?.r_hash.toString('hex'),
preimage: response?.settled
? response?.r_preimage.toString('hex')
: '',
amount: convertMsatToSat(response.amt_paid),
preimage:
response?.settled || showPreImage
? response?.r_preimage.toString('hex')
: '',
amount: response.amt_paid_sat,
}
resolve(invoice)
}
@ -1292,14 +1301,20 @@ export async function getInvoiceHandler(
settled: res.status.toLowerCase() === 'paid' ? true : false,
payment_request: res.bolt11,
preimage:
res.status.toLowerCase() === 'paid'
res.status.toLowerCase() === 'paid' || showPreImage
? res.payment_preimage.toString('hex')
: '',
payment_hash: res.payment_hash.toString('hex'),
}
resolve(invoice)
}
resolve({})
resolve({
amount: 0,
settled: false,
payment_hash: '',
payment_request: '',
preimage: '',
})
}
}
)

View file

@ -148,6 +148,9 @@ export default class Chat extends Model<Chat> {
@Column
preview: string
@Column
secondBrainUrl: string
}
export interface ChatRecord extends Chat {

View file

@ -22,7 +22,7 @@ import { logging, sphinxLogger } from '../utils/logger'
import { loadConfig } from '../utils/config'
import { errMsgString } from '../utils/errMsgString'
import { getProxyRootPubkey, isProxy } from '../utils/proxy'
import { ML_PREFIX } from '../builtin/ml'
import { adminsOnlyBot } from '../builtin/mother'
import { Msg, MessageContent, ChatMember } from './interfaces'
import * as intercept from './intercept'
import { typesToForward, receiveCoTenantMessage } from './receive'
@ -543,11 +543,37 @@ function compareAliases(alias1: string, alias2: string): boolean {
return match
}
async function updateMessageToIsOnlyOwner(uuid: string, tenant: number) {
await models.Message.update(
{
onlyOwner: true,
},
{ where: { uuid, tenant } }
)
}
async function interceptTribeMsgForHiddenCmds(
msg: Msg,
tenant: number
): Promise<boolean> {
const hideAllCommandsBot = ['/kick', '/ml']
try {
const content = msg.message.content as string
const splitedContent = (content && content.split(' ')) || []
if (splitedContent.length < 1) return false
// must be a "/" bot command
if (!splitedContent[0].startsWith('/')) {
return false
}
if (splitedContent[0] === '/bot') {
if (adminsOnlyBot.includes(splitedContent[2])) {
await updateMessageToIsOnlyOwner(msg.message.uuid, tenant)
return true
}
return false
}
const newChat = (await models.Chat.findOne({
where: { uuid: msg.chat.uuid },
})) as ChatRecord
@ -556,8 +582,6 @@ async function interceptTribeMsgForHiddenCmds(
where: { tenant, chatId: newChat.id },
})) as ChatBotRecord[]
const content = msg.message.content as string
const splitedContent = (content && content.split(' ')) || []
for (let i = 0; i < bots.length; i++) {
const bot = bots[i]
@ -565,15 +589,11 @@ async function interceptTribeMsgForHiddenCmds(
bot.botPrefix === splitedContent[0] &&
bot.hiddenCommands &&
JSON.parse(bot.hiddenCommands).includes(splitedContent[1])
const isPersonal = bot.botPrefix === ML_PREFIX
if (isHidden || isPersonal) {
await models.Message.update(
{
onlyOwner: true,
},
{ where: { uuid: msg.message.uuid, tenant } }
)
const isDefaultHide =
bot.botPrefix === splitedContent[0] &&
hideAllCommandsBot.includes(bot.botPrefix)
if (isHidden || isDefaultHide) {
await updateMessageToIsOnlyOwner(msg.message.uuid, tenant)
return true
}
}

View file

@ -4,11 +4,11 @@
"pubkey": "03a394d0ebf0d003124ab130c6b12b8b990a50a30a464354800a51981ba745bb07",
"ip": "http://alice.sphinx:3001",
"external_ip": "http://localhost:3001",
"authToken": "1D6OhvgPS5sxO1KNd1tb",
"transportToken": "MIIBCgKCAQEAzfnmLizb704AtLy5fU/3/l6mMnw3MoDYDf91ztWNWaiGtM8tn8y4\n0z9Xca21Lzmhj38AL9/+53zF9NtkSBx5BCfpbI6JcTM5FDTxfclYRUwoIE8AJz6G\nJCLR41dgzBqvdhVPQWdyIqA1bsQQKHqwqMyKYqpf0VJo88Kv9UPqyDqobqtkn1WO\n23HAVhEIzcEYFTZqktdddczrhSfrwmXJYgC7Jfrdsu/SHyv55BCQLBJ2Ni5SavmE\nCR1zZY8xg1Oxj722DK+ITsv4VHXP1sTwbhVN+0Jc48hjXjyONlce7KRLh83Botvb\nyy70y4RUyfQz8rejODkaBHEPUDPG5XySWwIDAQAB",
"contact_key": "MIIBCgKCAQEA3x/bV+mHa3gAhec7M88LNTFTQnjfu0nAJBSabvIJjxu/6t3k4sqL1gIu8aLmA+iOqOJ6/8wqZLY8jddVUXE5rbeevw0qWcyuVT94xlChQ+ltcz55K3FXkMm9TejEm6l1HBHKLQqi8ke/oSxBQWLa5hS60PxadYJiOpdH3JHy3FPl3BC59pLY7fgo1q+cvh7o2OdU4k4o89mJ/nLjIbHqGUeG/WCpc4gViNHMp+epQP1QRFCRuusuwFONWAYrXZ3SrvuTISjQHw8tSqUiEKaz0Ebw+9NmfYkzSkdBcScUWJJuktrhRHt9Z/kJYVXXQXMkql565YZJZVe4P+1HyLOXEQIDAQAB",
"privkey": "MIIEpAIBAAKCAQEA3x/bV+mHa3gAhec7M88LNTFTQnjfu0nAJBSabvIJjxu/6t3k4sqL1gIu8aLmA+iOqOJ6/8wqZLY8jddVUXE5rbeevw0qWcyuVT94xlChQ+ltcz55K3FXkMm9TejEm6l1HBHKLQqi8ke/oSxBQWLa5hS60PxadYJiOpdH3JHy3FPl3BC59pLY7fgo1q+cvh7o2OdU4k4o89mJ/nLjIbHqGUeG/WCpc4gViNHMp+epQP1QRFCRuusuwFONWAYrXZ3SrvuTISjQHw8tSqUiEKaz0Ebw+9NmfYkzSkdBcScUWJJuktrhRHt9Z/kJYVXXQXMkql565YZJZVe4P+1HyLOXEQIDAQABAoIBAGJHgvMHLxn8Qqa4glBAu1wTvOvDmDDDvHloBdomjGVXwMIwOPhYZR2/2nOe4BgKoIPtNmZjxKyVxLhph/AWomRNRAQ9RVFGoed0zLr1mwLx177yXqbvBrYE1nhxteAm1SmnAFm0nK+BQPw6JQgrBeZgbSVOcn3eD2xlZEbYlpPLIh6PCHLDYKzPDFX9KfPBKaTi1wd7ZTDeDq3FvgTwKglKFFCw/xWBtAD8IK6aNvFV90xGMBHlQPRzv1204g8SLTzT49dPD5AAi8eKzZYTeOaQYm/93LVyx2nV2cDF6h5sB/5DKx9pC8D+n6ILQFRu4UoroaH1iDE4B9PRDeM4a1ECgYEA8ZR7hdTsh7XpDA8Inb1bePLyQexsuWIXGO+A9+3uXWnfyJ4XKyi4KpivwLgMvTxKiZutuw68gsvLyXqud3NRfh2jnUDSb7pXf+arZ5Dc1rPl6hQsWncpBmV//NrDqaKqyrrBzcpl/6ZmvEoBaUwycu8Lk4fB+yUtDLrUv4CxSJ0CgYEA7HFcHlyW9BwHZ5VUU6Rxn7cqAmsWrwmDqIxvnETHye8oeyKXB87PKM5F14Tg11LmQm5OJMZL5NkBgpldfKqYatFze0njZpU51G2FfbngBpQZFCsg4bq75qbQQ5RucOgP+BuTOVtha3gsqA5JA0RNcL6kKlWJHhkk9Vu+g2a8HAUCgYAaWFH8L1M4HYtzqDQNV7ghAYWP0OOud9cC/iN3ZjgnccNY0ny+VSt4YbxQ7QFepbOPPC3/B0Vhki4AI+Pg3O+XLE5KeOY6Dv050oMAwViEBYxeMaMAnpwXuXvyrDzIRBgSEbnO4nKrJY9wmzV6MTgTNqRxi02JQO2fxMQsujEbNQKBgQCintkf3MjKPpjtKmzkVl773cub/DGO0/lkrKp7DWdoQQBTqJe9/ATJaQ3qTG8kSdUq7Zj7fBNo48RBIeCFxQOtvD80Fb68qHgs3eMJdRVbEPMqxvsHphpkamklgepv53xMRhL9SRd5Bh+YurKG96xXlhdtMoVrWRntU1t2HuvUTQKBgQDKEbOw9mlvwVIiBba4DBtyiiIUjPaCuxcqWSogmgLAIQrMctjuUS97uCpCpOvsCQYB5dsO9EsUd6shrpn+O2NK6upmTBqf3NYVNVPsGL2VC1RJsWmMLE/OQs3CSX2cv8d8zhuRsLFx9tcO3QGF697q3hUWeruN6Kk6HHTSzjk5hA==",
"exported_keys": "a2V5czo6QXdGU2RCb3Zlbm9qN0xPaXNlOExKZDZNeWtCcXZPR0xQNzRGRzlDeWZwY3k2Tm85d0dDM2s2bUwwMVlhWkNwQ2tJcTZWQ1lPVFZmdGx2c0hRdTJndlRyK284bFdQU1Y3My8rQ056Ti9TOU9oRVVmN3Uvd0JaMS9RUTEwSUcrTGJRVlZlNlVmNjdIVmlPSlB1ZUxKVHdGMTVQWXc1UDltcGpldTIydGcyc3g0RUNObzNqL0R6VmZsOGRyM3c1OHp5WEZweXFTdFhsWTJsRGVhNWNZRWNwOGV1Sm9MZExEdHdlczZjd0tIZFduVGFDSVBMeUxucWtMUFI0VzdVdVdaNFdvY2VUOTRkWkhGcS95MnVIZ1VtQ2tacXlSQVJQMHQwaEVpS0lteGJJT0FSV2kvc1VQSXVQTDhqcHNVakVNQ0o5KzZEZm5Vc3dmdXZDYVVTMzhzVEVzQmRGaTRaeUFUZ1p1aGYvMDZSWFl6OWpPWk95SE9QY0ZBU0h5cVFLQTVBdHZHSkw3dGZmRTgwTzUvRGNmNDAraDBnbWNaWnNUMXQzZG5HYVY1TGhsZ0EycWt0YmJLR3N1ZGphbG1zZlVPb25CZVYyNlBPYzdBOStieEErS3FxeS9lMER1NFhTUkNTNi85UU4rdXJEUWlYZE9NdWR3aUQxcTVzdk9WSG1wYjRzK2ZMN0M3ajJuRE1hNThOYXk1UE9lRnlxOGQ0ZE1nQkpRWEVBWGFKNlNHWTZFK0tpTzh6Uk1ad3NDaE4vRVFIRERjeWR5YzNmV3FoOXdoTk4wbjJxc0FLMDZYeUpVa2QyRE5xejRmL0dMd0ZiTFpOMUxmeEVtcHhNbStZZi94S0k1emc5Z1ROMy9FMDh0WDlzTzNyM1I2U0l4MVd2Y0hyRVhsUzNIRDltR0NFa1pYWWNpZHNVQURZRkNEanNvdkVnV3UwQTBSNlEyMXRpVGpFTExRL2FVeVhIMEltekYybi9TUkRrY3dLb2tMQU84d0pNTENaRnZ3d0paNVUycmxRZ1ovd3dYVElLOHNjSEV2Y3dVWkZmUEZWYTA0THVzZ3oyZURwcDU2dUlweXg0RFBWUXI5SUhvNE1qVGdEN0M4ZW00SjZqS3F3eEd2SnFDRlc2SUFlV05Td1Z1UXZ6Q1gybllXbUVDUGc3dHlEQmZBQThyaGJ2djZrenhSbng2WW9Yc3lqbWI2QVNNU2ZNT2k0aEFORXRmbDE3NmxEaVRoRmZYalVBdDFjYnlVRDVHY2dkUGhKV2lxdys1ZGZNS25MenQrY3RYcGNaL1k4d1VoU3k1NEViSWhsTjFXQ2paWEV1dVlFd1NXcjk1d1BqV21yaXJYM2UrYXUzRGp4eG1BUkZTczF4ZXlUTXBCd2xoRzFVZTBGZVVNMXdnM2pxOURwWFhKWkNTcVZFelQvVGpBOFdLUVFXUEhJdFlrd0svTWg2WGVLVEg1MmMxR3Q4d0loRlg2eU1qZk8zZUVDR2x5RE1FSjIrUVR6emwxVVNOQnF1bWh5MGdhdHU4RVpVZ21lZUJzRWNYK1lFVzdNay9xVlZEaUNnK2ZKYWhaM1ZHUnZIRGFRNk5GcDVrNTRuQWVwVkJ1bUZydW9ydkF2bEp2djRVdDRwN2NuZkRKcDlNZEdZVE54aWZzT1FncmlVQi9hakZhL3pCeEswU2dIWGxsckRhK2JrREU5OHVIbyszbDc5SWVnbUl1Wlk2anFHaDRJTWFya2kxY25vNzJYbzBpcndQRVViWXpJcFJ4NGFkSWZpcTFtb3hPSzJLV3lCMXBTYXVQMVdXSGxkdXBpV051ejU3N21IckJSeU1kZ1JBYk5UeDZ6Q1RHazlTSWQ4Zk1OZU1ScUdoVCtXWE82VklkVTZPWTJEaWFQRDdFM3ZXSmk1R0hwYktnMHQzZkZwWVNFT1hycWpTd1B4cFNGVzFIWXJINU0vVlZlWVFUWklsNmVhbEJ0VFBpN0FQdWlBL043clBHSE85VEhpOFNJWUwzZGpYbzBZUFJ2TGw2SU1BcGdvYnhOSHB5N3NqYWNHcG9JSlVsaWYxTzBkVnVndlZiQm5xRUNualUyNkdYekxQMEdZZUYzaXZUVUxIVlUvVEZsa1dHcTZRUmJJSys4SzRjUE1ZNzQydTdkWUp4aCt0QU5helVFVlEyaHo5Yi9ieGtjZWVNazVUTVd3UkZIUkxRWjR1dmRvUVRTVjhKaVFhVm1KWHFGR29LYlhJUXovMGxEUTVWUnJmaHI0aDJUMGNhUXZkTDVUWHpJblVFdGNtV2JtdkpjNUt5YkVXeTFrZDVJVXdtc3VwejRJT1p6VFJScE5NMnR4bXNDdzd1Z2VvUnFpenR2UWxvck9XUWdPWWlvNTNnRFVadmJxYzcvZldIUlJKUzIwVElYR0YzcWxuNi91V2NwRDd4dVhvaUJ0bWVVL2oyY3F6U3U0em9yeUFzdk9ZQ2tOc2p3eVlvZHY3RTlYNWtBQ2ZxK2U2WXE5czNEdjRnUkdud25sYWdpOVNjeHNYc3RscGRuellmbXVJRlA3MWUrTUZ2eFVJYWxyVGxYaXk4bjhsM25idkluaE5YNEN4SkZieUxXakt5ck95VkZKSUZ1U0pwLzVGd2VsMkFCRTZCaWl3cXU2Wk1XK2VpVXRCb0lTR0hNK1dKWHVaNkhSdTlxcUdLN2JndzkyQzFMdVBsdDhQMGtwNDZsbzNUTFd6dmNMK25iUDh3Q25aM0xGS1NyU0NFYUFMTitNeXVGY2RwNkJJTDhaTFZFTVlHWmsxTFE5VFJNZUxKcjEvNWJVZzAxRFNMTlVRQ2FCTGo1V2ZISTdHTUNNQk5wZlFnNFcvUTFwaUxrdVNzQlA1MWhzWUJLZHdmSE1IMUg2T3JwV0RrcTljVDJsWEJvaW9qWE9mencraHB3SlRadnAvNU5pTVZVeTV0YzlVaG5CTGVMcmJsRGgzSHBDQzRVMDltUXRnSnpLbEx0amFlRlNMRHBMTjJsVTBPN3paWWIwQWZEakM5eTNCRHBQL3AzRTFVT09wWG16RnBXUXcrcHI2MitTUklzczdMZEJYZFEwaTBUS3ZxMms1MFRtdGZWM1VWQVBINEs5Z3d2aXFQaVlHSkFvaFB1SUk2K1ZBcjBrcjhuMldkT0Z2eGNmaUkwVmdUREFOSkpzSGFVeFFONWY4VnFDN1VMSkJjeXIrSG9ydktTbWpGMEhLa2ZkaU42ZExLN2xyMStJazdlUmNyRXFad1dVVXI0Wk1WQi8zUEZRWFFnSXRFQjdaR0VNNmVKMnVEM2tXejNvSFFKU2RqQXlDaW9QMlRzMjB1UCs1TUVkVStudE9FUEdGUE1CWEFkRzF2WjdlQXVmT1ZhTExtYW1Fc010YVY4cTBqOUY2cVhWWDVCQ0dOc04xVGZIMzZSQkhnWmhzakJnS3U1Qi9CazVTazlGMTFoaENnQnlVbW1VV3NTS013WWQ3dEF5RXNvRlYyRExVekk3L3o2Nzg1ZXdBU0FXV0xTNkhXekhCSzBVYnJPdEN4Ymd1ZmFFKzc5eXlpdDdONi9YRi9HYlNWdG9pWXZVQnZuOGUvVzZ5V3pWZi96VDN4ODRsQkU3STFSMXJvRWJObVE3QU9IbzNYbHVYb01aOCtrWTdsbUoyWElMWkwxZk5yY2lPNys1Slk2RkFWSXBuST0=",
"authToken": "N68QcZg9WENR/ANiik9V",
"transportToken": "MIIBCgKCAQEApLzAOGM6GyI0cXmeLuak3Jp9i6NvwThQVBpQn3RUSwOVX0r3As23\nXJmgn4bsLZrj8SBb6ENEAZIi1Bf9tFP70EV5ckQQDYE5cmzJQVuYbbXityftdsl4\nXWdq8rat3GwrU1GsF24tFFyX9V1dU8qLOPrcp4/WsjzWl+trrMYIfV1XoCuGHITl\nosQ+osIy/LiHj1TE8OkPUiWVRGaqDeZ87yH1HRrYAfvcT8megaCAaP3ETI/PkmkY\nTUDrn51oew469fa1reg6FqemDbbUciBdXqOcn9D6JF6SOzm0lNPBRMeE472D+OY5\nU2y06nNYM0I8w+02z/nowtgaZ9P3yRd00wIDAQAB",
"contact_key": "MIIBCgKCAQEA29Rbw2heWdzB+mYG6It/E8oJxgQh1yRi3Zi2T2EtpfRiN10G8Asznl9UqO6fSK0omCC6V+eGp07fVga2vOPekfMFJkG6AF5EqbpdSmWvCLU2vzVu7W1/0dgqoYlz9cQzyIYG3LM608tAdAX9SfjeUzT95rdy6m4JVG59MzUkv6F53rk74hYcgzxxzhkF7W0sgziQc1FcwMb1Dh9bPHNvlOZ/EA+gM5xoDCHR1ygvQ8DLy052MjgP7WjEZtwvFIEU5pJo6RnYaavI+XarH5+blI7o5GAQjJDWRDV2wtaPN438FPHrw9hTFMV+XNik6Af9st4LGO7BRwiptfsHXJDb1wIDAQAB",
"privkey": "MIIEpQIBAAKCAQEA29Rbw2heWdzB+mYG6It/E8oJxgQh1yRi3Zi2T2EtpfRiN10G8Asznl9UqO6fSK0omCC6V+eGp07fVga2vOPekfMFJkG6AF5EqbpdSmWvCLU2vzVu7W1/0dgqoYlz9cQzyIYG3LM608tAdAX9SfjeUzT95rdy6m4JVG59MzUkv6F53rk74hYcgzxxzhkF7W0sgziQc1FcwMb1Dh9bPHNvlOZ/EA+gM5xoDCHR1ygvQ8DLy052MjgP7WjEZtwvFIEU5pJo6RnYaavI+XarH5+blI7o5GAQjJDWRDV2wtaPN438FPHrw9hTFMV+XNik6Af9st4LGO7BRwiptfsHXJDb1wIDAQABAoIBAQDa51u9ebfCyncLjv/AH/EaVq1m1wSPxbcBramV4FJhmLsZIHThInZzdcDLPFu3Nl9fJfAJyw8mmf8CHktoS41+Tr7I+thqt3Sug1uU0y76f+GVhHMC0XBgGV9SXprvmEJsozJAIeYps5NqNfCk8cMKnpFbZ0Byu8JkpmXcUUZX3242x4kYGxk3npnxPN6W7Jq57RN0FIKIj35mu7naPV8V5jzcA/7hRsSJcNdCxFNSDmK9qLow6rdutAZ2AmlHBSLgL/46rGpwKPbGs6RiuxqwMj4NG/KjDmFjy37Me3Le2SHQ9hEzBtO2vfmLW85V8nyEPyemQBYOZn1/ErCnuuDZAoGBAPv8IAKyDloKPoHGFuURPxJexwmGKcJ+R3XYf9D/VB0w2UZM112Arz8SrGboTUeN+joUdvTO4Oxi934nALSuikPc4pOfiMIx6A1EW+sl7c+c70vJwBV/KQWUc/nQIPvIVigzC7rr8RF+MUJI9C8j+InXM5NB1VCVL20KbWx0jKSdAoGBAN9VEXBzwVF65SnbSUZ1xueiqE5kRJfJxcjAZXxKLB3PTBqNg7bbbwaqZRu2JWalwKaPMHETLBz494tSBR3XGvDypDViINODiLlh8P8JD9CLPUEyi61/FutXNn0J1CnwmM5k6Qq+4lqU27KO1SymxCmEErPqOkCivHTbWMJpCEYDAoGBAL5td+dxliT3but1vuGXmfmRBIuvByoDco+dcGKKQo/Y1aop8euoj0d0HjOaxKQZqItx4b/6A8LAu9ZrNT5WVQkaCWSUgK55NquoCGr5e/GU4MZ+jhnwwhiEauzUG8kLSgkRIoE9Qy38Fs/IADkLzwykREa5zrIaPAAEjFMU9SCFAoGBAKkuGg3jwnhk7qCsm2+i3NCwKWtpDYUmtouDI93pmk3isTYUKcklpY+ZGQrLCr4dpjkGk5209l/kQjHqKjIWtzP7u2UtNszEAZjdluC8DpzePcLb9W+yrLwOzxodjflPZ5JCYz9epr4TsfIrvVUb59HDWR+tuf8oyDaFy1FKm5fdAoGANfzrlKSQ38hhi/0CtNUOba6+4t6TU/geLyqOjUD/VlYhz0qPmd55uOPHldqxnc9WHIG+mh8QhXTIffoMpuTtFuoGwe1W7zCPaBF0NTig+B8xXUNGjjWNFDq9sWEK8sPQGwLeC7w+w4bmUS18Jyo6wXoRdEiIRq+j7tdLL/Wdjrk=",
"exported_keys": "a2V5czo6QXdHRmNjaVdmbVZzL2poVDgyYUF0RDUyTHBDUUNLUS83Y1ZITjQ2elA2a2t2VTJNTXR3ZE55ZDdlK3hCeDI3d2xjUkpOQWhsKzkvYlp0WEtlWDZnVmVoMFhueFJ0bE5NVWErWmV5RWprVExlbTkzZXJ3dWpQa1FBYXNaNjJLaTdEb2pDKzVkcVhySzdaT3JwQ0JqWTRwQURjNk5zL2FKZEQ1bVR4Zkc4UWZTSG9mZmprRWQ1KzRVRmdpUkpXbnNNdzkzbE8wU0dyK1BJT09FY0MyYTduN2dZNFl5QmpHOUY3SElLVWF6Y2l4QjhxUFRyZVhOd3VVVjFvVDJqa0RYOUxSVEtBeUNJQTV5UmJpY05HaU5rVmxkRWdiM3pWMjVja0d1ZUM4TzB6MmtEVUlPK2xHZktxMERZY3E3K2s5NTdLcDNaN0hHS3FZelFlTWsrVTFnUXZKaTZWdThHbDdIMUdUb2MxT3hjMmxJS0luMGZaSmlYN1hzcGwyaUEzTEFqbWpFVWJBSWozTGFsYTFWLzdqOFdLRWthT2llckUwcFZ5WU1lSENUOTRaNWxwYWYxeC9lQWtEUXdaelFYeVM0d3lTK1hsWnJKSGs5WGlQeVJXZ1Z3V09ERlB0RldJT3Y2NXFZL2laUCtpbTFtOWVLUUpGME50RjgvRmU2dFpjWjlRQm9xdFRZenJKYVZiMStDZi9OY3RYQVk0UnJNRlhObVMyTG9GV1p2ZFRmNU1tSyt5SFo2SHBCQkwzdkZmMC9LaXhGSUpBT2x4WHUxU3FiZlg5WTFVN1B0Q0F4K0FaNDJiSVZIUDV0M3kvK0dCVXZleHl1clVVenp2N1VGY0hJVjI2TTc2R3ZGUkpIakdJbEx6ci9RWEY1blZOMWYvb2psRzkwZ0Y2azNGZWM4QW90TXFXbDdsMENyOWxFRGNxUDlpMFJaSGdoeVpnamJzcGN6SFRKSFNjclpES2ZWbDkwVmdJaGRZenRaZFI4YTNkMTByRjA2K09QWWJDUmhXZ0pVOHBSZlpKVlJ0WVZLVnN0dGtCOHNkWUJHcUFjNnJ1Vlg3SUNKbWQ1eWY2MUV3bG1mTko5Y0FIaGN2MEcvbHRIb3lvNUZLNlZtODVwWWRNdzFtODI1djRUY1A4emRQVTNvanduWHlUUkhUdTYyS21kU09xOU0zZUR2U25RT1M1bDVxU2dGYVNGdDZXWC9teldYN2ZzcUlCdjFidU5oR1I4THdHK0lWdjJaSWdwRlhEcjVyS0VaUFRPYlZucHZLcUdDL253M04yZHAzTHpXUVJzSGRyejJUSjR3VG5kdS8xRjZtNVhVV0xuZVEwMmJmZ1JWRkd3LzlzUHd6cytVTFFGN3BNOCtaaEd1WUkrckpybUNxMDRBZ1R0NFZ1WUZFSFhyKzkrbnliMlFJNkhGQ1IxZTF6U1crT2NFYU83ZjYyMmdEZEcybFpEemxVaTVMMEp2SG9Zd0ZUUVFrd25uRVBFT1JNdlY5enhtUWo4R0xZMGRBejNIdjFJa0RxSWJyYTJqV0ExbFlUOFlUV2pzdXJxUzFyNlp2MkZhVDdCaUxqd3FFWDVVc3JGdGNVUnZjWEFPaFI4bjY3L3Y3cldwcG00WStKYjFENUowMHZHV2x5RHFtLyt2blBuYnludE9ZMnppdGhONnM3bTdNcVBaUUlXZkEycTRWVFFXTWxTRkV6MzRvaGtzSUZRNVVrN1ZvTDl0SVlSbXZXQlhXRENhTmdGTnBXeEdVMHJtakZwbkpIOE9URlI3aS9YY0NMQnJ0OFdQMno3a0lram1ZeU1nQ2FLT1Y4NzZMVkZWejN5Y1hCQ0JHZ1NPSWdHeU1ldWR4c0FOam9vOTREci9qTkJKL2lrVER0b1NrVFBOZ3J5aVRSbDJpdWZxN1RJZ3FJK2laUVF5RHM2bWx4MmJ0OXZzRGhQeU8wSWozS01zQzZVL2pJYlN4MlZUeThaMjRVUVBoQjRmazRkbTFJZGVVWTJpaVNYTHlPcWRMYVJTYU1LSi9RcEFRbVpKMENVSWpNM1Y5Y3VnQThEV2hQZ0lreHZzTGFtTldGMnNyZUs2eHI5RFVwL1g4N0h0Rk9lZ0pPQVRzTTFmN1VsYURXZUZpYXU5eEE3ODEwU3JCM2twUjdlcHRPcXFURUV6MDdJZ21IeHROZytrRFFtWEFidUlQZWE3QXlVRkFVTDV2ZFNibXlMNU96Zk9ENy9lQlo3OXQySGRTMy91a1BOZ25lTjF2Vk90amwrMkFSNVRLUE8rQzZGYy9BT2NDNFA2QXBVZE52eG5tdDBYTkorNm9CdnEvaTFudVF1RkVBTWJsVGVmN1N6dVI3TTF1TEVhekdHSUplSkVpeTFGazVpWEozOTRTWlFmYVVXZU9adUlzTkdyRWxEVnNEMlpFVldwb3oyV29seDh6ZGVzOXQyQWl3U1VQS1ZvQVl2R1Vya1U5OTJTeDJlVEdCOWFteEZtSi9jVkYxOGh1T1JCUjRuZkh3VjgzdmR5bmJ6SmJHYVZPTFZwbUhmWGprY1JzWkJqY0pNbnpRUCsyQk1lLzBEcVlkMjUyeVI2cTlEOFZOOEx2V2tjcUVud0JYeFFSY3V3emFzaTZhWnh4QmJmUjlTZ1l2L1l1V0xnNjQ0RUswYzdYcXMxeHdNY3pqMjY2R3lxcHdlWGYrY2M4emxvNVFHT1o3QU4vODhMUjlZSmVqcjdYSHpTWk1HQzA5STdaNU1YcUhBOTJDdVoxWngrWUpUamczTXhTTzEyd2UrNmtiOGQxMm8xUXZ1ZjJvMlVZMHdKaUR6b2lYQS9oQTZVUFVMaWFnOXBiRlJDZmRPUTZEYmVDbjRVSXFyQzdhbTJoUG5jZlROTitEMGRhbEQvT3ljSVo2SjBTMlR1Nno5UmlGLy8vaitUb1pkVEZEaDlsbGV2UlNOTTNreXA2MTcyMGJDUTc1V3JyQjFSMjJXamNJNGZQUldSaTFvM3l5dUJVNU00SnpJQnp2YXo0cTRjb29zZk5TVjVGTUpIOUg1aXNaakZ0dUZxb3NSM0RyOEllNXA2WDZIRE9Qc3NHZEhpeHhVSDNoeWFGMWNNZFl2ak9ES2FkdjNnNkdpeVBybDMxblpwVGJ6S1ZvWUFrdS9palAvSmlnRkREeFU4TjY5VUZNVmNSeCt0OVkrd24vV3Z1YWJ1ckQ3VHhucjVnTFZjVVk4cmo3d2JLYS9zT3h0cG9tSUlZZEZjb1daeVpZZlMzNHVzUzkwK2g1Y0M0OWhIUzVUOHRkdWRwL05VNHlLZ0QrbitOWER4MmhmL1JiOHh3OC9NdVdvZDMyMEc0M0o5Q0MzSVZBS3U3L016Ni96VTFCaHJXKytkRk9RaWdnMXIxcmFpVktJb2xIdW5sVDNpeitDR1R0clowZnlwdTM5dTBWM3Q3bFBkTHlOUGdoaGxIZVFSVFRQeXFKcmVmcmtOZ2hUS0luZnVrYUMxRGpUZHhldFZ3dllIV1dHaFdCNUh3UlpkNVFGbUlMUTVaOG9LS1hydFRySE9Ra0tjSk1CTG8ycVNVaVg0L1g3czlSMStvSnAzMlEzR2RXbC9qaWlSbU5JUmZkWFppR2k3TFFDZ3ZpMzA1RTcvTW5TdFVBZUF1UVZwaVpWSFRlNGRCYmNUY0NSNWVpZlVmOGZ4QnBCMElnYz0=",
"pin": "111111"
},
{
@ -16,11 +16,11 @@
"pubkey": "02a38857848aca6b32ebcc3c85d07ee41354988f4f1e0b4e6ccd255eee6ed75b8d",
"ip": "http://bob.sphinx:3002",
"external_ip": "http://localhost:3002",
"authToken": "H6X0wWoNonz3JmQQkK0X",
"transportToken": "MIIBCgKCAQEApasuEN9J/fRg35e+d2KcE3OgIYvcM/DtSQURNAHAw2vYRcnrJTTc\nOdFHiRa9vjZGg9oZOhgQNP39TaKVQKlqnk/ezN8BewV3gufoxf2DI6a97Nofm+0j\nlvxBqP88ygrbHNki0CX6fjomBnBcTewDjO7QTniBDyYuJR9P6Wwk91/WEBPoH3m/\nsb12GawCjk6Lc5Bdoc/8fX8cO8oOjNbs3jP5fIxZJSEy9+edthqVLsCMzO/VHwLG\nXrtF319x0GKOhRVzhqcKy6ZSiOIybTfbvTR52dYJ52uPuDKM6S20u/S8rHz9azDX\nyGf0NtrNgi4K4L9D76J4+ZGP9KGD/RQpoQIDAQAB",
"contact_key": "MIIBCgKCAQEA6bwz+d7Zw/IdZsh+OUnwZK7Wg/AOLTNSaNrXypp0ro+EETa1nmvID4EkRNbJ8GAzS/dAor2QpG1alwvJq1FOBSgv8n+BW99KAbDS5mHXFX+p6SCvMZe7ZsA2YMZX83SF/ta/MmvLliFTazbBA7FMwalddgSDXbdkhaEj1sKGmwWWVBbJnMAARj9coJi+PEtU6ufjalzO6ogmyfaZEyIQsvNRgKHp4FpSjVkuhaDIGOVbz9XyvjanfTG7ivpMbJgcaUtT0LvUDTv+Cv+vDwOY4spzd3HKU27YIykioTei2T+zbl1eaM6XuEbiyIHVY4mB4GGBvRVsU5Xuu8CYTXkRGwIDAQAB",
"privkey": "MIIEpQIBAAKCAQEA6bwz+d7Zw/IdZsh+OUnwZK7Wg/AOLTNSaNrXypp0ro+EETa1nmvID4EkRNbJ8GAzS/dAor2QpG1alwvJq1FOBSgv8n+BW99KAbDS5mHXFX+p6SCvMZe7ZsA2YMZX83SF/ta/MmvLliFTazbBA7FMwalddgSDXbdkhaEj1sKGmwWWVBbJnMAARj9coJi+PEtU6ufjalzO6ogmyfaZEyIQsvNRgKHp4FpSjVkuhaDIGOVbz9XyvjanfTG7ivpMbJgcaUtT0LvUDTv+Cv+vDwOY4spzd3HKU27YIykioTei2T+zbl1eaM6XuEbiyIHVY4mB4GGBvRVsU5Xuu8CYTXkRGwIDAQABAoIBAEjGDVTOGvVUS+01nX9O0yc1/JplwrQ2F4GIKcnuH0g+bPtDEnc5zbduGRHJ4mQSP8Z2PEyvQvq/BYaj5+2MSgN3CL6zDl7BffRazr9mVSZfclKgl4uUV4fdbtDg0H9/lzzKNguH3oJm6+ckzCHPMTvW9L+LFi+2qvikPFlghbJ8CX/5hgUESdITVUx5T2byrP1+XOs99U6gXzJdhJeR6QhguBAgQNTgji+LHAlgv2yiV8mpNO1KPkg4+C2oN7n59DAuVN1hGFST0kWA7Ii3jt0BtdE7vCzFXvY0XU8Pq6WOw8O0xq3sW5lVZlDQvUDsxGiSx8h/1r327VwiSNNn8DkCgYEA+bK2UWRSirCLkzaWqm2ls9ey2S8aboOi9xikR7Ra9n34YkzotJ7mAEEtcjKRV62xNia5bFnLbfgWOyi6pMvv5oFNrs6pnPQ/98y5WEgYKwmB+NLYfJQv7l0X5OfUgGFt46jauEHMj4xS2KuvBnBRK4BirK6qY/+G1IghWKLOnM8CgYEA76Ja6W2hjVecSJULrTQHoFhhj3MD1zedFkPsq9AWHyizar5wpI/JUcgr114Noo9jnZzA9RD8dj/AEvzijx92g5bJc+6WemxZsb4D3r3vgwTsWz29gZSeziC1LCrD5INoKH2T4d/1tItXEazTO+2pdcK6yobZ8r0/k2hBu1LI0fUCgYEAgF0iIud7E3c82Zo3jDe/9ptNgx8W7HdZoMOXOJF8LbmGpio5exkwzjKzhUB/vV46escfjZb/4HGoJBOFF9ELbClO4S22vkxGUkJ5ievOGNnTajIiPrEDjvtmnDOd572ue1nDzvNskOMnd+GSobG92Kowj+tfBvdGvh2ZXvKbWrsCgYEAnmBdWX2dkj7fCZGIQBbtG2qOQDKxzSHybm7CEuPaWwmZWuk2pWxqj+SOJS8CL/g4zEh3twBc+wIzPdlpG1KeD2YvCrIbPhoyRajiAeriS2OLmtn5T5UcR/uSAfjZs0OuKWSlwlk0mPimuQXSLf9rSmtC7OunTCkLxa7YEqgqFakCgYEAngU9MftDpmwkdPdAhcirDib4A+Q/7nBvI4Q28CFfILrxp6FdM/TRHpxuFjg/alaXeWEO+fNtWzoeMPghp7PietQhspIatN+yLgz+/7sfrPqOae6SAfKiXwJ5KrEEtQtF1L3O/ej5bH3YSIKblH4glGs+jc8Pmo3xxfMRFw/GHv0=",
"exported_keys": "a2V5czo6QXdHZFE0U0tKc1VKQmhlTWFOVlJDMjNXbFVkUVd5L28welNUS2RQZVNWSWltZzlYSmhjT0QyN2NSME5BME5iZFVIdDZ3dkNIdGg3N0NEOTZwR3JEdHZVVzBlS1hpWnVteTBybmQ0K1FuVndkUDNiNnJZMkpBMkNyY1VranNBek42dkhoamYrcDFaUWhNTTlmcGdxSWNMYTdrdzFabWRnMFVkekJrclE1ckFYa3hpYmQ2WWtqV0pTNTFWZ3hra3pveVRPeENnS2UwVHJoenE1Mi9QUUF6YXU2b29TK1NheXk1emViUUlQcms5cm9icTQ0RkZULzRaa1Z5RzJVR3NSamdPOFZCMUo3aW90RFF3OHN3WUQ1LzRJaFV2Rnh6SXd6Q3VWa04vK05ZVU10UUNqSU05QjJTQ0hhamVHTXM1OCtpMUJHZGF6T01SdlQ0THpveUxtZ1AwVUpxcVZXeTdWV1lWamtWMGtMQkVSZjRSZGRYaW1VSU9OUi9FbEdlMUVKN1ZhenJGY0xTcFJqUTlZU3hGUlI0b0xrRElCbTVEK0R6TE9Ma3lBcS96Ty9FeXlleElGQmhyajlPTG5nNSttalhLREZZQU1MRjlFbU9PRHQ3cDZNWVExY0xSZmFxaXU5SkhvZ1B0eXF2RFVSbUtKbWpkeGViT1B1UE5tUHJFZlEvMCtId0pzdHAzQVIvaVk5MmYrYm1FYi92OC90QTlIaEFkV1FvenhQZVgwbHA3Y0JYcFVjMGpmVXRTc2VEb0MyU2JrR0xrcWJmZDlaUDJIM0J1alJVUTZsN0NRZGRQRjR6QTROTlVoOU51TDgvZEZCUDdTekN5MmpaenozNkVMWkFSc2xaVmdzTU1aMkZzbzhiZWgrV2E0cnFvQk1zbkhyd2Jnc0dkT3dqeEJjQWdVbkpqSlI4WUI0TzZUOE0wd2gwdm9aNEVXalJJRGpmZDZIVW1DdURzZlMvLzdKTEFZL0lZK0dNU0c0VWlYYzRidnp3VEpSSlRheDlqa2xHcmhuWXVwa2lZRHVmRDhHTWZrbmQwcFRJZTU4c2NvbmlINnl3ZVJvcTZHa1FNSWN5V2orOXI5OWdZcGw4d0dvY0FUNTZkci9lMVhyZ2l4ZWJrbmM1eVg1MTBzbWorZUgzZzZQSWg0dnNvU0UyejhCdFREN3lvRWoweGg4STJlSHVTeGZ2V1owWFlLd055ZEN4VVh2dkhadTdONGlVQjBYbjRQaytiN0VHcWxIQW0rQW9QcWNxQU14dW11TERYdmRMNWRtcHUydEZGT2J0K1k5UzBkcjlack5qa2ZBTXA4cmU5NXF5Y2c2WmpzUEZlTmlHL0JzcHhYU0kzN3ZIdUNsSUZIa0hZZjhNdzBHMDdSK1pKTG8yZXlQcHVzOHJ5dG1wbTR6STJreWJuYStkU3VFY0IyR3RWOGxDOXorUHJvcHJ3eHlHVXpaUUxCWTlKNWlKZlNhU3pnYTR0N0dicGplYU1QTmxVT1ExWEF2RUY5OThzc2xLd09Ib2RzSGUrb2J6eXBpVVltZkpuR2ZyZGRuVVljRWpTN2VQazdNaGtmYTRsNHF2VlZWQkk3TGxvOHZGalZpNExsdytSclVPbjVRL28zTnRDeWJiTFlGVHNWTzdRVzJRbzRpRWZaVjBGbzVGVnRpNUZHMng2U21sSjFsOElXbHVPOUFzUE45NXNBM090ZzRGTFJmblFCU3hXWUNJR3NKbTQyM0hxRkdwbzNhaytyWklvRzNpeGxnYklJallWYUtiRTFURzl6bUVIYTZKWUpvWk1GYjhuZzl4Q2F2WTA0QmNIMXNxYnJYcTlXT0VZdTlGdHBRQThzSksrdEpzUk9hK2hBUHlxSGRDdzZFbHo1L2NLTmRFSFc5aE5oWkk5cFZON202QzhoZGxydVpkZzZnY1p6THNLNXFqKzhsL0FIRkdaQktNeEpBa296Zm5mSE1uelFYZDlmWEFrWjNFRXNvVlBod1NDSXg0dURPTlR6S3cySnFMTmMySE5rNk1halY0Y3FzQUh6bWZ5QUJHVXAvcTgzRE53NHAvZmtYNHNrWVZqUVo5dTlheURoN3BWeUc4UVNuQVkxTDJuckplKzdOTG1RQ3ZUVlJnMlJlVmtadm9WVk9XN04rOWNZTFFzeXFnSnJLak01V1A0MW9jVzR6c0Y1MHRMNzJLa3V4bWNqNFdTM0tjOXBScWVZaEdVN0N3Ty9zN2p0MnR0K2N4c3lvcW9KMnJFMlFCaXpjTkZQdU8rMTZLajh4aVlOTmorWUtDSzk2a1dLQzRnZ0ZheVUrWTZ2d1g4L3JFaFlJb2xQWTYzdVN4cnB2WVJtWWQwVXgvdU1PWkxqZ0s1ZXhzdnNzeGYzaFdObU5QaWljWjM5WnhVVjNsRkhJd3h4dFJNZ1FBck9uZ2ZjamZRK1dYV1VldFdORnd1bklUY3dyTWpramFUWnpzeDlSV1JlLysyL3FPVnRieDdDc0xmQmk4N0t4dlJzZGFjdmozVE5pR1ptdW9hcVJ2QzR6b1NlUytGbW4vQ1JOMWprbVhWcW5pNUJnZGE0cWM4NktxQUllSXAyT2MwSUdKVXV3YTdDS2lubWtTVHJqZUxhZ0dwL0kwbE85M0FGYTFzVzBVM3ZuaE8ya3IyUUoycmxEVlAzSG54MEZFQWRISkYrQlV3M0wrbTBkT1orcDJHTFNSdE8rNWVTK1Vpd0NVSWxld2MrWGlLbHJuOU1XR1pDcmttTFhTdTFYY0M3T0Fsa1ZEM0hrQ1d5OFhnZnVJbXNEWTFLTmxLSjViaEY5UXRrR1NMWHFCeDFEZnhKM0lyOXVpYlhYZldNNk9ScTkvMkNNNDVZNnZOTzNxdFduUWlXUlV2YzN1UXhDNmhEdG5iOE1jYnpFVURiR2FmdFdIMWZtd3NLMUhCR0NCbjFwam9Dc1J4N3FDRHhwSkZScHI3dHdQYndLQ2lhZkhWY3c2c3k3Wk45TnFmSkcrbWF0S24xTnlSNzhoaXpHTm5jL0I1NDVsblZwRDFEdUVVVHJjVElWdVhqK1YwUmRaVlVXMHV2WEQxKzVlTWRnYjBRckk1OW13RFFQdW9xT0lLaW8xZWE4U3NnTVdMbzgyNG51OUN4VDRDZFNGWWtFUW8rQm5mSlgzTnZ0c01pTjBJNEFweGhIMHU1WWNjU1YwLzB6OXpId1NsWGZKZFdFL0NDcjJZd1FWbCtqbmpnL1R2R00reDZGRUUyTVVpSElDcnBJSnM1MTczRzAxVmJtYnJ1QTIzYmUrUWE1WTh0dUZFdFIrN0pJLzJhcDMrTHhMZHBZbDVXYjBiQlpUbWk0OHV0RzU3SFZhNHdYeVA5UmRtL1IrK3EraVlZZkZWVUhpakV2L2FRcE9FTVNwOFgwRU5nMjFBenVRdU9tWjhYdVBQVlRRM3BmS2EvQnByM2poVCtHRFFsRGNUQXo1Mm1id0I1KzFMTmIvakJPbG1tL1c4dnJZSTQxVDJJSEtQQjRlZWQ0SGxONUhGNWtKSVFqYUI1WE5hQ0tFZk45SlpkVUc1TzVYNVVuZk5DU2hmVWg5Zlh2bk50VGhQTWVEWjhJZ3J5SlZLU0ZwU3pXRXcwVnhVM3c4SVJDcnZUTFkxWWF6djBzQkJuazZOMDcyeWFJT282RURNcE9Ib1lXUVlrTkFMRT0=",
"authToken": "tMGOUuFT1/W11kP7a6rB",
"transportToken": "MIIBCgKCAQEA0xtWDI1jz6B2XuRvm5fCENfLYfGjFhXyTAibm+vnyYUP+7XOhVtP\nNze7lXRjifSfNarJ20BgizPHQN2HpFGAHS23tJWYS7JRlUVMdejDaxy3JjT+56gE\nezQ4aVhKkdEuEHjVWzQNIMTI3G5wXogtx/e2C69HIzUO7fnR1bn0ZFTFB3hX9JJl\nwysZPxxryVBu+PNp8aGRYw4aHX6pQKvMhtOXBytDxkSJFOdLwfQzN6Nvl00zsq5o\nFoh0ZdIBLtWSJ4CQbqWh9aukbLxws/rF+i7VyGeEIswQh+9RQy4MEgNS+IoMyDC0\nUdctzzAaHUvsXFFRTrXaC6qwzITGr9x6IQIDAQAB",
"contact_key": "MIIBCgKCAQEAwuhDmk5+S3DKCsIPJn+679WSkbvg13h+XXePK/O7GdvZkAwelH/7QsJ3WP3cIXcJ8f8aQkUNx56l0ILjULEeE28EdOGCzi2Ld0ME3i+7WoSkyb+lElvV6hiiTvOKkGLcEbuvFgadnHR++m2IdTMA1IHZhGCHs3CbCbfCvC4kpSrOCMMGrnkWyay5d7Gf8FOXHwCDGQ1akyO6gQFvR2so8vtVOkcMtF4dnv3dg+eOM/W0+nFbS+mPS1fS0SYWtLKIdK68iDaB2B47yAXXJfLC5wyvnBv1aAhi/PyPLqFPTvrEHOVeolRmh4J1JjvJDjS6DJMCTWzjfVcP3vUiX1VYNQIDAQAB",
"privkey": "MIIEowIBAAKCAQEAwuhDmk5+S3DKCsIPJn+679WSkbvg13h+XXePK/O7GdvZkAwelH/7QsJ3WP3cIXcJ8f8aQkUNx56l0ILjULEeE28EdOGCzi2Ld0ME3i+7WoSkyb+lElvV6hiiTvOKkGLcEbuvFgadnHR++m2IdTMA1IHZhGCHs3CbCbfCvC4kpSrOCMMGrnkWyay5d7Gf8FOXHwCDGQ1akyO6gQFvR2so8vtVOkcMtF4dnv3dg+eOM/W0+nFbS+mPS1fS0SYWtLKIdK68iDaB2B47yAXXJfLC5wyvnBv1aAhi/PyPLqFPTvrEHOVeolRmh4J1JjvJDjS6DJMCTWzjfVcP3vUiX1VYNQIDAQABAoIBAQC0MF4vTdncjM183KN9CCEekOgL6xGWokLQzjOCgrW61lFwpoOu7hKwSXBkyWy1U4PSQfFYytZOchEBj7/vXY9ckAoitEllqx2AiGj7sE0ZBgACtDY7nsNIxLVpICY+Dec+TbE0P7F+bwTlKFY7Y4ek7tbVVxidf8EVXtmdd1tRhX+aevJAyeGtpSWEO2Gkjinyn4alvkax2/gk4curmPfuMBnYd8vq8i+k5WW0RQDJiBHx5QQg1hz0fSTFipaFqEhuRH5RmsbIbazwQP5r8Rd1Tvx4NTicasywTv5NSsV6qdmNAeIv3IDNrroqJa2JsaSOfHljfq5KewSQyuZSJBmBAoGBAOs75fnLZaZxdMnrvf5yk0RatRrYD420jzJW6X5J20TUCGNo0PibLs97mRaIajmrGfT2qIWCSPoOViRnXHLfSmb11A4msVBvxfYO3dxBBs07wKhPulMkGaqe1q+/gAb3ZS5XSnIPBEXGnaUdwUwEU1FFwjatJm3S+lQ+nzXGDlr5AoGBANQdA6qGK50iZMcYwBvJkfQEKEgRpc/GnsP06id05ci+qeXvMzu4P5qRkS6lc6zdmLkGvyAX+JQ/PtuUD1KbMA+wHek4sxyJxeumRQE2FSITLWV1GxGNQG6ZN+l9L+g8nPP3WOl9+Pdr1Tavsq+KotUG97O+uwkSR/uDVfHiZdodAoGAGUtEjFqhoIccnsW5lU2upi/2v18yNPOQXkJYMxsv97Ow/zd7GPBe1TKeIH0kpvTOArgvIMQEota9zoZKu5NlBbMzTR49/L84EyBAHPnlCFZ/fdms2FnOZLlVrmoyEw2xFI2QVLlmpTYZJ3MOoOTqLJgKrSRrOG3yOvLM3dRhIMkCgYAE2SzuRubUTqbzDhPGDtNxOm8ZRp39o9KZNA3uHPPrpMAJa3BGWy3JAK7K3ClKuD33bLoNp76c1N1A859uCfINSb9FR3CApH2Lp19Iac4N21ZcTVLzEcF5RbNLePsRWeFUikDUBXcdYK+c8mMpNAgIyoH6788io/JVQ2lBgCVH2QKBgB7ulYlK5rA1XKhVir2mUZxv+tJTHMx1gJor4L4+tGfftAP11PGBIx9PdivnmY2tG03N+kFwo+HGc6IOs3eFLhSaV5KFiaqUhpxiZH/7CzzNTYIxtU+IK18XPuBDtHLuTAVOseV+WghJlCA5GdzJpfNqDHQGJuHVJ6TCLaDpPwMj",
"exported_keys": "a2V5czo6QXdGUDYwQXdubzZkUERpUkNZakJpSVJiSSt3dUdwcU12V1BsNGdtNjRoYThTVzBTdk5oWitURTlCK1ZrSFlyQ21XV21hTHNKclpsV1hESDZuV095cXd3VFNuZDlnbzJxd2s2MCt4WHBKR0orMHF2N0U5QUpXOWhmdE85aytJa28wUmcwT3VIMHVISTgzc3MydmZyTDFwUGJ2RUNFSkNuZW50Ty9xTzlCazZoTzcvbHFERTluTUtyK3BTSk5vbENNWk1FQXNIbnRmcFBUVm53Tk1XZ05oNW85OXJmcFluRVI3UGJhZDJqLzMrWkpzMWMrVmtQR0dlTHQreVdqVWZuaUc3RFlpblRkelRsQ1puSmxWd2JPNDhzaHZkYTZDRjBiNTlqdWhiSCtYY1pHVXN3TDIybUZ4bWpmM0dWZ2FQbFp1dUdVcllJSENsZk9XWDdDL1BudlBiOXBvZjJLT2hPWjh6bEFTN3BTYlBMMWIrS3JtN3pkZTNpNFo0eUduNXE2TDF4eFVOSC85Ui9vSlBBMy9lbEMybnhyRG0rSFpleWUwUE9WdncwZDN5K1ZaclVTY2FBWmVMMkN5VnhZaHpYWkUzeFY5TVFBd3pyNktVK3hlVmtpblcyNjdWMU5WbHpDSGFHd0xmakZ5R2ZMY1gzOW1zVnhwTGs4aUtXb1YyZmVMeVZWb29ja3pvcDA1b2RJQ3ZVZFpOZHpkalNxdkZlNjUxSjZ4R0w2OStHWnZYSXhIVzhlS205aGNhOWVEUTVQYXhBRys0aDJTTEtRTEhhcEwxbm43Q0F4VmFMek9YZmdwLzdaUGx0RTBYZzZ3VHdjR3NJTm5JdnlyUGJpR3Jsa2RvWG5LT280K2tUL2xHRFhKci8zS0lKMmJFOGNadzNSd2hCTWVRUTV2YXcvamR5d2g4RVFlUDE0NlQ3M0JOdmcrbi9JbHk5blZMV2RFUzFLSkZkOFMyamlYbzJiNWxNeDZJZ3hUUVlzYnpDWkFDbEdZTlJKWFdlU3o0OUcvamFWVmd3RVlrRTBUNEwwT2RiZHlvRU1uYUZtejVSQTJjUGh6Mk15Sk1hWHVuaEI3cEpwZ2NBWjJzWTVJd0dLa3BNRnFsSCtBdzNxRWJKdm1lL0pPeE5vTGwrWUd5YTBxVnMrZ1k2OU9RVzQzMXg4RU82SlVKTDRnOEJQMzZnVEh2aGhTNXdKSW9lRCtsV2dSRGNrYjdxUE5aTHlyL2IzNlU3RFpKL2NQUlFxYXJKL3AvbXV1Tk9TdTRESkJIbklJYlBEVmhkazk0SDVCTDk5L09ZcTROUHJOdW9iOERNUUxZZnM3bVlkNW9HYzVjNXpxemJlKzdidmpwMWtDK0RBck1HTDRHVmQ0LzdWRGNPcXM3dEtRSWg2WkllNHRxdVhRNkhiWnQ5VTlkUUZGYnROVVVMcUVYcWd1OXlrclFta1Ztd2FGNlVJMCtSS21acDR1QldDWlBlTEF5QnFUUlBFQ1NjV3hSZDlUQUZjNHpOTytUbStlZFpTVHU4NUMzWFcxUHRzeExwY1pKanlmc0VEWnh2ZTI2MURTOFY5U3JmYTJtTmpuNnFnSXY2NkFOb25BdWlZOFpSemxlcGxyVzdNeDJrZkJhZHpoVHp3dFpOL0RhZFZJb3k5VEhuNEwzVlJvQ0RMZFVHNjRPNTZNQ3hybEJPMUt5RDNGOXpSMWFCRTZEMXN2K2F4Q3JvbUNLd0t6SVJ2L1RMOFo2RHo2eGV6KzBWbnNtTWJIRGVaZVU3c3NqTWNORmw0dWczREdXUnVoZUhOc1E2a0d2c3RPWTNPTC91R1BiZ3ZUcWxacldjSDhHcmlzUEp1ZVAvZjNZMHUxeTJPK09IZFIzN0lqeFVyMERrNENNMElMUjJXc1dEZ09YS08zcTNJRU5xUm5xS0lGRDJGMUhJeUIyWHZ1OVFwUGFjTHNTdTRzMEREVCtobnZwdDI5SEZlR1hPRmpmczZjUTUxZ2MwODJSRlFGSDEwa2NhampZN0VRQ3VJeTI5ZWxRWkNiRS9KRHQyc2kzY1k0b1BwekZMOEdHWm5iZm5KaFlQM2NQMWgzKzk5VlV1Mm9aWXgyVU1uUldFcEdHTmQ2c3lpWUs3MXBLM1FKV3lmOXNVR0M1MHo4ZHJOc1d3akRDZUdGeCszRmdYSDZwa1ZVVEhzMVBjOVJvdklyTnozSXdEREM2STQxRUg5dzdKZWdCQkNKN3J6RWFtaWxKYlRyTU9UVnBremZFbTN4SHI3NU52SHZlWXVKd20rdkJpZkFIcE51aEFSdXRWMVcwZFpsb3JwNThjcDFGMEJNbHlpY1FJa3ZlNFpqS2RqeTZnUUtpMFpRejdRdnlzVnZNWjdtODdvajVrWUtFeE1kK3M5WERqR1pCVlpLRmJqTWpqaXQ0MlcxUXBPQTllZ3RUZnFUWUJpM2JkMjNEYyt0SnBHUUhCWHpESklEWWZOOXpJa3Bwc3FTTEZDV0p3bTZ6SnBuQkNvZXVqNXdIWG1nWmZjM2taR0xYNFlza210L252RDE3Rlk3QXE1RDQ0b21YZ2ZZMzVWY2dsTkg1N0U4SjlBaitFbXBoVGlTL3NSYmE1d0k4SkVaekFKdlRsR3NQUEJBNSs1VUlVNGc3bCtUeDZ0UFFLa2hOd2xON2xtUFFuc2JvbnBjWlkzeHcrM2ZuaGU0Sm1STzB6b3dLZU9yNFVVT04wcFVXQmNka0NBcE1ZUURWZlpXV2lsOGhraXE1QUF2THlnYUNiemlRNFlNMEt4aHdwaCsrSGYvWUdnejZ0dktFRkg3R0liOG5VY05zTXpHWUlDQkRjalBpUGxRdjN3Y1BBc0QvTkhPYnBhSkhLbE9TaXZiRjB3V3lDOEFVTFpzcElyZW0rcGc0MlNlZmFOYldaYVlBYWIvOHhnN2t1andmdFdjU1hjMGhYMnQwbGh4Z1ZpZjVMNk1xbWliUk9yOXNJRVNQMmRPKy9kME9RSndLckZ1aDB1S1NRUm1ONzZTLzhkN0ZZRW9VSTlUWUZPUzQ2R05mQVIvdjVCQmJCazI1Tkk4MHltQ3ptNEE1enFzTnpaSGJRSURlYmIwOVowd1Rrc1RYUHhTNHNLK2prcmlyeVErSnltajNXZ3QrUzZoRjJtOVlYYTJiUWZFL2ZSNkEyTnhRVk81OHZtTFdaVFpIQzN3RWhNWEdVeTljUm1yT3hRZUFlaGI0cUdmVU8yRzdBRk5lT3l5VVhrT1Job294VFA4TGk3SDQxSkgvRnNld1ppV1hhd0RORFBDNmxUdUUwT3kzeFlzU1J6SXk2L0Z1MWNRMU5RakJyck1sRE4vMldBTjd2VXovcWdyaDRLVTFWQXlldk5vUkZGbFBaRkVWRm5SbG1XeTFEWmpQRlNFMGtaM2E5anc3ak84SHFZTXNGU3l3YVBQNEN1RUNwS2xsemRraGYrUm42ZlJLWC94a3pXZTFNb2RUeE8xQTErMUdpOUt6MnJtTUpaak5DRE9nU0FMYUx5T29hbkIvWWJBZlhFeTVvSDdYc3Z1REVJSlFBTytHVDNmNE9OblRHbk1oU2ZYNGU1VTRiUm81OWIvWWo0OFpZKzNZdWh4dDMrL2V3cUcrcWx5ZUg3dkZrQ05Bd0FIazFSaXBUd0Vic3FJTlJpd05sa0NpeVJXMkV4SjdUWUhCTT0=",
"pin": "111111"
},
{
@ -28,11 +28,11 @@
"pubkey": "0364c05cbcbb9612036cc66297445a88bcfc21941fd816e17a56b54b0b52ff02b9",
"ip": "http://carol.sphinx:3003",
"external_ip": "http://localhost:3003",
"authToken": "0stlf6fhD+RoHujVsnbm",
"transportToken": "MIIBCgKCAQEA3al3iGqMBljn5du9HoqoO1chHY5J6cNCdreLcEXDT46vyceRXxz1\nejP+5QUQEKH1LL3JxZ4Mnm1JWhaguNC8hlp4Z2wDf/3K4IYUpoyK+0Nq2iJE3oRT\nmM4Vjb4njIMoNkW+QrFVKH/vwqpbcNdAXIhzVnMk46/1YJvRrnautq5gfdpDgUjW\nfdJVx3+LCcpgUvDNFAXZZan+2EU048rqmAIRSopY9s/Pi4zFRJGxd7cvp5TMdgpP\n0Wj+cn4M/Cde/wriFONqm3ty07rqfACC3Bai6LC/AnCWAbsw2FMuk+ZE0JNtOflL\n2BxIrlvfMn/UwcPqW7AGxDITXHHDUI8LDQIDAQAB",
"contact_key": "MIIBCgKCAQEAxYTcIq9w/dL2yozIFncWl6H6YUEIlr8DYBAImIWnvP+nP3a9BIaGwYhjzsozzztYxU4mEgwN6F0gJet04BSNyAgsQ+mdONtW325yPIrtR4kOthsNsAyzhE6gffnWdzrAGdNjeL6FNZRiRQaKRaNI5uHFeml8LA5POBN1BBQlDZqPuNuoU7iah0QkYEfmK18D/wu6VpvhslmjiplCTga2YOtVd26D5T4+NslQq4kBPN1iuBxWdFLzwq46exB9wzvYVdhm/dZxicTRk/hS10Gz9z6JfxFULEQzGp/ABt5yz9Y6lSKLh3vnvICNOxNAFXcjgzuW9LEEy2X+Labs9z+vPQIDAQAB",
"privkey": "MIIEpAIBAAKCAQEAxYTcIq9w/dL2yozIFncWl6H6YUEIlr8DYBAImIWnvP+nP3a9BIaGwYhjzsozzztYxU4mEgwN6F0gJet04BSNyAgsQ+mdONtW325yPIrtR4kOthsNsAyzhE6gffnWdzrAGdNjeL6FNZRiRQaKRaNI5uHFeml8LA5POBN1BBQlDZqPuNuoU7iah0QkYEfmK18D/wu6VpvhslmjiplCTga2YOtVd26D5T4+NslQq4kBPN1iuBxWdFLzwq46exB9wzvYVdhm/dZxicTRk/hS10Gz9z6JfxFULEQzGp/ABt5yz9Y6lSKLh3vnvICNOxNAFXcjgzuW9LEEy2X+Labs9z+vPQIDAQABAoIBAAjUocrjMRgIAISZurBWbqok0b7bW3jx3ULENL4s64zlmSKbOmQjZ47rfBrYq2xOaO+ZSNZxt4V19GP9nOIPyS7yPphir2bFV6LxmyXdyDH0jLXTi88dIkF+CmrXaqE1/TSqYL4bNnVoxuPzIOdwH2hDG8MXSDfoA96r8AVYqTdsZ2bQevIhAkEG9mAnK7VVPrtu1rg3RRhrESUtIIQBvbnlhK3TJMRgI3s87qwgrRa1BKTrEdSN7L0WszOwf7LFJSB9ht31GjI6DrN1hk3ANrFdwZWOZhSdrgYVi4ESh/CKq3Xt91qOsuB0+u2fpuBKWqXmjzMeo/B5/+ByOOK0S3kCgYEA9LKrPl9LKExtZI5riG4rdg3ntkTGyNHwQJ1xgzeSudWMrqzVCQSonb23lPNfPz1kJnjptxceAAzdWKU3Pk9DkZoCfgSWACASwG7+kQ8b1Cr8sNunN//HtLQoo8GIGNkEJFTqlx/NbmTQXDYpocv4Aow4ephQX/t23RYcCtTLoAcCgYEAzqRXwJMZXGI5iCdZq3TGKLS3fI0HIlcMdfPFkTSpTofw3KuCtihTPJLlLm8AljDqs22HqE8S8E0xfX+NHOrllnLpA2exUHHi6gtEvizuF5PzTZonkHbyvVQno0tGiTnefliO3XfA3x4JA+Hpv9fONLBPYLa78UCmOupGcStDHZsCgYEAxOrTrAn77Z4zmmySVORzzTk7cw69+fYYpacOJk6eoTYdVKR5fBxnpSl7hz6jM70vz1YWnuTXm6q+pguu/VHESnPp9YezPr6Q2JN6ATprZr6BQ8JAO2x3RhCFc+LWp0hdcO91KdDJ/UDb/JkJv87o8wPsn5vbcqJm8VxNjNnaVBkCgYEAwylj13UWVrJOM9E2V0CKhpdnVDK9sikUk7IPvfxGiuzJByDU6sVbF7KE0T31B+RbResEXGmSMXI2c5ir5cvT2ivc9mJQjPGCphjOa+5zT8Fj4L7e7wnoZ/e7F/ZYP/JvuFRbWb9oYVE0on4TDiT7k7eQwH7VMh0k4i+xJ+D8GlECgYAB08diW5Hfr8UTbOnDqm/vXMEIpRSXMcaisw2HmmvRmQgCoXOs+AR8ihn6Rc+pMqbjcTmpp8W2kcPDZDM+ygL62kwBPTibkCEFNLslH0jMe/HHgrxPel0E95oWIDQDcKbWe5+ghZWmcDjJdECf04yI1cenm9xBT2LK35IZc6rhMA==",
"exported_keys": "a2V5czo6QXdIcFBmR2NUbEwxd3FabzZGaFZtNEF1cG9MekhkYVZzRG05dlRKZ05sMis1TEUrdkt4VmZFd3ZuRjNQRnRTS1VmYUhEWWpwSjZ0b2JKdGpEeWJFTndiQ0Jxd1R5TFNSZ2RUc09HWHVPTmFSWksrcWFNNnhidmlpK25ZeVgwSkwwRWx1blE4QWRWMDJWQVJlcFcyeDI1SHFYVWtmS3FPWHRCdW9hNmh5eVZwWksrZHRyUW0xYlRVUTRMVW51UFN3WVgvQ1JkS09wL3g1RU1kYmJjOUhtTXRYK0RMRCtBNWtiZjNadXdNQUM2aEIvWmZtNTBQVzlMc2ppVWd2RFRRbzR0WTRBeWxQaVd6VFJUSUFxcEM0dzVMTHBzTlY2SGJEd2RVOWhvL05ybnBwV0dJbWhjKzZQNEhCanFINnNlbHFrVkFOeDVERm10NUIyNnNnblBUMTQ1elIxNDd6MFJGMzYvQ1FsbkVscExrNTB3NEFJNnBlOUFOcDBRQ0RZdHdGMHRybEkrdnFzaDcySURzNDVYSTNmZWh0T0xRM3drOGdhdEhwcDZFRGxTMXNUZTVGVlVtVTNKZklQL1IyMDdIckhXdlY1OFg1NUt5UjFjd0pTZ29OeE9CRVlEZmYvWCtTNGhGa29BTnJ5V0gzY3cxeXJuN2ZQZm45T29UaStVNzJlMm9IV2hkOHFpSkFycC9OWGxuZ1VqMGQyTmljSHlSekNkT2pUZzlzb1F4c2FzQy9GNkVwM2hmRFNQaTh1K1NwTGE2NGxGdndpV1phT1NQbFVxNnNadEpDaW4rK0VTTzRxUlFWY3k3blhUMEN0Q3cvV2ZEdTluZWg2T2txVk4vbTl4aUpDLzliT0pZRHJjWHc1cjNxMzMxcWNYRWh6akNQajJSSmprYisxeXUwRUg0dzRmUjNmbkRsVjMrWHp4WVE5MkRiekdtTWkzSldPemY0Yy8xanJkaXVmL0hhc1ZTUE1lUWxQYWdQYmgreG5qVVVMcjExZUZUMWhRQXVmaFNSOGNaRDlOZlNkcFU0ejQxR25aalFpMFRqRTl1Vk4yL3hpcVlqTWJJd1ZzakhZVWE4MFFxZ1BtckdtcUVKdVdXRDZJczVNTHRnSzdDYUgxZ2lJcjVYRTN5N245SXlRUVVrbUFZMWs2YWRQN3Z3K1FBbUx3bEhoQjdrVTgrWXQzMUxaN2R6U3M1RjJJYlJUK25UcnNpYUhPM1c0VTBZUWh2blc5akU5RHpSbS9uK2ovdFdJR0hDMVMzZCs4VXdieStHb0ZITE55WXZldVBSMEFWbzVoV0d6ZEpQbWxlczRDSGVReEo4OHhHeFByeGY2T3c2Tm91bEhlS3VFSDJKREttalNYb0hGTGlySXp1ZCtpU0Y3OU5iRHJneGNJVmlDWmlITitXU1VMV2NBR2dJRWVtak5ESGVKQkZ0L2VuMGhVVXNnRW00L1lPVWdsQXQ0R1o3d0tOYXM0WnpkaDB5ZzBpY1FFVlpKQkkwSFhLWi81OHV3aEZYdVJGNlJSU3FZRjUzdWhEZEVidnVQbkdjaWNDUTJ4UTYranBuZ2Q4U2gvd0RoYWU5b25UeFZ5aVVwZVRLUzNzay8xLzdyeVhVOG9CMHdMVG5wamQyVXZsM1d3ekNrMTJJSTFTSlkybWVHOGZhNHN3N3N1SzhjNzhJS1JpTUxsOEoyczk3V2YwaElzV1NLRzQ3bEd4aitWd3dhYTc4MnNLVCtRUDU2d25uWEVsRVcyNkJ3Sk9XK0tjTU1pcFdHM3RKME9FMHRWM1NjYUxqSk52MzFtMnFVNXhscUZKeHlIY081M3k5SW5LSHREV1JLSndzdWRKWjl6OHA3VE9RUEFydFRXVWJRRzZ2S3lyRjJja24xd1FCN0g5UXhkc2dZRzZkUEQ5c3YvMFNkZU1oSytyLzNlN0pVU2l4VEtybTFtZ3NIdDdGdFZhMFVuaTcvN0J2d2ZFT29UTGlBWGpkdFh6S1JIZGlveTZDV3VseXJ1SjV5QkJwQ2sxVHB5eXE5MTJGcnJTZFhDRGN1N2pXTXZrYldLbGJrOVh2Z0dja0RuMFV3b0p5YzU2cjJwR3Z6aXE1UGFFZUdvK2ZCV3ZMNjlod2pGRTdIK3o5ZEVtMEhXRlo0WmN2Z09GOEpBczJRTVF5UjF1dWMrVlIyV2lGazhkUFlqbVF2cXhmV2REMVdPRjBiUEUxQnEyZmRjN1A3WmFvL2xGNmhQS2NEekNETDVwMklidVVxYjJIcVJUVkhjelVFSDRtVkE2ZFdZdzY0elI5MDJkQ0xPb0grMFlWbzhuUVhONUYwSENMYnlscFJCWDllWDBoY3d5N0pZUEk0cnRYaXRvZWVLUy9BYWFWSDdwTmlKUExTZCtrcmVRb1dzL0V5ZTZFMGN1T3NHb29tRzF2SS83QUpQb0hJdC9KekFDMExHY2FoMHlQVko0cTlJVDBpQ3d0WGlaQU5JK1dCMzc2ZSsxYndzemhlL2xWWU5YdGtPUWNISnFqbi9sSmlTRXBFVENmbGczSHhwOUpSU1cvQ3hlQ0txclVTVUJYWWVQOXRHUU9oc2xoT2hJU0tnakg0THNXeEJoNmp2ZHpPajZXMmJtRFhpejBwVWkyaDdiaEszam92WG1kM0ZKZHkrNFV1Mm0ybHBZQUtZNmtOSVdlQVZwekhKci8yWCt2a2dFODFpNTJ0MU9WM0F5QTJwV3RtV1VwT0pIb05tTmlZQlJ5OVNodDRndFlLbmR5d0NlNVZheVdkZVJXakNNampJU2NOYTVOWThydE9vSVNmd1VINnFIYzgzaGdmWUU2NmZtTmNzWS95NVMreHE0eklyUUhOQ2xtY2l3dllXa25Fek1wVkFkU24rWjloN3pLay9uR0Znb1JsQjZhc0NEY0wyR2doMW1uQ0xhdTVtdVdBV09pY3lwQWt5VUp5N3dNbzhGamJSR0pxODlBS2FTNzRnRnlERnRKMUNVY1hYRU40eGgvNkNzTnNyNFBJcnh3WklFeUlHVXNRYW16aFVIckt1M1VwWGowbXRTLzJEUTBwWlpUc3RHaDVBOHFibk1TWEtrTWxEWDdZTjZWMEtRb2FpcjFENXR3NUxUSS9TMGR5UWh1SGUxajZWZGxBUkFpSDBxWGJ5VVFzNUhoV1B0Ly9jVnJGNWFQcFdmSjBITmJRTy9sNjZlR3NzR3pGbjkyZGRQMnhOY01mZGttQXJDQVU2dVRhZm5hRUxEYVZNSWdJOHF0MmExVkRpTEwzdjU4UWJqcDc1QmxtQnR6RU9wMFZIYklCTkNheXUyMkpmajRpY0o5VzhodlpWZjZqZmgvb2pPVGZTdzEwakZTL2NMSTFwQklUNnlCQVdQUVgvSWtDT2lqYlpIOEVUWEdwZGo5Q2g4ZVhjUkd4a0ZIajVJNk1SUVdNSVJCdk9DZFp5ZmlueVA2UGhxZEx1WWszZkNPUU5jN3VTRURGaWVOemtwdVBpbGIzWU53OTFzZGZvbEk3NzNvcnc3OTFLTS82YUNUeGg2aDg1eGVIV21ZVWRSWmVJZWRYeG40TGZjc3dybDJhQmRHQUdxRVkvdW9BL1NUZ3hadmlOTkFvTUxjdzg4MXlkNUpBaFlNeWcyeEpXSEZFOGxCaTBWL0Z3WDRmdEY5UXRkRVl6T21CcXlrMHA2SHdrTT0=",
"authToken": "f70soe/8GbmLjzLlyMHN",
"transportToken": "MIIBCgKCAQEA0tntxUY9hUMSmW1ZL5l1V9btss56bCrqFfWV9+9gaNxKBuW+2LSw\nJKvhKeL7IOfSqK9Lq4w4XsBC1sEDA30W48yDzf/khEKX6gaHQcpHm0hnPViranGu\nUNDOXLk7QnVYN/rSwhOmVowFY570cqB4SBXaIrLX31ytKk6Ni3c/sseM80QuC3lq\nb+rbfTu2fygp3P3ro71WzrWYlw8iob61UWbXXvNqqIT4yEG5RKRqZCqj1VFh9JlE\nCjGfUDqSw1UBdY3sd9QMsHYI2vfn91e3/TdI8rO+8IsYxpCcDt23Y8miwbGlCo/B\n3RJEsPFwJPxBvvvtU9/pU9QoMROIX3qgawIDAQAB",
"contact_key": "MIIBCgKCAQEAmVl0urwfeZLhIQ1sTeIeXGWUCUvCvmN9z6gLnjqYVFmkc2lgwV3VKn8/RainrfWA0VRp0u1OmfcAsqW3i7srB8vtv0S+CXGk8vtJfBl52f2lnpKWUCXq7Z3eFWZi86GL+GHKxWAx+m98qf588/g+UR/VU8w67lcaUEK28f0GqAGsORP+CpnzK0p7gZDkjzBoi/H8LceLC8iv72K8aF0MszeQgsX8dNx6VjPrTnDkAX6ikxcuyeKJ64rPz+RENlrZE7At7Q070fGOVgO7ARHUPK3AxiKDqiHyhBXYbFEFPoKSOPZr9xm8UffQtOi76dwfAhFcp/z/aG8mcP+mle3tQwIDAQAB",
"privkey": "MIIEpAIBAAKCAQEAmVl0urwfeZLhIQ1sTeIeXGWUCUvCvmN9z6gLnjqYVFmkc2lgwV3VKn8/RainrfWA0VRp0u1OmfcAsqW3i7srB8vtv0S+CXGk8vtJfBl52f2lnpKWUCXq7Z3eFWZi86GL+GHKxWAx+m98qf588/g+UR/VU8w67lcaUEK28f0GqAGsORP+CpnzK0p7gZDkjzBoi/H8LceLC8iv72K8aF0MszeQgsX8dNx6VjPrTnDkAX6ikxcuyeKJ64rPz+RENlrZE7At7Q070fGOVgO7ARHUPK3AxiKDqiHyhBXYbFEFPoKSOPZr9xm8UffQtOi76dwfAhFcp/z/aG8mcP+mle3tQwIDAQABAoIBADLlthCkj+3SClbmFaRkAJ+6N0A+nQyECSX7KKAD4rtcZXDI8Qw9EJtiUKXWLJFYgsD3u4f+q6/+g4TH6/u8y7NyxB5PuqN3zL+5F9LQwdjQjz/qd2lyrF7hnuyLZxxl6gcurhaErxHoHwBtLxvqsQRMBIojpwukbV9mRUJcMPFh2TgMZ30t0UpCRPpWaVQocmAAelbtmtGAxMK/8BOq4vS0EquxFXPXBYjSB7oCAU1PcPsjHNAdGykLl+BBymw7WD+7mmJN/nlXiL207HykMhSCKBUJwJnjwYR3N0iD54Wgy5i2k7Iqb25vo3wjjLbi86X869P2DZ2Ta9vWGJ6WeAECgYEAx8EoxuwjvrYy5BgxtJXIK8HGio8w7rAjABr8wMonE8BJONa4rxVEKCmZAGn3pJimuDDuhyS1jxY0XXox7/UEN5zLBUSYohfuGylH0iMulK0oZghXz/hRR9tqCHTLGTDeU9WadBwHweEwECh/csDRAwDdRw/McqETiz0Iy5rK6IECgYEAxIdLKXLCfHukE1sdbQx/yvRQ+6dYWwbeMtklFCY52VGQwzJc8QvXSu0m0kVuGUkzEzcVQpT1fFCA5gCoUUQAPYhctRBNDCEiNpK6eLaGJZD6PM94iOgW9VGqczrmDRUrhq3m+qvsBCDDBZyd6Ceikg+CBWPRoDm9mhT3Fd19U8MCgYAP7oT9EJptPITkklVsjMGxU7wtEuyZLO0ttflQuw7Q0XZFlUKXnD+aYG72jH0W4KHzcNulZbUhW2kDx5oyBD243cWHfwgZbYUtH2a+CNZPP1xIfwPZ73k0HPjhAcetE6u3zgKKni20NeyqbUB0+5HwBmKfp0/sGJLBeTW5X3gtgQKBgQCIlWqUPNCTyS4n0ZwqzJQIDjI2I4CRir1kY2uUjFiKA1jzgA397HfM9/KSEnTJGAlqIk8hPfs6UYyzzOMtz2/HU/zyTYjulBx+Bw2XlWq3swFmv94KcBp8liw690Uo9HySlkvADTnzSH2hac6IqPsgPazkaBIpI9f0vPtX894FFwKBgQC5crdUYkekzRHUnotC09V3BGBswcEdQ9YNsi+I9JrHm5NGaK84miaHV8vK4IL7b8YqJmU6Se40fpmo/3mQ8KRc/3+ievDUrzVqH4WdBC1qWpv1Kro/PtqyhQLAGmNr4yuo5Ptsc5ISbAJ7KiO5luVymp2GyF1ILfU+/pdyGWQKjQ==",
"exported_keys": "a2V5czo6QXdFMTNZazFxdXFmTnk4eTcwMlFreWxhZ2xseDIvKzJQV0U4N1I1Undva0JJdlJCMjQ3akxwWWczb2cyYXlYSXZneWtIYUdmWEpLNUpuT3dxNTFJdVh4dDVUUTFrNXIwdVVPMVpKTEtvcUJZcW14VisvUVdKSzRLVE5razdNUVVscW9DYVcvRkloS09ocnJaT1k5ZUx1eHRnR3kwN2RpcjFSY1NIN2YvanViMmFoZzBqUjFrUCt1bXVncUZXNVA4V3VSNUU3NnFlQ1ErLytPU3h0UkJvYmdVc3N3eHU2MWZPd0ZHd1RrWFpVTU9iRHlnL3VQbFdNVjR5YVdYeko5L0lmV2M0OHFxRk11QnQwS1NWZTZacmJadWxleS8wWjJoRXA1c2lldm44V01idG9wdTRpSjNTcDlMUFUyR2pZdk1uc1dFV2pra2dvaG1PWUJKSHJ5Wm5WR3pBR3I0bzJpc3dacERNWmJ6THp0R0J5Rmx4bW9oTndqWUYzOUxkTE5SYVpicStnK1ByV0tTL3RuZy9SVitQb3Zka1gwbC92NTRBaHFwUElid29ldXhoU3VjY2hNVkh3dFM3QllsdUVaMmp5N0k1NkdFcGdaV1I0WTdBOE5VQzJkc0UwWHF6QkJGSGxIOGMrNUl3S1lMeVlPVkQ4NlFza25TK01sbUR1c2xHdjZubVJNdWErMU9wK2kzcWdiWTZqOFMwQW1GNUs2OG9heVhYK3RSUUxzbFEyM0pSSjdXMWNWMGdCbGdvRFVKLy8vaDkvV1BzYWlXdVRMM0FRbkUvMHZVaFRGWXY0NS9abXR2S29SNjN2RUdVS0VmSVJoSFBHM0ZqNEdqelB2WWZYWktMdmFnbTZVL3l2NUVqMlhQdGRrK3pBeVAyTnM4MGVueHdxYS9mNzdMeGdIZUdNcXdIazdmcVJrcjQ0KzMxdDgvRUp5ZlFuUm53QzBycS9nejRab1d6R3E5RlVacmFsVkdGaDU0UStIZCt2RHlDOTMyM3V1VFRXZ2JtYTF2ODdVS3NOSGY3TndUK1Nhbk5FV0ZacVM2OEFhVS9qSlVRUnkwbUVYbWMzamplRnpxRUFaa2lLYitacmNFUGp4bUY5YjR0Y1BRV08rMUpyMWR4WGt6NkdJYzBhUER3bVJKdXhUNHlKb3Y4RGpTSmg5RUt2RDNXdGNVWkM1L0JhOEp2eFpHT1RYY0g2WElBdkFnanFUampCN0VibFJtemZPTE1qbG84WjhGOHhSd1hxdDNQRmVYdk9ITWpvcjNzU1JQZW5OUlRlOXI5VFdDTGhIZkdxTXdXaXB3WUthMXBVMDlNZGlYaDMwaVVvM3N1MEFFdXlrdHFxajZCcDY3cUtvUmFEcjE3dktFMjFsQkdmQWwzeU1KbkYvQVJWQkVhajhRYk9yUnUzMDF1bzAyUDdWclNGWjlYT3pmS1YzNjVEUHdqV0Y0ak02ZHNkK3l0cE5VTnhRcTlwTEkxcDhERFhpSTU1ZUFwdDhmeXQ4TlF3ZnJ2L0hPNnBOOEQ4aitncGxxajNPWGlsU0g4WlVJN3ora1BrbWFVU1lVTHRUdzI5L29LSWJRVU9QdVNWeUdkTUVCZ2pMYkU2R1BUZUk3T0ZMdkJCN2JBVzlQdExmNjlwNUNCZndUc0orcDAzdzgxVU9hell2TWUzUG5hK0ZBZnFtRWNzTmRpNzMya0p4cXBjTVIrcmhBLzREa01NUTVORWJxY0h0eDU4RDh2Wk54ZmdvSVRwUzVlUjBGVFl1czFGK3pMSmxkN2NhcjByUHdQNDZ2VVVBeEVyQmVtdnpiVTArb2pGSUl3QVFZQlNJZFNjdnMwaWh2ZXVhS2xTcGIrM3JGc0xLNkR5TWtwNTRyUjVlNXYxbjVjSkZuNlBBTUNTYkd3Y0o0RkRkNTFDV3hnQ3VyVEd5T0JBUEFFcUh3dmFPazNuNHNoTUNJcUhYTmpyMHFVZTBwRDZhYkVKc2VXaGtCUDJLYXIzeS9kZHlQMjloSkFLbkNaUEdnT0F1K3VGQS9pWURpMEtyNWdma3d1YWpoUFkrVFFOOWNieFJpQ2lRZEhSZm5XQmRGdGpEM3k4L1J3ZXlHeUNFKzdweWcybUprQlRobUVZbENpMy9PaUlvV2RML0d6bVhKNEM1NEUxS0lzaWpwWU0vNkJPVjR2bFA3RlVzSTFZcGN1TXdLSDBrbStqSndhRXFxNEkxeTVEQjB4aUVCRndYY3N1L3l6TkhwL1NvY0pDNjdhZmpya0J1ZVByMjZRNnlhL0xQRDBBclBoMnRyakJ5VkN3VWRUREI1bHJ5WkRYY1c2SEV1eHJoU3FXdTh2Q2RDMHpQbWlYYWExdzdMUjM3bTlVa0hvcUJyY1FpT2NMMHBwLzFjREV2MmdWcXhuM0FDQk5WOWdlbExZQm9pK2lkUzFTQmZndC9jSjFTYnRXM2JzRmY1aGdhT3BKQ25FUU5RUG5LUnoxQTUrRWRTM3h5OFN1VnJtOElRKzVtL2tpMkorRU5sL0hJWm5ENjh1RVJoOWVrNVhoV0hkWmZHZnNCRXp2b3hDWTJTUXNNL3NZeGM4eEx1VUwzTlgvUWxnWVFJVVpJRFp3RklpZWtYOTZmaUtsYjVaQ3p3YlNrczBNMHFXZ0o0WUsrZGNleWk2anMvTGZTREhFbllFQktMRWw3UlhjbkMvb0tjWW1IeG5mNlFZaW1IN2dkSW5mM2JDb2M1a055U2ZQTjRXVWZJc2xXZy9wcGJDbFFuZXdrYWdCR2pYOXJpSSs4a0YrbGw4RkhVVTdKS1c2WllscVJyYzdud0QydVZwc21icU9HN0RxTzdvRXZrbHEzamRqOVJSSkNEQWgxM3N3YjcyT2JrcndLUEtaK2xCYWtObnMwMkQzOTM5d1dRV0Z1QWhGTTBBOEJDd2Y3YTBoaEkvOGN6d0FON0FkaG14Nlh2S2d3cWhsdXgrditLdEtmbTNkWUVHbFhESHJ4dFpZTlRack5qUVlRRGVjc29CdmRsbXN4QjZjcXBuWEdZZldlOU16WW13cld2cG1UN3VnQkJmNCtxZVIvbjgrVFFSMjAwUEVPUnhVMkZRY0Y2eWpoY0k4c1piVHZ1TW5aY2dBa0dwY3FqZklXbDE4T1c0dmMwdmNra1JiWWN1YUZhNHJ2K0tZWXMzMXh5ZXlNT3JpdFJNQTkzcEJXTzI2Wk54YllLK1UxQWdaUWMrbWRkOVhrT051QVdjdG5WOG4xR1YySnBoRXAyS0QyL2V3VkJvR3FQVm1XQkE2UE8zQWJab25ISHZiNkNZS0FRbnF4ZXhlQnd3QXZ6QjhpVE9GQndDSDJPZERHWjIreDYvZVZ6c1dXbWNwNCtrNHViRXN5VHVyQnZwYnJvSmlSdDRJN3dBcDQzT3FVZXR2UERWN09zN3JQV3NOcEs2bndISE1ObFk2akIrWTlVdytGS0txeUd1eC9aK0FXYnRlZVhuc2tmVGU1cXZSNGhIMlZxS2pDNmZvL2p5STBCSTNCdytodzRYNktxdDhZN2pCeEV4dzVJMG9keUlRaDh4VnJPa1RNZDVUcHR6bXRDR0QrYnBlYUtUSkZLWWhyRkh4MlNNV0cvcWQyODFVUFBEZSsxQmUvcWtNZCttUi8xYzJQTkdtRnZERVNiVGJrM0JSOEdUcERRNTI5ck1sdz0=",
"pin": "111111"
},
{
@ -42,37 +42,37 @@
"external_ip": "http://localhost:3004",
"proxy_ip": "http://proxy.sphinx:5050",
"admin_token": "r46bnf8ibrhbb424heba",
"authToken": "i/0VW+trhjIPzhTWNqOU",
"transportToken": "MIIBCgKCAQEAvzoM8xogMNxAVY4B1hoImhnjtYQDc6V2IrpfGkbYPHWQ5Oj/1T/L\ntlpDV6NeEPBuw0l4tDbHQxcU50EBXQdZeRszdl/LOyTRcrfJenYb//as/irkyjda\nt+QJ5Zsn2ArYfSus1lpNWxQdx5OslfkjRXdZcroyoJgsuoJdsJX+BfKSjnQJpd5x\nu/YpJx0+Q9Qk9Lp1e0ckPJd9Y0U/CuWhHFbbDaQX2TjFNHxBQ1zJjVqOEA4Wnx8c\nbve8ib0ccKy+nbhrBoGKsDM4ei/6+lupHtGJ+CW/ckYcYebBMcOG9979eCp6dRMY\ngBJNRWnIyzAt7RrRu6l7A+nlffeRycgLxQIDAQAB",
"contact_key": "MIIBCgKCAQEAtWUL0Thv4cKuvCGOfnmXj0/wclz5LyHhv5tkCvQK+FtHX+d1xdhNYVuynwDwlxaxK9lGD8YdqWB3Qp4b/9ygrf5Xebf6gxSm2sH4SoqmWKPndd0jE86S8ptbRJdc9bkz6cojkaXTD2rSWMOpP7c/TlZPs8aML73P2tuAfwDvRtD7tYpZRf0M/3HPOqqemBCKHP/I9z/FMkTZEhdaqhJNqq1focRC+j7ku79py8DCjbJVsc3a1UZ06iPXUu0kY1WC8D/kG1KQbY8HeACk7y04/OH24o6nwmKdhorpntS57NaUQLFHv71epdAWSCZW2Rg71L3k2H0CriLu8MfATgMfUwIDAQAB",
"privkey": "MIIEpAIBAAKCAQEAtWUL0Thv4cKuvCGOfnmXj0/wclz5LyHhv5tkCvQK+FtHX+d1xdhNYVuynwDwlxaxK9lGD8YdqWB3Qp4b/9ygrf5Xebf6gxSm2sH4SoqmWKPndd0jE86S8ptbRJdc9bkz6cojkaXTD2rSWMOpP7c/TlZPs8aML73P2tuAfwDvRtD7tYpZRf0M/3HPOqqemBCKHP/I9z/FMkTZEhdaqhJNqq1focRC+j7ku79py8DCjbJVsc3a1UZ06iPXUu0kY1WC8D/kG1KQbY8HeACk7y04/OH24o6nwmKdhorpntS57NaUQLFHv71epdAWSCZW2Rg71L3k2H0CriLu8MfATgMfUwIDAQABAoIBAQCWPMK03pGL4rrmhsSGbB7jS8pSbj7UkrNvBzys9cPAP5m2DPa2jphIcrJWj2i1Os4zCxnEJsqaZpNgUaPPHuTWNzosTfzmZExuEwmac4ujDt29+RH8bbO3zISjItqTink8wXcEQtu0gT0G18duRk/gigwpUeD6CbQGCJc8mYGUnEu9/HZWys+JETL5D61FaCFiU+YZ6X3aLzst6bGD71JKfMAfsGWtB2kOpMgFaUmgtEEzs2CqLV/npVVsZvRwo2tEXed3DfP0iFLvKl8K2HQH8GbBpbHjgT0Q7LpwnKDxEEj/pDzdQUSqSoBdrbBZShpQbo7T6Y+5CmljQrpHjq7BAoGBAO1RfdAacNRBwMYRSY4nQB8YS5HrKcPG/Sm7Xbi6vq/H5WbBlE6K8f6g5koDt9O5Hc7fwZc0TMio5VKpyKEhKyA+0pG5wA0yktFsub0KP0c4rDRFdUk0g8CiFAPsoM0aApqCcwE7WZ8pCR6S15zhlm4vTpmloPmOQx0stBEiT5IFAoGBAMOskMw9POH7E0Qy6ZSMVO65JJyNUGnDgdb4ExgBDlCHvhMTzMY6MJwzTrxaC4DMqrP73oO01KZOuhlFqjmSuGvwIRarHu44xtNEwL7RsHywAN5V9N4Tr2U9T5EBEEM8njM+k7abVqWDHq2RPx2KuBSHjFl8ntHprvwl5GHQFnN3AoGBAJ3OMYX+/wX1jzVl625uZTIIGsA2CriXimKEp+adrwz+NGnm0TKFLDOwVFHlNQjBsLOOkJF2ApTv0kXshm+2uZGglK64QJ/GAGDoFn5A4SD/62p6wWnjVLT0UbDmWWrpH9AUbFrmV0sBo4HEDUHRtBEivfZnb6piUfiFcFtwYE7tAoGAD/VmBdJEweV5R8mjNUNQtfuRmdcIpOeWElM/M2j6ouS/Qs0NmWkrh8HDfScW4xVOIsm69yDravjmwqLk5DcsJVl7SV8BccpdpONpmOZ/L1wnZfq6stYGKwqaD6h3jBRIjsNexrjakzsjaGJ9NEqZAsufTbkVNueJJvVsL/IJsrcCgYAp8MYFKTlVAB5cVKkOY3WBWEel2cjbdnlhzQnZ7QjOasYwFvUEg++nwLUZD/PQXyiJPFFaQw1SIXXP+IQFOyZfwqXZ2qbMPLo8D6D0ILC85ZiV5NU44+waSyHJQrOUbHC5/bnigXwO8v/7WfkQscyMKy9GI7KHJ/P+MViYlyWuGg==",
"exported_keys": "a2V5czo6QXdGdVpOY3RHZjhZRXBEckk1UXo2QlREdWhvb0xCSWZCWDV5QUxIRjVwcURwMzdldThCVHBGQWJhRkxOby93a2ZxVmJveEZ4dVhHcjhJRGJWdW1DS2ZERm9IQ1lnd2Nrcm1qZFJQZmtTeDJZaTJsNFpGd1ovK1Urd2VHWml0eGNFT2FHVGlxcCtSSTlxNHBtUFQ3UzhQczFxZlhsbFArdEc2NTRrUGFJMmpSMUZzSEhKdUFENWZ6Z2hkTmtMekdwNTFteGhNVVFNU1FIN1NzbEpCdmRoeVFFWTNiazltUWVWTVpZMFIyVVRrL0dsTVAxVk9Ib1FhZ2lsU002TSt2S3p4TUNTYzlFWVZjV2lOQTRqbUFCZlBlVUI5UW9OakFocnhIallZSjRYUDM0MG52OWpjL2pNT1RhK0FYMS95cUZ0VVZXY1kxWVBhSXd6elIvaWN1UWkyK2dBb1hBQWZTTWtKbGpnQVA4Z2EwUk01aVFpMHBSUnRCYlZnTXl1NFVsSDBIVHBGQ1g5bDRTV29QWmpsQmF0aTZ1d2dmRWc2RnIzMTNDSzRwc2xYbWQ3QXNSbmcrQ2JyMlEvbnFTa0NCSjdwUXFOemlNWkM2V09rNkdFb1RFQ0pJMUhrZ2JXZnBBM3kwRkNrMW1ZK0FoRWRqdXBMKzV4eXgrbDZWUnplRksyOXVmS3ZpNDhaNndYYm0zOUJucjRkL2FqU1A2dmZUcmNxRU5BUURlNFBXUUxEMFVGeW1POGI4VDZ4bjEwSGhmanVxWFl5S2dTK3NjK2NmWkROd1FrcXEzMnhNWmRhYTFKM2VNV2w1Z2Z4SnlnVHF3RjExK05XbTduZjQ3NTZTQkRORVd6U0VaUjFMZ05rQm52TWFBOC9pcG1JTEtpSzV5T2V0SWVYa096U2hOaHYrRU9JRjRnL05pUUFIR1pTOGVyMFJ6cUVmUDZpUmhiK1lCTVdXVlVuMWJzcGJvaVhqajJEcDVtNml3UEY0Q0M4M2UxMmthWXF2cWkrRFpHdmtMcXhZMmhkWnd3WXRhTU5qd1NISlRYZU53WHFBUmJ1dnY5RnQ2QnpMbFd5S0dIZU1xdnkyMzVqdkNvbm9MOS9aaVdyTktFbXBLck5hWWhhdW1DVCtEMDVJRlhlcUNjOEJ3WkUvRHY1WUFndEFaNkFhNThtS2ZmUnRlWmhBcFhkOXRkN244WXlPTkcwblBaRlB4QnVKRHB1QUZrSks3dkJudGhKMi9GZDNYd0JtcHFVSUdrcHZYL0xCUXlxNE8raHBxNCt0UFZWN1p0K3BTNzhLaWJmRUNwZnVHaWhSS3ljWDJSRmExVHhDM29keFFYVnB5Zm9zZTFTazJscS8vYkNtVGV0V0ZEanN1dUIxUCt2em1QY252ZDFzcFgzeHJsZkpaSEZEblViUUdKN0RqbWFzKzQwbVZjRnZOenpxVXNhM3FUbmZFVmJ6WXpLTVBza2lmTmJZRElzT1FPUU1vdXdsM2U3M2hXdWQ2QkppY3JXOTdtbkRHdGpMZlJTV05aTjNHTlRJRlVqRVJ6a29vdmRNTkZEMEpTY0ZLNkZxdml5eDlwYldHZUhaM1k3SHhIeGIvbllhdk1ZMU1uaDM0ZTh6K3ZqTFc0c0J3ODRmKzVPSmFoLzlYN1JLUVJwWG9pOUFVbW13M3o3dnQ2NlVrMDVnUk54Mk1IeGxzcUVLd2xnUkFkUTNYVTlGRmVaV2hMTWdCeU9GejlFYktleE5Jc2plQzBIYkZqTmRlTU0xOTVmL1hWd1Y0U0xuWHBtVWN4NGtJNW9mZ3Nkd0hXLzNQSnRIT0N2QjhsbDUxNU5GT0p2b0xEV0p6TjlZM01kQXUwems1dzVwN3dnTEFHbGxTWTVaanRSZ1dlY1N4dnA1aEdGMU9zU0pJWm1JK3hEWm5xTmZ3c2lWbHJtOUFRbmZleU1yRzd2RlFtRDdPTWVGL3hTeC9SUGFoeHFOQmFhUzRqcEJuUjJiNCtFSGdwMDRXY1BhUzBNYzczWHNBSkNIU3FuU3R1dm1ScmVrazY1dlpzOTJ2NzBCRS9GY2ljMW01WHp3TGtuTUp4enFuVlpPKzk5ZEJVaVlCTmY3bndNaklnVUxhWXNrU3RyODI1YkZBdEhjZkpBakVodzdhZEM2c2VNckZZTjRMRkN3TUJNUnRyVkxUWVFXRmRFSlBXU3ByMWN6TE5YbW81R3NORUlOeXN0NTNKcHVGQjBQMGJCVTk2WjFzUWtYQmFmYnFxclh1eEZWS0lHbFllL3pUak9zOWVScGlkRnNwR0docXhvbEdtMk43Zktxd0lqOUNmaFFBU0dRMXNwMHJ5WUQvREZqRXFPKzU3cjc0bkRwUnpEKzdqNHZ4Rk1pMU91cjhvWE02K1FOdGgxNWxkcHhHZFpPUUZwcitBbk9vWU5rc1RnOG5FWTVGSVpTYTh3aWpmdUJBUFA5ajBzOUsyZElnNmpqK3h0a2lRdEpYK05icTg2R1duVStYaWtYazBKaGhXYit3RjJ4WVcvTlE5c0RXVVZjeWxlUXN5QUtjdmhTVFVqY01tMzNrYTFaZnF6WUdEc09CY1gyTFNHWTlvOEhUQitvYjBKMG5hZWh3bis3eEYwRnQxWEg0eEc0bzNLVkphdUJZOGRJOU5EZ0JBczZ6REllT3N0eU5CNVZBeW8yMHltaTBqQWM4K0I2ZUpIdnNoN3dGbldWMmc5WE5Obnh1YlNUU0tVd1FiZERVbFdGOVhWbStldS9qOEtPbXluZHhYK0FHalJLMloycVpucFlvNWtOMU5ERklKY2EzdCtQTEZTNmVLTGkvR1ZVazNjeFh3bkdTWm5SWW9qSVhxWlArb3I1U2lsU1N0MkJpNDdBWXpsb1d5aGh3cm5ZNCtJZG12KzhIZ3duK2tLeERzeHN6OXhiNDQxMUZGZGZYam1Ca2NkU056WlM1S044emlHSVNRZFhrZW8rMUlHSGMrZWt1aGxBYWpTaVBuSHRxQ202djBpQkRXSzJMeTZEUUQrWlBreXRoRFdmZEt5SHFSREpublVIQ3VUdVFXSkFrZnc5czdsYWJ5Q0lET1lnZmZPdUw0VmtWVmpNWkxJdUY0cTVISnZFeENoaC8wY3plaWNFUVI5ZHNMWU8yWnRlMUhPN3BaSEY1QmhGVFFHRHVXQjNoZGVPZmZlVENsT2p6cXh6eDk2bTFxWXUwMWtESTNEWlZENGVGQVF0R3lJL1UvZWc2Q25FM2lDZnFzOG10ZktSNm1uNjY0SnpJQStWaVRla0RKZFZmd2kwNU9nQWcySWFUTkFjaEhNbWI2TlJRTHFCR1hzTW5UNUVwVXR0VWNYNnFuU3lHOGdYSkJoVk5OWHRuRERoaC9RV2Zhb0kzVlVFUFQyRDNXVmhNVlFIRWlZQlh1Q2VDcnVScmVjaEx3OE9LSVprVU5CeWNBYk56VVI5MW1oS2hpUGJPL0w3cUo5NUpudVlFdkZielh3Qk4yMWFzTGRIVzh1RXZaaVVBaDB6WDY4aHNOVnQ3TjZGUlhGR2kzLzd4TEpkSXdYb3hOSm1iQXlNZDBhOU1zTGxIa0diTit3SDhnUGRIVWNGOTVnRVBOWWIrdHVCVDB6SG05UTdRU1FybDNDSk5HMkdzN3ErQ2lMZllUMmZoUEpONkMvMGRXQkxDMDY5bHF6ST0=",
"authToken": "/jbGaLG/jViZeG5dPq+f",
"transportToken": "MIIBCgKCAQEAv85pKAmP8RC1LKq1FG8acSLhCaot+dSEbqPQxCsWJNdzyIeg1D4f\nwH6DSD/+x/ARlKVF+eLwUpVWqVFo+GbpCXkI6emnYwPDwvqkEMu2i8NX4HlzQ9ZD\nDsZzuYafZLBSeHQtOdqBzNEIVHI9tic5QjaKGFGSWjNegObh+vdRJJhDcT/lEZUe\nrOKPHzXVZfTGqWiNoUOZh1jOuJC2khJYsjGjtWutp0kbnB7hc9r0oCtnQ/ebu3sF\nUi61GxPJtrW9Ihw/jfnJN3DBV6NukLh40FAfN+0RbzAtsG665gWtxAzK8+FjL4rq\nG8tJg4cggC1rWS7hxSddc5XjANc6kfBvYwIDAQAB",
"contact_key": "MIIBCgKCAQEAqRulW+eZIOXQ6XzrSk3prC/n5NwemKYozC3D+QJteab7UDXkhTZ2wXo6ZHAOaSD0ONCYAgwk76VPQUPW7v2F9NNFPnxHAzTsG7SuM7wpPH3g7qK2oyE5VsD3og1aJBwmfH1bOVxlrhnHc+lBiYcW9v5bC3XJMVaZntmITC9ium5+ThOXaerDgQHk54kdUSH6SxkC87kZj36WqU2pId9lioLLVgtqAufZjeOpX5GbBLzFYN/SKhslGbXH6z/PPczHsIUedeSQX8yJ2Hh3ROShbfK+7YTYdvFWSMdJVSwXmHfMveovqbwDzrGrPAO91//06259LjU2TkiH78FWXlcGfQIDAQAB",
"privkey": "MIIEpAIBAAKCAQEAqRulW+eZIOXQ6XzrSk3prC/n5NwemKYozC3D+QJteab7UDXkhTZ2wXo6ZHAOaSD0ONCYAgwk76VPQUPW7v2F9NNFPnxHAzTsG7SuM7wpPH3g7qK2oyE5VsD3og1aJBwmfH1bOVxlrhnHc+lBiYcW9v5bC3XJMVaZntmITC9ium5+ThOXaerDgQHk54kdUSH6SxkC87kZj36WqU2pId9lioLLVgtqAufZjeOpX5GbBLzFYN/SKhslGbXH6z/PPczHsIUedeSQX8yJ2Hh3ROShbfK+7YTYdvFWSMdJVSwXmHfMveovqbwDzrGrPAO91//06259LjU2TkiH78FWXlcGfQIDAQABAoIBAHqdiA2WZOp8mDjkEbrDuX3XEn5XuHuYZxZ8zI7d2sENeUWUfgi1D/CDjplKwrgpY8taPA2n/pQgudGpvct12c5F7fw7okXJ9rS0EmeCtCefYhvFsUWhDnE/444FvmlWW/WB80YpH7TYDk2WQKXWZKlcjmlF00bJ8wNB2VjcNurTiu47c3CODlKXPtM04tiqEyGvjbvqBGABOC+sj9rXOgoYuZs+BqBZV4p7IfEDixZke6ltuEH8gXotHfl9RoG0Moz/J6gipadiqz5GDlu9XUKfIbsdSiko30nwdU7AV0VFAjel12Dzl08peNja44yoMKUL/9NaoN7HmB8a9naivGUCgYEA20JGkNVQQMh/wV9Q306UQ+rqgH7FFaqkfH7W9h6t34/GjTZONO1SpyhHLJ84rut1+P1vuZPOKbeJEPSo2tglICaBp8yJNWDpKAvmqvhBjSss1a1d5Yaz6DmVQOaAcfH1KJbpZdHvCU83v8nmUJJwKfrf6RbgOeZXuaL0SE4nphsCgYEAxXIBzTi/QhirP0ed1KLt2EYlfo3NA81gT2CCtyy5TlUDC17HMNZK8ay0P52CpYDvr2ZVje4M9kMJxC+TS/URIaLiCt7Z7oARqT2ayTwuJbtjPZDyFk3Dfa2fJtkVLHsf7qDlb9fyQeGaIANx1qvy91y7GDaWNYJn8msPpP8bL0cCgYEAh/Q/hz0Nxy3Lsd7laaHy4249vDFfCYFG/v8zUWdSjwY6qoMa2Uyy7H1YLL4JysSr4Rlc9qhEtK9eaUobjZ9q3dWinaaBCb0utasze532H4++/DvEtjbhRUS3XIfQ61aJmoKA9KbI3m/ldKG/kwRKUm2B+6k4ng5LJQt7B36WrTMCgYBKpXyK4t5kFcGAbgn8nxB+yJ5aRy/wNRApUlp4+B6iv78j6FQ0YX/5+Io41srS2XlEfdLwksQxwkyJ8Famy+MLLXJ6G6CW67JBornHRMpJl5vAZfEwf3veIurdnArGQ1JiPFAhxamgQLOtUMAUIfP8kwFk+RY26rNz0ggbIBtd9wKBgQCh91puxVxze5c03kl8K47RTt7dtpEZGFSn2fSwwd4tuG2uU+ytozNkAKqIDBeA7TmiXVy6GA5M2+LGnSc1fhLOGyCa+OLwsxpt6LtPjCsyGAIHO9NLEhi4wQXgFhFxQz2yE3qDAxUf3vNzraAkcnqAc/t5lgTwur/Nxo+RdY1uPA==",
"exported_keys": "a2V5czo6QXdISTJtZGVNd0JVUUlHL2ptMndWZEhaYWF4b1dBMEcvd3h1OE9NdUNoWmN1c3c2SWVJdGhYVnIvMi9Fc2ZmL2xHbktHMXZVRkh6WE0zSnF6QU1ZYjVNeEl5Zm5PbTNGUzlIZ1lPQW9FaEgvTFBQUEM3dVFDRFFpY2hxTjZGVXFFWjl6eWdaSWk2amxVNjNZYUR6M2hWNWVOWkVsb3MwYUhleWhheTZwVjZybzVSZlhIaWo3VUtWbVRodGRFNzhUS3YwR0U0SHlqenVwZjUzYUc2Q1dJWnZjRy9pMW9qMHBOdlpaL1RQSHdQaGVRV0JoaTE0UTZ5S1hxclo2QktuaVNYVVJEazFBcmdDbE9YY0RNSmd1Y2ZpSlJ3OE1NdTJyUllWRHgyT2hubm1Yd0RQRW1mMTZ2Ulc0cnQ1RGMyNS92d2dQbUEvU29BZGdyYXp0YXUwaFZlSXFMT3JXZ3lmRDRTMXhnenJ1NzVUTEs5VHRHeW5wZWZDVGE2RmlHakpjZEdiNDV5dEljZGllMEsvU0x4WVV5ai9NaEp6d21CdW1yTjBPMThHWDVBNHF5VTBDdFdicmNsZGswcmc0N1lENXJ1WDlQNEtGQTZIVWRGcjVOWUt5dGlNUHoraEVoQVM3WWlxeEdIdVJacm9Tc0FLTmN5NnpEYmtZQWdCTWg5dCtzSWh5WmdJSzgybEVSTzk3SGxPd0hZcmd5L05IR2N0UGNReHg1L2tnOEUrdFdwQ2xQSzY2S25CYTZBbEo1K2pIa2k4VUxYSndpTjJ5SWdOU3JHbDdxb2dtQkhaSjBjM0hzbmcwUHNwdkZVQU1RUlZ4cmlyVUlDY2pmbUVYTjZBeFFjVW9FaVJWV0FRTTVDZmp4eG4rc1o4WTdDdlhReHJqRzAzekRjZmlYVUdSMVJON3B6UzI3bHo0SFBoenNVeEloOWhpMnM4b0szOU5nMUlPSVQvV2xHaFROdlA3Z3U2dmQySGpzUkYwNWl3RlVVZVhFVEF3VmJ3cXdST25zTWYyclI2N0NWYk94WWVWWjNPNndhTUFpait0OE5zSDlQblNZSTJLWHUvUmtJdGoveWR5czJKc0p2b1ZLdmNMWmVoQVk4VjB5V2ZHRTlXNlA1d0JtV2JkZTlFWDJNeU1QVG5pdVFxemNTZ280NG5vdWNzaDd3bjFkL1dBVlhjckRtTXNkY0dTei9kRWJqQUlUYm4yemhncDQ1RHVoY2F6SVppN3ZYTFg1WWpvY1lxVTU5dlpkbzJIaEFjSWpqb1ZnVlpPZ055bUxuNFZ1eTZ1MW0wZHZCWVREdnIvY0dta001SFpHVFMzMEF0c2xSMUxTWWluWTNrVjBxWE5rM2lqWVBUR2FXczVTUVA0R01SR1lSZUMzVUY0Q0E5N2UzbXpzTnF1cHIydUZBd08welNjTmU2dlN0a29qNUVqa3R4RFIvazdJQTl3NWlReWt0OXp3TjM5WFhWeHFqK3FYMTUrYXJJZCt2YWIvYVhCVlJBb3BKRzB3L2o3KzVJVU9JV0hxaUYxTXFRNUVBek9LQy9MOGJQZkYwTzlrVUxqSDJIbVNlcnAzR0lWelQzdWNqeG9Rbzc0ZVJhV05UN2ZTNzIzU1RNaHppcm9pbVFJMFUwbm9mQTF3ZDQ3a2ZFQ3kyV1FsdS9CMHhJTFBFdU9sdEF2U3R6OFZ3OHBySXA3cXB4R04xT2F1dldNbURBTy80OGYwT2oxczRNTUJub0JDbXNYOTlMWkJVdWh6ZXZpTklkSjVDd2ZWR2luZWpCSDE0WDA1d0lXSU83aTk1SUFFaUUzMmNwRHpKanFmZmtTM0dDS05tNHNwTUJ1Ny9WQXNvTkVLSVJwNTZBcGI1RktOcW9rMHByS3JQRXlZY1BiZWlJQkZjVThNVDlQOXM0OWRvbUpEQ2gwTWxkZFhMSWt0Y3l1OVkxbmlvRlF5cUkzQkoxbWk0ckM3Y0NIOXR5NzE2ak5SNXhQZUwwYllmdWc5dTlkTGN1Y3ZsU0pGOE42QXN4andMU04xbVFoZDhLUjd0b0FDWWdveXJFdjIvQTc1aXJibmNrWHNzYUxkNjE4aEEzREJFTWhkK1hmUjdPS3BFT2djSUh0THlnWHJJRlpFak1SNXhEcmUwbzFzUDlSUnh4anNYY1pCNWpKSVUvQmNVb21veG9xT1g2TUNxTDNaVXFhN0N4eGZLaUNZeDZuQjB5QmdxSG9jR1pFYmFHYUdaeEtxZENTWkJRWEdsaUd6MmozR2JWd0ZVWmRabUNpZzhROHdnMlo5em1nTnhQM0dDNlVMR0JibmU5RVYwQzczY1VqaEdHU0NnUVcybkxUckttenRUc2tsV21XajcrWmhpOWcweXdQUjc2a1c4NTE3Yis4VDZSVkJOditPblZJbWhpQ001MmdFWDNUbjRCdXJ2NGsrM010WnFDWlNVeklSbkdaMUhVU3hwL2k5OWJBOVBZcG44MEtJUlRtU3dpaE53WC9CeVZrS20xVkFkdHNIbGZFc0J6cUlUdFF3UmdzOEdmQkdJZFJiN0cwanZTTTBQaVdzVTVUNjB4cDh6emtOZUN0N1djOTJQVUJBT2N1YUh1ZXRRazFRY002bkw2TjZDYkVPUkIvMFZlWVdIQU9mUFMzdmtWRExlRy9jbmp4UXhGaUd5R2NONnZuQ0JGNUp3Q3IwbDF2TlpCMXNEOWkrR2psK0VVaXZWTHFUWUlIV3M5UkVaQUZhZ1FuNExKRHRsZVRlWEg3clh6ZnpGS25xSXNBWWppZE9McFVna1hWeG1SRVI2bWZLOTBjOGk5emI3Q0ZKWkt2WGZ1b3dpWEYrQnBlK3ZnQzE2OFM0YTh3cDNQbStPZHhRN0loYXNKSE5WQkFEQ1ErdWJyZVZsWk4vTSt5cVUvQzNJQU1PbWt5R0tkSURkNEtqQzFFYXVOY3p5U2RCTkdyUjlLOTRYSWRHVUhmczFuT0VSbHd3RTZoRTBNMVFWY3RlOG52ck5RdkFFR2xqR1h2SU4vZlBKZzhKN014dnZtWnBONllPYmNSK1ZzcVdYUFpZcHBqQWRRUlFRZzU2d0ZkbEpCNkVGS3ZYV2oxRENTZmc5akhXRWdFSVRDaVlsUnMwdnZLbzdrMFcyekJzNHNFa3A1d0JtR0NjcHM2bzFLczZFdi84ZGhTbHBxL1RHd3JEQjg0RkFyM0lSNHE4QzJWQ2x3cFIrdmh3cllGWjdSdVBSRmkwSDRjVy9PMmZhdjBWTThGYUtObWpaNlhqd0NELzZ1bUhacGdIRElTV2NONDdSaGU5WFZwV1lRVklFZVI4aXlZKzhWT00vSitaSWJIT0NpS1NMdVd4K2R4ZU9uSCtlS2NCWVFDcExqL1dFY1hvMXBYby84TmV5VTZkdHBMYlVPUldFbjc5Rk5YM0VkZytsTkpnRVVqWEN0R0M4ckhGU1FrZUszclI2ODRQeWYvK0VqeWlmbGhuckRoTEpPM0tMa1hlQXY2WHRTSnJHdmtONFdVaWJ3b0JYSHUwZXR2djVjbkNjTDE5UG15THMrS2xVUmRuL2hMRm00U2tnTFFyUU1tRG9yUnYrWDZPeTFqbmdwYTFKS1oyZGpRSk9UWExhQmJHSkJKVXBaT29nY2p1b21vVUpiMEZGWHU4REpXQ1RSakVsSFk3ZGRzTEsvQmF0az0=",
"pin": "111111"
},
{
"pubkey": "020095b6e93fbd7ae89e760dd6aa9674af79b817f6e6cff9d2d9f4e7da2df39bed",
"routeHint": "037ec785c6004d512ebaeb0020f81a2bcdb6fccc9539f7b891f704289ebc65a4e3:2199023386625",
"pubkey": "027c95215f16745999d69cd473ea4b216debdbb5074e53107872ee48f950a5135e",
"routeHint": "037ec785c6004d512ebaeb0020f81a2bcdb6fccc9539f7b891f704289ebc65a4e3:2199023452161",
"alias": "virtualNode0",
"ip": "http://host.docker.internal:3004",
"external_ip": "http://localhost:3004",
"authToken": "uw+L1VUN7S2yWOXBLJ0h",
"transportToken": "MIIBCgKCAQEAvzoM8xogMNxAVY4B1hoImhnjtYQDc6V2IrpfGkbYPHWQ5Oj/1T/L\ntlpDV6NeEPBuw0l4tDbHQxcU50EBXQdZeRszdl/LOyTRcrfJenYb//as/irkyjda\nt+QJ5Zsn2ArYfSus1lpNWxQdx5OslfkjRXdZcroyoJgsuoJdsJX+BfKSjnQJpd5x\nu/YpJx0+Q9Qk9Lp1e0ckPJd9Y0U/CuWhHFbbDaQX2TjFNHxBQ1zJjVqOEA4Wnx8c\nbve8ib0ccKy+nbhrBoGKsDM4ei/6+lupHtGJ+CW/ckYcYebBMcOG9979eCp6dRMY\ngBJNRWnIyzAt7RrRu6l7A+nlffeRycgLxQIDAQAB",
"contact_key": "MIIBCgKCAQEArF9zcpdPzJldC/jMVuVts4iZ8kEZcQQJRiul4rkFv5aAVdsR2qhgyp8r9RDBNsg4Lo7HHBrW27LalEzGzWvjli3GNxuS4QJVHuD7d0nnaBBq3TH3pxyE5EgdKou/lWtKGXbt567NA9Omyn+Leimk112C1IthIyh9ZEoGt7C71Rxpz+4BXHN6dhHFkNaJwDzNMrbmO1DNbaUVB7QqZICxQHCVf56ciQxgcJV5UvftcY1Z/khBiBXpn+38wSUjLcRHUSTk6F93brQRb39e914IYB3KtCub6ZPIAb6u164JHd4kAOlhKVqo07n/46pChfHvy/WxJRN2w26rJF8q+9wZKQIDAQAB",
"privkey": "MIIEowIBAAKCAQEArF9zcpdPzJldC/jMVuVts4iZ8kEZcQQJRiul4rkFv5aAVdsR2qhgyp8r9RDBNsg4Lo7HHBrW27LalEzGzWvjli3GNxuS4QJVHuD7d0nnaBBq3TH3pxyE5EgdKou/lWtKGXbt567NA9Omyn+Leimk112C1IthIyh9ZEoGt7C71Rxpz+4BXHN6dhHFkNaJwDzNMrbmO1DNbaUVB7QqZICxQHCVf56ciQxgcJV5UvftcY1Z/khBiBXpn+38wSUjLcRHUSTk6F93brQRb39e914IYB3KtCub6ZPIAb6u164JHd4kAOlhKVqo07n/46pChfHvy/WxJRN2w26rJF8q+9wZKQIDAQABAoIBACX1Xxb8+zWzECpyv4zjOSUwD7apX1Dj8qbhNcaXuAxYuCov896S9b2pD6UH64SE0tpt1qr5vhbja/78aUsTVyrbKas5Bz9FpDkIklfSjoL8GoxbVI4YWatrtgCIhcgBuG+jIQDEHaGaGkC9lZlxUjua/BSSHPIBGJvdMV2CLdrf6mfvzUAMnVx2GIuyTOIojbVnSRab2TJk0WBE+L40gEq8Pbmz+MqdgtkRqAz0MytSQG4DU1HzNwF5Yw+ZnYJkNeuGntruoLEw+V2DDL37r+dFLYMCJ6qQX9O1axEioboYAJfQ4vMx2WLT1Aa8OEoXrKcaJWgwOuT1VPmD1HlOFgECgYEA01rohVk5YF1f8A4+XlQ0kqr/JnBITxinbwvP7ffjL0U9HItb5loZ+GkkeZtMg7P0S0Sf3l1Jwpicy0syQlpx/5OeCTu4PHx1id2Lz+mdhHLEYr4cTbM9pBH2ZYhNwVhB+L6AsvSK20xnN1xrrs6B1g5r+ONV9q2KXRzgLWhYkt0CgYEA0MiQvrYjcVmgbrzeHpJAJG3NWIWx7wmIFSYRM9qABIyTQF6pH8mDeu2I0cOoAU4/Kfd2aZnvwQ5n0V9Nd1FN4Ccqt+LoBHUNhr7biVvvYdEpW1QCD4wwfh3zcqFwaC9My54N8/O7tnTsxcleYadC2sFkCNGIqALfTcQTdfbNnL0CgYAgCXGhdOrbjovSSXZuufjWGpFedDqhsqz+ih3UhnSrX6VpxD4D5rh1DQr4W+/3LrnjBt3syNs7YgKyVg2iPS92fBvCboj4sizm3uwocdLslrDp/sMvi/HWAtsEfOq8WfJ2D/pWJfc+UpB6tcmkz6yik8EOEvee0qNchdn9SAnVCQKBgQCeFe97aABIOHwAvWNWNJj6vGVKzNigzU/L66oE4EIkr6hjigl29ydl8euyIPraGjw7c5OmfBeMz3KOlyHZ4accvatb1ySlE1htmaAzTnhgUXaGH4L78MNbCySlvFWXnZEBcCjSec+9ZKVPUZz0RiiZ6OrsvnNB/ALHKFsv6/Nd5QKBgFazltQ/yd1omDA+f98vQuLx1/1qhcxlZ0E6IalcsEvljkS4iAFrKghIRJzotSUmOWnMvMyHd+GP0OkRpb2czp32W7xIYZMrjfzNKye2YsC6Ls8ehAhoxlhmM6Npd50JQRs+b2RVgY+fgc2Gy8r1zpEfZg6QA6X9Y/xdX1U2QQs0",
"exported_keys": "a2V5czo6QXdHSytJa09RQW9IV2UrdWNpakQwcmE1SHRVdXpranUzMGlnVnhtMlRKdHEwR0hqTHhRWkxPdk4vckYrdnk4YitpYXBVTEtoUG15eDE2R25DRHlPRUtITlVrdjExcnFaWEo4RWNVKzAyQkZDbG0xMTFsamdYVDZRa1dDVzZaOVl0V1QwTW81dEgwYnF3UUN1ODZVWXVpdVE0aE9BeWNuVVlSU2Erc1RrY0pEV3E0cmNBeUhnR1ZFRklwZDNoZk1mU2N4elZtOUNsSDFUR3Z1ODlHV2ZueS9NRjBubGtlM284Mm4yZ0ozOGxuQTJDaU5wYnpTanVKdVd0SVpwRUtDS3FrcXh3bkdkRG12WUxvRXJrRnlBOXlkOGtvRWhXWDZjdGpPOE9CejVlc1NweUZtdnBPUHpYTElmZUp6Y0FWc1VWWVV0MmNxSzRwVGp4djI2ai8wTU45YkhuT1I2THBoL0s0dUVnR2ZRaGdGWnFZcENZV1U0d0dxWDljVHVVZzN2NnROajlaZWt2aVp5WlJ2N1lxbFR3eGVMWlpXd3IwbnY3R1pRNzFTM2Y0SDdnQUJPT0hrTjBrS3g5NHRmMTZHMHZoTnFKQjJhSUdKQzZDUVlMak5rOGdqN21lOUd1b3VwMlNFa25YUmozNmdrL1dOcFIxOGxWaWRpQUs2ajN4YVpFUVlyaGtkWW5wV0FCTTJCQjhwblVtQjZJRzhuTXd5dUlsd0dycVZ0bEZETk5GUmRKczh5eDlUQU9vNi9Ba2Q5VFJRRFArRW8ydDJhWVZZb2hrY016M0UxT1J5dzl1bU02R1pWTS9VdUpPYW1RZUhjNnNBOWg4NGJBRXVyeDdLbUtpTzFyZVRsM3pmQ2tvTDAwdTNCS2oyUzBKTS9lRDg1RG54Q1pSdzJnUXZRQVgraGtSNHpra052ampQenpqOHV1amNGdW0wY3Z3SC9TMzdUcVpsUGFWUnR0ZlZtcTdIa0pITUR5c2dnNE1rNzFwSEo4aGNwcG1yQml4Wmp0b1psbUJ6Mm5BbllZRnZ6MkpaMTlzNnBVMHlMZG1tNS9EeFA4eGNIcWNhQTFGZ3c1SHVBSUFKdk1FSlVTMjhXZHEvRjhqM0VKTERFQkV1TytqM05RY0VNL2RPM3pxZnFIdVZTNmFoY2crL0JRM2hFNkl2MURMcUJSNGM1TERzQzMycXlVRGNIUE0vSCt1V1hBUHZsRVh3a0N5ZnMxRUlrNWJZUXBlc2RxOE9CQkRtOENRQVZTWmZleUNTeUFxMm1Db0orN2RPaW5BUnRLZHlqeTJSQzNkSjRqaGlXaGs2V2J2VXdUcUNFMjBiQ2ZjQlFmODN2eWxBWVlZQmZCbnFRZFA0ZUVBZ2JRMDNQUjVyOUNsTUo2Nk1IZmxza013NzFnK2Y4Mk02c1NLY2pHMEZ3aGNjQ1FnYzAwdUllemxKTk80V1cxdlRORU14enA1czZhMTFEYVR6VzVIbkd3ZVAwQVU5MW5IamZPSlJtaFdmd3lZZzRsUmlNK1pURVBva3hiVVo4NFFRZGxNaWFtUllRL09XK3JFbGNVYWdybkxaWE1hb0V1SDY0d3hsamdvYVoySmtzUDk3aEdzWVRSaWJGM3czN0dJeVBJVjdxRnVQZ0NHZEJsZ0JsOFBzcy92NWI4ejBnQmEyY2JmdzJEcEs1Z0NvNU8yL1dzam9tN2xLdmF4RWZadjF6aGZpay84eWl3bXZHd3dKSW02dGoweW9Ca0FpTEpkZzBidFpDbW9CejlBQmE3azJLOW9rU1ZVUUpTUzBydlh1MHFUTUVJWGNrdzVWMEg2dGxDNys2VGd2V3FSaTVpQm9QcmNENUd6K0paT3IzbUhiYzJVQzdBU1RTNUJ3WHpJbzBjVTgwbk83ZjVLQWJzSzlVOFpmR3plcnpoTVRVU1dKOUc4eTVRa2dPcS9yd1JEa1RkQnd1VWhnZmZUZFppVmV4U0t0K0Rmb09HK3ZVOXhHNXd6U2NXVDhBRE80YUdUMUNUaEZyVVBjZDBDNmhNMUpZUk43UXBTYTNJcWdXbUNRc1hoT3pURkovUXpvOVVnQjU1dDlhTGNQOFBGTkd4c0R2bHB3Ui9CdDZOcHUwUGFJclhhWWNDaDNIVGZFQ3QvWWV6NE5Bcy9zMGpiNmNnTk8yTGI0MlVqUG5UNUpvK2hEd3M2ZEdjOXFhQ1ZKUXJyWmpXc25DekRob3pLWDNBYlNoSlJjYnVPMzh6YjhpODNoZ3lNWnNkclN2SzdCVFdqSk05bEhsZURkZWpjRkdTRUg5Y1NwVUJ4V2ZLcE1MYXE4blJ3REkxU2lvaFRJeTRab2l0MEljRTRReWcramU5MDV5dGFocHVZazkySVE1dzlTWlRXUU01NVdzd2RuVjMyNk0yN0pQZXRsQWhsbUhTSXlzZTBVb3FHZWZuZEJPakk1V2JZMnRGZzhaVGZML25YYnJKMUZlZzNDMk5hWTVpK3NpTm1SbUQzOG5GZEZlTjBIR3RnWjYwZUxnVjFIN1NDWWVPMFJkK3ZzcGx4NDlLc3F3eHZuU3JUb3YxdUR4OTl6RHFwS3JqMkx2Uy9KVVUzd05XaFhNMXMxNVhCV0RTY2RXWUd5MldNVHpoaWVkaW1iQkZnQVJNdllEeFdCUEQyeENxMUVqd3BGL3d4T2RtUHRsR1ZXWWhXT1duU2RTb285SW5KMFRmbFVnbSs4cTVrbFY1NnBmRTVkV2NwV3NUNEg4YnkrNStHQ1h5OFdSSFVSQ2x3a0c4dE1yV2F5VFZUb2lqN0txbTNiUFNNZXJmRDlBY3ZWNDRkYjlrRGdpM2h4enpsendpZW5OV2NvQ3pCRC94dFhRNjJrNEErNkFXQ1FOM0xWMENGSHB3T1hpRi9QOFcrdFJjekhpWUhHY0xCbW1sRkw0THp4Skd6ZDRPZzFQaE1BQ3FLMUkwNVlDN0g1UWlDWS82MGxVakRKYmJsamlRMUlNTXNrZDFCV2FMTEtGdkVCU2hibDRwQ0xXd1lQVlNkOEUveTNhMEVXZWFoeWprMjVWMzdvZ0N2K2RCQkN2M29PTzJ5WHB1ZVJjbkZoSmhacjJ0UTBuUFZjZDBUamdWd0cxUDlsK2EzVzByZ3FncGVJU1pOejBqUXlNSmtuZVFyZDIrTjBPZVcyMjlWWGtHWVh6azgzWmV1YkV1WVl0OTNvUHYva1RxTE56Y0JMWlNKTVJoVHB3TWNBTGUwRWJqUUxvOE9hYXhPTk1LV08rcnE1dnFRVkx6OEw4OUxGcXp6cUxBNVpwRkZLRFlWN0JXT2QvakNSYWVORG52VE9HMUZmM3F5VXhwL2ZsRlpOOVJIRzFERWRPS3UvcmVMSDVzdDF1MitjeHhTOWRTeEMwdk5nL25vQmhsVWFnUkszWkhUUC9GTUd1b2hBTWNLWWhOTlpJcTBXY0daOHNGbWlBNURqNHNNRGxsdjJjcHlJY1ErZko1Wk5JTFFIYlRGMkU4QlUvSURCblprdVdDYWNaZFBxalB2VUdFMUxrVHUyUzRyUWR0UDNJTG85OFVYek9jV25tdkdaNlRhNjVBeXhwRG5kTjI3UG9OU3ZPQnV2WnROMW8zd0swaytSeHJGUEtFcEp3c2JKdUR4STF0NVZUQlJiRWpDdndjQ3dkb1JrdWF3V1FsZEd2bGo3bmsrWT0=",
"authToken": "D3OIuChJKWJ6L3YjWk4h",
"transportToken": "MIIBCgKCAQEAv85pKAmP8RC1LKq1FG8acSLhCaot+dSEbqPQxCsWJNdzyIeg1D4f\nwH6DSD/+x/ARlKVF+eLwUpVWqVFo+GbpCXkI6emnYwPDwvqkEMu2i8NX4HlzQ9ZD\nDsZzuYafZLBSeHQtOdqBzNEIVHI9tic5QjaKGFGSWjNegObh+vdRJJhDcT/lEZUe\nrOKPHzXVZfTGqWiNoUOZh1jOuJC2khJYsjGjtWutp0kbnB7hc9r0oCtnQ/ebu3sF\nUi61GxPJtrW9Ihw/jfnJN3DBV6NukLh40FAfN+0RbzAtsG665gWtxAzK8+FjL4rq\nG8tJg4cggC1rWS7hxSddc5XjANc6kfBvYwIDAQAB",
"contact_key": "MIIBCgKCAQEAn3/t6fX9WwdIYjT5epftgrXjK1fwG/82HJDHZBasx1fOjOilbRrgiV6yB5XYnZuA+XkZJJOIqNP2wuZnCol5NzJytqmSoUCFDFvDlDcVDFsnbIaKQcD3diS7ZiEDyYcT3nk/0/w7dM2Kv0rj/DAWhtwrvrdCTMLco+IurYP+6vuGDcE2+jjvS0+Og5UTvjLpUAF5EmjMFzIfnkFQNplrkqFJr/m9j+0H06+O0kXN/C0dRgLDhAsXkLAIR1Ptury03RB9n7li37dWMHgWsl4eDn6Mv4fbeMfNcEGU8/gxfzm5dDu/TGkT+jRhFQwOFSsp24AqaabxuJFMPrhr0oSnnQIDAQAB",
"privkey": "MIIEpQIBAAKCAQEAn3/t6fX9WwdIYjT5epftgrXjK1fwG/82HJDHZBasx1fOjOilbRrgiV6yB5XYnZuA+XkZJJOIqNP2wuZnCol5NzJytqmSoUCFDFvDlDcVDFsnbIaKQcD3diS7ZiEDyYcT3nk/0/w7dM2Kv0rj/DAWhtwrvrdCTMLco+IurYP+6vuGDcE2+jjvS0+Og5UTvjLpUAF5EmjMFzIfnkFQNplrkqFJr/m9j+0H06+O0kXN/C0dRgLDhAsXkLAIR1Ptury03RB9n7li37dWMHgWsl4eDn6Mv4fbeMfNcEGU8/gxfzm5dDu/TGkT+jRhFQwOFSsp24AqaabxuJFMPrhr0oSnnQIDAQABAoIBAHrG70z5nl1D7eQrAx/rc1j6yjPDLYFfoze5+sKA8d9BKC4vp6ek2NLlogVUw7oOyek/3qrZJolPINRGp2rlB/oFS2hwf/7Au6oXuSWOgRVR1bckmaij8dlvzRGAuHmZESJgE1ILB3mR/wvhij3GhpCpSsM0LkUIeu9sXKIUyVX3sH53sKaf2Gp0sI44ZV9v7nXa2Ob2AzErE0ZRH7sCmFxT/rEIQyMfQuQRzupT0zgjsCvko87rd79axL5O3Xu4J6L96+fOoOri7kKZzNZEsmvytko1wIexsDIWytEsIulatFyvIrbiaGsO8Y/1rdEBT5wT7Hw+GD88VWB77JipJ8ECgYEA03ezvwVN0WjKf2ScqzQNz9FhwAFb0L5AB7CSat6d4nADZD30k8OD1DNr8dKfhCF5n7qCDenEL3w3APApEWJEpMrZcYersvzPziCbgds5qaI6I2el39zV5LIE7+4Keei25Eder5jZYVQSE9JRscnaOj4Qn3lnTe4bqSgnjOmxlgMCgYEAwRaeufmLO7YfRNsMSEQ2FFmiU89z4eXSz9KK5ZtcTNCMtW9jACuOcEKLSobSOeE+IANmUsX2VGrEhFS2nUlWrPWwMSt8eHb649zU88EM3WbNINqfboJwcsBP+/Ce8I6lwdBeFEyAhLT0cfcZ2q1R6D1d9jFkeno30366sx+Zqd8CgYEAnKIaapAkLss+ypOclBcvb9I4ZD7dYkW5Kbj5Ct2v9oxfhr15ToXQPLqF5w3Kh9U/wDcmo+WWIlIQb8pzsOOn0qRJ4ZTLcf1ecuCmLs5R7Lsz8wuPyrxJVmchzxHzgo8EARx4HvrJcRUTeskbJ+RKlz9nkqgbA5ctt+L9QJvMpT8CgYEAseUBQB6lJNJaZLnbywjtOjqKz+Slw05Wt5om1fwZQbwyp0aEU7fNd6gXZQZp0WGwNxZqw4AXvxbPD4xs4uSasqd5ORPzjZkw9ZaTrDAEhkccXlSN5ubOayq7hkbeaItENBihVNpW3e1J+WXLsClW+TzwwM4o4J6RqI1tvXIzxMkCgYEAxTEpgE+ArTBUFI2dE5SUuzizqgXDTvX+oV12noTyA4QhWK5Ood/so1wwQlYgPQfWCRtB7jSRJCN+JCCN8RYZA3tBb+YnvEDK3xp6ijpK7p9B2BU0LGxclaO9WYdeE3zfJxxf2xobduHvMgyqGqGfkia7DtxR9hlu8LyEfSQKFkI=",
"exported_keys": "a2V5czo6QXdISzRDWGJiNUIzWjFYemhqZ2NqanljRTRSY1lOcWswQ1JhZDVPWEZ3bEJzelFNQ2V0N2hYclBBSnhkZkxPaUdleGFQMUMzc24wNkdOS0ZFcTFBQ256cGVQMXh2VDlHRnE2bHEyOHNyMFA4Q0g2S21qUkVucXI0M2k3VTgvTVBKMWlHNFd4UHVCMXdadnZnL2tVTGFnYnkraE9TMUJaUEpIdkNBUTRXUXdyRVFIL0YrNGZNNHdENEwvdVJ3Rmx3YXRjeDExbldIT2lBVFVRbC9MejByRjYwcElQMUkvYkZ3ZVcrS3BKSmhCU3lnWDJZMWRSVXc4MHpuYUhLWjFiQWxtNHZVbTh6WDhxb1J0QmlmSFhWbWRNQno2VXVyMGlwd2ZMVkdaZllBbHRzWEk5a0gveDBRaEdRYVE4QUQ0OG9JcWVQdGk0cG1FZ1hwdHZWS29EejBYcG43ekRBVFNTSGg1RnB5djJ6MVpmZWxIN1lPeUx1clpwNjh0R1h2b3VMWTFQV0xSTEdkTFB6RWNVQ0N3TW9jY0ZaUG1JUm1QMXVublRmbjJ3YjJDTlBUTXpGdlc4TTVGYlJ1TG5jdFNIaXNOVWN6TmlKdmpXbUJkZTdUWEc2WlZqc0FjMkIwbkQzaGxiSE5vOGlyRFhibmhwaHpOWnBneTNTMXJwdTRLdjNKNlJtazZTNUd5QTVlZDY0U3FaNitqTFhqUjJMdm4yTitUYVNtSm1may9tMm9VRmltT0Q5RWRZL1VORzFpSHNmL29vZ21lSkN1c2d5WnprRWsrMW5rOWNEWHlTTUR4VVFPQjFscWZkN0pPQzNHc09RbElETGUzOWZVemhXM1g0UmRGakhNZVBHUU5uWkh2MkV1TzRZYWp5ZVQzV29pdkNyRUwxSHI0cEJZMUNqenBQSnV3Vmp4eGRQOWExSmtIUmV0QVJ2REROYzRsNzlVeWk1cm1BMnN3VHhvYnhiUWlETXNwZVBIY1U1KzBXdTVMc0JNWmU4UlBHUmRBc1h3Witqdk1QdjRlNmRuWnhzdGZvTjc1OElReFhDWms3Vlhjc3dYZ2VjU3oxTlFOYmpqbEFoMS8zVlBCM1hYWWZqZGJyM0cyMHJLYy9wWXNhS0lITUkwVTdnYldYZWxuYmRVajFCdEN1Y2MzT1A3VmZLWWxtTXQ1NEh3c2I5N1oveXBzb3M4NlU1VXlWYUd4eDBWZklaaWRLMVVXUjdaSEtXR1l2WWRyOGd1a1hqaGxmbUh5MFdHaXBkcVVGS0MyK3hnRW5aSm01SllVS09DVFMvMTJvVkd0NjNOaU9xM3pHamI5c1NRMTVGQ1BJS0laM0NMbVBSVXBBcmU0S0QySDhNSExHdGZ0aHA3TlNWT3d4cHAyRkdLdFJyYmlpcmFidEI2ZE9ncHJEbjZGYVEvcUJxOE5Ld2pIUjhTdVF6dzdNdXJBeExPck1CSG91dUQ2dUdMaUY0TU83WlZURUt2SWVvSGFwa2xMU3ZKcyt0cFRRZ09JTXJ0U1VlMHlvTm8xRmF6YSs1aU5MK0pVY0FTTkcxcEhLVWtOUkIzaS8vQXplQVNBbjl3cTZMZEFjTk9sUlN0ZEhUZmdueEFjZ0x2L1JBcUVEK3FEVmNUZEdJNHluZ0dGVGJvdWttK1NmQ2U4Q1hpMys0amFYekVYMUVtV1FKMGMzZE9ndGZWcldVSjQ4UXNnTk5iSkVSSHc2QVFWNGtmWjZWd3lKVGxZV2licHVPZ21PUmRJakJuUlVtTlJoNmRUSTd1YlN5TnhyWG5GWmpzcDlrMjNTTXFpNGt3eWVvWkpEQklPeTMram4weGxHV1lDOUpzcEtDY0NreWZGbk8wWFV5SjJ6NzRJZzRmZmxvWGhDelZrT21CTnhIOXBHbnNNS1ZhMDNuYWFOZFl6RWNOOS9sZjR0dUcrMFd0dFVOTVJZS2s4YTMwUUo5MXVTWmlKZXpCVWd2bndRSmtDUlBWVDlIcTc1T2ZiODZjT1lWSGlBVjQwSzl4L3p5TDdsZ0JFeXpDS0lURHNQS2RXcGZtclpNTVJndk9pdEdUcmhzdy9LNjJ2dlBFdzZhdGFDVFZ0dGhvSjZpVUppS3VmSjF3UlErclhORTJOdXZmaW1pZWJjazlLNldaaHVhTXc2WkYzTEhiRnNCOTk1TEFSTTU3QlBtZDU4d0IwUHA0Ym1EUkdDeTA2dmd0ODFQSWllamF3dFZtOFltRXJNdlIyOThTWW9RUWVDZUtKNDl2NnpzdHlUaUFtS1dzV3JxMnN5d09EUVZnREpMNHh4ZlpGQ1RsclU4UnZkMDZIUDd1K25Cbk1VQVptRVlqbDdRaHZ1clRPUTh5WDlKaUdMcDBhWjl2R3pwa2RqSjc4d3k3UTRXV3V6RkRldklWc0pPUVNPTkt2K25hdWJFTm4yaEFKUExET0lzRnE4SmVsbXc1RW9ESjVaRmNjM2ZQL3dNL2JoYlV6WHhqWDhZVm9ubGhBSzlXUWo0aU1PYm1WS3RTdldyUk9uZ2gwZVFITlBhQnJ0MW5CbHM0NWZ6emhOaFpOZFpodUhVQ0t6QzlhL2tuSElhNmRQNTdaVHVRUnVCeWExc29XYXZ6aDV4d29IbDJ1bmFCZ2FSUTlkYURUaFA1QTlaeXlIUEM5aC9xSldnN0dackQ1RVV1cFZqamFNMm9wUjBYL0F3Nks1OHRYTUV0aU5LSW1zZWJEeEljK0g0NjlSODhXUUNONmJtUmhFR0lwMVk1bzlQYVBCOWtRaHJIUjlNcmNSc0dWWDVGMW12dHlEOElnYVh0VHprRktKSzIzdHA5Vm9yZjFrRDVMTWxsT0tva3RhV3E2Skd5T2ZEK3BzdGhTV3BDN2Iwdk5xWEZVdkorNWs5cjVGUWJrVEhhMHpVVTBHNWhVME9mNnBIRC9aQmdyNTFwWVhSRnNwMjZ0M1RMWkFBbjBBQjNmKzk0TnczMjlFQXI2WmdRakxwdGJqQUlsdEs0T09zVFVIRlN4cHhJMXA2dkt5c1VwZWt3b0c2a2NsQWRYdjBrZFZVNXdWWi9ZMGx3eEVDUWt1TFFDS2o4ZnRnY0NoMEVuQ3JGNEV1VmJ3TU5jRnZBVXNVUFAwangxWkY2N3FveW9iSHYvRVpwbng1RTZPYWJ4c3ROb3N0NXEwbit1VER2aUdUeHZpSURyY0lFeGlTbTU0dmJwTzlIWFNEanJYT1BkTFFhVlR3RWFmeTdJeGNzT28vZnJNdzJQMlExRGNDdVRMRW5HLzNBWXFNMXpWd0x0L3pVcVA3OHlFeU0yTVBxNTh5cG51Yjk4Z1kyQUdPUFNaNzNHME5Eek5aQXJtMytWRldFeHRRQzdSVGNlQVZLYkgzL3d1ZFlYQ29ObW9qRGVZZ01FUzhUdUYxV2xLaFhqcmgzUGFPSzhCZXBMeDhaWjhUTUd6SW9vU0lhWjVMT1ZZMTYyZFZZOG8raVpUa3FTd1RaSVozTzJKUUJ3YkxhNDRmelJFM3lzV2ZqNExyNm1YNXgwMTY0UGNDdndNdk1XTmFySi9OV3R3OWJQcDEvdnp1MC9oWmxwY0dKNzY4UGVCREtROXNsYytmVVdHdFhpMWZVUVkxRGNGSndOWk55eW5MNEtRNDR4MkwyS0JGUXVTeFdxaExNV1VsTjNHaTFFSmp2RG9wUThNaGpLbz0=",
"pin": "111111"
},
{
"pubkey": "02116e5625750ada66c6eac945401ecf1a1cc2f4ef3d682e2edb66190f291eb64a",
"routeHint": "037ec785c6004d512ebaeb0020f81a2bcdb6fccc9539f7b891f704289ebc65a4e3:2199023452161",
"pubkey": "0382b91f7efd6c16c551d54096df7a20f66c2fd29a8da39ab237602da4ad7ff76f",
"routeHint": "037ec785c6004d512ebaeb0020f81a2bcdb6fccc9539f7b891f704289ebc65a4e3:2199023386625",
"alias": "virtualNode1",
"ip": "http://host.docker.internal:3004",
"external_ip": "http://localhost:3004",
"authToken": "5fWjl/000ovFMpz1LRCf",
"transportToken": "MIIBCgKCAQEAvzoM8xogMNxAVY4B1hoImhnjtYQDc6V2IrpfGkbYPHWQ5Oj/1T/L\ntlpDV6NeEPBuw0l4tDbHQxcU50EBXQdZeRszdl/LOyTRcrfJenYb//as/irkyjda\nt+QJ5Zsn2ArYfSus1lpNWxQdx5OslfkjRXdZcroyoJgsuoJdsJX+BfKSjnQJpd5x\nu/YpJx0+Q9Qk9Lp1e0ckPJd9Y0U/CuWhHFbbDaQX2TjFNHxBQ1zJjVqOEA4Wnx8c\nbve8ib0ccKy+nbhrBoGKsDM4ei/6+lupHtGJ+CW/ckYcYebBMcOG9979eCp6dRMY\ngBJNRWnIyzAt7RrRu6l7A+nlffeRycgLxQIDAQAB",
"contact_key": "MIIBCgKCAQEA5poDxkN6LZLURRLupUpQHKdIqDZ48KmG5va16b5Ve4me9WOeRgL4tXkJP8T9UxMRoYC2x9Rdph+EDM73ElyNGU/GDRayCNldfoxTLaePrpO63CFhi5J7U8Y72b9Hyc3QDag5OpTkdkkxCmpk0uQJDwM100Yf6S0UPgxj//xPC1urr+XYClFXIcCAg30cmBlJQTTqEPwd3v6IUcFoKpECPHsvCi/qNl8tHPQpgZgyQopaZIVvXkf8gGrDqZmOHdxUjAf9MOh0DoAQ5h/ITfl1VZbvwT4XTpV6FheRg4QnBsB/IFJaKc+kMFC41MnlwlJnne4EjKNTBUp6WeXXfpP6xQIDAQAB",
"privkey": "MIIEpQIBAAKCAQEA5poDxkN6LZLURRLupUpQHKdIqDZ48KmG5va16b5Ve4me9WOeRgL4tXkJP8T9UxMRoYC2x9Rdph+EDM73ElyNGU/GDRayCNldfoxTLaePrpO63CFhi5J7U8Y72b9Hyc3QDag5OpTkdkkxCmpk0uQJDwM100Yf6S0UPgxj//xPC1urr+XYClFXIcCAg30cmBlJQTTqEPwd3v6IUcFoKpECPHsvCi/qNl8tHPQpgZgyQopaZIVvXkf8gGrDqZmOHdxUjAf9MOh0DoAQ5h/ITfl1VZbvwT4XTpV6FheRg4QnBsB/IFJaKc+kMFC41MnlwlJnne4EjKNTBUp6WeXXfpP6xQIDAQABAoIBAD3WMwjpc0vhQba8Gu6L/OuSGDOzV78BVsF8is+BUJ7uCog3DGwtw8+2Azrschni1Sl/wIPZeLthXCGrJinwU43kDHHaEie5Ug7rRirJ8geYadU5xlSNFTEjyUzctD1zSUVARQhmgNUPT21BloPOzncOH1LmTQxUIEd7Px2X5QJgMlIWY/T3G8EMOV7IfozlO+PW7SUzWoOdFIiyDcmKEKsjJXdwXlLC4njixvOUD9t/2dXvL5QE/y8/XHlDhi2VewoKc4Nn6fzynKXbdPPvtlppLk05Otviqvp+SYp45dH1s4jQKe2R3/Oda7Lc33HDUR2PqDOfHoY4Ha/94yWEGMkCgYEA+T+kDFz4jgogIUKo1JhnjLDcdEZwndGkFdD20wj+u3D36HB5m7wHzWWiipU5PsExHOUw3LfTwbIU9UM+j/OABGgeQ4cly32dJ+NNK21EJ7FMKZRHjlV4S4YvibWNEtqr3nYxDargVl07VaG+PMAF1WIf+l22zKwepZsm6PAjMf8CgYEA7NkSEtTlK+mQ5VeVthNkWGoyg2yNMbJnLTnP/pKkc/5LxE4NvbHh1F8roes/wceupDoQaBFleGu1dQH9MI0SRkzLm3QLtMKyWYxzL/RsFeCqFwurdKaGsUTtIOC4lQxcVWdyZZz5iXgbfIqzhojFM71LQs0SqLT2hGvWOPGuizsCgYEAt95EzIIBMfcyQJcGKN7M9LK7zmLwTNwMKbPfgUrPb8MkfqoKa+JH9zOUtprigfLOojxI0Woiom8Wmt+iVVsSAy4ztSkLrpPZzUUW9oRClO1r+/hQ2SUf+sbgZrwxd8kspI2YHjcCC3P3g3Iv/mzBYOpkILPlWBNZAF32VDxiGk0CgYEA2jXz7N2wdpCuKl5TVHjxTnQpLeRpAYx4erZ05vp8AVIcxDOVfVvR0DQOoxN2njY2tJ+6VecRMa0qdS7r8jtGxvYh8Ist7dAjOVWpGll6630duDXMNaDnH5N9VXk1Fj1ZJGY2g1/ol7rMuCWh2SVRaqXQHS+LLVvsc3xW1gf049kCgYEAkL65LpCCcE0rrj4z9T0Et/6SiZHY5+f9sQlCxWWG7BW1BRgur6RIDS7KydxrTBi2gZe5IPIRmmP5NffnKuWfJ2SGN1QjBiZ1ZmMkTN0VIbPx2njzsPYh46bw1ftv3XMTqBEqliF6t1KUcw3MnMzZkb0dbCTK8vzPNrG74+n1H54=",
"exported_keys": "a2V5czo6QXdFeHlCdnBvdkhNNGMvZkF3dGlmWHpYUnA0OGFxS2FUR0JSUm5BWjV4VHZuYS9Ra1hsWitINHZnaGd2bU1zVzllY3hoSis0VnZNMk5nZEJPOWVMZ2pJTGFoMmsxWUhscGFJdFNFYkdES0F1WkR0SGtaQ3ZZUW8vVFI4MDRjSmF6dHN3STV6eU04Y0ZuYmJ2dE04Q3k1UThJME1ZS21uSVB6L2w3L1BYZU5QdGl4eVV3ajZOQzZDV1lkRUhPWUZya2hlL2FETmhCd29NK1p4alRNUFA3eU01TGFvclh5Vks4TmdIZ3Vac1VEaDdyZm01dm1lTU5GS0MxU1FkdEg0T2NuQjJDdlo3ODJaMEsyZHRld0NleGl1ZDdFSG1NQS9USHZWMjdQWXNIL3A5N0JOdGlsVUZWbEgyUnMvSzY1ekU4OHJtZ0RFZUJkWDRLUlZwYXp6YnUwY2RlR3RuYnlrOEJLTW9CSVlaeDFERTROZGNXc0hTeGo0cWpGK2cvQUVrMkdTYmtsWHJkQTIrVG9xZTJqcFNhZ3I0M0JITzVYaVc0SzZFUm1iWGt6VEN0S1FMSFR0QnQzSENZd0tDMnVWWnN1OS9VamZKa1Y3VE5Cc3M0c2NHeWRLV21TSktxK2VSUkhiT1QzREtPd1hnWldkREdOSUN5OWFvNVVTK2drR283dXBycXNWMkFROWljbVoxNWt1T25YQ3dBRlBNRTl0MnY1bUpsSzlIM0txNFV5ckloRkZrODl4SzM4a2NnZFhUVnIybCtLT1JqeDJ5b215WGRtM0NaNTVPYWpNL0FNRzBEMEJXRzJuOXVWYlVXdUNNb3pXVTZmS1lCZ3Z2VmdlR1VqOTNJajZuZEd5aDlGWFoxMkdhS1pXYndSOXIyNzVPOERIejJRN0MxbXJTMElYUjBIUitmNlg5ZnpJeFhuVHZ5cG8yRnFZM2oyU054QTN1YnAzQlBWM0JJUEMxVmtzamJkc3JvaklQZ0ZWMDRoRklWbjVyUnJtU3E3OGlxZHpBQkh0NXFSUzFNUnFGNVlNWWovcDQ2LzR4K084SXlNSUhSeHBiT1ZLL091TU14bUhyVWQ5SGRnQVlTZStOWjh3T01ra1o3MDdZL1JqYmR6ZTZsL0luQWRYMlZ3YUl4M0w5QXc4cXZmTDhpbVE5ZmkvSXJlZlhUQXJRZTkwdTZHczgva1lKUDBIdVNLSldGYTJkL2o3L3o1QWxlU3hkRm43YWlJOWNCdFpMVDUwb1lsZmNaQ0hoYVNJejQvQVk4bmRpV0hLVEo2Yi9zVTZsajNZQm9KWkFoR0JVenVTL1lVYVBJUktYWXNWdWUrcEdjclVENU5UUWFtelBiZld4ZWZuVzVTZ2lBWi9UTTl0ZEJUZmV0WCtScFQ1ZmU5NlZQRC9YS1ZtWDFaZW1xUGJQV0dpRUxOdjZCelNIem44UW9uck5rdGIwWUlkd3hUUG9oYVRDbGRpYit4aDMzOXBzV1V5Uy95MWNHOWp5cWM5d0FCdU5kOU5xYWpYekdvWjFYZ2xNcUlvTGkzQlRXWFcwY1J0eW5KOXNsVmcxYy9UVEl5MDlYUURZSUR0Zm5yejY1ME9BZU9hVTNRZFpzRElFazRvQUdRTWlpR2U3c2RjQ2ZKbHQ0RC9yYVVNYWxya1ZvOEJxRkswY2tnT21zbWxiYTFwYkxxeE03Tjg1Zm1pOVVwWElRNEhFTmo4bnBMNzJnTHNNbzlRcDM3WFF0N0ZSYVVXMlFiczVGYng4bDFsVGU4UXV4b1hKbkNzN1FZVXNXU0Ura0ticGdtc2tYaU81NS91UE41K0I5NnFtcEZWWUtBUEp5MWg5ek5JajFqbmc2bm02cDhMUE9xbHZGRGdiYWF6MU1RVERoVm5iNDk3R05USFM3WVJ2MmlvZE5JVDJ2VnQyenBJRWtxbkxSRm5mQkJTVHlsV0daRE1MTnZObXhzcnppT01jdXkxZVF0Vzg2R3ByV1VobCt2aVgrNVNCR2txNkEwYXF5eHlHNlZkaXRGcmkvUmE4TjBnUGVsMDk3L2tzMU1zSnFzS2VneUp3MzRuWDNkQzVjOHlXVFZIczBzTUlzb2xjUzRmWDYxVlM4QUZzUHI4aFJqNnN1OCtaNHRvanZ0NDZ5YzV5UlVYT2dSNEY0d2htM3BaeUtLTk1LVnpMK1MxRFo1VjRIc0gwWC82c3ltUXBXcmoyWkxFd1lHMmprOFhjNHF0U0hDK1Vkb09ndGR5RkN5S1NZVlpEK1p5cWpRMHN2QS84ZloyRUNLNElUVTRxQTY2ODlaSW5QbmJsdHovTzBiTm9CNXc0MklsQ0gvQ1hCb3hoQlVJYUx1ZGc5VFVyejJTZTBLSHdkQnV6aStKVU1kdVk0MC9sWTlPU0lGV0FTNCtRUDFqSlo4QkNwQ3pPWWRoSVVGekhPR1dLNlRKVWJ4Q2YyRkZXWFl6cWhxWWIwSEY4akpuWEJuUEkrTTgvVnRJdG1SbDlxeFJZcDgvZHN6NmxZYkowRzk3NjBoK08xOVVlNE5md04zZjJBeEVtNVY2bm4vcnBnK1pCTW0vU2Z4N0ZVb2xoWEFlaE93RkJVWlQ3dDQ3QjFBTDVyVk02czA1RUgrcXMwK0VIOTJOOXJBZTNSWVRkaFdiK0NIKzdzMXBjNFFKcTJ4ck1VTU9pbGZhSmRuL293MUp2RXBxeUIzKzNycTRXakg5NjBMYU1YWFpsVkJkVWZBdmcwV2Vwb3QzU2VwR08zdVhxYXBqc2ROVE16UERySVB1MVlPLzJ6VmI1eWxRZUZ5eHhidGpmOXU3NEhCNmllck5paDY2TkQzU3g5clJiYlU3NUlIdWtPTzJrbzE4NTRhTVJtbE8zYkdIODBIUU9MZXFKY0svM2JMek1iNHhGTFR6dlprWWxTeWRxMFoxQ1NheThSeVdxK05aY00xNVNWU3o2MVF3YzlYWXIvaWpVVE1PT3ozMHRvZUpodTVzYVVaS05YQ1IvRTYzYVVkZlo2TXI4VlFmN2hjdFVTZzdxbSszamp1a04rd1VQMkxGaDVEV2oxR1pGTHVvVGg2MGU2K2wxZTZIU0lORVVUWFE3WGRCWS80UG1kZ1NJdUMxRndUWDlPNWZkSlJqcUFjZzhkMWhxT01ZaXhaQjJ0OUU4RGRiZk9YWEJiUFJlbDJnZnZueVdLd2E4RlV4Y09OWUhwMEExMVV5dFV2RVB5RnFNMWVsMkQvUkxPOTFHSEZDUFMveml1TkhZZzZaK3lIb3dKTkx5T1VKZFNlWk9oc3hnandMU1ZBUnREQ2FNUzJNVU02TjdUbzFmN29kRlhtaVNndlp5NWVkUjBtWXpwOURha1pITEZ6MVY2WFpwWEl2ZkZ6U0hTdlZaMHg0VndKNTZuTUQ0YXBNdU9WZEZyUTdaZjJLMjN3eG5DY0Y5RVNIQjFzemxwRWhyT3hUaDBnT2lUTFhCcjh4NGs1Q2VjU1dMeVVXNkVSdzBnRGF5ZFIxK2lPMXVpa2gvTnNHY0ZVVzlzeldETlR6bnZvSGNSYTJsZjNqbzFvVk55REJWM3NEL3pUd09vRVN2N21RY2o1UGZCSmNGYTl5VEtDU25TUENQYVhxQTUzaTMrRUFrL0IxVnhOQWc5M0pGaFg0TUlySkFnNldnV05nOHZjSkFHalRFTmljOGR5RT0=",
"authToken": "17HHEVkDq5YrT6knzumM",
"transportToken": "MIIBCgKCAQEAv85pKAmP8RC1LKq1FG8acSLhCaot+dSEbqPQxCsWJNdzyIeg1D4f\nwH6DSD/+x/ARlKVF+eLwUpVWqVFo+GbpCXkI6emnYwPDwvqkEMu2i8NX4HlzQ9ZD\nDsZzuYafZLBSeHQtOdqBzNEIVHI9tic5QjaKGFGSWjNegObh+vdRJJhDcT/lEZUe\nrOKPHzXVZfTGqWiNoUOZh1jOuJC2khJYsjGjtWutp0kbnB7hc9r0oCtnQ/ebu3sF\nUi61GxPJtrW9Ihw/jfnJN3DBV6NukLh40FAfN+0RbzAtsG665gWtxAzK8+FjL4rq\nG8tJg4cggC1rWS7hxSddc5XjANc6kfBvYwIDAQAB",
"contact_key": "MIIBCgKCAQEA06nUL+xYNW//CfAoLn5HzZvgd7qiGznHtCZz5yFDTTSFfUk7mOpy+1eGnYjivKASMFFbgg+KGCqXO7JYlb5LG5zzmriHMbk4mXkPJQKR0X77cobjjkDVOn04TbkEpFVP2iUKAA/jWc3iildS7yLtni6RHtZ0cNhnAC5D8I3DuJA1gzuIMPo65CShyJAmGtY4xm0p/+0NtaeNnlzrNrvFAR6h+MXoBHgqT+YidMO3uSLcO+9V37u5Bd4VGEWEgoZYiY2/mOWilKNoaLoU0xPJMb+i78w+otizlB5jlSLWAXYUdLnl8JpjPmH6R1jNd3Kit+8p6mx2Ob0CCQ+wdqKJ2QIDAQAB",
"privkey": "MIIEowIBAAKCAQEA06nUL+xYNW//CfAoLn5HzZvgd7qiGznHtCZz5yFDTTSFfUk7mOpy+1eGnYjivKASMFFbgg+KGCqXO7JYlb5LG5zzmriHMbk4mXkPJQKR0X77cobjjkDVOn04TbkEpFVP2iUKAA/jWc3iildS7yLtni6RHtZ0cNhnAC5D8I3DuJA1gzuIMPo65CShyJAmGtY4xm0p/+0NtaeNnlzrNrvFAR6h+MXoBHgqT+YidMO3uSLcO+9V37u5Bd4VGEWEgoZYiY2/mOWilKNoaLoU0xPJMb+i78w+otizlB5jlSLWAXYUdLnl8JpjPmH6R1jNd3Kit+8p6mx2Ob0CCQ+wdqKJ2QIDAQABAoIBADhs+rr316APRj8g/aU/VubyGgnxAAwgACP/aECCdo2bZca7gh7GyXZFpAZVGpTMW2z0E1/9woOkvwJUDheFTkKDOdHSRYA072jChA4KvFLL9j5WxU0D7ZQVE7BslVc1wv7Vhu/zTFmBcFYO53YGqq/TnC5LX2lB11uN+eCj+jw2AQSHfiTisGkLxWbhVulK7zoSs1kZlfbseljaQam5nVx+We7QrCXra2A1AY4SPWA1P65fEAyx9XQeH6tz8uh5RPIixXp10K4mkI3oJ+WakCW/rImG/4+16E7rZV6iQZs6EYLMOa5/5ZNEoLrepniLfj3thMXgw/6KD5Ei109DwF0CgYEA+0nMdhpZStW4F2GWAExDQOWH1MxgIRhseCB5+fvfRNu8Zw3nSYsBj9pdwRhHSs/3BatjUoWuPt0bJ2AHq9tnpOv3TNSIRQVhsNqYlVfyoFnelhXMzpf3P6IzlteeGeMqj/yjC4ocOfPrWNVnV5W0GFvLUEhC/RM6XHe3ya8N6HsCgYEA16HT9djICra5WCXoWPcmbU5tThzAadg7Ofy2dp14kRzJZQb+hNLDnUrm6MvlCk4iiQM9Em7fzVPkF1NJ/PxWnFsGH5RUDxCURofkmoTd75cK98NdrvsT+cWj/jF41UytELppdXm8+hs0eRk28Hb4MBtZP+AP+qmbzdw2pcrrqLsCgYALJXPfTT3mtuIqj1aS/s8A4u2Kf+JHtYiiL3aZoxV9PW32+EPpHDReiCYeeZA3/k+LvdVzBKD9AtvAfF76vYm0ZA8dJlRBE4MI0DlybmtBt5rK936VL2J1PSGisD/AEDaEGoW07lRgMbSfxR+HYAmUBwZWsk3eYer1zQ2m8Y/hXwKBgQDWy+I7fJVQbtJUJ3a64H9L1Rr2+5cEGJxu1/jeUWCflMBdPcldgCHR1qIL9ceTK2Alga9dZErV2yJTxejm9GpGWDnSTUwqsYYyd/3VmlMF7jzDr73rpzovzZvdg2RtfXLMPhT9K6Z+sYjktKRQhwIV0bhm84iXVkrYluts3aVALwKBgHUk3IU9uCyXG/qAORchWU3ayfMU3cOY5X6XhR7rX+PTX6IeGrm5W57Nm3PE1+eXOSBhV5whGhIL4e8x+WOgXmRe/oS4lb0s/9lDjuwVqm9bix/psmYo2pIHhEceT4xpm9ydFiSTF2wNLWz8SIRJmApYts1TF7eum8F+J4wtAopU",
"exported_keys": "a2V5czo6QXdGYVJndVZ3eFcraUdNM2RZeHJpcHJHSFU1RnBpTnoyRUpuN1I5UXpEVHZYcXFCR1ZxMCtpbGV3KzdibHFwU2JpeGVwOE1jZEpBZGlCK0xpM1BJWHhrMjUrZ0VaS1BXRzA4SDJBNGFDNlRCV0FZRjBGSFVBVDBUOVRUdG80WDlwTUM3a2xRRWNUOHM0djQ2R1ljL1BpL1VZT2lVK3VpNmgwWlN6V3phYk9POTVtOCtTay84ZXdkTnNZdWtxZnQyRWFIWnhBc1Vzd3J4ekV0bEpzcjBSc1kzNlNPdkc2bklNV01uRWxNdy9JM2hDSnBEU3J5M015R3lseDdtK1JKS2VRSW5NZkJ0S1hSbGgxMHoxTHdXSmx4eGxqODFsVFplMG1KQ2l6bmduaVVCdEpjdXkxY2p0dnI2WW9ZVHd4M2tpWDlsVTRFdWY2L1FMTUhIcFVMajhrbnFBRlV4aDQ4aE50RFN3bHZTTUJkdzhXTEZzN1FjQ3NNZ1hqZzNYNnBybXRUeS9vQlN6Mkh0YVc5S2ZabHhJT0ZIYTFnS1lLTUlTVEphYkM3SDA4cmFaVmZraEd1ZnFpbVE5aFRmRTM2YXNDSUpFTXFOTWdRV0ozS3VNNUtsQVhzZnVzNjZsdTJLL29ERk0vNmluQVltWDE3OXJVeTZqYmlpbjdYM1FIeHEwSW1NWlEzK3dWVlVjUXluTDNDNHNSYzJUcDhnQUxDOENkVmhoK2JZLzRVNlV5b2J4Ulgxd0NnK2pvR3NScVpyRXVSaWROSWNuVVNpSyt0TDg3cDRxMHVBRnE3NmcxUU5FNHMrUFZOOUwzdEtwblJJb2ovTFZKZ3JrbWN3TW9tQzM1ajZibzJVWnFneis1Z1Nqek96ZC9aMDY4azdtaFJIbzhrOXJHSkREdzRsM1FHbzJ0MnVHd014VXVneTJFbnBqMHE4Sjh3ZG56WWFqcTVQRzA0YnMyL3k5aHp5ZTFEbzQxaDdFbDlnOWdUb0lSeVE1djA1TDM1Ni81VlBQVzhiRThWY3grQ0Vwb3lSeXB5RktUOENaczdaOUJYdDd5b0VCK21yeXdCUk9lMUhoVUM1VlNmYWJLWlh2YVcxRjJlcktMSFJpQmNWbHF2d09zWTVmM2ZQcmRIVFdoV3ZrR3JqVVJQcytwcjdaUXBpZzlGN1BVUlFTWnVmQ1V4Y25pekt0bHV4YXdESm15Uzd6QWt1cldTWmNUb1hId3BtOEl2dS9PZnpJNVB4dk13V052c0pKY3lqcmhyQWZWajNtN3BUZ3VXVTBYbTEzb3hZenpFS0xYUk9ZNnhSWTNMaDd0dXhkVGRrN0w4NFlndnVnOS9CNWJzcC82d0srSStJRTdKQWpjREtaeFkyMkpScys1RWFQbllCdWZpeUhTdGxiUXUrK3UrblNkTzZOclBEdlBESHRwTThEVW8vemJuR2lYM0ZHZitBakhHcHlRN003c3FsMDAyQVkyZTVvRnFVOHFPSGdtY1IyZnRIWHZ3c2lRNS91ZEdLWS9JL0l2SC9pelhLdEErcVNCb0lPYk1pN2QwT1NZSW1VUDdqbHpUTEpuUlgxVExrQmhGQkhvdnhpbXEvWEtsT0kxRUxWMkpwZVhkei9FaFFaS3VSRDYxUlVVM29Dc0g0a3loaTdJMzRtR09vVjFBTmx0T3kyUWtKSE50RXI1V3VuMWxIelQ3Y293SVNsellublV5NkdSdHlzRWhQMkhnTHYxZzlhMTJOSE5OQ1hjUmNRUVZaTXB5Q2JmQ2lpeHFGOWFLQTFsN3ZvcG5kNnhGYW1ld0pYWEJVWG9Kb2wyS0hyTWIxZmJ6S1FpSFdvSVcreGlOd05RaTIzRVRwZUMvSlg3cndPNkJpK055NjVGTExvWFAyQTZYSVdmVVlLV2g3ZVVId3R2WXFnRnhOdk5oRStURmViaTdDVWV1a0wxOFNqRDVnM1FXbHFRUWtxajQ5T2FnWndkSXp0WFRNbzdmYXhGK0xoSVozU3N0T1RpN0ZSN2J0bDBUNkF1Y0ZjY0Jic3NhTkNGTFJiWFJyczNac1NJWUxKWHgrYkdQUE9walUyalRKemI1UEx4NytzRVZ6dEtUOHhDU1VQNFZjVktGOEQxVkhQVzJLM3NUQlNId1ZWa0ZxK0lBZ3ZWMG5mZ2owaUtJWVNyci9jNjFHT1o4ZUNzb0VJUTVGWkJaMmprNDZCRWJ6Z1grMXZNZFNtV2NRdXRBUTJQRU00Q2FFOEJISWF2T0R1U3kvbjh6N0xNSnU0Q2tDeXIwbXdzS2thYmlzSkwzL0ZvZmc4QnhjNTdBeXpPcWg3YldtaHlhbU1DWHlDcUlQZGtHSG13WUd1SDRoVXlWaWdoY253Y1RXNzFkT3llZ1NWTDdSMEZvVFEyNk5QVWhRZ1FpWG9UQkJLS1BKZC9NNkVzeWJMTVhDVEZzc09mOEM5N3pMZXdMbXU1OWc2VytoQ01IY0ZoOFJXMmFicVluT2cxRk9yckttRkpFbVAyTU5IaDA3QkxKT2RWRkJZcWNLTGRFNGVKNzJtZnZVbFhiUGUreExEb3doM1lPSi9YeVJESXRwVHRsTUhGNW5pL2NwVGxkcy9rTUFMZUZ0d2x1ZGFucDdSbGJZc1hSSDdWVnh2Z2MzUVdQdW1jK25DYVlkWGZUOFZuQ3R3RDBqRXJMbmdrYm9Cckh4ZFd5dXJRZmpJa2NONy9CaHFIMThON2hTV3ZMVVJkYUYxZVlFSlAxSHVsclFXeXRQRkNRcVlwUVZQTFJaYmlNYnp0YUQ5VUJuM3Y0emFSb2p1NTV4eGJiVGxCbkJGZ2hLWlIrUER3aXhoUVd5OUtlRGZpRjlKMjlRV1B2Nnl3WHhyWTVoS3g5d3Yyb3pnMys1MW9Vckc4WUkxR2Q0SXVuVmRHKzNqQW56a0lyV25wQ0U0T3BpeXRrVHlEelVHSFlhVW5yRnFIMHhCcm1vQU1GNmQxVXM5czU0MW5EUjNPZkJHbHRCcmhFcE1SYnJVV1VYbGpKVVd5c1RvYjNGOFNNd0Y2aGt6TDcxbDRIdnVtZnFmdUxrQSsvUEV5WWFVdGplRFNnZUYwcVpWSDZmQWxrbi9SU0lqTkt4aFk0YnJrN084THQ4YmJ4U3h3c2FxTEtuR09LR2ZIbTNqV2VaL1VQV256YjNrWStBblk5WThwTU9lYjlCMWhKcjlBTi9Kd01UcHl5aUFIR3hXK3Vlay8wdUFOYjZzbVBDNkFwaHNRUU9kOHNvV1U0WlowOTZYTnVHRjZabytEUlF2WTgzT1BzbUhBRnF4K1F0U1V5NUlLYURKWUtwKzZVbE5sbWNydXRvR2RXNE51S3dzK3lIM3Y2OE52YWFCY1g1enpEY2dXclNWMVc0U0g0bC8rTW9aSnQ5ZjJqRGxUQW1YeTEyZnpkYXJWRUFRTHA3aFZPZENqcDBxVElPRHZ2OUJNV01IUXh4RGl3SHRpbzZPK21QQ2E1NHphcFdVQ204Y0dLN0RxVXhCZlFWbXIyUStpcDNHc1IxQ0ZmQ0F1SFU1QlJtM3pXeE1DV0xySG1OSWpwaHRoelNJUm1QL0VJWWRLcFpVTTJTZlptU2NFekJoTm5kNGE4QlJRZnI5VDlVNk5FWXJZM0c4UCtPUjRKbFdadjdkNXMxRjd2MFdKVmlPdHZvQjB6Tm5nUT0=",
"pin": "111111"
}
]

View file

@ -85,7 +85,7 @@ export async function boostFail(t, index1, index2, index3) {
tribeMessage2,
1100000000000
)
t.true(boost.success)
t.false(boost.success)
//Node 2 should not get the boost message, because the boost should fail
const checkNode2 = await shouldNotGetNewMsgs(t, node2, boost.response.uuid)

View file

@ -54,18 +54,12 @@ async function invoices(t, node1, node2) {
//Create an Invoice by node 2
await helpers.sleep(1000)
const createdInvoice2 = await createInvoice(t, node2, 12, 'test invoice')
if (node1.alias === 'alice' && node2.alias === 'virtualNode0') {
console.log(createdInvoice2)
}
const paymentRequest2 = createdInvoice2.response.invoice
t.truthy(paymentRequest2, 'Payment request should have been created')
//Get Invoice details by node 2
const invoiceDetail3 = await getInvoice(t, node2, paymentRequest2)
const invoicePaymentRequest2 = invoiceDetail3.response.payment_request
if (node1.alias === 'alice' && node2.alias === 'virtualNode0') {
console.log(invoiceDetail3)
}
t.truthy(
invoicePaymentRequest2,
`Payment request should exist for ${node2.alias} when testing with ${node1.alias}`

View file

@ -0,0 +1,160 @@
import test from 'ava'
import { randomText } from '../utils/helpers'
import { deleteTribe, leaveTribe } from '../utils/del'
import { createTribe, joinTribe } from '../utils/save'
import {
sendTribeMessageAndCheckDecryption,
getTribeMessages,
markUnread,
readMessages,
} from '../utils/msg'
import nodes from '../nodes'
/*
npx ava src/tests/controllers/deleteMessages.test.ts --verbose --serial --timeout=2m
*/
test('test message mark unread: create tribe, join tribe, send messages, read messages, mark unread messages, check number of messages, leave tribe, delete tribe', async (t) => {
await unreadMessages(t, 0, 1, 2)
})
export async function unreadMessages(t, index1, index2, index3) {
//TWO NODES SEND IMAGES WITHIN A TRIBE ===>
let node1 = nodes[index1]
let node2 = nodes[index2]
let node3 = nodes[index3]
t.truthy(node3, 'this test requires three nodes')
console.log(
`Checking boost messages in tribe for ${node1.alias} and ${node2.alias} and ${node3.alias}`
)
//NODE1 CREATES A TRIBE
let tribe = await createTribe(t, node1)
t.truthy(tribe, 'tribe should have been created by node1')
//NODE2 JOINS TRIBE CREATED BY NODE1
if (node1.routeHint) tribe.owner_route_hint = node1.routeHint
let join = await joinTribe(t, node2, tribe)
t.true(join, 'node2 should join tribe')
//NODE3 JOINS TRIBE CREATED BY NODE1
if (node1.routeHint) tribe.owner_route_hint = node1.routeHint
let join2 = await joinTribe(t, node3, tribe)
t.true(join2, 'node3 should join tribe')
//NODE1 SENDS A MESSAGE IN THE TRIBE AND NODE2 CHECKS TO SEE IF THEY RECEIVED THE MESSAGE
const text = randomText()
let tribeMessage1 = await sendTribeMessageAndCheckDecryption(
t,
node1,
node2,
text,
tribe
)
t.truthy(tribeMessage1, 'node1 should send message to tribe')
//NODE2 SENDS A MESSAGE IN THE TRIBE AND NODE3 CHECKS TO SEE IF THEY RECEIVED THE MESSAGE
const text2 = randomText()
let tribeMessage2 = await sendTribeMessageAndCheckDecryption(
t,
node2,
node3,
text2,
tribe
)
t.truthy(tribeMessage2, 'node2 should send message to tribe')
//NODE3 SENDS A MESSAGE IN THE TRIBE AND NODE1 CHECKS TO SEE IF THEY RECEIVED THE MESSAGE
const text3 = randomText()
let tribeMessage3 = await sendTribeMessageAndCheckDecryption(
t,
node3,
node1,
text3,
tribe
)
t.truthy(tribeMessage3, 'node3 should send message to tribe')
const text4 = randomText()
let tribeMessage4 = await sendTribeMessageAndCheckDecryption(
t,
node3,
node1,
text4,
tribe
)
t.truthy(tribeMessage4, 'node3 should send message to tribe')
const text5 = randomText()
let tribeMessage5 = await sendTribeMessageAndCheckDecryption(
t,
node3,
node1,
text5,
tribe
)
t.truthy(tribeMessage5, 'node3 should send message to tribe')
const text6 = randomText()
let tribeMessage6 = await sendTribeMessageAndCheckDecryption(
t,
node3,
node1,
text6,
tribe
)
t.truthy(tribeMessage6, 'node3 should send message to tribe')
const text7 = randomText()
let tribeMessage7 = await sendTribeMessageAndCheckDecryption(
t,
node3,
node1,
text7,
tribe
)
t.truthy(tribeMessage7, 'node3 should send message to tribe')
const text8 = randomText()
let tribeMessage8 = await sendTribeMessageAndCheckDecryption(
t,
node3,
node1,
text8,
tribe
)
t.truthy(tribeMessage8, 'node3 should send message to tribe')
const tribeMessages = await getTribeMessages(t, node1, tribe)
t.true(
tribeMessages.length === 10,
'The total number of message left should be 10'
)
await readMessages(node1, tribe)
// Mark messaages as read here
const tribeMessages1 = await getTribeMessages(t, node1, tribe)
t.true(tribeMessages1[0].chat.seen === 1, 'last message should be read')
// check that we have less message
// mark messages as unread
await markUnread(node1, tribe)
// check that we have more messages now
const tribeMessages2 = await getTribeMessages(t, node1, tribe)
t.true(tribeMessages2[0].chat.seen === 0, 'last message should be unread')
//NODE2 LEAVES TRIBE
let left2 = await leaveTribe(t, node2, tribe)
t.true(left2, 'node2 should leave tribe')
//NODE3 LEAVES TRIBE
let left3 = await leaveTribe(t, node3, tribe)
t.true(left3, 'node3 should leave tribe')
//NODE1 DELETES TRIBE
let delTribe2 = await deleteTribe(t, node1, tribe)
t.true(delTribe2, 'node1 should delete tribe')
}

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