Browse Source

merge master

loopout2
Evan Feenstra 4 years ago
parent
commit
86b65701b2
  1. 2
      Dockerfile
  2. 3
      dist/src/controllers/bots.js
  3. 2
      dist/src/controllers/bots.js.map
  4. 13
      dist/src/controllers/chatTribes.js
  5. 2
      dist/src/controllers/chatTribes.js.map
  6. 5
      dist/src/controllers/chats.js
  7. 2
      dist/src/controllers/chats.js.map
  8. 56
      dist/src/controllers/confirmations.js
  9. 2
      dist/src/controllers/confirmations.js.map
  10. 3
      dist/src/controllers/index.js
  11. 2
      dist/src/controllers/index.js.map
  12. 4
      dist/src/models/ts/chat.js
  13. 2
      dist/src/models/ts/chat.js.map
  14. 7
      dist/src/network/intercept.js
  15. 2
      dist/src/network/intercept.js.map
  16. 4
      dist/src/utils/case.js
  17. 2
      dist/src/utils/case.js.map
  18. 1
      dist/src/utils/setup.js
  19. 2
      dist/src/utils/setup.js.map
  20. 6
      dist/src/utils/tribes.js
  21. 2
      dist/src/utils/tribes.js.map
  22. 6
      docker/create_wallet.sh
  23. 3
      src/controllers/bots.ts
  24. 11
      src/controllers/chatTribes.ts
  25. 4
      src/controllers/chats.ts
  26. 63
      src/controllers/confirmations.ts
  27. 4
      src/controllers/index.ts
  28. 3
      src/models/ts/chat.ts
  29. 7
      src/network/intercept.ts
  30. 3
      src/utils/case.ts
  31. 1
      src/utils/setup.ts
  32. 6
      src/utils/tribes.ts

2
Dockerfile

@ -8,7 +8,7 @@ ENV GODEBUG netdns=cgo
# Pass a tag, branch or a commit using build-arg. This allows a docker
# image to be built from a specified Git state. The default image
# will use the Git tip of master by default.
ARG checkout="v0.10.0-beta"
ARG checkout="v0.11.1-beta"
# ARG checkout="master"
# Install dependencies and build the binaries.

3
dist/src/controllers/bots.js

