@doist/todoist-api-typescript 7.7.0 → 7.8.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.
@@ -12,9 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.TodoistApi = void 0;
15
- const tasks_1 = require("./types/tasks");
16
15
  const reminders_1 = require("./types/reminders");
17
- const reminders_2 = require("./types/sync/resources/reminders");
18
16
  const http_client_1 = require("./transport/http-client");
19
17
  const endpoints_1 = require("./consts/endpoints");
20
18
  const validators_1 = require("./utils/validators");
@@ -87,56 +85,6 @@ function headersToRecord(headers) {
87
85
  });
88
86
  return result;
89
87
  }
90
- const ReminderDeliveryServiceSchema = zod_1.z.enum(reminders_1.REMINDER_DELIVERY_SERVICES);
91
- const ReminderIdSchema = zod_1.z.string();
92
- const ReminderDueDateSchema = tasks_1.DueDateSchema.pick({
93
- date: true,
94
- string: true,
95
- timezone: true,
96
- lang: true,
97
- isRecurring: true,
98
- })
99
- .partial()
100
- .strict();
101
- const UpdateRelativeReminderArgsSchema = zod_1.z
102
- .object({
103
- reminderType: zod_1.z.literal('relative'),
104
- minuteOffset: zod_1.z.number().int().optional(),
105
- notifyUid: zod_1.z.string().optional(),
106
- service: ReminderDeliveryServiceSchema.optional(),
107
- isUrgent: zod_1.z.boolean().optional(),
108
- })
109
- .strict();
110
- const UpdateAbsoluteReminderArgsSchema = zod_1.z
111
- .object({
112
- reminderType: zod_1.z.literal('absolute'),
113
- due: ReminderDueDateSchema.optional(),
114
- notifyUid: zod_1.z.string().optional(),
115
- service: ReminderDeliveryServiceSchema.optional(),
116
- isUrgent: zod_1.z.boolean().optional(),
117
- })
118
- .strict();
119
- const UpdateLocationReminderArgsSchema = zod_1.z
120
- .object({
121
- notifyUid: zod_1.z.string().optional(),
122
- name: zod_1.z.string().optional(),
123
- locLat: zod_1.z.string().optional(),
124
- locLong: zod_1.z.string().optional(),
125
- locTrigger: zod_1.z.enum(reminders_2.LOCATION_TRIGGERS).optional(),
126
- radius: zod_1.z.number().int().optional(),
127
- })
128
- .strict()
129
- .refine((args) => Object.values(args).some((value) => value !== undefined), {
130
- message: 'At least one reminder field must be provided to updateLocationReminder',
131
- });
132
- const UpdateReminderArgsSchema = zod_1.z
133
- .discriminatedUnion('reminderType', [
134
- UpdateRelativeReminderArgsSchema,
135
- UpdateAbsoluteReminderArgsSchema,
136
- ])
137
- .refine((args) => Object.entries(args).some(([key, value]) => key !== 'reminderType' && value !== undefined), {
138
- message: 'At least one reminder field must be provided to updateReminder',
139
- });
140
88
  class TodoistApi {
141
89
  constructor(
142
90
  /**
@@ -1439,7 +1387,7 @@ class TodoistApi {
1439
1387
  * @returns A promise that resolves to the requested reminder.
1440
1388
  */
1441
1389
  async getReminder(id) {
1442
- ReminderIdSchema.parse(id);
1390
+ reminders_1.ReminderIdSchema.parse(id);
1443
1391
  try {
1444
1392
  const response = await (0, http_client_1.request)({
1445
1393
  httpMethod: 'GET',
@@ -1464,7 +1412,7 @@ class TodoistApi {
1464
1412
  * @returns A promise that resolves to the requested reminder.
1465
1413
  */
1466
1414
  async getLocationReminder(id) {
1467
- ReminderIdSchema.parse(id);
1415
+ reminders_1.ReminderIdSchema.parse(id);
1468
1416
  try {
1469
1417
  const response = await (0, http_client_1.request)({
1470
1418
  httpMethod: 'GET',
@@ -1529,8 +1477,8 @@ class TodoistApi {
1529
1477
  * @returns A promise that resolves to the updated reminder.
1530
1478
  */
1531
1479
  async updateReminder(id, args, requestId) {
1532
- ReminderIdSchema.parse(id);
1533
- const payload = UpdateReminderArgsSchema.parse(args);
1480
+ reminders_1.ReminderIdSchema.parse(id);
1481
+ const payload = reminders_1.UpdateReminderArgsSchema.parse(args);
1534
1482
  try {
1535
1483
  const response = await (0, http_client_1.request)({
1536
1484
  httpMethod: 'POST',
@@ -1559,8 +1507,8 @@ class TodoistApi {
1559
1507
  * @returns A promise that resolves to the updated reminder.
1560
1508
  */
1561
1509
  async updateLocationReminder(id, args, requestId) {
1562
- ReminderIdSchema.parse(id);
1563
- const payload = UpdateLocationReminderArgsSchema.parse(args);
1510
+ reminders_1.ReminderIdSchema.parse(id);
1511
+ const payload = reminders_1.UpdateLocationReminderArgsSchema.parse(args);
1564
1512
  try {
1565
1513
  const response = await (0, http_client_1.request)({
1566
1514
  httpMethod: 'POST',
@@ -1588,7 +1536,7 @@ class TodoistApi {
1588
1536
  * @returns A promise that resolves to `true` if successful.
1589
1537
  */
1590
1538
  async deleteReminder(id, requestId) {
1591
- ReminderIdSchema.parse(id);
1539
+ reminders_1.ReminderIdSchema.parse(id);
1592
1540
  try {
1593
1541
  const response = await (0, http_client_1.request)({
1594
1542
  httpMethod: 'DELETE',
@@ -1615,7 +1563,7 @@ class TodoistApi {
1615
1563
  * @returns A promise that resolves to `true` if successful.
1616
1564
  */
1617
1565
  async deleteLocationReminder(id, requestId) {
1618
- ReminderIdSchema.parse(id);
1566
+ reminders_1.ReminderIdSchema.parse(id);
1619
1567
  try {
1620
1568
  const response = await (0, http_client_1.request)({
1621
1569
  httpMethod: 'DELETE',
@@ -1,5 +1,95 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.REMINDER_DELIVERY_SERVICES = void 0;
3
+ exports.UpdateLocationReminderArgsSchema = exports.UpdateReminderArgsSchema = exports.UpdateAbsoluteReminderArgsSchema = exports.UpdateRelativeReminderArgsSchema = exports.AddLocationReminderArgsSchema = exports.AddReminderArgsSchema = exports.AddAbsoluteReminderArgsSchema = exports.AddRelativeReminderArgsSchema = exports.ReminderDueDateSchema = exports.ReminderIdSchema = exports.ReminderDeliveryServiceSchema = exports.REMINDER_DELIVERY_SERVICES = void 0;
4
+ const zod_1 = require("zod");
5
+ const types_1 = require("../tasks/types");
6
+ const reminders_1 = require("../sync/resources/reminders");
4
7
  /** Available reminder delivery services. */
5
8
  exports.REMINDER_DELIVERY_SERVICES = ['email', 'push'];
9
+ exports.ReminderDeliveryServiceSchema = zod_1.z.enum(exports.REMINDER_DELIVERY_SERVICES);
10
+ exports.ReminderIdSchema = zod_1.z.string();
11
+ exports.ReminderDueDateSchema = types_1.DueDateSchema.pick({
12
+ date: true,
13
+ string: true,
14
+ timezone: true,
15
+ lang: true,
16
+ isRecurring: true,
17
+ })
18
+ .partial()
19
+ .strict();
20
+ // ── Add schemas ──────────────────────────────────────────────────────
21
+ exports.AddRelativeReminderArgsSchema = zod_1.z
22
+ .object({
23
+ taskId: zod_1.z.string(),
24
+ reminderType: zod_1.z.literal(reminders_1.ReminderTypeEnum.Relative).optional(),
25
+ minuteOffset: zod_1.z.number().int(),
26
+ service: exports.ReminderDeliveryServiceSchema.optional(),
27
+ notifyUid: zod_1.z.string().optional(),
28
+ isUrgent: zod_1.z.boolean().optional(),
29
+ })
30
+ .strict();
31
+ exports.AddAbsoluteReminderArgsSchema = zod_1.z
32
+ .object({
33
+ taskId: zod_1.z.string(),
34
+ reminderType: zod_1.z.literal(reminders_1.ReminderTypeEnum.Absolute),
35
+ due: exports.ReminderDueDateSchema,
36
+ service: exports.ReminderDeliveryServiceSchema.optional(),
37
+ notifyUid: zod_1.z.string().optional(),
38
+ isUrgent: zod_1.z.boolean().optional(),
39
+ })
40
+ .strict();
41
+ exports.AddReminderArgsSchema = zod_1.z.union([
42
+ exports.AddRelativeReminderArgsSchema,
43
+ exports.AddAbsoluteReminderArgsSchema,
44
+ ]);
45
+ exports.AddLocationReminderArgsSchema = zod_1.z
46
+ .object({
47
+ taskId: zod_1.z.string(),
48
+ notifyUid: zod_1.z.string().optional(),
49
+ name: zod_1.z.string(),
50
+ locLat: zod_1.z.string(),
51
+ locLong: zod_1.z.string(),
52
+ locTrigger: zod_1.z.enum(reminders_1.LOCATION_TRIGGERS),
53
+ radius: zod_1.z.number().int().optional(),
54
+ })
55
+ .strict();
56
+ // ── Update schemas ───────────────────────────────────────────────────
57
+ exports.UpdateRelativeReminderArgsSchema = zod_1.z
58
+ .object({
59
+ reminderType: zod_1.z.literal(reminders_1.ReminderTypeEnum.Relative),
60
+ minuteOffset: zod_1.z.number().int().optional(),
61
+ notifyUid: zod_1.z.string().optional(),
62
+ service: exports.ReminderDeliveryServiceSchema.optional(),
63
+ isUrgent: zod_1.z.boolean().optional(),
64
+ })
65
+ .strict();
66
+ exports.UpdateAbsoluteReminderArgsSchema = zod_1.z
67
+ .object({
68
+ reminderType: zod_1.z.literal(reminders_1.ReminderTypeEnum.Absolute),
69
+ due: exports.ReminderDueDateSchema.optional(),
70
+ notifyUid: zod_1.z.string().optional(),
71
+ service: exports.ReminderDeliveryServiceSchema.optional(),
72
+ isUrgent: zod_1.z.boolean().optional(),
73
+ })
74
+ .strict();
75
+ exports.UpdateReminderArgsSchema = zod_1.z
76
+ .discriminatedUnion('reminderType', [
77
+ exports.UpdateRelativeReminderArgsSchema,
78
+ exports.UpdateAbsoluteReminderArgsSchema,
79
+ ])
80
+ .refine((args) => Object.entries(args).some(([key, value]) => key !== 'reminderType' && value !== undefined), {
81
+ message: 'At least one reminder field must be provided to updateReminder',
82
+ });
83
+ exports.UpdateLocationReminderArgsSchema = zod_1.z
84
+ .object({
85
+ notifyUid: zod_1.z.string().optional(),
86
+ name: zod_1.z.string().optional(),
87
+ locLat: zod_1.z.string().optional(),
88
+ locLong: zod_1.z.string().optional(),
89
+ locTrigger: zod_1.z.enum(reminders_1.LOCATION_TRIGGERS).optional(),
90
+ radius: zod_1.z.number().int().optional(),
91
+ })
92
+ .strict()
93
+ .refine((args) => Object.values(args).some((value) => value !== undefined), {
94
+ message: 'At least one reminder field must be provided to updateLocationReminder',
95
+ });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReminderSchema = exports.RelativeReminderSchema = exports.AbsoluteReminderSchema = exports.LocationReminderSchema = exports.LOCATION_TRIGGERS = exports.ReminderBaseSchema = void 0;
3
+ exports.ReminderSchema = exports.RelativeReminderSchema = exports.AbsoluteReminderSchema = exports.LocationReminderSchema = exports.LOCATION_TRIGGERS = exports.REMINDER_TYPES = exports.ReminderTypeEnum = exports.ReminderBaseSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const types_1 = require("../../tasks/types");
6
6
  exports.ReminderBaseSchema = zod_1.z.object({
@@ -10,10 +10,22 @@ exports.ReminderBaseSchema = zod_1.z.object({
10
10
  projectId: zod_1.z.string().optional(),
11
11
  isDeleted: zod_1.z.boolean(),
12
12
  });
13
+ /** Enum-like object of reminder type values. */
14
+ exports.ReminderTypeEnum = {
15
+ Relative: 'relative',
16
+ Absolute: 'absolute',
17
+ Location: 'location',
18
+ };
19
+ /** Available reminder types. */
20
+ exports.REMINDER_TYPES = [
21
+ exports.ReminderTypeEnum.Relative,
22
+ exports.ReminderTypeEnum.Absolute,
23
+ exports.ReminderTypeEnum.Location,
24
+ ];
13
25
  /** Available location reminder triggers. */
14
26
  exports.LOCATION_TRIGGERS = ['on_enter', 'on_leave'];
15
27
  exports.LocationReminderSchema = exports.ReminderBaseSchema.extend({
16
- type: zod_1.z.literal('location'),
28
+ type: zod_1.z.literal(exports.ReminderTypeEnum.Location),
17
29
  name: zod_1.z.string(),
18
30
  locLat: zod_1.z.string(),
19
31
  locLong: zod_1.z.string(),
@@ -21,12 +33,12 @@ exports.LocationReminderSchema = exports.ReminderBaseSchema.extend({
21
33
  radius: zod_1.z.number().int(),
22
34
  }).passthrough();
23
35
  exports.AbsoluteReminderSchema = exports.ReminderBaseSchema.extend({
24
- type: zod_1.z.literal('absolute'),
36
+ type: zod_1.z.literal(exports.ReminderTypeEnum.Absolute),
25
37
  due: types_1.DueDateSchema,
26
38
  isUrgent: zod_1.z.boolean().optional(),
27
39
  }).passthrough();
28
40
  exports.RelativeReminderSchema = exports.ReminderBaseSchema.extend({
29
- type: zod_1.z.literal('relative'),
41
+ type: zod_1.z.literal(exports.ReminderTypeEnum.Relative),
30
42
  minuteOffset: zod_1.z.number().int(),
31
43
  due: types_1.DueDateSchema.optional(),
32
44
  isUrgent: zod_1.z.boolean().optional(),
@@ -9,9 +9,7 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import { DueDateSchema, } from './types/tasks/index.js';
13
- import { REMINDER_DELIVERY_SERVICES, } from './types/reminders/index.js';
14
- import { LOCATION_TRIGGERS } from './types/sync/resources/reminders.js';
12
+ import { UpdateReminderArgsSchema, UpdateLocationReminderArgsSchema, ReminderIdSchema, } from './types/reminders/index.js';
15
13
  import { request, isSuccess } from './transport/http-client.js';
16
14
  import { getSyncBaseUri, ENDPOINT_REST_TASKS, ENDPOINT_REST_TASKS_FILTER, ENDPOINT_REST_TASKS_COMPLETED_BY_COMPLETION_DATE, ENDPOINT_REST_TASKS_COMPLETED_BY_DUE_DATE, ENDPOINT_REST_TASKS_COMPLETED_SEARCH, ENDPOINT_REST_TASKS_COMPLETED, ENDPOINT_REST_TEMPLATES_FILE, ENDPOINT_REST_TEMPLATES_URL, ENDPOINT_REST_TEMPLATES_CREATE_FROM_FILE, ENDPOINT_REST_TEMPLATES_IMPORT_FROM_FILE, ENDPOINT_REST_TEMPLATES_IMPORT_FROM_ID, ENDPOINT_REST_PROJECTS, ENDPOINT_REST_PROJECTS_SEARCH, ENDPOINT_SYNC_QUICK_ADD, ENDPOINT_REST_TASK_CLOSE, ENDPOINT_REST_TASK_REOPEN, ENDPOINT_REST_TASK_MOVE, ENDPOINT_REST_LABELS, ENDPOINT_REST_LABELS_SEARCH, ENDPOINT_REST_PROJECT_COLLABORATORS, ENDPOINT_REST_SECTIONS, ENDPOINT_REST_SECTIONS_SEARCH, ENDPOINT_REST_COMMENTS, ENDPOINT_REST_LOCATION_REMINDERS, ENDPOINT_REST_REMINDERS, ENDPOINT_REST_LABELS_SHARED, ENDPOINT_REST_LABELS_SHARED_RENAME, ENDPOINT_REST_LABELS_SHARED_REMOVE, ENDPOINT_SYNC, PROJECT_ARCHIVE, PROJECT_UNARCHIVE, ENDPOINT_REST_PROJECTS_MOVE_TO_WORKSPACE, ENDPOINT_REST_PROJECTS_MOVE_TO_PERSONAL, ENDPOINT_REST_PROJECTS_ARCHIVED, ENDPOINT_REST_PROJECTS_ARCHIVED_COUNT, ENDPOINT_REST_PROJECTS_PERMISSIONS, ENDPOINT_REST_PROJECT_FULL, ENDPOINT_REST_PROJECT_JOIN, SECTION_ARCHIVE, SECTION_UNARCHIVE, ENDPOINT_REST_USER, ENDPOINT_REST_PRODUCTIVITY, ENDPOINT_REST_ACTIVITIES, ENDPOINT_REST_UPLOADS, getProjectInsightsActivityStatsEndpoint, getProjectInsightsHealthEndpoint, getProjectInsightsHealthContextEndpoint, getProjectInsightsProgressEndpoint, getProjectInsightsHealthAnalyzeEndpoint, getWorkspaceInsightsEndpoint, ENDPOINT_REST_BACKUPS, ENDPOINT_REST_BACKUPS_DOWNLOAD, ENDPOINT_REST_EMAILS, ENDPOINT_REST_ID_MAPPINGS, ENDPOINT_REST_MOVED_IDS, ENDPOINT_REST_WORKSPACES, ENDPOINT_WORKSPACE_MEMBERS, getWorkspaceUserTasksEndpoint, getWorkspaceInviteUsersEndpoint, getWorkspaceUserEndpoint, ENDPOINT_WORKSPACE_INVITATIONS, ENDPOINT_WORKSPACE_INVITATIONS_ALL, ENDPOINT_WORKSPACE_INVITATIONS_DELETE, getWorkspaceInvitationAcceptEndpoint, getWorkspaceInvitationRejectEndpoint, ENDPOINT_WORKSPACE_JOIN, ENDPOINT_WORKSPACE_LOGO, ENDPOINT_WORKSPACE_PLAN_DETAILS, ENDPOINT_WORKSPACE_USERS, getWorkspaceActiveProjectsEndpoint, getWorkspaceArchivedProjectsEndpoint, } from './consts/endpoints.js';
17
15
  import { validateAttachment, validateComment, validateCommentArray, validateCurrentUser, validateLabel, validateLabelArray, validateProject, validateProjectArray, validateSection, validateSectionArray, validateTask, validateTaskArray, validateUserArray, validateProductivityStats, validateReminder, validateReminderArray, validateLocationReminderArray, validateActivityEventArray, validateWorkspaceUserArray, validateWorkspaceInvitation, validateWorkspaceInvitationArray, validateWorkspacePlanDetails, validateJoinWorkspaceResult, validateWorkspace, validateWorkspaceArray, validateMemberActivityInfoArray, validateWorkspaceUserTaskArray, validateProjectActivityStats, validateProjectHealth, validateProjectHealthContext, validateProjectProgress, validateWorkspaceInsights, validateBackupArray, validateIdMappingArray, validateMovedIdArray, } from './utils/validators.js';
@@ -84,56 +82,6 @@ function headersToRecord(headers) {
84
82
  });
85
83
  return result;
86
84
  }
87
- const ReminderDeliveryServiceSchema = z.enum(REMINDER_DELIVERY_SERVICES);
88
- const ReminderIdSchema = z.string();
89
- const ReminderDueDateSchema = DueDateSchema.pick({
90
- date: true,
91
- string: true,
92
- timezone: true,
93
- lang: true,
94
- isRecurring: true,
95
- })
96
- .partial()
97
- .strict();
98
- const UpdateRelativeReminderArgsSchema = z
99
- .object({
100
- reminderType: z.literal('relative'),
101
- minuteOffset: z.number().int().optional(),
102
- notifyUid: z.string().optional(),
103
- service: ReminderDeliveryServiceSchema.optional(),
104
- isUrgent: z.boolean().optional(),
105
- })
106
- .strict();
107
- const UpdateAbsoluteReminderArgsSchema = z
108
- .object({
109
- reminderType: z.literal('absolute'),
110
- due: ReminderDueDateSchema.optional(),
111
- notifyUid: z.string().optional(),
112
- service: ReminderDeliveryServiceSchema.optional(),
113
- isUrgent: z.boolean().optional(),
114
- })
115
- .strict();
116
- const UpdateLocationReminderArgsSchema = z
117
- .object({
118
- notifyUid: z.string().optional(),
119
- name: z.string().optional(),
120
- locLat: z.string().optional(),
121
- locLong: z.string().optional(),
122
- locTrigger: z.enum(LOCATION_TRIGGERS).optional(),
123
- radius: z.number().int().optional(),
124
- })
125
- .strict()
126
- .refine((args) => Object.values(args).some((value) => value !== undefined), {
127
- message: 'At least one reminder field must be provided to updateLocationReminder',
128
- });
129
- const UpdateReminderArgsSchema = z
130
- .discriminatedUnion('reminderType', [
131
- UpdateRelativeReminderArgsSchema,
132
- UpdateAbsoluteReminderArgsSchema,
133
- ])
134
- .refine((args) => Object.entries(args).some(([key, value]) => key !== 'reminderType' && value !== undefined), {
135
- message: 'At least one reminder field must be provided to updateReminder',
136
- });
137
85
  export class TodoistApi {
138
86
  constructor(
139
87
  /**
@@ -1,2 +1,92 @@
1
+ import { z } from 'zod';
2
+ import { DueDateSchema } from '../tasks/types.js';
3
+ import { LOCATION_TRIGGERS, ReminderTypeEnum } from '../sync/resources/reminders.js';
1
4
  /** Available reminder delivery services. */
2
5
  export const REMINDER_DELIVERY_SERVICES = ['email', 'push'];
6
+ export const ReminderDeliveryServiceSchema = z.enum(REMINDER_DELIVERY_SERVICES);
7
+ export const ReminderIdSchema = z.string();
8
+ export const ReminderDueDateSchema = DueDateSchema.pick({
9
+ date: true,
10
+ string: true,
11
+ timezone: true,
12
+ lang: true,
13
+ isRecurring: true,
14
+ })
15
+ .partial()
16
+ .strict();
17
+ // ── Add schemas ──────────────────────────────────────────────────────
18
+ export const AddRelativeReminderArgsSchema = z
19
+ .object({
20
+ taskId: z.string(),
21
+ reminderType: z.literal(ReminderTypeEnum.Relative).optional(),
22
+ minuteOffset: z.number().int(),
23
+ service: ReminderDeliveryServiceSchema.optional(),
24
+ notifyUid: z.string().optional(),
25
+ isUrgent: z.boolean().optional(),
26
+ })
27
+ .strict();
28
+ export const AddAbsoluteReminderArgsSchema = z
29
+ .object({
30
+ taskId: z.string(),
31
+ reminderType: z.literal(ReminderTypeEnum.Absolute),
32
+ due: ReminderDueDateSchema,
33
+ service: ReminderDeliveryServiceSchema.optional(),
34
+ notifyUid: z.string().optional(),
35
+ isUrgent: z.boolean().optional(),
36
+ })
37
+ .strict();
38
+ export const AddReminderArgsSchema = z.union([
39
+ AddRelativeReminderArgsSchema,
40
+ AddAbsoluteReminderArgsSchema,
41
+ ]);
42
+ export const AddLocationReminderArgsSchema = z
43
+ .object({
44
+ taskId: z.string(),
45
+ notifyUid: z.string().optional(),
46
+ name: z.string(),
47
+ locLat: z.string(),
48
+ locLong: z.string(),
49
+ locTrigger: z.enum(LOCATION_TRIGGERS),
50
+ radius: z.number().int().optional(),
51
+ })
52
+ .strict();
53
+ // ── Update schemas ───────────────────────────────────────────────────
54
+ export const UpdateRelativeReminderArgsSchema = z
55
+ .object({
56
+ reminderType: z.literal(ReminderTypeEnum.Relative),
57
+ minuteOffset: z.number().int().optional(),
58
+ notifyUid: z.string().optional(),
59
+ service: ReminderDeliveryServiceSchema.optional(),
60
+ isUrgent: z.boolean().optional(),
61
+ })
62
+ .strict();
63
+ export const UpdateAbsoluteReminderArgsSchema = z
64
+ .object({
65
+ reminderType: z.literal(ReminderTypeEnum.Absolute),
66
+ due: ReminderDueDateSchema.optional(),
67
+ notifyUid: z.string().optional(),
68
+ service: ReminderDeliveryServiceSchema.optional(),
69
+ isUrgent: z.boolean().optional(),
70
+ })
71
+ .strict();
72
+ export const UpdateReminderArgsSchema = z
73
+ .discriminatedUnion('reminderType', [
74
+ UpdateRelativeReminderArgsSchema,
75
+ UpdateAbsoluteReminderArgsSchema,
76
+ ])
77
+ .refine((args) => Object.entries(args).some(([key, value]) => key !== 'reminderType' && value !== undefined), {
78
+ message: 'At least one reminder field must be provided to updateReminder',
79
+ });
80
+ export const UpdateLocationReminderArgsSchema = z
81
+ .object({
82
+ notifyUid: z.string().optional(),
83
+ name: z.string().optional(),
84
+ locLat: z.string().optional(),
85
+ locLong: z.string().optional(),
86
+ locTrigger: z.enum(LOCATION_TRIGGERS).optional(),
87
+ radius: z.number().int().optional(),
88
+ })
89
+ .strict()
90
+ .refine((args) => Object.values(args).some((value) => value !== undefined), {
91
+ message: 'At least one reminder field must be provided to updateLocationReminder',
92
+ });
@@ -7,10 +7,22 @@ export const ReminderBaseSchema = z.object({
7
7
  projectId: z.string().optional(),
8
8
  isDeleted: z.boolean(),
9
9
  });
10
+ /** Enum-like object of reminder type values. */
11
+ export const ReminderTypeEnum = {
12
+ Relative: 'relative',
13
+ Absolute: 'absolute',
14
+ Location: 'location',
15
+ };
16
+ /** Available reminder types. */
17
+ export const REMINDER_TYPES = [
18
+ ReminderTypeEnum.Relative,
19
+ ReminderTypeEnum.Absolute,
20
+ ReminderTypeEnum.Location,
21
+ ];
10
22
  /** Available location reminder triggers. */
11
23
  export const LOCATION_TRIGGERS = ['on_enter', 'on_leave'];
12
24
  export const LocationReminderSchema = ReminderBaseSchema.extend({
13
- type: z.literal('location'),
25
+ type: z.literal(ReminderTypeEnum.Location),
14
26
  name: z.string(),
15
27
  locLat: z.string(),
16
28
  locLong: z.string(),
@@ -18,12 +30,12 @@ export const LocationReminderSchema = ReminderBaseSchema.extend({
18
30
  radius: z.number().int(),
19
31
  }).passthrough();
20
32
  export const AbsoluteReminderSchema = ReminderBaseSchema.extend({
21
- type: z.literal('absolute'),
33
+ type: z.literal(ReminderTypeEnum.Absolute),
22
34
  due: DueDateSchema,
23
35
  isUrgent: z.boolean().optional(),
24
36
  }).passthrough();
25
37
  export const RelativeReminderSchema = ReminderBaseSchema.extend({
26
- type: z.literal('relative'),
38
+ type: z.literal(ReminderTypeEnum.Relative),
27
39
  minuteOffset: z.number().int(),
28
40
  due: DueDateSchema.optional(),
29
41
  isUrgent: z.boolean().optional(),
@@ -1,55 +1,170 @@
1
- import type { DueDate } from '../tasks/types.js';
2
- import type { LocationTrigger, Reminder, LocationReminder } from '../sync/resources/reminders.js';
1
+ import { z } from 'zod';
2
+ import type { Reminder, LocationReminder } from '../sync/resources/reminders.js';
3
3
  /** Available reminder delivery services. */
4
4
  export declare const REMINDER_DELIVERY_SERVICES: readonly ["email", "push"];
5
5
  /** Delivery service for a reminder notification. */
6
6
  export type ReminderDeliveryService = (typeof REMINDER_DELIVERY_SERVICES)[number];
7
- export type ReminderDueDate = Partial<Pick<DueDate, 'date' | 'string' | 'timezone' | 'lang' | 'isRecurring'>>;
8
- type ReminderTaskArgs = {
9
- taskId: string;
10
- };
11
- type TimeBasedReminderArgs = {
12
- service?: ReminderDeliveryService;
13
- notifyUid?: string;
14
- isUrgent?: boolean;
15
- };
16
- type AddLocationReminderFields = {
17
- notifyUid?: string;
18
- name: string;
19
- locLat: string;
20
- locLong: string;
21
- locTrigger: LocationTrigger;
22
- radius?: number;
23
- };
24
- export type AddRelativeReminderArgs = ReminderTaskArgs & {
25
- reminderType?: 'relative';
26
- minuteOffset: number;
27
- } & TimeBasedReminderArgs;
28
- export type AddAbsoluteReminderArgs = ReminderTaskArgs & {
29
- reminderType: 'absolute';
30
- due: ReminderDueDate;
31
- } & TimeBasedReminderArgs;
32
- export type AddLocationReminderArgs = ReminderTaskArgs & AddLocationReminderFields;
7
+ export declare const ReminderDeliveryServiceSchema: z.ZodEnum<{
8
+ email: "email";
9
+ push: "push";
10
+ }>;
11
+ export declare const ReminderIdSchema: z.ZodString;
12
+ export declare const ReminderDueDateSchema: z.ZodObject<{
13
+ string: z.ZodOptional<z.ZodString>;
14
+ isRecurring: z.ZodOptional<z.ZodBoolean>;
15
+ date: z.ZodOptional<z.ZodString>;
16
+ timezone: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
17
+ lang: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
18
+ }, z.core.$strict>;
19
+ export type ReminderDueDate = z.infer<typeof ReminderDueDateSchema>;
20
+ export declare const AddRelativeReminderArgsSchema: z.ZodObject<{
21
+ taskId: z.ZodString;
22
+ reminderType: z.ZodOptional<z.ZodLiteral<"relative">>;
23
+ minuteOffset: z.ZodNumber;
24
+ service: z.ZodOptional<z.ZodEnum<{
25
+ email: "email";
26
+ push: "push";
27
+ }>>;
28
+ notifyUid: z.ZodOptional<z.ZodString>;
29
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
30
+ }, z.core.$strict>;
31
+ export type AddRelativeReminderArgs = z.infer<typeof AddRelativeReminderArgsSchema>;
32
+ export declare const AddAbsoluteReminderArgsSchema: z.ZodObject<{
33
+ taskId: z.ZodString;
34
+ reminderType: z.ZodLiteral<"absolute">;
35
+ due: z.ZodObject<{
36
+ string: z.ZodOptional<z.ZodString>;
37
+ isRecurring: z.ZodOptional<z.ZodBoolean>;
38
+ date: z.ZodOptional<z.ZodString>;
39
+ timezone: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
40
+ lang: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
41
+ }, z.core.$strict>;
42
+ service: z.ZodOptional<z.ZodEnum<{
43
+ email: "email";
44
+ push: "push";
45
+ }>>;
46
+ notifyUid: z.ZodOptional<z.ZodString>;
47
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
48
+ }, z.core.$strict>;
49
+ export type AddAbsoluteReminderArgs = z.infer<typeof AddAbsoluteReminderArgsSchema>;
50
+ export declare const AddReminderArgsSchema: z.ZodUnion<readonly [z.ZodObject<{
51
+ taskId: z.ZodString;
52
+ reminderType: z.ZodOptional<z.ZodLiteral<"relative">>;
53
+ minuteOffset: z.ZodNumber;
54
+ service: z.ZodOptional<z.ZodEnum<{
55
+ email: "email";
56
+ push: "push";
57
+ }>>;
58
+ notifyUid: z.ZodOptional<z.ZodString>;
59
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
60
+ }, z.core.$strict>, z.ZodObject<{
61
+ taskId: z.ZodString;
62
+ reminderType: z.ZodLiteral<"absolute">;
63
+ due: z.ZodObject<{
64
+ string: z.ZodOptional<z.ZodString>;
65
+ isRecurring: z.ZodOptional<z.ZodBoolean>;
66
+ date: z.ZodOptional<z.ZodString>;
67
+ timezone: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
68
+ lang: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
69
+ }, z.core.$strict>;
70
+ service: z.ZodOptional<z.ZodEnum<{
71
+ email: "email";
72
+ push: "push";
73
+ }>>;
74
+ notifyUid: z.ZodOptional<z.ZodString>;
75
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
76
+ }, z.core.$strict>]>;
33
77
  /**
34
78
  * Arguments for creating a new reminder.
35
79
  * @see https://developer.todoist.com/api/v1/#tag/Reminders/operation/create_reminder_api_v1_reminders_post
36
80
  */
37
81
  export type AddReminderArgs = AddRelativeReminderArgs | AddAbsoluteReminderArgs;
38
- export type UpdateRelativeReminderArgs = {
39
- reminderType: 'relative';
40
- } & Partial<Omit<AddRelativeReminderArgs, 'taskId' | 'reminderType'>>;
41
- export type UpdateAbsoluteReminderArgs = {
42
- reminderType: 'absolute';
43
- } & Partial<Omit<AddAbsoluteReminderArgs, 'taskId' | 'reminderType'>>;
82
+ export declare const AddLocationReminderArgsSchema: z.ZodObject<{
83
+ taskId: z.ZodString;
84
+ notifyUid: z.ZodOptional<z.ZodString>;
85
+ name: z.ZodString;
86
+ locLat: z.ZodString;
87
+ locLong: z.ZodString;
88
+ locTrigger: z.ZodEnum<{
89
+ on_enter: "on_enter";
90
+ on_leave: "on_leave";
91
+ }>;
92
+ radius: z.ZodOptional<z.ZodNumber>;
93
+ }, z.core.$strict>;
94
+ export type AddLocationReminderArgs = z.infer<typeof AddLocationReminderArgsSchema>;
95
+ export declare const UpdateRelativeReminderArgsSchema: z.ZodObject<{
96
+ reminderType: z.ZodLiteral<"relative">;
97
+ minuteOffset: z.ZodOptional<z.ZodNumber>;
98
+ notifyUid: z.ZodOptional<z.ZodString>;
99
+ service: z.ZodOptional<z.ZodEnum<{
100
+ email: "email";
101
+ push: "push";
102
+ }>>;
103
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
104
+ }, z.core.$strict>;
105
+ export type UpdateRelativeReminderArgs = z.infer<typeof UpdateRelativeReminderArgsSchema>;
106
+ export declare const UpdateAbsoluteReminderArgsSchema: z.ZodObject<{
107
+ reminderType: z.ZodLiteral<"absolute">;
108
+ due: z.ZodOptional<z.ZodObject<{
109
+ string: z.ZodOptional<z.ZodString>;
110
+ isRecurring: z.ZodOptional<z.ZodBoolean>;
111
+ date: z.ZodOptional<z.ZodString>;
112
+ timezone: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
113
+ lang: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
114
+ }, z.core.$strict>>;
115
+ notifyUid: z.ZodOptional<z.ZodString>;
116
+ service: z.ZodOptional<z.ZodEnum<{
117
+ email: "email";
118
+ push: "push";
119
+ }>>;
120
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
121
+ }, z.core.$strict>;
122
+ export type UpdateAbsoluteReminderArgs = z.infer<typeof UpdateAbsoluteReminderArgsSchema>;
123
+ export declare const UpdateReminderArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
124
+ reminderType: z.ZodLiteral<"relative">;
125
+ minuteOffset: z.ZodOptional<z.ZodNumber>;
126
+ notifyUid: z.ZodOptional<z.ZodString>;
127
+ service: z.ZodOptional<z.ZodEnum<{
128
+ email: "email";
129
+ push: "push";
130
+ }>>;
131
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
132
+ }, z.core.$strict>, z.ZodObject<{
133
+ reminderType: z.ZodLiteral<"absolute">;
134
+ due: z.ZodOptional<z.ZodObject<{
135
+ string: z.ZodOptional<z.ZodString>;
136
+ isRecurring: z.ZodOptional<z.ZodBoolean>;
137
+ date: z.ZodOptional<z.ZodString>;
138
+ timezone: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
139
+ lang: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
140
+ }, z.core.$strict>>;
141
+ notifyUid: z.ZodOptional<z.ZodString>;
142
+ service: z.ZodOptional<z.ZodEnum<{
143
+ email: "email";
144
+ push: "push";
145
+ }>>;
146
+ isUrgent: z.ZodOptional<z.ZodBoolean>;
147
+ }, z.core.$strict>], "reminderType">;
44
148
  /**
45
149
  * Arguments for updating an existing reminder.
46
150
  * @see https://developer.todoist.com/api/v1/#tag/Reminders/operation/update_reminder_api_v1_reminders__reminder_id__post
47
151
  */
48
152
  export type UpdateReminderArgs = UpdateRelativeReminderArgs | UpdateAbsoluteReminderArgs;
153
+ export declare const UpdateLocationReminderArgsSchema: z.ZodObject<{
154
+ notifyUid: z.ZodOptional<z.ZodString>;
155
+ name: z.ZodOptional<z.ZodString>;
156
+ locLat: z.ZodOptional<z.ZodString>;
157
+ locLong: z.ZodOptional<z.ZodString>;
158
+ locTrigger: z.ZodOptional<z.ZodEnum<{
159
+ on_enter: "on_enter";
160
+ on_leave: "on_leave";
161
+ }>>;
162
+ radius: z.ZodOptional<z.ZodNumber>;
163
+ }, z.core.$strict>;
49
164
  /**
50
165
  * Arguments for updating an existing location reminder.
51
166
  */
52
- export type UpdateLocationReminderArgs = Partial<Omit<AddLocationReminderArgs, 'taskId'>>;
167
+ export type UpdateLocationReminderArgs = z.infer<typeof UpdateLocationReminderArgsSchema>;
53
168
  /**
54
169
  * Arguments for listing reminders.
55
170
  * @see https://developer.todoist.com/api/v1/#tag/Reminders/operation/get_reminders_api_v1_reminders_get
@@ -88,4 +203,3 @@ export type GetLocationRemindersResponse = {
88
203
  results: LocationReminder[];
89
204
  nextCursor: string | null;
90
205
  };
91
- export {};
@@ -1,20 +1,20 @@
1
1
  import type { SyncDueDate, ReminderService } from './shared.js';
2
- import type { LocationTrigger } from '../resources/reminders.js';
2
+ import type { LocationTrigger, ReminderType } from '../resources/reminders.js';
3
3
  export type ReminderAddArgs = {
4
- type: 'absolute';
4
+ type: Extract<ReminderType, 'absolute'>;
5
5
  itemId: string;
6
6
  service?: ReminderService;
7
7
  notifyUid?: string;
8
8
  due?: SyncDueDate;
9
9
  } | {
10
- type: 'relative';
10
+ type: Extract<ReminderType, 'relative'>;
11
11
  itemId: string;
12
12
  service?: ReminderService;
13
13
  notifyUid?: string;
14
14
  minuteOffset?: number;
15
15
  due?: SyncDueDate;
16
16
  } | {
17
- type: 'location';
17
+ type: Extract<ReminderType, 'location'>;
18
18
  itemId: string;
19
19
  name: string;
20
20
  locLat: string;
@@ -25,20 +25,20 @@ export type ReminderAddArgs = {
25
25
  };
26
26
  export type ReminderUpdateArgs = {
27
27
  id: string;
28
- type: 'absolute';
28
+ type: Extract<ReminderType, 'absolute'>;
29
29
  service?: ReminderService;
30
30
  notifyUid?: string;
31
31
  due?: SyncDueDate;
32
32
  } | {
33
33
  id: string;
34
- type: 'relative';
34
+ type: Extract<ReminderType, 'relative'>;
35
35
  service?: ReminderService;
36
36
  notifyUid?: string;
37
37
  minuteOffset?: number;
38
38
  due?: SyncDueDate;
39
39
  } | {
40
40
  id: string;
41
- type: 'location';
41
+ type: Extract<ReminderType, 'location'>;
42
42
  name?: string;
43
43
  locLat?: string;
44
44
  locLong?: string;
@@ -6,6 +6,16 @@ export declare const ReminderBaseSchema: z.ZodObject<{
6
6
  projectId: z.ZodOptional<z.ZodString>;
7
7
  isDeleted: z.ZodBoolean;
8
8
  }, z.core.$strip>;
9
+ /** Enum-like object of reminder type values. */
10
+ export declare const ReminderTypeEnum: {
11
+ readonly Relative: "relative";
12
+ readonly Absolute: "absolute";
13
+ readonly Location: "location";
14
+ };
15
+ /** Available reminder types. */
16
+ export declare const REMINDER_TYPES: readonly ["relative", "absolute", "location"];
17
+ /** Discriminator for reminder type. */
18
+ export type ReminderType = (typeof REMINDER_TYPES)[number];
9
19
  /** Available location reminder triggers. */
10
20
  export declare const LOCATION_TRIGGERS: readonly ["on_enter", "on_leave"];
11
21
  /** Trigger condition for a location-based reminder. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doist/todoist-api-typescript",
3
- "version": "7.7.0",
3
+ "version": "7.8.0",
4
4
  "description": "A typescript wrapper for the Todoist REST API.",
5
5
  "author": "Doist developers",
6
6
  "repository": "https://github.com/Doist/todoist-api-typescript",
@@ -17,6 +17,10 @@
17
17
  "require": "./dist/cjs/index.js"
18
18
  }
19
19
  },
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "provenance": true
23
+ },
20
24
  "sideEffects": false,
21
25
  "engines": {
22
26
  "node": ">=20.18.1"
@@ -55,6 +59,10 @@
55
59
  },
56
60
  "devDependencies": {
57
61
  "@doist/prettier-config": "4.0.0",
62
+ "@semantic-release/changelog": "6.0.3",
63
+ "@semantic-release/exec": "7.1.0",
64
+ "@semantic-release/git": "10.0.1",
65
+ "conventional-changelog-conventionalcommits": "9.3.0",
58
66
  "dotenv": "17.3.1",
59
67
  "husky": "9.1.7",
60
68
  "lint-staged": "16.2.7",
@@ -64,6 +72,7 @@
64
72
  "oxlint": "1.57.0",
65
73
  "prettier": "3.3.2",
66
74
  "rimraf": "6.1.3",
75
+ "semantic-release": "25.0.3",
67
76
  "ts-node": "10.9.2",
68
77
  "type-fest": "^5.0.0",
69
78
  "typescript": "5.9.3",