@doist/todoist-sdk 8.4.0-next.2 → 8.5.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ import { z } from 'zod';
1
2
  import { ActivityEventSchema } from '../types/activity/types.js';
2
3
  import { BackupSchema } from '../types/backups/types.js';
3
4
  import { AttachmentSchema, CommentSchema } from '../types/comments/types.js';
@@ -6,167 +7,74 @@ import { IdMappingSchema, MovedIdSchema } from '../types/id-mappings/types.js';
6
7
  import { ProjectActivityStatsSchema, ProjectHealthSchema, ProjectHealthContextSchema, ProjectProgressSchema, WorkspaceInsightsSchema, } from '../types/insights/types.js';
7
8
  import { LabelSchema } from '../types/labels/types.js';
8
9
  import { ProductivityStatsSchema } from '../types/productivity/types.js';
9
- import { PersonalProjectSchema, WorkspaceProjectSchema, } from '../types/projects/types.js';
10
+ import { WorkspaceProjectSchema, ProjectSchema } from '../types/projects/types.js';
10
11
  import { SectionSchema } from '../types/sections/types.js';
12
+ import { SyncResponseSchema } from '../types/sync/response.js';
11
13
  import { TaskSchema } from '../types/tasks/types.js';
12
14
  import { UserSchema, CurrentUserSchema } from '../types/users/types.js';
13
15
  import { WorkspaceUserSchema, WorkspaceInvitationSchema, WorkspacePlanDetailsSchema, JoinWorkspaceResultSchema, WorkspaceSchema, MemberActivityInfoSchema, WorkspaceUserTaskSchema, } from '../types/workspaces/types.js';
14
16
  import { FilterSchema, CollaboratorSchema, CollaboratorStateSchema, FolderSchema, NoteSchema, TooltipsSchema, WorkspaceFilterSchema, WorkspaceGoalSchema, CalendarSchema, CalendarAccountSchema, ReminderSchema, LocationReminderSchema, CompletedInfoSchema, ViewOptionsSchema, ProjectViewOptionsDefaultsSchema, UserPlanLimitsSchema, LiveNotificationSchema, SyncWorkspaceSchema, SyncUserSchema, UserSettingsSchema, SuggestionSchema, } from '../types/sync/resources/index.js';