@ -268,9 +268,10 @@ function postToBotServer(msg, bot, route) {
}
exports.postToBotServer = postToBotServer;
function buildBotPayload(msg) {
const chat_uuid = msg.chat && msg.chat.uuid;
const m = {
channel: {
id: msg.chat.uuid,
id: chat_uuid,
send: function () { },
},
reply: function () { },

2
dist/src/controllers/bots.js.map

File diff suppressed because one or more lines are too long

13
dist/src/controllers/chatTribes.js

@ -193,7 +193,7 @@ function receiveMemberRequest(payload) {
exports.receiveMemberRequest = receiveMemberRequest;
function editTribe(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const { name, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, } = req.body;
const { name, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, feed_url, } = req.body;
const { id } = req.params;
if (!id)
return res_1.failure(res, 'group id is required');
@ -220,6 +220,7 @@ function editTribe(req, res) {
unlisted,
is_private: req.body.private,
app_url,
feed_url,
deleted: false,
});
}
@ -245,6 +246,8 @@ function editTribe(req, res) {
obj.unlisted = unlisted;
if (app_url)
obj.appUrl = app_url;
if (feed_url)
obj.feedUrl = feed_url;
if (req.body.private || req.body.private === false)
obj.private = req.body.private;
if (Object.keys(obj).length > 0) {
@ -434,7 +437,10 @@ function replayChatHistory(chat, contact) {
content = JSON.parse(m.remoteMessageContent);
}
catch (e) { }
const dateString = m.date && m.date.toISOString();
let mdate = m.date;
if (!mdate)
mdate = new Date();
const dateString = mdate.toISOString();
let mediaKeyMap;
let newMediaTerms;
if (m.type === constants_1.default.message_types.attachment) {
@ -468,7 +474,7 @@ function replayChatHistory(chat, contact) {
});
}
exports.replayChatHistory = replayChatHistory;
function createTribeChatParams(owner, contactIds, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, is_private, app_url) {
function createTribeChatParams(owner, contactIds, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url) {
return __awaiter(this, void 0, void 0, function* () {
let date = new Date();
date.setMilliseconds(0);
@ -498,6 +504,7 @@ function createTribeChatParams(owner, contactIds, name, img, price_per_message,
unlisted: unlisted || false,
private: is_private || false,
appUrl: app_url || '',
feedUrl: feed_url || '',
};
});
}

2
dist/src/controllers/chatTribes.js.map

File diff suppressed because one or more lines are too long

5
dist/src/controllers/chats.js

@ -143,7 +143,7 @@ exports.mute = mute;
// or can u add contacts as members?
function createGroupChat(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const { name, is_tribe, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, } = req.body;
const { name, is_tribe, price_per_message, price_to_join, escrow_amount, escrow_millis, img, description, tags, unlisted, app_url, feed_url, } = req.body;
const contact_ids = req.body.contact_ids || [];
const members = {}; //{pubkey:{key,alias}, ...}
const owner = yield models_1.models.Contact.findOne({ where: { isOwner: true } });
@ -160,7 +160,7 @@ function createGroupChat(req, res) {
let chatParams = null;
let okToCreate = true;
if (is_tribe) {
chatParams = yield chatTribes_1.createTribeChatParams(owner, contact_ids, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, req.body.private, app_url);
chatParams = yield 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);
if (chatParams.uuid) {
// publish to tribe server
try {
@ -179,6 +179,7 @@ function createGroupChat(req, res) {
unlisted: unlisted || false,
is_private: req.body.private || false,
app_url,
feed_url,
});
}
catch (e) {

2
dist/src/controllers/chats.js.map

File diff suppressed because one or more lines are too long

56
dist/src/controllers/confirmations.js

@ -15,6 +15,7 @@ const socket = require("../utils/socket");
const jsonUtils = require("../utils/json");
const network = require("../network");
const constants_1 = require("../constants");
const res_1 = require("../utils/res");
function sendConfirmation({ chat, sender, msg_id }) {
if (!msg_id)
return;
@ -144,4 +145,59 @@ function receiveHeartbeat(payload) {
});
}
exports.receiveHeartbeat = receiveHeartbeat;
let heartbeats = {};
function healthcheck(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const pubkey = req.query.pubkey;
if (!(pubkey && pubkey.length === 66)) {
return res_1.failure(res, 'missing pubkey');
}
const owner = yield models_1.models.Contact.findOne({ where: { isOwner: true } });
const amt = 10;
const opts = {
amt,
dest: pubkey,
data: {
type: constants_1.default.message_types.heartbeat,
message: {
amount: amt,
},
sender: { pub_key: owner.publicKey }
}
};
try {
yield network.signAndSend(opts);
}
catch (e) {
res_1.failure(res, e);
return;
}
let i = 0;
let interval = setInterval(() => {
if (i >= 15) {
clearInterval(interval);
delete heartbeats[pubkey];
res_1.failure(res, 'no confimration received');
return;
}
if (heartbeats[pubkey]) {
res_1.success(res, 'success');
clearInterval(interval);
delete heartbeats[pubkey];
return;
}
i++;
}, 1000);
});
}
exports.healthcheck = healthcheck;
function receiveHeartbeatConfirmation(payload) {
return __awaiter(this, void 0, void 0, function* () {
console.log('=> received heartbeat confirmation');
const dat = payload.content || payload;
const sender_pub_key = dat.sender.pub_key;
heartbeats[sender_pub_key] = true;
});
}
exports.receiveHeartbeatConfirmation = receiveHeartbeatConfirmation;
//# sourceMappingURL=confirmations.js.map

2
dist/src/controllers/confirmations.js.map

File diff suppressed because one or more lines are too long

3
dist/src/controllers/index.js

@ -96,6 +96,7 @@ function set(app) {
app.get('/bots', bots.getBots);
app.post('/bot', bots.createBot);
app.delete('/bot/:id', bots.deleteBot);
app.get('/healthcheck', confirmations.healthcheck);
app.get('/version', function (req, res) {
return __awaiter(this, void 0, void 0, function* () {
const version = yield gitinfo_1.checkTag();
@ -147,6 +148,6 @@ exports.ACTIONS = {
[msgtypes.bot_cmd]: bots.receiveBotCmd,
[msgtypes.bot_res]: bots.receiveBotRes,
[msgtypes.heartbeat]: confirmations.receiveHeartbeat,
[msgtypes.heartbeat_confirmation]: () => { },
[msgtypes.heartbeat_confirmation]: confirmations.receiveHeartbeatConfirmation,
};
//# sourceMappingURL=index.js.map

2
dist/src/controllers/index.js.map

File diff suppressed because one or more lines are too long

4
dist/src/models/ts/chat.js

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

2
dist/src/models/ts/chat.js.map

@ -1 +1 @@
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/models/ts/chat.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAsE;AAGtE,IAAqB,IAAI,GAAzB,MAAqB,IAAK,SAAQ,4BAAW;CAwF5C,CAAA;AAhFC;IANC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,IAAI;KACpB,CAAC;;gCACQ;AAGV;IADC,6BAAM;;kCACK;AAGZ;IADC,6BAAM;;kCACK;AAGZ;IADC,6BAAM;;sCACS;AAGhB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;kCACZ;AAGZ;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;oCACV;AAGd;IADC,6BAAM;;wCACW;AAGlB;IADC,6BAAM;;qCACS;AAGhB;IADC,6BAAM;8BACI,IAAI;uCAAA;AAGf;IADC,6BAAM;8BACI,IAAI;uCAAA;AAOf;IALC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;qCACc;AAGhB;IADC,6BAAM;;sCACS;AAGhB;IADC,6BAAM;;6CACgB;AAGvB;IADC,6BAAM;;kCACK;AAGZ;IADC,6BAAM;;yCACY;AAGnB;IADC,6BAAM;;6CACgB;AAGvB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACJ;AAGpB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACJ;AAOpB;IALC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;KAEpB,CAAC;;sCACe;AAGjB;IADC,6BAAM;;qCACS;AAGhB;IADC,6BAAM;;yCACY;AAOnB;IALC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;kCACW;AAGb;IADC,6BAAM;;oCACO;AAtFK,IAAI;IADxB,4BAAK,CAAC,EAAC,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAC,CAAC;GACjC,IAAI,CAwFxB;kBAxFoB,IAAI"}
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/models/ts/chat.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAsE;AAGtE,IAAqB,IAAI,GAAzB,MAAqB,IAAK,SAAQ,4BAAW;CA2F5C,CAAA;AAnFC;IANC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,IAAI;KACpB,CAAC;;gCACQ;AAGV;IADC,6BAAM;;kCACK;AAGZ;IADC,6BAAM;;kCACK;AAGZ;IADC,6BAAM;;sCACS;AAGhB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;kCACZ;AAGZ;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;oCACV;AAGd;IADC,6BAAM;;wCACW;AAGlB;IADC,6BAAM;;qCACS;AAGhB;IADC,6BAAM;8BACI,IAAI;uCAAA;AAGf;IADC,6BAAM;8BACI,IAAI;uCAAA;AAOf;IALC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;qCACc;AAGhB;IADC,6BAAM;;sCACS;AAGhB;IADC,6BAAM;;6CACgB;AAGvB;IADC,6BAAM;;kCACK;AAGZ;IADC,6BAAM;;yCACY;AAGnB;IADC,6BAAM;;6CACgB;AAGvB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACJ;AAGpB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACJ;AAOpB;IALC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;KAEpB,CAAC;;sCACe;AAGjB;IADC,6BAAM;;qCACS;AAGhB;IADC,6BAAM;;yCACY;AAOnB;IALC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;kCACW;AAGb;IADC,6BAAM;;oCACO;AAGd;IADC,6BAAM;;qCACQ;AAzFI,IAAI;IADxB,4BAAK,CAAC,EAAC,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAC,CAAC;GACjC,IAAI,CA2FxB;kBA3FoB,IAAI"}

7
dist/src/network/intercept.js

@ -26,10 +26,11 @@ function isBotMsg(msg, sentByMe) {
if (msgType === constants_1.default.message_types.bot_res) {
return false; // bot res msg type not for processing
}
const uuid = msg.chat && msg.chat.uuid;
if (!uuid)
return false;
const chat = yield models_1.models.Chat.findOne({
where: {
uuid: msg.chat.uuid
}
where: { uuid }
});
if (!chat)
return false;

2
dist/src/network/intercept.js.map

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

4
dist/src/utils/case.js

@ -8,7 +8,9 @@ function toSnake(obj) {
for (let [key, value] of Object.entries(obj)) {
if (dateKeys.includes(key) && value) {
const v = value;
const d = new Date(v);
let d = new Date(v);
if (isNaN(d.getTime()))
d = new Date();
ret[changeCase.snakeCase(key)] = d.toISOString();
}
else if (boolKeys.includes(key)) {

2
dist/src/utils/case.js.map

@ -1 +1 @@
{"version":3,"file":"case.js","sourceRoot":"","sources":["../../../src/utils/case.ts"],"names":[],"mappings":";;AAAA,0CAA0C;AAE1C,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAC,WAAW,EAAC,WAAW,EAAC,YAAY,EAAC,YAAY,CAAC,CAAA;AAC3E,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAC,SAAS,EAAC,SAAS,CAAC,CAAA;AAElD,SAAS,OAAO,CAAC,GAAG;IAChB,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC1C,IAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,EAAC;YAC/B,MAAM,CAAC,GAAQ,KAAK,CAAA;YACpB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YACrB,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;SACnD;aAAM,IAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9B,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAE,KAAK,KAAG,GAAG,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA;SAC7D;aAAM;YACH,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;SACzC;KACJ;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAUO,0BAAO;AARf,SAAS,OAAO,CAAC,GAAG;IAChB,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC1C,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;KACzC;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAEgB,0BAAO"}
{"version":3,"file":"case.js","sourceRoot":"","sources":["../../../src/utils/case.ts"],"names":[],"mappings":";;AAAA,0CAA0C;AAE1C,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAC,WAAW,EAAC,WAAW,EAAC,YAAY,EAAC,YAAY,CAAC,CAAA;AAC3E,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAC,SAAS,EAAC,SAAS,CAAC,CAAA;AAElD,SAAS,OAAO,CAAC,GAAG;IAChB,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC1C,IAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,EAAC;YAC/B,MAAM,CAAC,GAAQ,KAAK,CAAA;YACpB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAAE,CAAC,GAAC,IAAI,IAAI,EAAE,CAAA;YACnC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;SACnD;aAAM,IAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9B,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAE,KAAK,KAAG,GAAG,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA;SAC7D;aAAM;YACH,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;SACzC;KACJ;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAUO,0BAAO;AARf,SAAS,OAAO,CAAC,GAAG;IAChB,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC1C,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;KACzC;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAEgB,0BAAO"}

1
dist/src/utils/setup.js

@ -94,6 +94,7 @@ function migrate() {
}
catch (e) { }
addTableColumn('sphinx_chats', 'app_url');
addTableColumn('sphinx_chats', 'feed_url');
try {
yield models_1.sequelize.query(`CREATE UNIQUE INDEX chat_member_index ON sphinx_chat_members(chat_id, contact_id);`);
}

2
dist/src/utils/setup.js.map

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

6
dist/src/utils/tribes.js

@ -97,7 +97,7 @@ function publish(topic, msg, cb) {
});
}
exports.publish = publish;
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 }) {
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 }) {
return __awaiter(this, void 0, void 0, function* () {
try {
yield node_fetch_1.default('https://' + host + '/tribes', {
@ -113,6 +113,7 @@ function declare({ uuid, name, description, tags, img, group_key, host, price_pe
unlisted: unlisted || false,
private: is_private || false,
app_url: app_url || '',
feed_url: feed_url || ''
}),
headers: { 'Content-Type': 'application/json' }
});
@ -125,7 +126,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, deleted }) {
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, deleted }) {
return __awaiter(this, void 0, void 0, function* () {
try {
const token = yield genSignedTimestamp();
@ -143,6 +144,7 @@ function edit({ uuid, host, name, description, tags, img, price_per_message, pri
private: is_private || false,
deleted: deleted || false,
app_url: app_url || '',
feed_url: feed_url || ''
}),
headers: { 'Content-Type': 'application/json' }
});

2
dist/src/utils/tribes.js.map

File diff suppressed because one or more lines are too long

6
docker/create_wallet.sh

@ -19,8 +19,7 @@ match_max 100000
expect -exact "Input wallet password: "
send -- "$WALLET_PASSWORD\r"
expect -exact "\r
Confirm password:\r
"
Confirm password: "
send -- "$WALLET_PASSWORD\r"
expect -exact "\r
\r
@ -32,7 +31,6 @@ Your cipher seed can optionally be encrypted.\r
Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase): "
send -- "$WALLET_PASSPHRASE\r"
expect -exact "\r
Confirm password:\r
"
Confirm password: "
send -- "$WALLET_PASSPHRASE\r"
expect eof

3
src/controllers/bots.ts

@ -258,9 +258,10 @@ export async function postToBotServer(msg, bot, route:string): Promise<boolean>
}
export function buildBotPayload(msg:Msg): SphinxBot.Message {
const chat_uuid = msg.chat&&msg.chat.uuid
const m = <SphinxBot.Message>{
channel:{
id: msg.chat.uuid,
id: chat_uuid,
send:function(){},
},
reply:function(){},

11
src/controllers/chatTribes.ts

@ -200,6 +200,7 @@ export async function editTribe(req, res) {
tags,
unlisted,
app_url,
feed_url,
} = req.body
const { id } = req.params
@ -230,6 +231,7 @@ export async function editTribe(req, res) {
unlisted,
is_private: req.body.private,
app_url,
feed_url,
deleted: false,
})
} catch(e) {
@ -247,6 +249,7 @@ export async function editTribe(req, res) {
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(req.body.private||req.body.private===false) obj.private = req.body.private
if(Object.keys(obj).length>0) {
await chat.update(obj)
@ -435,7 +438,10 @@ export async function replayChatHistory(chat, contact) {
let content = ''
try {content = JSON.parse(m.remoteMessageContent)} catch(e) {}
const dateString = m.date&&m.date.toISOString()
let mdate = m.date
if(!mdate) mdate = new Date()
const dateString = mdate.toISOString()
let mediaKeyMap
let newMediaTerms
if(m.type===constants.message_types.attachment) {
@ -473,7 +479,7 @@ export async function replayChatHistory(chat, contact) {
}
}
export async function createTribeChatParams(owner, contactIds, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, is_private, app_url): Promise<{[k:string]:any}> {
export async function createTribeChatParams(owner, contactIds, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, is_private, app_url, feed_url): Promise<{[k:string]:any}> {
let date = new Date()
date.setMilliseconds(0)
if (!(owner && contactIds && Array.isArray(contactIds))) {
@ -503,6 +509,7 @@ export async function createTribeChatParams(owner, contactIds, name, img, price_
unlisted: unlisted||false,
private: is_private||false,
appUrl: app_url||'',
feedUrl: feed_url||'',
}
}

4
src/controllers/chats.ts

@ -144,6 +144,7 @@ export async function createGroupChat(req, res) {
tags,
unlisted,
app_url,
feed_url,
} = req.body
const contact_ids = req.body.contact_ids||[]
@ -164,7 +165,7 @@ export async function createGroupChat(req, res) {
let chatParams:any = null
let okToCreate = true
if(is_tribe){
chatParams = await createTribeChatParams(owner, contact_ids, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, req.body.private, app_url)
chatParams = await createTribeChatParams(owner, contact_ids, name, img, price_per_message, price_to_join, escrow_amount, escrow_millis, unlisted, req.body.private, app_url, feed_url)
if(chatParams.uuid){
// publish to tribe server
try {
@ -183,6 +184,7 @@ export async function createGroupChat(req, res) {
unlisted: unlisted||false,
is_private: req.body.private||false,
app_url,
feed_url,
})
} catch(e) {
okToCreate = false

63
src/controllers/confirmations.ts

@ -4,6 +4,7 @@ import * as socket from '../utils/socket'
import * as jsonUtils from '../utils/json'
import * as network from '../network'
import constants from '../constants'
import { failure, success } from '../utils/res'
export function sendConfirmation({ chat, sender, msg_id }) {
if (!msg_id) return
@ -106,7 +107,7 @@ export async function receiveHeartbeat(payload) {
const sender_pub_key = dat.sender.pub_key
const receivedAmount = dat.message.amount
if (!(sender_pub_key && sender_pub_key.length===66)) return console.log('no sender')
if (!(sender_pub_key && sender_pub_key.length === 66)) return console.log('no sender')
if (!receivedAmount) return console.log('no amount')
const owner = await models.Contact.findOne({ where: { isOwner: true } })
@ -115,11 +116,11 @@ export async function receiveHeartbeat(payload) {
const amt = Math.max(amount || constants.min_sat_amount)
const opts = {
amt,
dest:sender_pub_key,
dest: sender_pub_key,
data: <network.Msg>{
type: constants.message_types.heartbeat_confirmation,
message: { amount: amt },
sender: {pub_key: owner.publicKey}
sender: { pub_key: owner.publicKey }
}
}
try {
@ -128,4 +129,60 @@ export async function receiveHeartbeat(payload) {
} catch (e) {
return false
}
}
let heartbeats:{[k:string]:boolean} = {}
export async function healthcheck(req, res) {
const pubkey:string = req.query.pubkey
if (!(pubkey&&pubkey.length===66)) {
return failure(res, 'missing pubkey')
}
const owner = await models.Contact.findOne({ where: { isOwner: true } })
const amt = 10
const opts = {
amt,
dest: pubkey,
data: <network.Msg>{
type: constants.message_types.heartbeat,
message: {
amount: amt,
},
sender: { pub_key: owner.publicKey }
}
}
try {
await network.signAndSend(opts)
} catch (e) {
failure(res, e)
return
}
let i = 0
let interval = setInterval(()=>{
if(i>=15) {
clearInterval(interval)
delete heartbeats[pubkey]
failure(res, 'no confimration received')
return
}
if(heartbeats[pubkey]) {
success(res, 'success')
clearInterval(interval)
delete heartbeats[pubkey]
return
}
i ++
}, 1000)
}
export async function receiveHeartbeatConfirmation(payload) {
console.log('=> received heartbeat confirmation')
const dat = payload.content || payload
const sender_pub_key = dat.sender.pub_key
heartbeats[sender_pub_key] = true
}

4
src/controllers/index.ts

@ -100,6 +100,8 @@ export async function set(app) {
app.post('/bot', bots.createBot)
app.delete('/bot/:id', bots.deleteBot)
app.get('/healthcheck', confirmations.healthcheck)
app.get('/version', async function(req,res) {
const version = await checkTag()
res.send({version})
@ -147,5 +149,5 @@ export const ACTIONS = {
[msgtypes.bot_cmd]: bots.receiveBotCmd,
[msgtypes.bot_res]: bots.receiveBotRes,
[msgtypes.heartbeat]: confirmations.receiveHeartbeat,
[msgtypes.heartbeat_confirmation]: ()=>{},
[msgtypes.heartbeat_confirmation]: confirmations.receiveHeartbeatConfirmation,
}

3
src/models/ts/chat.ts

@ -89,4 +89,7 @@ export default class Chat extends Model<Chat> {
@Column
appUrl: string
@Column
feedUrl: string
}

7
src/network/intercept.ts

@ -18,10 +18,11 @@ export async function isBotMsg(msg: Msg, sentByMe: boolean): Promise<boolean> {
if (msgType === constants.message_types.bot_res) {
return false // bot res msg type not for processing
}
const uuid = msg.chat && msg.chat.uuid
if(!uuid) return false
const chat = await models.Chat.findOne({
where: {
uuid: msg.chat.uuid
}
where: {uuid}
})
if (!chat) return false

3
src/utils/case.ts

@ -8,7 +8,8 @@ function toSnake(obj) {
for (let [key, value] of Object.entries(obj)) {
if(dateKeys.includes(key) && value){
const v: any = value
const d = new Date(v)
let d = new Date(v)
if(isNaN(d.getTime())) d=new Date()
ret[changeCase.snakeCase(key)] = d.toISOString()
} else if(boolKeys.includes(key)) {
ret[changeCase.snakeCase(key)] = (!value||value==='0')?0:1

1
src/utils/setup.ts

@ -85,6 +85,7 @@ async function migrate(){
} catch(e){}
addTableColumn('sphinx_chats', 'app_url')
addTableColumn('sphinx_chats', 'feed_url')
try{
await sequelize.query(`CREATE UNIQUE INDEX chat_member_index ON sphinx_chat_members(chat_id, contact_id);`)

6
src/utils/tribes.ts

@ -79,7 +79,7 @@ export function publish(topic, msg, cb) {
})
}
export async 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 }) {
export async 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 }) {
try {
await fetch('https://' + host + '/tribes', {
method: 'POST',
@ -94,6 +94,7 @@ export async function declare({ uuid, name, description, tags, img, group_key, h
unlisted: unlisted || false,
private: is_private || false,
app_url: app_url || '',
feed_url: feed_url || ''
}),
headers: { 'Content-Type': 'application/json' }
})
@ -104,7 +105,7 @@ export async function declare({ uuid, name, description, tags, img, group_key, h
}
}
export async 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, deleted }) {
export async 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, deleted }) {
try {
const token = await genSignedTimestamp()
await fetch('https://' + host + '/tribe?token=' + token, {
@ -121,6 +122,7 @@ export async function edit({ uuid, host, name, description, tags, img, price_per
private: is_private || false,
deleted: deleted || false,
app_url: app_url || '',
feed_url: feed_url || ''
}),
headers: { 'Content-Type': 'application/json' }
})

Loading…
Cancel
Save