mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
Webhooks v2 (and other fixes) (#10265)
* begin implementing global webhooks * add checklist item scored webhook * add pet hatched and mount raised webhooks (no tests) * fix typo * add lvl up webhooks, remove corrupt notifications and reorganize pre-save hook * fix typo * add some tests, globalActivity webhook * fix bug in global activiy webhook and add more tests * add tests and fix typo for petHatched and mountRaised webhooks * fix errors and add tests for level up webhook * wip: add default data to all webhooks, change signature for WebhookSender.send (missing tests) * remove unused code * fix unit tests * fix chat webhooks * remove console * fix lint * add and fix webhook tests * add questStarted webhook and questActivity type * add unit tests * add finial tests and features
This commit is contained in:
@@ -176,7 +176,7 @@ api.createUserTasks = {
|
||||
});
|
||||
}
|
||||
|
||||
taskActivityWebhook.send(user.webhooks, {
|
||||
taskActivityWebhook.send(user, {
|
||||
type: 'created',
|
||||
task,
|
||||
});
|
||||
@@ -502,7 +502,7 @@ api.updateTask = {
|
||||
} else if (group && task.group.id && task.group.assignedUsers.length > 0) {
|
||||
await group.updateTask(savedTask);
|
||||
} else {
|
||||
taskActivityWebhook.send(user.webhooks, {
|
||||
taskActivityWebhook.send(user, {
|
||||
type: 'updated',
|
||||
task: savedTask,
|
||||
});
|
||||
@@ -654,7 +654,7 @@ api.scoreTask = {
|
||||
let resJsonData = _.assign({delta, _tmp: user._tmp}, userStats);
|
||||
res.respond(200, resJsonData);
|
||||
|
||||
taskScoredWebhook.send(user.webhooks, {
|
||||
taskScoredWebhook.send(user, {
|
||||
task,
|
||||
direction,
|
||||
delta,
|
||||
@@ -860,6 +860,12 @@ api.scoreCheckListItem = {
|
||||
let savedTask = await task.save();
|
||||
|
||||
res.respond(200, savedTask);
|
||||
|
||||
taskActivityWebhook.send(user, {
|
||||
type: 'checklistScored',
|
||||
task: savedTask,
|
||||
item,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1326,7 +1332,7 @@ api.deleteTask = {
|
||||
if (challenge) {
|
||||
challenge.removeTask(task);
|
||||
} else {
|
||||
taskActivityWebhook.send(user.webhooks, {
|
||||
taskActivityWebhook.send(user, {
|
||||
type: 'deleted',
|
||||
task,
|
||||
});
|
||||
|
||||
@@ -11,6 +11,9 @@ import {
|
||||
import * as Tasks from '../../models/task';
|
||||
import _ from 'lodash';
|
||||
import * as passwordUtils from '../../libs/password';
|
||||
import {
|
||||
userActivityWebhook,
|
||||
} from '../../libs/webhook';
|
||||
import {
|
||||
getUserInfo,
|
||||
sendTxn as txnEmail,
|
||||
@@ -906,8 +909,19 @@ api.hatch = {
|
||||
async handler (req, res) {
|
||||
let user = res.locals.user;
|
||||
let hatchRes = common.ops.hatch(user, req);
|
||||
|
||||
await user.save();
|
||||
|
||||
res.respond(200, ...hatchRes);
|
||||
|
||||
// Send webhook
|
||||
const petKey = `${req.params.egg}-${req.params.hatchingPotion}`;
|
||||
|
||||
userActivityWebhook.send(user, {
|
||||
type: 'petHatched',
|
||||
pet: petKey,
|
||||
message: hatchRes[1],
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
@@ -982,8 +996,21 @@ api.feed = {
|
||||
async handler (req, res) {
|
||||
let user = res.locals.user;
|
||||
let feedRes = common.ops.feed(user, req);
|
||||
|
||||
await user.save();
|
||||
|
||||
res.respond(200, ...feedRes);
|
||||
|
||||
// Send webhook
|
||||
const petValue = feedRes[0];
|
||||
|
||||
if (petValue === -1) { // evolved to mount
|
||||
userActivityWebhook.send(user, {
|
||||
type: 'mountRaised',
|
||||
pet: req.params.pet,
|
||||
message: feedRes[1],
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ let api = {};
|
||||
* @apiParam (Body) {String} url The webhook's URL
|
||||
* @apiParam (Body) {String} [label] A label to remind you what this webhook does
|
||||
* @apiParam (Body) {Boolean} [enabled=true] If the webhook should be enabled
|
||||
* @apiParam (Body) {Sring="taskActivity","groupChatReceived"} [type="taskActivity"] The webhook's type.
|
||||
* @apiParam (Body) {Sring="taskActivity","groupChatReceived","userActivity"} [type="taskActivity"] The webhook's type.
|
||||
* @apiParam (Body) {Object} [options] The webhook's options. Wil differ depending on type. Required for `groupChatReceived` type. If a webhook supports options, the default values are displayed in the examples below
|
||||
* @apiParamExample {json} Task Activity Example
|
||||
* {
|
||||
|
||||
Reference in New Issue
Block a user