15
17
  function createValidator(schema) {
16
- return (input) => schema.parse(input);
17
- }
18
- function createArrayValidator(validateItem) {
19
- return (input) => {
20
- if (!Array.isArray(input)) {
21
- throw new TypeError(`Expected array, got ${typeof input}`);
22
- }
23
- return input.map(validateItem);
18
+ return {
19
+ validate: (input) => schema.parse(input),
20
+ validateArray: (input) => z.array(schema).parse(input),
24
21
  };
25
22
  }
26
23
  // Entity validators
27
- export const validateTask = createValidator(TaskSchema);
28
- export const validateTaskArray = createArrayValidator(validateTask);
29
- /**
30
- * Type guard to check if a project is a workspace project.
31
- * @param project The project to check
32
- * @returns True if the project is a workspace project
33
- */
34
- export function isWorkspaceProject(project) {
35
- return 'workspaceId' in project;
36
- }
37
- /**
38
- * Type guard to check if a project is a personal project.
39
- * @param project The project to check
40
- * @returns True if the project is a personal project
41
- */
42
- export function isPersonalProject(project) {
43
- return !isWorkspaceProject(project);
44
- }
24
+ export const { validate: validateTask, validateArray: validateTaskArray } = createValidator(TaskSchema);
45
25
  /**
46
26
  * Validates and parses a project input.
47
27
  * @param input The input to validate
48
28
  * @returns A validated project (either PersonalProject or WorkspaceProject)
49
29
  */
50
- export function validateProject(input) {
51
- if ('workspaceId' in input) {
52
- return WorkspaceProjectSchema.parse(input);
53
- }
54
- return PersonalProjectSchema.parse(input);
55
- }
56
- export function validateProjectArray(input) {
57
- if (!Array.isArray(input)) {
58
- throw new TypeError(`Expected array, got ${typeof input}`);
59
- }
60
- return input.map(validateProject);
61
- }
62
- export const validateWorkspaceProject = createValidator(WorkspaceProjectSchema);
63
- export const validateWorkspaceProjectArray = createArrayValidator(validateWorkspaceProject);
64
- export const validateSection = createValidator(SectionSchema);
65
- export const validateSectionArray = createArrayValidator(validateSection);
66
- export const validateLabel = createValidator(LabelSchema);
67
- export const validateLabelArray = createArrayValidator(validateLabel);
68
- export const validateComment = createValidator(CommentSchema);
69
- export const validateCommentArray = createArrayValidator(validateComment);
70
- export const validateUser = createValidator(UserSchema);
71
- export const validateUserArray = createArrayValidator(validateUser);
72
- export const validateProductivityStats = createValidator(ProductivityStatsSchema);
73
- export const validateCurrentUser = createValidator(CurrentUserSchema);
74
- export const validateActivityEvent = createValidator(ActivityEventSchema);
75
- export const validateActivityEventArray = createArrayValidator(validateActivityEvent);
76
- export const validateAttachment = createValidator(AttachmentSchema);
77
- export const validateWorkspaceUser = createValidator(WorkspaceUserSchema);
78
- export function validateWorkspaceUserArray(input) {
79
- if (!Array.isArray(input)) {
80
- throw new Error(`Expected array for workspace users, got ${typeof input}`);
81
- }
82
- return input.map(validateWorkspaceUser);
83
- }
84
- export const validateWorkspaceInvitation = createValidator(WorkspaceInvitationSchema);
85
- export const validateWorkspaceInvitationArray = createArrayValidator(validateWorkspaceInvitation);
86
- export const validateWorkspacePlanDetails = createValidator(WorkspacePlanDetailsSchema);
87
- export const validateJoinWorkspaceResult = createValidator(JoinWorkspaceResultSchema);
88
- export const validateWorkspace = createValidator(WorkspaceSchema);
89
- export const validateWorkspaceArray = createArrayValidator(validateWorkspace);
90
- export const validateMemberActivityInfo = createValidator(MemberActivityInfoSchema);
91
- export const validateMemberActivityInfoArray = createArrayValidator(validateMemberActivityInfo);
92
- export const validateWorkspaceUserTask = createValidator(WorkspaceUserTaskSchema);
93
- export const validateWorkspaceUserTaskArray = createArrayValidator(validateWorkspaceUserTask);
94
- export const validateProjectActivityStats = createValidator(ProjectActivityStatsSchema);
95
- export const validateProjectHealth = createValidator(ProjectHealthSchema);
96
- export const validateProjectHealthContext = createValidator(ProjectHealthContextSchema);
97
- export const validateProjectProgress = createValidator(ProjectProgressSchema);
98
- export const validateWorkspaceInsights = createValidator(WorkspaceInsightsSchema);
99
- export const validateBackup = createValidator(BackupSchema);
100
- export const validateBackupArray = createArrayValidator(validateBackup);
101
- export const validateIdMapping = createValidator(IdMappingSchema);
102
- export const validateIdMappingArray = createArrayValidator(validateIdMapping);
103
- export const validateMovedId = createValidator(MovedIdSchema);
104
- export const validateMovedIdArray = createArrayValidator(validateMovedId);
30
+ export const { validate: validateProject, validateArray: validateProjectArray } = createValidator(ProjectSchema);
31
+ export const { validate: validateWorkspaceProject, validateArray: validateWorkspaceProjectArray } = createValidator(WorkspaceProjectSchema);
32
+ export const { validate: validateSection, validateArray: validateSectionArray } = createValidator(SectionSchema);
33
+ export const { validate: validateLabel, validateArray: validateLabelArray } = createValidator(LabelSchema);
34
+ export const { validate: validateComment, validateArray: validateCommentArray } = createValidator(CommentSchema);
35
+ export const { validate: validateUser, validateArray: validateUserArray } = createValidator(UserSchema);
36
+ export const { validate: validateProductivityStats } = createValidator(ProductivityStatsSchema);
37
+ export const { validate: validateCurrentUser } = createValidator(CurrentUserSchema);
38
+ export const { validate: validateActivityEvent, validateArray: validateActivityEventArray } = createValidator(ActivityEventSchema);
39
+ export const { validate: validateAttachment } = createValidator(AttachmentSchema);
40
+ export const { validate: validateWorkspaceUser, validateArray: validateWorkspaceUserArray } = createValidator(WorkspaceUserSchema);
41
+ export const { validate: validateWorkspaceInvitation, validateArray: validateWorkspaceInvitationArray, } = createValidator(WorkspaceInvitationSchema);
42
+ export const { validate: validateWorkspacePlanDetails } = createValidator(WorkspacePlanDetailsSchema);
43
+ export const { validate: validateJoinWorkspaceResult } = createValidator(JoinWorkspaceResultSchema);
44
+ export const { validate: validateWorkspace, validateArray: validateWorkspaceArray } = createValidator(WorkspaceSchema);
45
+ export const { validate: validateMemberActivityInfo, validateArray: validateMemberActivityInfoArray, } = createValidator(MemberActivityInfoSchema);
46
+ export const { validate: validateWorkspaceUserTask, validateArray: validateWorkspaceUserTaskArray, } = createValidator(WorkspaceUserTaskSchema);
47
+ export const { validate: validateProjectActivityStats } = createValidator(ProjectActivityStatsSchema);
48
+ export const { validate: validateProjectHealth } = createValidator(ProjectHealthSchema);
49
+ export const { validate: validateProjectHealthContext } = createValidator(ProjectHealthContextSchema);
50
+ export const { validate: validateProjectProgress } = createValidator(ProjectProgressSchema);
51
+ export const { validate: validateWorkspaceInsights } = createValidator(WorkspaceInsightsSchema);
52
+ export const { validate: validateBackup, validateArray: validateBackupArray } = createValidator(BackupSchema);
53
+ export const { validate: validateIdMapping, validateArray: validateIdMappingArray } = createValidator(IdMappingSchema);
54
+ export const { validate: validateMovedId, validateArray: validateMovedIdArray } = createValidator(MovedIdSchema);
105
55
  // Sync resource validators
106
- export const validateFilter = createValidator(FilterSchema);
107
- export const validateFilterArray = createArrayValidator(validateFilter);
108
- export const validateCollaborator = createValidator(CollaboratorSchema);
109
- export const validateCollaboratorArray = createArrayValidator(validateCollaborator);
110
- export const validateCollaboratorState = createValidator(CollaboratorStateSchema);
111
- export const validateCollaboratorStateArray = createArrayValidator(validateCollaboratorState);
112
- export const validateFolder = createValidator(FolderSchema);
113
- export const validateFolderArray = createArrayValidator(validateFolder);
114
- export const validateGoal = createValidator(GoalSchema);
115
- export const validateGoalArray = createArrayValidator(validateGoal);
116
- export const validateNote = createValidator(NoteSchema);
117
- export const validateNoteArray = createArrayValidator(validateNote);
118
- export const validateTooltips = createValidator(TooltipsSchema);
119
- export const validateWorkspaceFilter = createValidator(WorkspaceFilterSchema);
120
- export const validateWorkspaceFilterArray = createArrayValidator(validateWorkspaceFilter);
121
- export const validateWorkspaceGoal = createValidator(WorkspaceGoalSchema);
122
- export const validateWorkspaceGoalArray = createArrayValidator(validateWorkspaceGoal);
123
- export const validateCalendar = createValidator(CalendarSchema);
124
- export const validateCalendarArray = createArrayValidator(validateCalendar);
125
- export const validateCalendarAccount = createValidator(CalendarAccountSchema);
126
- export const validateCalendarAccountArray = createArrayValidator(validateCalendarAccount);
127
- export const validateReminder = createValidator(ReminderSchema);
128
- export const validateReminderArray = createArrayValidator(validateReminder);
129
- export const validateLocationReminder = createValidator(LocationReminderSchema);
130
- export const validateLocationReminderArray = createArrayValidator(validateLocationReminder);
131
- export const validateCompletedInfo = createValidator(CompletedInfoSchema);
132
- export const validateCompletedInfoArray = createArrayValidator(validateCompletedInfo);
133
- export const validateViewOptions = createValidator(ViewOptionsSchema);
134
- export const validateViewOptionsArray = createArrayValidator(validateViewOptions);
135
- export const validateProjectViewOptionsDefaults = createValidator(ProjectViewOptionsDefaultsSchema);
136
- export const validateProjectViewOptionsDefaultsArray = createArrayValidator(validateProjectViewOptionsDefaults);
137
- export const validateUserPlanLimits = createValidator(UserPlanLimitsSchema);
138
- export const validateLiveNotification = createValidator(LiveNotificationSchema);
139
- export const validateLiveNotificationArray = createArrayValidator(validateLiveNotification);
140
- export const validateSyncWorkspace = createValidator(SyncWorkspaceSchema);
141
- export const validateSyncWorkspaceArray = createArrayValidator(validateSyncWorkspace);
142
- export const validateSyncUser = createValidator(SyncUserSchema);
143
- export const validateUserSettings = createValidator(UserSettingsSchema);
144
- export const validateSuggestion = createValidator(SuggestionSchema);
145
- export const validateSuggestionArray = createArrayValidator(validateSuggestion);
56
+ export const { validate: validateFilter, validateArray: validateFilterArray } = createValidator(FilterSchema);
57
+ export const { validate: validateCollaborator, validateArray: validateCollaboratorArray } = createValidator(CollaboratorSchema);
58
+ export const { validate: validateCollaboratorState, validateArray: validateCollaboratorStateArray, } = createValidator(CollaboratorStateSchema);
59
+ export const { validate: validateFolder, validateArray: validateFolderArray } = createValidator(FolderSchema);
60
+ export const { validate: validateGoal, validateArray: validateGoalArray } = createValidator(GoalSchema);
61
+ export const { validate: validateNote, validateArray: validateNoteArray } = createValidator(NoteSchema);
62
+ export const { validate: validateTooltips } = createValidator(TooltipsSchema);
63
+ export const { validate: validateWorkspaceFilter, validateArray: validateWorkspaceFilterArray } = createValidator(WorkspaceFilterSchema);
64
+ export const { validate: validateWorkspaceGoal, validateArray: validateWorkspaceGoalArray } = createValidator(WorkspaceGoalSchema);
65
+ export const { validate: validateCalendar, validateArray: validateCalendarArray } = createValidator(CalendarSchema);
66
+ export const { validate: validateCalendarAccount, validateArray: validateCalendarAccountArray } = createValidator(CalendarAccountSchema);
67
+ export const { validate: validateReminder, validateArray: validateReminderArray } = createValidator(ReminderSchema);
68
+ export const { validate: validateLocationReminder, validateArray: validateLocationReminderArray } = createValidator(LocationReminderSchema);
69
+ export const { validate: validateCompletedInfo, validateArray: validateCompletedInfoArray } = createValidator(CompletedInfoSchema);
70
+ export const { validate: validateViewOptions, validateArray: validateViewOptionsArray } = createValidator(ViewOptionsSchema);
71
+ export const { validate: validateProjectViewOptionsDefaults, validateArray: validateProjectViewOptionsDefaultsArray, } = createValidator(ProjectViewOptionsDefaultsSchema);
72
+ export const { validate: validateUserPlanLimits } = createValidator(UserPlanLimitsSchema);
73
+ export const { validate: validateLiveNotification, validateArray: validateLiveNotificationArray } = createValidator(LiveNotificationSchema);
74
+ export const { validate: validateSyncWorkspace, validateArray: validateSyncWorkspaceArray } = createValidator(SyncWorkspaceSchema);
75
+ export const { validate: validateSyncUser } = createValidator(SyncUserSchema);
76
+ export const { validate: validateUserSettings } = createValidator(UserSettingsSchema);
77
+ export const { validate: validateSuggestion, validateArray: validateSuggestionArray } = createValidator(SuggestionSchema);
146
78
  export function parseSyncResponse(raw) {
147
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, raw), ('items' in raw ? { items: validateTaskArray(raw.items) } : {})), ('projects' in raw ? { projects: validateProjectArray(raw.projects) } : {})), ('sections' in raw ? { sections: validateSectionArray(raw.sections) } : {})), ('labels' in raw ? { labels: validateLabelArray(raw.labels) } : {})), ('notes' in raw ? { notes: validateNoteArray(raw.notes) } : {})), ('projectNotes' in raw ? { projectNotes: validateNoteArray(raw.projectNotes) } : {})), ('filters' in raw ? { filters: validateFilterArray(raw.filters) } : {})), ('reminders' in raw ? { reminders: validateReminderArray(raw.reminders) } : {})), ('remindersLocation' in raw
148
- ? { remindersLocation: validateLocationReminderArray(raw.remindersLocation) }
149
- : {})), ('user' in raw ? { user: validateSyncUser(raw.user) } : {})), ('liveNotifications' in raw
150
- ? { liveNotifications: validateLiveNotificationArray(raw.liveNotifications) }
151
- : {})), ('collaborators' in raw
152
- ? { collaborators: validateCollaboratorArray(raw.collaborators) }
153
- : {})), ('collaboratorStates' in raw
154
- ? { collaboratorStates: validateCollaboratorStateArray(raw.collaboratorStates) }
155
- : {})), ('userSettings' in raw ? { userSettings: validateUserSettings(raw.userSettings) } : {})), ('userPlanLimits' in raw
156
- ? { userPlanLimits: validateUserPlanLimits(raw.userPlanLimits) }
157
- : {})), ('completedInfo' in raw
158
- ? { completedInfo: validateCompletedInfoArray(raw.completedInfo) }
159
- : {})), ('workspaces' in raw ? { workspaces: validateSyncWorkspaceArray(raw.workspaces) } : {})), ('workspaceUsers' in raw
160
- ? { workspaceUsers: validateWorkspaceUserArray(raw.workspaceUsers) }
161
- : {})), ('workspaceFilters' in raw
162
- ? { workspaceFilters: validateWorkspaceFilterArray(raw.workspaceFilters) }
163
- : {})), ('viewOptions' in raw ? { viewOptions: validateViewOptionsArray(raw.viewOptions) } : {})), ('projectViewOptionsDefaults' in raw
164
- ? {
165
- projectViewOptionsDefaults: validateProjectViewOptionsDefaultsArray(raw.projectViewOptionsDefaults),
166
- }
167
- : {})), ('folders' in raw ? { folders: validateFolderArray(raw.folders) } : {})), ('goals' in raw ? { goals: validateGoalArray(raw.goals) } : {})), ('workspaceGoals' in raw
168
- ? { workspaceGoals: validateWorkspaceGoalArray(raw.workspaceGoals) }
169
- : {})), ('calendars' in raw ? { calendars: validateCalendarArray(raw.calendars) } : {})), ('calendarAccounts' in raw
170
- ? { calendarAccounts: validateCalendarAccountArray(raw.calendarAccounts) }
171
- : {})), ('suggestions' in raw ? { suggestions: validateSuggestionArray(raw.suggestions) } : {})), ('tooltips' in raw ? { tooltips: validateTooltips(raw.tooltips) } : {}));
79
+ return SyncResponseSchema.parse(raw);
172
80
  }
