type Asana = {
token: string;
};
/**
* Search tasks in a workspace
* To mirror the functionality of the Asana web app's advanced search feature, the Asana API has a task search endpoint that allows you to build complex filters to find and retrieve the exact data you need.
*/
export async function main(
auth: Asana,
workspace_gid: string,
opt_pretty: string | undefined,
opt_fields: string | undefined,
text: string | undefined,
resource_subtype: "default_task" | "milestone" | undefined,
assignee_any: string | undefined,
assignee_not: string | undefined,
portfolios_any: string | undefined,
projects_any: string | undefined,
projects_not: string | undefined,
projects_all: string | undefined,
sections_any: string | undefined,
sections_not: string | undefined,
sections_all: string | undefined,
tags_any: string | undefined,
tags_not: string | undefined,
tags_all: string | undefined,
teams_any: string | undefined,
followers_not: string | undefined,
created_by_any: string | undefined,
created_by_not: string | undefined,
assigned_by_any: string | undefined,
assigned_by_not: string | undefined,
liked_by_not: string | undefined,
commented_on_by_not: string | undefined,
due_on_before: string | undefined,
due_on_after: string | undefined,
due_on: string | undefined,
due_at_before: string | undefined,
due_at_after: string | undefined,
start_on_before: string | undefined,
start_on_after: string | undefined,
start_on: string | undefined,
created_on_before: string | undefined,
created_on_after: string | undefined,
created_on: string | undefined,
created_at_before: string | undefined,
created_at_after: string | undefined,
completed_on_before: string | undefined,
completed_on_after: string | undefined,
completed_on: string | undefined,
completed_at_before: string | undefined,
completed_at_after: string | undefined,
modified_on_before: string | undefined,
modified_on_after: string | undefined,
modified_on: string | undefined,
modified_at_before: string | undefined,
modified_at_after: string | undefined,
is_blocking: string | undefined,
is_blocked: string | undefined,
has_attachment: string | undefined,
completed: string | undefined,
is_subtask: string | undefined,
sort_by:
| "due_date"
| "created_at"
| "completed_at"
| "likes"
| "modified_at"
| undefined,
sort_ascending: string | undefined
) {
const url = new URL(
`https://app.asana.com/api/1.0/workspaces/${workspace_gid}/tasks/search`
);
for (const [k, v] of [
["opt_pretty", opt_pretty],
["opt_fields", opt_fields],
["text", text],
["resource_subtype", resource_subtype],
["assignee.any", assignee_any],
["assignee.not", assignee_not],
["portfolios.any", portfolios_any],
["projects.any", projects_any],
["projects.not", projects_not],
["projects.all", projects_all],
["sections.any", sections_any],
["sections.not", sections_not],
["sections.all", sections_all],
["tags.any", tags_any],
["tags.not", tags_not],
["tags.all", tags_all],
["teams.any", teams_any],
["followers.not", followers_not],
["created_by.any", created_by_any],
["created_by.not", created_by_not],
["assigned_by.any", assigned_by_any],
["assigned_by.not", assigned_by_not],
["liked_by.not", liked_by_not],
["commented_on_by.not", commented_on_by_not],
["due_on.before", due_on_before],
["due_on.after", due_on_after],
["due_on", due_on],
["due_at.before", due_at_before],
["due_at.after", due_at_after],
["start_on.before", start_on_before],
["start_on.after", start_on_after],
["start_on", start_on],
["created_on.before", created_on_before],
["created_on.after", created_on_after],
["created_on", created_on],
["created_at.before", created_at_before],
["created_at.after", created_at_after],
["completed_on.before", completed_on_before],
["completed_on.after", completed_on_after],
["completed_on", completed_on],
["completed_at.before", completed_at_before],
["completed_at.after", completed_at_after],
["modified_on.before", modified_on_before],
["modified_on.after", modified_on_after],
["modified_on", modified_on],
["modified_at.before", modified_at_before],
["modified_at.after", modified_at_after],
["is_blocking", is_blocking],
["is_blocked", is_blocked],
["has_attachment", has_attachment],
["completed", completed],
["is_subtask", is_subtask],
["sort_by", sort_by],
["sort_ascending", sort_ascending],
]) {
if (v !== undefined && v !== "") {
url.searchParams.append(k, v);
}
}
const response = await fetch(url, {
method: "GET",
headers: {
Authorization: "Bearer " + auth.token,
},
body: undefined,
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.json();
}
Submitted by hugo697 202 days ago