@doist/todoist-sdk 8.4.0 → 9.0.0

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.
Files changed (55) hide show
  1. package/dist/cjs/test-utils/test-defaults.js +15 -12
  2. package/dist/cjs/types/activity/types.js +1 -1
  3. package/dist/cjs/types/comments/types.js +1 -1
  4. package/dist/cjs/types/insights/types.js +6 -4
  5. package/dist/cjs/types/projects/types.js +13 -3
  6. package/dist/cjs/types/sections/types.js +3 -3
  7. package/dist/cjs/types/sync/resources/live-notifications.js +1 -1
  8. package/dist/cjs/types/sync/resources/notes.js +1 -1
  9. package/dist/cjs/types/sync/resources/user.js +4 -4
  10. package/dist/cjs/types/sync/resources/workspace-filters.js +2 -2
  11. package/dist/cjs/types/sync/resources/workspace-goals.js +2 -2
  12. package/dist/cjs/types/sync/resources/workspaces.js +3 -3
  13. package/dist/cjs/types/sync/response.js +53 -0
  14. package/dist/cjs/types/tasks/types.js +3 -3
  15. package/dist/cjs/types/workspaces/types.js +3 -3
  16. package/dist/cjs/utils/validators.js +56 -133
  17. package/dist/esm/test-utils/test-defaults.js +15 -12
  18. package/dist/esm/types/activity/types.js +1 -1
  19. package/dist/esm/types/comments/types.js +1 -1
  20. package/dist/esm/types/insights/types.js +6 -4
  21. package/dist/esm/types/projects/types.js +12 -2
  22. package/dist/esm/types/sections/types.js +3 -3
  23. package/dist/esm/types/sync/resources/live-notifications.js +1 -1
  24. package/dist/esm/types/sync/resources/notes.js +1 -1
  25. package/dist/esm/types/sync/resources/user.js +4 -4
  26. package/dist/esm/types/sync/resources/workspace-filters.js +2 -2
  27. package/dist/esm/types/sync/resources/workspace-goals.js +2 -2
  28. package/dist/esm/types/sync/resources/workspaces.js +3 -3
  29. package/dist/esm/types/sync/response.js +52 -1
  30. package/dist/esm/types/tasks/types.js +3 -3
  31. package/dist/esm/types/workspaces/types.js +3 -3
  32. package/dist/esm/utils/validators.js +54 -129
  33. package/dist/types/consts/endpoints.d.ts +2 -2
  34. package/dist/types/test-utils/test-defaults.d.ts +13 -13
  35. package/dist/types/todoist-api.d.ts +1 -1
  36. package/dist/types/types/activity/types.d.ts +1 -1
  37. package/dist/types/types/comments/types.d.ts +4 -4
  38. package/dist/types/types/folders/requests.d.ts +2 -2
  39. package/dist/types/types/insights/types.d.ts +9 -9
  40. package/dist/types/types/projects/requests.d.ts +1 -1
  41. package/dist/types/types/projects/types.d.ts +69 -14
  42. package/dist/types/types/sections/types.d.ts +9 -9
  43. package/dist/types/types/sync/commands/workspaces.d.ts +1 -1
  44. package/dist/types/types/sync/resources/live-notifications.d.ts +1 -1
  45. package/dist/types/types/sync/resources/notes.d.ts +1 -1
  46. package/dist/types/types/sync/resources/user.d.ts +4 -4
  47. package/dist/types/types/sync/resources/workspace-filters.d.ts +2 -2
  48. package/dist/types/types/sync/resources/workspace-goals.d.ts +2 -2
  49. package/dist/types/types/sync/resources/workspaces.d.ts +8 -8
  50. package/dist/types/types/sync/response.d.ts +917 -51
  51. package/dist/types/types/tasks/types.d.ts +9 -9
  52. package/dist/types/types/workspaces/requests.d.ts +7 -7
  53. package/dist/types/types/workspaces/types.d.ts +6 -6
  54. package/dist/types/utils/validators.d.ts +187 -117
  55. package/package.json +1 -1
@@ -15,6 +15,9 @@ const DEFAULT_PARENT_ID = '5678';
15
15
  const DEFAULT_ASSIGNEE = '1234';
16
16
  const DEFAULT_CREATOR = '1234';
17
17
  const DEFAULT_DATE = '2020-09-08T12:00:00Z';
18
+ function defaultDate() {
19
+ return new Date(DEFAULT_DATE);
20
+ }
18
21
  const DEFAULT_ENTITY_COLOR = 'berry_red';
19
22
  const DEFAULT_LABELS = ['personal', 'work', 'hobby'];
20
23
  const DEFAULT_USER_ID = '5';