@@ -260,6 +260,11 @@ export declare class TodoistApi {
260
260
  /**
261
261
  * Deletes a project by its ID.
262
262
  *
263
+ * If the project is a workspace project, it must have been
264
+ * archived first before it can be deleted, otherwise calling
265
+ * this function will result in an error. Personal projects can
266
+ * be deleted regardless of their archived status.
267
+ *
263
268
  * @param id - The unique identifier of the project to delete.
264
269
  * @param requestId - Optional custom identifier for the request.
265
270
  * @returns A promise that resolves to `true` if successful.
@@ -192,6 +192,61 @@ export type PersonalProject = z.infer<typeof PersonalProjectSchema>;
192
192
  * @see https://developer.todoist.com/api/v1/#tag/Projects
193
193
  */
194
194
  export type WorkspaceProject = z.infer<typeof WorkspaceProjectSchema>;
195
+ /**
196
+ * Schema for any project type in Todoist (personal or workspace).
197
+ * Dispatches to WorkspaceProjectSchema when workspaceId is present, PersonalProjectSchema otherwise.
198
+ */
199
+ export declare const ProjectSchema: z.ZodPipe<z.ZodUnknown, z.ZodTransform<{
200
+ url: string;
201
+ id: string;
202
+ canAssignTasks: boolean;
203
+ childOrder: number;
204
+ color: string;
205
+ createdAt: string | null;
206
+ isArchived: boolean;
207
+ isDeleted: boolean;
208
+ isFavorite: boolean;
209
+ isFrozen: boolean;
210
+ name: string;
211
+ updatedAt: string | null;
212
+ viewStyle: string;
213
+ defaultOrder: number;
214
+ description: string;
215
+ isCollapsed: boolean;
216
+ isShared: boolean;
217
+ parentId: string | null;
218
+ inboxProject: boolean;
219
+ } | {
220
+ url: string;
221
+ id: string;
222
+ canAssignTasks: boolean;
223
+ childOrder: number;
224
+ color: string;
225
+ createdAt: string | null;
226
+ isArchived: boolean;
227
+ isDeleted: boolean;
228
+ isFavorite: boolean;
229
+ isFrozen: boolean;
230
+ name: string;
231
+ updatedAt: string | null;
232
+ viewStyle: string;
233
+ defaultOrder: number;
234
+ description: string;
235
+ isCollapsed: boolean;
236
+ isShared: boolean;
237
+ collaboratorRoleDefault: string;
238
+ folderId: string | null;
239
+ isInviteOnly: boolean | null;
240
+ isLinkSharingEnabled: boolean;
241
+ role: string | null;
242
+ status: string;
243
+ workspaceId: string;
244
+ access?: {
245
+ visibility: "restricted" | "team" | "public";
246
+ } | undefined;
247
+ }, unknown>>;
248
+ /** A project in Todoist — either a {@link PersonalProject} or a {@link WorkspaceProject}. */
249
+ export type Project = z.infer<typeof ProjectSchema>;
195
250
  /** Available project view styles. */
196
251
  export declare const PROJECT_VIEW_STYLES: readonly ["list", "board", "calendar"];
197
252
  /**