← Public packages
@kody/google
Call Gmail, Calendar, Tasks, Drive, Docs, Sheets, People, YouTube, and Analytics through saved Google OAuth.
src/tasks.ts
177 lines · 4.7 KB · TypeScriptimport { requestGoogle } from './core.ts'
import type { GoogleAuthParams } from './accounts.ts'
import type { JsonObject } from './types.ts'
export type TasksListParams = GoogleAuthParams & {
maxResults?: number
pageToken?: string
}
export type TaskListGetParams = GoogleAuthParams & {
tasklist: string
}
export type TasksQueryParams = GoogleAuthParams & {
tasklist: string
maxResults?: number
pageToken?: string
showCompleted?: boolean
showHidden?: boolean
showDeleted?: boolean
dueMin?: string
dueMax?: string
completedMin?: string
completedMax?: string
updatedMin?: string
}
export type TaskGetParams = GoogleAuthParams & {
tasklist: string
task: string
}
export type TaskMutationParams = GoogleAuthParams & {
tasklist: string
task?: JsonObject
dryRun?: boolean
}
export type TaskUpdateParams = TaskMutationParams & {
taskId: string
}
export type TaskDeleteParams = GoogleAuthParams & {
tasklist: string
taskId: string
dryRun?: boolean
}
/**
* Return the Google Tasks helper namespace for task lists and tasks.
* @returns Helper namespace or overview for this Google product.
* @example
* import tasks from 'kody:@kody/google/tasks'
* const lists = await tasks().listTaskLists()
*/
export default function tasks() {
return { listTaskLists, getTaskList, listTasks, getTask, createTask, updateTask, deleteTask }
}
export async function listTaskLists(params: TasksListParams = {}): Promise<JsonObject> {
const { maxResults = 20, pageToken } = params
return (await requestGoogle({
...params,
api: 'google',
path: '/tasks/v1/users/@me/lists',
query: { maxResults, pageToken },
})) as JsonObject
}
export async function getTaskList(params: TaskListGetParams): Promise<JsonObject> {
if (!params.tasklist) throw new Error('getTaskList requires tasklist.')
return (await requestGoogle({
...params,
api: 'google',
path: '/tasks/v1/users/@me/lists/' + encodeURIComponent(params.tasklist),
})) as JsonObject
}
export async function listTasks(params: TasksQueryParams): Promise<JsonObject> {
if (!params.tasklist) throw new Error('listTasks requires tasklist.')
const {
tasklist,
maxResults = 20,
pageToken,
showCompleted,
showHidden,
showDeleted,
dueMin,
dueMax,
completedMin,
completedMax,
updatedMin,
} = params
return (await requestGoogle({
...params,
api: 'google',
path: '/tasks/v1/lists/' + encodeURIComponent(tasklist) + '/tasks',
query: {
maxResults,
pageToken,
showCompleted,
showHidden,
showDeleted,
dueMin,
dueMax,
completedMin,
completedMax,
updatedMin,
},
})) as JsonObject
}
export async function getTask(params: TaskGetParams): Promise<JsonObject> {
if (!params.tasklist) throw new Error('getTask requires tasklist.')
if (!params.task) throw new Error('getTask requires task.')
return (await requestGoogle({
...params,
api: 'google',
path:
'/tasks/v1/lists/' +
encodeURIComponent(params.tasklist) +
'/tasks/' +
encodeURIComponent(params.task),
})) as JsonObject
}
export async function createTask(params: TaskMutationParams): Promise<JsonObject> {
const { tasklist, task, dryRun = false } = params
if (!tasklist) throw new Error('createTask requires tasklist.')
if (!task || typeof task !== 'object') throw new Error('createTask requires task.')
if (dryRun) return { dryRun: true, account: params.account, tasklist, task }
return (await requestGoogle({
...params,
api: 'google',
method: 'POST',
path: '/tasks/v1/lists/' + encodeURIComponent(tasklist) + '/tasks',
body: task,
})) as JsonObject
}
export async function updateTask(params: TaskUpdateParams): Promise<JsonObject> {
const { tasklist, taskId, task, dryRun = false } = params
if (!tasklist) throw new Error('updateTask requires tasklist.')
if (!taskId) throw new Error('updateTask requires taskId.')
if (!task || typeof task !== 'object') throw new Error('updateTask requires task.')
if (dryRun) return { dryRun: true, account: params.account, tasklist, taskId, task }
return (await requestGoogle({
...params,
api: 'google',
method: 'PATCH',
path:
'/tasks/v1/lists/' +
encodeURIComponent(tasklist) +
'/tasks/' +
encodeURIComponent(taskId),
body: task,
})) as JsonObject
}
export async function deleteTask(params: TaskDeleteParams): Promise<JsonObject | null> {
const { tasklist, taskId, dryRun = false } = params
if (!tasklist) throw new Error('deleteTask requires tasklist.')
if (!taskId) throw new Error('deleteTask requires taskId.')
if (dryRun) return { dryRun: true, account: params.account, tasklist, taskId, wouldDelete: true }
await requestGoogle({
...params,
api: 'google',
method: 'DELETE',
path:
'/tasks/v1/lists/' +
encodeURIComponent(tasklist) +
'/tasks/' +
encodeURIComponent(taskId),
})
return null
}