-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathasana_client.js
69 lines (57 loc) · 1.66 KB
/
asana_client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
const axios = require("axios");
const { getInput } = require("@actions/core");
const { calcNextStatus, filterCustomFields } = require("./utils");
const { ASANA_API_URL, CUSTOM_FIELD_NAMES, NO_STATUS } = require("./constants");
const asanaClient = axios.create({
baseURL: ASANA_API_URL,
headers: {
Authorization: `Bearer ${getInput("asana-api-token", { required: true })}`,
},
});
const commonRequestParams = {
validateStatus: (statusCode) => statusCode < 400,
};
const getTaskStatuses = async (taskIds) => {
return Promise.all(
taskIds.map(async (taskId) => {
const { data } = await asanaClient.get(
`tasks/${taskId}`,
commonRequestParams
);
const { data: taskData } = data;
const statusFields = filterCustomFields(taskData);
if (statusFields === undefined) {
throw new Error(`No custom field found matching ${CUSTOM_FIELD_NAMES}`);
}
const { nextStatusName, nextStatusOptionId, isComplete } = calcNextStatus(
statusFields.enum_options
);
return {
taskId: taskData.gid,
customStatusFieldId: statusFields.gid,
currentStatusName: statusFields.enum_value?.name || NO_STATUS,
nextStatusName,
nextStatusOptionId,
isComplete,
};
})
);
};
const updateTaskStatus = async (
taskId,
customStatusFieldId,
newStatusId,
isComplete
) => {
const { data } = await asanaClient.put(`tasks/${taskId}`, {
...commonRequestParams,
data: {
completed: isComplete,
custom_fields: {
[customStatusFieldId]: newStatusId,
},
},
});
return data;
};
module.exports = { getTaskStatuses, updateTaskStatus };