@@ -64,9 +67,9 @@ export const DEFAULT_TASK = {
64
67
  duration: DEFAULT_DURATION,
65
68
  checked: false,
66
69
  isDeleted: DEFAULT_IS_DELETED,
67
- addedAt: DEFAULT_DATE,
70
+ addedAt: defaultDate(),
68
71
  completedAt: null,
69
- updatedAt: DEFAULT_DATE,
72
+ updatedAt: defaultDate(),
70
73
  due: DEFAULT_DUE_DATE,
71
74
  priority: DEFAULT_TASK_PRIORITY,
72
75
  childOrder: DEFAULT_ORDER,
@@ -92,9 +95,9 @@ export const TASK_WITH_OPTIONALS_AS_NULL = {
92
95
  duration: null,
93
96
  checked: false,
94
97
  isDeleted: DEFAULT_IS_DELETED,
95
- addedAt: DEFAULT_DATE,
98
+ addedAt: defaultDate(),
96
99
  completedAt: null,
97
- updatedAt: DEFAULT_DATE,
100
+ updatedAt: defaultDate(),
98
101
  due: null,
99
102
  priority: DEFAULT_TASK_PRIORITY,
100
103
  childOrder: DEFAULT_ORDER,
@@ -119,8 +122,8 @@ export const DEFAULT_PROJECT = {
119
122
  isArchived: DEFAULT_IS_ARCHIVED,
120
123
  isDeleted: DEFAULT_IS_DELETED,
121
124
  isFrozen: DEFAULT_IS_FROZEN,
122
- createdAt: DEFAULT_DATE,
123
- updatedAt: DEFAULT_DATE,
125
+ createdAt: defaultDate(),
126
+ updatedAt: defaultDate(),
124
127
  defaultOrder: DEFAULT_ORDER,
125
128
  description: '',
126
129
  isCollapsed: DEFAULT_IS_COLLAPSED,
@@ -140,8 +143,8 @@ export const DEFAULT_WORKSPACE_PROJECT = {
140
143
  isArchived: DEFAULT_IS_ARCHIVED,
141
144
  isDeleted: DEFAULT_IS_DELETED,
142
145
  isFrozen: DEFAULT_IS_FROZEN,
143
- createdAt: DEFAULT_DATE,
144
- updatedAt: DEFAULT_DATE,
146
+ createdAt: defaultDate(),
147
+ updatedAt: defaultDate(),
145
148
  defaultOrder: DEFAULT_ORDER,
146
149
  description: '',
147
150
  isCollapsed: DEFAULT_IS_COLLAPSED,
@@ -158,8 +161,8 @@ export const DEFAULT_SECTION = {
158
161
  id: DEFAULT_SECTION_ID,
159
162
  userId: DEFAULT_USER_ID,
160
163
  projectId: DEFAULT_PROJECT_ID,
161
- addedAt: '2025-03-28T14:01:23.334881Z',
162
- updatedAt: '2025-03-28T14:01:23.334885Z',
164
+ addedAt: new Date('2025-03-28T14:01:23.334881Z'),
165
+ updatedAt: new Date('2025-03-28T14:01:23.334885Z'),
163
166
  archivedAt: null,
164
167
  name: DEFAULT_SECTION_NAME,
165
168
  sectionOrder: DEFAULT_ORDER,
@@ -197,7 +200,7 @@ export const DEFAULT_RAW_COMMENT = {
197
200
  fileAttachment: DEFAULT_ATTACHMENT,
198
201
  uidsToNotify: null,
199
202
  isDeleted: false,
200
- postedAt: DEFAULT_DATE,
203
+ postedAt: defaultDate(),
201
204
  reactions: DEFAULT_COMMENT_REACTIONS,
202
205
  itemId: DEFAULT_TASK_ID,
203
206
  };
@@ -278,7 +281,7 @@ export const DEFAULT_NOTE = {
278
281
  id: DEFAULT_COMMENT_ID,
279
282
  projectId: DEFAULT_PROJECT_ID,
280
283
  content: DEFAULT_COMMENT_CONTENT,
281
- postedAt: DEFAULT_DATE,
284
+ postedAt: defaultDate(),
282
285
  fileAttachment: DEFAULT_ATTACHMENT,
283
286
  postedUid: DEFAULT_USER_ID,
284
287
  uidsToNotify: null,
@@ -12,7 +12,7 @@ export const ActivityEventSchema = z
12
12
  objectType: z.string(),
13
13
  objectId: z.string(),
14
14
  eventType: z.string(),
15
- eventDate: z.string(),
15
+ eventDate: z.coerce.date(),
16
16
  id: z
17
17
  .union([z.string(), z.number()])
18
18
  .transform((val) => { var _a; return (_a = val === null || val === void 0 ? void 0 : val.toString()) !== null && _a !== void 0 ? _a : null; })
@@ -35,7 +35,7 @@ export const RawCommentSchema = z
35
35
  itemId: z.string().optional(),
36
36
  projectId: z.string().optional(),
37
37
  content: z.string(),
38
- postedAt: z.string(),
38
+ postedAt: z.coerce.date(),
39
39
  fileAttachment: AttachmentSchema.nullable(),
40
40
  postedUid: z.string(),
41
41
  uidsToNotify: z.array(z.string()).nullable(),
@@ -1,5 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export const DayActivitySchema = z.object({
3
+ // Kept as string: this is a calendar-day bucket (e.g. '2025-01-13'), not a timestamp.
4
+ // Coercing to Date would create UTC midnight, causing day-shift for non-UTC consumers.
3
5
  date: z.string(),
4
6
  totalCount: z.number().int(),
5
7
  });
@@ -31,7 +33,7 @@ export const ProjectHealthSchema = z.object({
31
33
  descriptionSummary: z.string().nullable().optional(),
32
34
  taskRecommendations: z.array(TaskRecommendationSchema).nullable().optional(),
33
35
  projectId: z.string().nullable().optional(),
34
- updatedAt: z.string().nullable().optional(),
36
+ updatedAt: z.coerce.date().nullable().optional(),
35
37
  isStale: z.boolean().default(false),
36
38
  updateInProgress: z.boolean().default(false),
37
39
  });
@@ -50,9 +52,9 @@ export const TaskContextSchema = z.object({
50
52
  deadline: z.string().nullable().optional(),
51
53
  priority: z.string(),
52
54
  isCompleted: z.boolean(),
53
- createdAt: z.string(),
54
- updatedAt: z.string(),
55
- completedAt: z.string().nullable(),
55
+ createdAt: z.coerce.date(),
56
+ updatedAt: z.coerce.date(),
57
+ completedAt: z.coerce.date().nullable(),
56
58
  completedByUid: z.string().nullable(),
57
59
  labels: z.array(z.string()),
58
60
  });
@@ -9,13 +9,13 @@ export const BaseProjectSchema = z.object({
9
9
  canAssignTasks: z.boolean(),
10
10
  childOrder: z.number().int(),
11
11
  color: z.string(),
12
- createdAt: z.string().nullable(),
12
+ createdAt: z.coerce.date().nullable(),
13
13
  isArchived: z.boolean(),
14
14
  isDeleted: z.boolean(),
15
15
  isFavorite: z.boolean(),
16
16
  isFrozen: z.boolean(),
17
17
  name: z.string(),
18
- updatedAt: z.string().nullable(),
18
+ updatedAt: z.coerce.date().nullable(),
19
19
  viewStyle: z.string(),
20
20
  defaultOrder: z.number().int(),
21
21
  description: z.string(),
@@ -49,5 +49,15 @@ export const WorkspaceProjectSchema = BaseProjectSchema.extend({
49
49
  }).transform((data) => {
50
50
  return Object.assign(Object.assign({}, data), { url: getProjectUrl(data.id, data.name) });
51
51
  });
52
+ /**
53
+ * Schema for any project type in Todoist (personal or workspace).
54
+ * Dispatches to WorkspaceProjectSchema when workspaceId is present, PersonalProjectSchema otherwise.
55
+ */
56
+ export const ProjectSchema = z.unknown().transform((val) => {
57
+ if (typeof val === 'object' && val !== null && 'workspaceId' in val) {
58
+ return WorkspaceProjectSchema.parse(val);
59
+ }
60
+ return PersonalProjectSchema.parse(val);
61
+ });
52
62
  /** Available project view styles. */
53
63
  export const PROJECT_VIEW_STYLES = ['list', 'board', 'calendar'];
@@ -5,9 +5,9 @@ export const SectionSchema = z
5
5
  id: z.string(),
6
6
  userId: z.string(),
7
7
  projectId: z.string(),
8
- addedAt: z.string(),
9
- updatedAt: z.string(),
10
- archivedAt: z.string().nullable(),
8
+ addedAt: z.coerce.date(),
9
+ updatedAt: z.coerce.date(),
10
+ archivedAt: z.coerce.date().nullable(),
11
11
  name: z.string(),
12
12
  sectionOrder: z.number().int(),
13
13
  isArchived: z.boolean(),
@@ -9,7 +9,7 @@ import { z } from 'zod';
9
9
  */
10
10
  export const LiveNotificationSchema = z.looseObject({
11
11
  id: z.string(),
12
- createdAt: z.string(),
12
+ createdAt: z.coerce.date(),
13
13
  fromUid: z.string(),
14
14
  notificationType: z.string(),
15
15
  isUnread: z.boolean(),
@@ -9,7 +9,7 @@ export const NoteSchema = z.looseObject({
9
9
  itemId: z.string().optional(),
10
10
  projectId: z.string().optional(),
11
11
  content: z.string(),
12
- postedAt: z.string(),
12
+ postedAt: z.coerce.date(),
13
13
  fileAttachment: AttachmentSchema.nullable(),
14
14
  postedUid: z.string(),
15
15
  uidsToNotify: z.array(z.string()).nullable(),
@@ -54,7 +54,7 @@ export const SyncUserSchema = z.looseObject({
54
54
  daysOff: z.array(z.number().int()),
55
55
  featureIdentifier: z.string(),
56
56
  features: FeaturesSchema,
57
- freeTrailExpires: z.string().optional(),
57
+ freeTrailExpires: z.coerce.date().optional(),
58
58
  hasMagicNumber: z.boolean(),
59
59
  hasPassword: z.boolean(),
60
60
  hasStartedATrial: z.boolean().optional(),
@@ -63,7 +63,7 @@ export const SyncUserSchema = z.looseObject({
63
63
  isCelebrationsEnabled: z.boolean(),
64
64
  isPremium: z.boolean(),
65
65
  joinableWorkspace: JoinableWorkspaceSchema.nullable(),
66
- joinedAt: z.string(),
66
+ joinedAt: z.coerce.date(),
67
67
  gettingStartedGuideProjects: z.array(GettingStartedGuideProjectSchema).nullable(),
68
68
  karma: z.number(),
69
69
  karmaTrend: z.string(),
@@ -81,13 +81,13 @@ export const SyncUserSchema = z.looseObject({
81
81
  onboardingTeamMode: z.boolean().nullable().optional(),
82
82
  onboardingUseCases: z.array(z.string()).nullable().optional(),
83
83
  premiumStatus: z.enum(PREMIUM_STATUSES),
84
- premiumUntil: z.string().nullable(),
84
+ premiumUntil: z.coerce.date().nullable(),
85
85
  rambleSessionsUsage: z
86
86
  .object({
87
87
  currentCount: z.number().int(),
88
88
  limit: z.number().int(),
89
89
  remaining: z.number().int(),
90
- resetDate: z.string(),
90
+ resetDate: z.coerce.date(),
91
91
  })
92
92
  .nullable()
93
93
  .optional(),
@@ -11,6 +11,6 @@ export const WorkspaceFilterSchema = z.looseObject({
11
11
  isFrozen: z.boolean(),
12
12
  creatorUid: z.string(),
13
13
  updaterUid: z.string(),
14
- createdAt: z.string(),
15
- updatedAt: z.string(),
14
+ createdAt: z.coerce.date(),
15
+ updatedAt: z.coerce.date(),
16
16
  });
@@ -18,6 +18,6 @@ export const WorkspaceGoalSchema = z.looseObject({
18
18
  projectIds: z.array(z.string()),
19
19
  progress: WorkspaceGoalProgressSchema.nullable(),
20
20
  creatorUid: z.string(),
21
- createdAt: z.string(),
22
- updatedAt: z.string(),
21
+ createdAt: z.coerce.date(),
22
+ updatedAt: z.coerce.date(),
23
23
  });
@@ -29,8 +29,8 @@ export const SyncWorkspaceSchema = z
29
29
  logoSmall: z.string().optional(),
30
30
  logoS640: z.string().optional(),
31
31
  creatorId: StringOrNumberSchema,
32
- createdAt: z.string().optional(),
33
- dateCreated: z.string().optional(),
32
+ createdAt: z.coerce.date().optional(),
33
+ dateCreated: z.coerce.date().optional(),
34
34
  isDeleted: z.boolean(),
35
35
  isCollapsed: z.boolean(),
36
36
  role: WorkspaceRoleSchema.optional(),
@@ -58,7 +58,7 @@ export const SyncWorkspaceSchema = z
58
58
  defaultCollaborators: z
59
59
  .object({
60
60
  predefinedGroupIds: z.array(z.string()),
61
- userIds: z.array(z.number()),
61
+ userIds: z.array(StringOrNumberSchema),
62
62
  })
63
63
  .optional(),
64
64
  properties: WorkspacePropertiesSchema.optional(),
@@ -1 +1,52 @@
1
- export {};
1
+ import { z } from 'zod';
2
+ import { LabelSchema } from '../labels/types.js';
3
+ import { ProjectSchema } from '../projects/types.js';
4
+ import { SectionSchema } from '../sections/types.js';
5
+ import { TaskSchema } from '../tasks/types.js';
6
+ import { WorkspaceUserSchema } from '../workspaces/types.js';
7
+ import { FilterSchema, CollaboratorSchema, CollaboratorStateSchema, FolderSchema, NoteSchema, TooltipsSchema, WorkspaceFilterSchema, WorkspaceGoalSchema, CalendarSchema, CalendarAccountSchema, ReminderSchema, LocationReminderSchema, CompletedInfoSchema, ViewOptionsSchema, ProjectViewOptionsDefaultsSchema, UserPlanLimitsSchema, LiveNotificationSchema, SyncWorkspaceSchema, SyncUserSchema, UserSettingsSchema, SuggestionSchema, } from './resources/index.js';
8
+ export const SyncErrorSchema = z.object({
9
+ error: z.string(),
10
+ errorCode: z.number(),
11
+ errorExtra: z.record(z.string(), z.unknown()),
12
+ errorTag: z.string(),
13
+ httpCode: z.number(),
14
+ });
15
+ export const SyncResponseSchema = z.looseObject({
16
+ syncToken: z.string().optional(),
17
+ fullSync: z.boolean().optional(),
18
+ syncStatus: z.record(z.string(), z.union([z.literal('ok'), SyncErrorSchema])).optional(),
19
+ tempIdMapping: z.record(z.string(), z.string()).optional(),
20
+ items: z.array(TaskSchema).optional(),
21
+ projects: z.array(ProjectSchema).optional(),
22
+ sections: z.array(SectionSchema).optional(),
23
+ labels: z.array(LabelSchema).optional(),
24
+ notes: z.array(NoteSchema).optional(),
25
+ projectNotes: z.array(NoteSchema).optional(),
26
+ filters: z.array(FilterSchema).optional(),
27
+ reminders: z.array(ReminderSchema).optional(),
28
+ remindersLocation: z.array(LocationReminderSchema).optional(),
29
+ locations: z.array(z.record(z.string(), z.unknown())).optional(),
30
+ user: SyncUserSchema.optional(),
31
+ liveNotifications: z.array(LiveNotificationSchema).optional(),
32
+ collaborators: z.array(CollaboratorSchema).optional(),
33
+ collaboratorStates: z.array(CollaboratorStateSchema).optional(),
34
+ userSettings: UserSettingsSchema.optional(),
35
+ notificationSettings: z.record(z.string(), z.boolean()).optional(),
36
+ userPlanLimits: UserPlanLimitsSchema.optional(),
37
+ completedInfo: z.array(CompletedInfoSchema).optional(),
38
+ stats: z.record(z.string(), z.unknown()).optional(),
39
+ workspaces: z.array(SyncWorkspaceSchema).optional(),
40
+ workspaceUsers: z.array(WorkspaceUserSchema).optional(),
41
+ workspaceFilters: z.array(WorkspaceFilterSchema).optional(),
42
+ viewOptions: z.array(ViewOptionsSchema).optional(),
43
+ projectViewOptionsDefaults: z.array(ProjectViewOptionsDefaultsSchema).optional(),
44
+ roleActions: z.array(z.record(z.string(), z.unknown())).optional(),
45
+ folders: z.array(FolderSchema).optional(),
46
+ workspaceGoals: z.array(WorkspaceGoalSchema).optional(),
47
+ dayOrders: z.record(z.string(), z.number()).optional(),
48
+ calendars: z.array(CalendarSchema).optional(),
49
+ calendarAccounts: z.array(CalendarAccountSchema).optional(),
50
+ suggestions: z.array(SuggestionSchema).optional(),
51
+ tooltips: TooltipsSchema.optional(),
52
+ });
@@ -37,9 +37,9 @@ export const TaskSchema = z
37
37
  duration: DurationSchema.nullable(),
38
38
  checked: z.boolean(),
39
39
  isDeleted: z.boolean(),
40
- addedAt: z.string().nullable(),
41
- completedAt: z.string().nullable(),
42
- updatedAt: z.string().nullable(),
40
+ addedAt: z.coerce.date().nullable(),
41
+ completedAt: z.coerce.date().nullable(),
42
+ updatedAt: z.coerce.date().nullable(),
43
43
  due: DueDateSchema.nullable(),
44
44
  priority: z.number().int(),
45
45
  childOrder: z.number().int(),
@@ -71,7 +71,7 @@ export const WorkspacePlanDetailsSchema = z.object({
71
71
  currentActiveProjects: z.number(),
72
72
  maximumActiveProjects: z.number(),
73
73
  priceList: z.array(FormattedPriceListingSchema),
74
- workspaceId: z.number(),
74
+ workspaceId: StringOrNumberSchema,
75
75
  isTrialing: z.boolean(),
76
76
  trialEndsAt: z.string().nullable(),
77
77
  cancelAtPeriodEnd: z.boolean(),
@@ -122,8 +122,8 @@ export const WorkspaceSchema = z
122
122
  logoMedium: z.string().nullish(),
123
123
  logoSmall: z.string().nullish(),
124
124
  logoS640: z.string().nullish(),
125
- createdAt: z.string().optional(),
126
- dateCreated: z.string().optional(),
125
+ createdAt: z.coerce.date().optional(),
126
+ dateCreated: z.coerce.date().optional(),
127
127
  creatorId: StringOrNumberSchema,
128
128
  properties: WorkspacePropertiesSchema,
129
129
  })
@@ -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';
@@ -5,149 +6,73 @@ import { IdMappingSchema, MovedIdSchema } from '../types/id-mappings/types.js';
5
6
  import { ProjectActivityStatsSchema, ProjectHealthSchema, ProjectHealthContextSchema, ProjectProgressSchema, WorkspaceInsightsSchema, } from '../types/insights/types.js';
6
7
  import { LabelSchema } from '../types/labels/types.js';
7
8
  import { ProductivityStatsSchema } from '../types/productivity/types.js';
8
- import { PersonalProjectSchema, WorkspaceProjectSchema, } from '../types/projects/types.js';
9
+ import { WorkspaceProjectSchema, ProjectSchema } from '../types/projects/types.js';
9
10
  import { SectionSchema } from '../types/sections/types.js';
11
+ import { SyncResponseSchema } from '../types/sync/response.js';
10
12
  import { TaskSchema } from '../types/tasks/types.js';
11
13
  import { UserSchema, CurrentUserSchema } from '../types/users/types.js';
12
14
  import { WorkspaceUserSchema, WorkspaceInvitationSchema, WorkspacePlanDetailsSchema, JoinWorkspaceResultSchema, WorkspaceSchema, MemberActivityInfoSchema, WorkspaceUserTaskSchema, } from '../types/workspaces/types.js';
13
15
  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';
14
16
  function createValidator(schema) {
15
- return (input) => schema.parse(input);
16
- }
17
- function createArrayValidator(validateItem) {
18
- return (input) => {
19
- if (!Array.isArray(input)) {
20
- throw new TypeError(`Expected array, got ${typeof input}`);
21
- }
22
- return input.map(validateItem);
17
+ return {
18
+ validate: (input) => schema.parse(input),
19
+ validateArray: (input) => z.array(schema).parse(input),
23
20
  };
24
21
  }
25
22
  // Entity validators
26
- export const validateTask = createValidator(TaskSchema);
27
- export const validateTaskArray = createArrayValidator(validateTask);
23
+ export const { validate: validateTask, validateArray: validateTaskArray } = createValidator(TaskSchema);
28
24
  /**
29
25
  * Validates and parses a project input.
30
26
  * @param input The input to validate
31
27
  * @returns A validated project (either PersonalProject or WorkspaceProject)
32
28
  */
33
- export function validateProject(input) {
34
- if ('workspaceId' in input) {
35
- return WorkspaceProjectSchema.parse(input);
36
- }
37
- return PersonalProjectSchema.parse(input);
38
- }
39
- export function validateProjectArray(input) {
40
- if (!Array.isArray(input)) {
41
- throw new TypeError(`Expected array, got ${typeof input}`);
42
- }
43
- return input.map(validateProject);
44
- }
45
- export const validateWorkspaceProject = createValidator(WorkspaceProjectSchema);
46
- export const validateWorkspaceProjectArray = createArrayValidator(validateWorkspaceProject);
47
- export const validateSection = createValidator(SectionSchema);
48
- export const validateSectionArray = createArrayValidator(validateSection);
49
- export const validateLabel = createValidator(LabelSchema);
50
- export const validateLabelArray = createArrayValidator(validateLabel);
51
- export const validateComment = createValidator(CommentSchema);
52
- export const validateCommentArray = createArrayValidator(validateComment);
53
- export const validateUser = createValidator(UserSchema);
54
- export const validateUserArray = createArrayValidator(validateUser);
55
- export const validateProductivityStats = createValidator(ProductivityStatsSchema);
56
- export const validateCurrentUser = createValidator(CurrentUserSchema);
57
- export const validateActivityEvent = createValidator(ActivityEventSchema);
58
- export const validateActivityEventArray = createArrayValidator(validateActivityEvent);
59
- export const validateAttachment = createValidator(AttachmentSchema);
60
- export const validateWorkspaceUser = createValidator(WorkspaceUserSchema);
61
- export function validateWorkspaceUserArray(input) {
62
- if (!Array.isArray(input)) {
63
- throw new Error(`Expected array for workspace users, got ${typeof input}`);
64
- }
65
- return input.map(validateWorkspaceUser);
66
- }
67
- export const validateWorkspaceInvitation = createValidator(WorkspaceInvitationSchema);
68
- export const validateWorkspaceInvitationArray = createArrayValidator(validateWorkspaceInvitation);
69
- export const validateWorkspacePlanDetails = createValidator(WorkspacePlanDetailsSchema);
70
- export const validateJoinWorkspaceResult = createValidator(JoinWorkspaceResultSchema);
71
- export const validateWorkspace = createValidator(WorkspaceSchema);
72
- export const validateWorkspaceArray = createArrayValidator(validateWorkspace);
73
- export const validateMemberActivityInfo = createValidator(MemberActivityInfoSchema);
74
- export const validateMemberActivityInfoArray = createArrayValidator(validateMemberActivityInfo);
75
- export const validateWorkspaceUserTask = createValidator(WorkspaceUserTaskSchema);
76
- export const validateWorkspaceUserTaskArray = createArrayValidator(validateWorkspaceUserTask);
77
- export const validateProjectActivityStats = createValidator(ProjectActivityStatsSchema);
78
- export const validateProjectHealth = createValidator(ProjectHealthSchema);
79
- export const validateProjectHealthContext = createValidator(ProjectHealthContextSchema);
80
- export const validateProjectProgress = createValidator(ProjectProgressSchema);
81
- export const validateWorkspaceInsights = createValidator(WorkspaceInsightsSchema);
82
- export const validateBackup = createValidator(BackupSchema);
83
- export const validateBackupArray = createArrayValidator(validateBackup);
84
- export const validateIdMapping = createValidator(IdMappingSchema);
85
- export const validateIdMappingArray = createArrayValidator(validateIdMapping);
86
- export const validateMovedId = createValidator(MovedIdSchema);
87
- export const validateMovedIdArray = createArrayValidator(validateMovedId);
29
+ export const { validate: validateProject, validateArray: validateProjectArray } = createValidator(ProjectSchema);
30
+ export const { validate: validateWorkspaceProject, validateArray: validateWorkspaceProjectArray } = createValidator(WorkspaceProjectSchema);
31
+ export const { validate: validateSection, validateArray: validateSectionArray } = createValidator(SectionSchema);
32
+ export const { validate: validateLabel, validateArray: validateLabelArray } = createValidator(LabelSchema);
33
+ export const { validate: validateComment, validateArray: validateCommentArray } = createValidator(CommentSchema);
34
+ export const { validate: validateUser, validateArray: validateUserArray } = createValidator(UserSchema);
35
+ export const { validate: validateProductivityStats } = createValidator(ProductivityStatsSchema);
36
+ export const { validate: validateCurrentUser } = createValidator(CurrentUserSchema);
37
+ export const { validate: validateActivityEvent, validateArray: validateActivityEventArray } = createValidator(ActivityEventSchema);
38
+ export const { validate: validateAttachment } = createValidator(AttachmentSchema);
39
+ export const { validate: validateWorkspaceUser, validateArray: validateWorkspaceUserArray } = createValidator(WorkspaceUserSchema);
40
+ export const { validate: validateWorkspaceInvitation, validateArray: validateWorkspaceInvitationArray, } = createValidator(WorkspaceInvitationSchema);
41
+ export const { validate: validateWorkspacePlanDetails } = createValidator(WorkspacePlanDetailsSchema);
42
+ export const { validate: validateJoinWorkspaceResult } = createValidator(JoinWorkspaceResultSchema);
43
+ export const { validate: validateWorkspace, validateArray: validateWorkspaceArray } = createValidator(WorkspaceSchema);
44
+ export const { validate: validateMemberActivityInfo, validateArray: validateMemberActivityInfoArray, } = createValidator(MemberActivityInfoSchema);
45
+ export const { validate: validateWorkspaceUserTask, validateArray: validateWorkspaceUserTaskArray, } = createValidator(WorkspaceUserTaskSchema);
46
+ export const { validate: validateProjectActivityStats } = createValidator(ProjectActivityStatsSchema);
47
+ export const { validate: validateProjectHealth } = createValidator(ProjectHealthSchema);
48
+ export const { validate: validateProjectHealthContext } = createValidator(ProjectHealthContextSchema);
49
+ export const { validate: validateProjectProgress } = createValidator(ProjectProgressSchema);
50
+ export const { validate: validateWorkspaceInsights } = createValidator(WorkspaceInsightsSchema);
51
+ export const { validate: validateBackup, validateArray: validateBackupArray } = createValidator(BackupSchema);
52
+ export const { validate: validateIdMapping, validateArray: validateIdMappingArray } = createValidator(IdMappingSchema);
53
+ export const { validate: validateMovedId, validateArray: validateMovedIdArray } = createValidator(MovedIdSchema);
88
54
  // Sync resource validators
89
- export const validateFilter = createValidator(FilterSchema);
90
- export const validateFilterArray = createArrayValidator(validateFilter);
91
- export const validateCollaborator = createValidator(CollaboratorSchema);
92
- export const validateCollaboratorArray = createArrayValidator(validateCollaborator);
93
- export const validateCollaboratorState = createValidator(CollaboratorStateSchema);
94
- export const validateCollaboratorStateArray = createArrayValidator(validateCollaboratorState);
95
- export const validateFolder = createValidator(FolderSchema);
96
- export const validateFolderArray = createArrayValidator(validateFolder);
97
- export const validateNote = createValidator(NoteSchema);
98
- export const validateNoteArray = createArrayValidator(validateNote);
99
- export const validateTooltips = createValidator(TooltipsSchema);
100
- export const validateWorkspaceFilter = createValidator(WorkspaceFilterSchema);
101
- export const validateWorkspaceFilterArray = createArrayValidator(validateWorkspaceFilter);
102
- export const validateWorkspaceGoal = createValidator(WorkspaceGoalSchema);
103
- export const validateWorkspaceGoalArray = createArrayValidator(validateWorkspaceGoal);
104
- export const validateCalendar = createValidator(CalendarSchema);
105
- export const validateCalendarArray = createArrayValidator(validateCalendar);
106
- export const validateCalendarAccount = createValidator(CalendarAccountSchema);
107
- export const validateCalendarAccountArray = createArrayValidator(validateCalendarAccount);
108
- export const validateReminder = createValidator(ReminderSchema);
109
- export const validateReminderArray = createArrayValidator(validateReminder);
110
- export const validateLocationReminder = createValidator(LocationReminderSchema);
111
- export const validateLocationReminderArray = createArrayValidator(validateLocationReminder);
112
- export const validateCompletedInfo = createValidator(CompletedInfoSchema);
113
- export const validateCompletedInfoArray = createArrayValidator(validateCompletedInfo);
114
- export const validateViewOptions = createValidator(ViewOptionsSchema);
115
- export const validateViewOptionsArray = createArrayValidator(validateViewOptions);
116
- export const validateProjectViewOptionsDefaults = createValidator(ProjectViewOptionsDefaultsSchema);
117
- export const validateProjectViewOptionsDefaultsArray = createArrayValidator(validateProjectViewOptionsDefaults);
118
- export const validateUserPlanLimits = createValidator(UserPlanLimitsSchema);
119
- export const validateLiveNotification = createValidator(LiveNotificationSchema);
120
- export const validateLiveNotificationArray = createArrayValidator(validateLiveNotification);
121
- export const validateSyncWorkspace = createValidator(SyncWorkspaceSchema);
122
- export const validateSyncWorkspaceArray = createArrayValidator(validateSyncWorkspace);
123
- export const validateSyncUser = createValidator(SyncUserSchema);
124
- export const validateUserSettings = createValidator(UserSettingsSchema);
125
- export const validateSuggestion = createValidator(SuggestionSchema);
126
- export const validateSuggestionArray = createArrayValidator(validateSuggestion);
55
+ export const { validate: validateFilter, validateArray: validateFilterArray } = createValidator(FilterSchema);
56
+ export const { validate: validateCollaborator, validateArray: validateCollaboratorArray } = createValidator(CollaboratorSchema);
57
+ export const { validate: validateCollaboratorState, validateArray: validateCollaboratorStateArray, } = createValidator(CollaboratorStateSchema);
58
+ export const { validate: validateFolder, validateArray: validateFolderArray } = createValidator(FolderSchema);
59
+ export const { validate: validateNote, validateArray: validateNoteArray } = createValidator(NoteSchema);
60
+ export const { validate: validateTooltips } = createValidator(TooltipsSchema);
61
+ export const { validate: validateWorkspaceFilter, validateArray: validateWorkspaceFilterArray } = createValidator(WorkspaceFilterSchema);
62
+ export const { validate: validateWorkspaceGoal, validateArray: validateWorkspaceGoalArray } = createValidator(WorkspaceGoalSchema);
63
+ export const { validate: validateCalendar, validateArray: validateCalendarArray } = createValidator(CalendarSchema);
64
+ export const { validate: validateCalendarAccount, validateArray: validateCalendarAccountArray } = createValidator(CalendarAccountSchema);
65
+ export const { validate: validateReminder, validateArray: validateReminderArray } = createValidator(ReminderSchema);
66
+ export const { validate: validateLocationReminder, validateArray: validateLocationReminderArray } = createValidator(LocationReminderSchema);
67
+ export const { validate: validateCompletedInfo, validateArray: validateCompletedInfoArray } = createValidator(CompletedInfoSchema);
68
+ export const { validate: validateViewOptions, validateArray: validateViewOptionsArray } = createValidator(ViewOptionsSchema);
69
+ export const { validate: validateProjectViewOptionsDefaults, validateArray: validateProjectViewOptionsDefaultsArray, } = createValidator(ProjectViewOptionsDefaultsSchema);
70
+ export const { validate: validateUserPlanLimits } = createValidator(UserPlanLimitsSchema);
71
+ export const { validate: validateLiveNotification, validateArray: validateLiveNotificationArray } = createValidator(LiveNotificationSchema);
72
+ export const { validate: validateSyncWorkspace, validateArray: validateSyncWorkspaceArray } = createValidator(SyncWorkspaceSchema);
73
+ export const { validate: validateSyncUser } = createValidator(SyncUserSchema);
74
+ export const { validate: validateUserSettings } = createValidator(UserSettingsSchema);
75
+ export const { validate: validateSuggestion, validateArray: validateSuggestionArray } = createValidator(SuggestionSchema);
127
76
  export function parseSyncResponse(raw) {
128
- 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({}, 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
129
- ? { remindersLocation: validateLocationReminderArray(raw.remindersLocation) }
130
- : {})), ('user' in raw ? { user: validateSyncUser(raw.user) } : {})), ('liveNotifications' in raw
131
- ? { liveNotifications: validateLiveNotificationArray(raw.liveNotifications) }
132
- : {})), ('collaborators' in raw
133
- ? { collaborators: validateCollaboratorArray(raw.collaborators) }
134
- : {})), ('collaboratorStates' in raw
135
- ? { collaboratorStates: validateCollaboratorStateArray(raw.collaboratorStates) }
136
- : {})), ('userSettings' in raw ? { userSettings: validateUserSettings(raw.userSettings) } : {})), ('userPlanLimits' in raw
137
- ? { userPlanLimits: validateUserPlanLimits(raw.userPlanLimits) }
138
- : {})), ('completedInfo' in raw
139
- ? { completedInfo: validateCompletedInfoArray(raw.completedInfo) }
140
- : {})), ('workspaces' in raw ? { workspaces: validateSyncWorkspaceArray(raw.workspaces) } : {})), ('workspaceUsers' in raw
141
- ? { workspaceUsers: validateWorkspaceUserArray(raw.workspaceUsers) }
142
- : {})), ('workspaceFilters' in raw
143
- ? { workspaceFilters: validateWorkspaceFilterArray(raw.workspaceFilters) }
144
- : {})), ('viewOptions' in raw ? { viewOptions: validateViewOptionsArray(raw.viewOptions) } : {})), ('projectViewOptionsDefaults' in raw
145
- ? {
146
- projectViewOptionsDefaults: validateProjectViewOptionsDefaultsArray(raw.projectViewOptionsDefaults),
147
- }
148
- : {})), ('folders' in raw ? { folders: validateFolderArray(raw.folders) } : {})), ('workspaceGoals' in raw
149
- ? { workspaceGoals: validateWorkspaceGoalArray(raw.workspaceGoals) }
150
- : {})), ('calendars' in raw ? { calendars: validateCalendarArray(raw.calendars) } : {})), ('calendarAccounts' in raw
151
- ? { calendarAccounts: validateCalendarAccountArray(raw.calendarAccounts) }
152
- : {})), ('suggestions' in raw ? { suggestions: validateSuggestionArray(raw.suggestions) } : {})), ('tooltips' in raw ? { tooltips: validateTooltips(raw.tooltips) } : {}));
77
+ return SyncResponseSchema.parse(raw);
153
78
  }
@@ -78,5 +78,5 @@ export declare const ENDPOINT_WORKSPACE_MEMBERS = "workspaces/members";
78
78
  export declare function getWorkspaceUserTasksEndpoint(workspaceId: string, userId: string): string;
79
79
  export declare function getWorkspaceInviteUsersEndpoint(workspaceId: string): string;
80
80
  export declare function getWorkspaceUserEndpoint(workspaceId: string, userId: string): string;
81
- export declare function getWorkspaceActiveProjectsEndpoint(workspaceId: number): string;
82
- export declare function getWorkspaceArchivedProjectsEndpoint(workspaceId: number): string;
81
+ export declare function getWorkspaceActiveProjectsEndpoint(workspaceId: string): string;
82
+ export declare function getWorkspaceArchivedProjectsEndpoint(workspaceId: string): string;