@doist/todoist-api-typescript 7.3.0 → 7.5.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 (59) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/authentication.js +14 -4
  3. package/dist/cjs/consts/endpoints.js +11 -1
  4. package/dist/cjs/test-utils/asserts.js +1 -1
  5. package/dist/cjs/test-utils/test-defaults.js +33 -1
  6. package/dist/cjs/todoist-api.js +532 -88
  7. package/dist/cjs/{utils → transport}/fetch-with-retry.js +23 -71
  8. package/dist/cjs/{rest-client.js → transport/http-client.js} +6 -6
  9. package/dist/cjs/transport/http-dispatcher.js +72 -0
  10. package/dist/cjs/types/entities.js +11 -1
  11. package/dist/cjs/types/errors.js +9 -2
  12. package/dist/cjs/types/http.js +3 -1
  13. package/dist/cjs/types/requests.js +3 -0
  14. package/dist/cjs/types/sync/commands/labels.js +3 -0
  15. package/dist/cjs/types/sync/commands/shared.js +15 -0
  16. package/dist/cjs/types/sync/resources/reminders.js +2 -0
  17. package/dist/cjs/types/sync/user-preferences.js +27 -7
  18. package/dist/cjs/utils/multipart-upload.js +1 -1
  19. package/dist/cjs/utils/sanitization.js +7 -7
  20. package/dist/esm/authentication.js +10 -1
  21. package/dist/esm/consts/endpoints.js +9 -0
  22. package/dist/esm/test-utils/asserts.js +1 -1
  23. package/dist/esm/test-utils/test-defaults.js +32 -0
  24. package/dist/esm/todoist-api.js +467 -23
  25. package/dist/esm/{utils → transport}/fetch-with-retry.js +23 -38
  26. package/dist/esm/{rest-client.js → transport/http-client.js} +6 -6
  27. package/dist/esm/transport/http-dispatcher.js +35 -0
  28. package/dist/esm/types/entities.js +10 -0
  29. package/dist/esm/types/errors.js +7 -1
  30. package/dist/esm/types/http.js +3 -1
  31. package/dist/esm/types/requests.js +2 -1
  32. package/dist/esm/types/sync/commands/labels.js +2 -1
  33. package/dist/esm/types/sync/commands/shared.js +13 -1
  34. package/dist/esm/types/sync/resources/reminders.js +2 -0
  35. package/dist/esm/types/sync/user-preferences.js +23 -3
  36. package/dist/esm/utils/multipart-upload.js +1 -1
  37. package/dist/esm/utils/sanitization.js +7 -7
  38. package/dist/types/authentication.d.ts +5 -3
  39. package/dist/types/consts/endpoints.d.ts +9 -0
  40. package/dist/types/test-utils/test-defaults.d.ts +5 -1
  41. package/dist/types/todoist-api.d.ts +144 -3
  42. package/dist/types/{utils → transport}/fetch-with-retry.d.ts +1 -1
  43. package/dist/types/{rest-client.d.ts → transport/http-client.d.ts} +1 -1
  44. package/dist/types/transport/http-dispatcher.d.ts +3 -0
  45. package/dist/types/types/entities.d.ts +8 -1
  46. package/dist/types/types/errors.d.ts +4 -0
  47. package/dist/types/types/requests.d.ts +163 -1
  48. package/dist/types/types/sync/commands/labels.d.ts +5 -1
  49. package/dist/types/types/sync/commands/projects.d.ts +2 -2
  50. package/dist/types/types/sync/commands/reminders.d.ts +3 -2
  51. package/dist/types/types/sync/commands/shared.d.ts +10 -5
  52. package/dist/types/types/sync/resources/reminders.d.ts +4 -0
  53. package/dist/types/types/sync/resources/user.d.ts +2 -2
  54. package/dist/types/types/sync/user-preferences.d.ts +30 -4
  55. package/dist/types/utils/validators.d.ts +4 -0
  56. package/package.json +10 -17
  57. package/dist/cjs/test-utils/mocks.js +0 -3
  58. package/dist/esm/test-utils/mocks.js +0 -3
  59. package/dist/types/test-utils/mocks.d.ts +0 -0
package/README.md CHANGED
@@ -4,6 +4,8 @@ This is the official TypeScript API client for the Todoist REST API.
4
4
 
5
5
  ## Installation
6
6
 
7
+ Requires Node 20.18.1+.
8
+
7
9
  ```
8
10
  npm install @doist/todoist-api-typescript
9
11
  ```
@@ -1,13 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PERMISSIONS = void 0;
3
4
  exports.getAuthStateParameter = getAuthStateParameter;
4
5
  exports.getAuthorizationUrl = getAuthorizationUrl;
5
6
  exports.getAuthToken = getAuthToken;
6
7
  exports.revokeToken = revokeToken;
7
- const rest_client_1 = require("./rest-client");
8
+ const http_client_1 = require("./transport/http-client");
8
9
  const uuid_1 = require("uuid");
9
10
  const types_1 = require("./types");
10
11
  const endpoints_1 = require("./consts/endpoints");
12
+ /** Available OAuth2 permission scopes. */
13
+ exports.PERMISSIONS = [
14
+ 'task:add',
15
+ 'data:read',
16
+ 'data:read_write',
17
+ 'data:delete',
18
+ 'project:delete',
19
+ 'backups:read',
20
+ ];
11
21
  /**
12
22
  * Creates a Basic Authentication header value from client credentials.
13
23
  * @param clientId - The OAuth client ID
@@ -80,7 +90,7 @@ async function getAuthToken(args, options) {
80
90
  const baseUrl = options === null || options === void 0 ? void 0 : options.baseUrl;
81
91
  const customFetch = options === null || options === void 0 ? void 0 : options.customFetch;
82
92
  try {
83
- const response = await (0, rest_client_1.request)({
93
+ const response = await (0, http_client_1.request)({
84
94
  httpMethod: 'POST',
85
95
  baseUri: (0, endpoints_1.getAuthBaseUri)(baseUrl),
86
96
  relativePath: endpoints_1.ENDPOINT_GET_TOKEN,
@@ -135,7 +145,7 @@ async function revokeToken(args, options) {
135
145
  token,
136
146
  token_type_hint: 'access_token',
137
147
  };
138
- const response = await (0, rest_client_1.request)({
148
+ const response = await (0, http_client_1.request)({
139
149
  httpMethod: 'POST',
140
150
  baseUri: (0, endpoints_1.getSyncBaseUri)(baseUrl),
141
151
  relativePath: endpoints_1.ENDPOINT_REVOKE,
@@ -146,5 +156,5 @@ async function revokeToken(args, options) {
146
156
  customHeaders: customHeaders,
147
157
  customFetch,
148
158
  });
149
- return (0, rest_client_1.isSuccess)(response);
159
+ return (0, http_client_1.isSuccess)(response);
150
160
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ENDPOINT_WORKSPACE_USERS = exports.ENDPOINT_WORKSPACE_PLAN_DETAILS = exports.ENDPOINT_WORKSPACE_LOGO = exports.ENDPOINT_WORKSPACE_JOIN = exports.ENDPOINT_WORKSPACE_INVITATIONS_DELETE = exports.ENDPOINT_WORKSPACE_INVITATIONS_ALL = exports.ENDPOINT_WORKSPACE_INVITATIONS = exports.ENDPOINT_REVOKE = exports.ENDPOINT_GET_TOKEN = exports.ENDPOINT_AUTHORIZATION = exports.ENDPOINT_SYNC = exports.ENDPOINT_SYNC_QUICK_ADD = exports.ENDPOINT_REST_PROJECTS_MOVE_TO_PERSONAL = exports.ENDPOINT_REST_PROJECTS_MOVE_TO_WORKSPACE = exports.PROJECT_UNARCHIVE = exports.PROJECT_ARCHIVE = exports.ENDPOINT_REST_UPLOADS = exports.ENDPOINT_REST_ACTIVITIES = exports.ENDPOINT_REST_PRODUCTIVITY = exports.ENDPOINT_REST_USER = exports.ENDPOINT_REST_PROJECT_COLLABORATORS = exports.ENDPOINT_REST_PROJECTS_ARCHIVED = exports.ENDPOINT_REST_PROJECTS_SEARCH = exports.ENDPOINT_REST_PROJECTS = exports.ENDPOINT_REST_TASK_MOVE = exports.ENDPOINT_REST_TASK_REOPEN = exports.ENDPOINT_REST_TASK_CLOSE = exports.ENDPOINT_REST_COMMENTS = exports.ENDPOINT_REST_LABELS_SHARED_REMOVE = exports.ENDPOINT_REST_LABELS_SHARED_RENAME = exports.ENDPOINT_REST_LABELS_SHARED = exports.ENDPOINT_REST_LABELS_SEARCH = exports.ENDPOINT_REST_LABELS = exports.ENDPOINT_REST_SECTIONS_SEARCH = exports.ENDPOINT_REST_SECTIONS = exports.ENDPOINT_REST_TASKS_COMPLETED_SEARCH = exports.ENDPOINT_REST_TASKS_COMPLETED_BY_DUE_DATE = exports.ENDPOINT_REST_TASKS_COMPLETED_BY_COMPLETION_DATE = exports.ENDPOINT_REST_TASKS_FILTER = exports.ENDPOINT_REST_TASKS = exports.API_BASE_URI = exports.API_VERSION = exports.TODOIST_WEB_URI = void 0;
3
+ exports.ENDPOINT_WORKSPACE_LOGO = exports.ENDPOINT_WORKSPACE_JOIN = exports.ENDPOINT_WORKSPACE_INVITATIONS_DELETE = exports.ENDPOINT_WORKSPACE_INVITATIONS_ALL = exports.ENDPOINT_WORKSPACE_INVITATIONS = exports.ENDPOINT_REST_WORKSPACES = exports.ENDPOINT_REVOKE = exports.ENDPOINT_GET_TOKEN = exports.ENDPOINT_AUTHORIZATION = exports.ENDPOINT_SYNC = exports.ENDPOINT_SYNC_QUICK_ADD = exports.ENDPOINT_REST_PROJECTS_MOVE_TO_PERSONAL = exports.ENDPOINT_REST_PROJECTS_MOVE_TO_WORKSPACE = exports.SECTION_UNARCHIVE = exports.SECTION_ARCHIVE = exports.ENDPOINT_REST_PROJECT_JOIN = exports.ENDPOINT_REST_PROJECT_FULL = exports.ENDPOINT_REST_PROJECTS_PERMISSIONS = exports.ENDPOINT_REST_PROJECTS_ARCHIVED_COUNT = exports.PROJECT_UNARCHIVE = exports.PROJECT_ARCHIVE = exports.ENDPOINT_REST_UPLOADS = exports.ENDPOINT_REST_ACTIVITIES = exports.ENDPOINT_REST_PRODUCTIVITY = exports.ENDPOINT_REST_USER = exports.ENDPOINT_REST_PROJECT_COLLABORATORS = exports.ENDPOINT_REST_PROJECTS_ARCHIVED = exports.ENDPOINT_REST_PROJECTS_SEARCH = exports.ENDPOINT_REST_PROJECTS = exports.ENDPOINT_REST_TASK_MOVE = exports.ENDPOINT_REST_TASK_REOPEN = exports.ENDPOINT_REST_TASK_CLOSE = exports.ENDPOINT_REST_LOCATION_REMINDERS = exports.ENDPOINT_REST_REMINDERS = exports.ENDPOINT_REST_COMMENTS = exports.ENDPOINT_REST_LABELS_SHARED_REMOVE = exports.ENDPOINT_REST_LABELS_SHARED_RENAME = exports.ENDPOINT_REST_LABELS_SHARED = exports.ENDPOINT_REST_LABELS_SEARCH = exports.ENDPOINT_REST_LABELS = exports.ENDPOINT_REST_SECTIONS_SEARCH = exports.ENDPOINT_REST_SECTIONS = exports.ENDPOINT_REST_TASKS_COMPLETED_SEARCH = exports.ENDPOINT_REST_TASKS_COMPLETED_BY_DUE_DATE = exports.ENDPOINT_REST_TASKS_COMPLETED_BY_COMPLETION_DATE = exports.ENDPOINT_REST_TASKS_FILTER = exports.ENDPOINT_REST_TASKS = exports.API_BASE_URI = exports.API_VERSION = exports.TODOIST_WEB_URI = void 0;
4
+ exports.ENDPOINT_WORKSPACE_USERS = exports.ENDPOINT_WORKSPACE_PLAN_DETAILS = void 0;
4
5
  exports.getSyncBaseUri = getSyncBaseUri;
5
6
  exports.getAuthBaseUri = getAuthBaseUri;
6
7
  exports.getWorkspaceInvitationAcceptEndpoint = getWorkspaceInvitationAcceptEndpoint;
@@ -34,6 +35,8 @@ exports.ENDPOINT_REST_LABELS_SHARED = exports.ENDPOINT_REST_LABELS + '/shared';
34
35
  exports.ENDPOINT_REST_LABELS_SHARED_RENAME = exports.ENDPOINT_REST_LABELS_SHARED + '/rename';
35
36
  exports.ENDPOINT_REST_LABELS_SHARED_REMOVE = exports.ENDPOINT_REST_LABELS_SHARED + '/remove';
36
37
  exports.ENDPOINT_REST_COMMENTS = 'comments';
38
+ exports.ENDPOINT_REST_REMINDERS = 'reminders';
39
+ exports.ENDPOINT_REST_LOCATION_REMINDERS = 'location_reminders';
37
40
  exports.ENDPOINT_REST_TASK_CLOSE = 'close';
38
41
  exports.ENDPOINT_REST_TASK_REOPEN = 'reopen';
39
42
  exports.ENDPOINT_REST_TASK_MOVE = 'move';
@@ -47,6 +50,12 @@ exports.ENDPOINT_REST_ACTIVITIES = 'activities';
47
50
  exports.ENDPOINT_REST_UPLOADS = 'uploads';
48
51
  exports.PROJECT_ARCHIVE = 'archive';
49
52
  exports.PROJECT_UNARCHIVE = 'unarchive';
53
+ exports.ENDPOINT_REST_PROJECTS_ARCHIVED_COUNT = exports.ENDPOINT_REST_PROJECTS + '/archived/count';
54
+ exports.ENDPOINT_REST_PROJECTS_PERMISSIONS = exports.ENDPOINT_REST_PROJECTS + '/permissions';
55
+ exports.ENDPOINT_REST_PROJECT_FULL = 'full';
56
+ exports.ENDPOINT_REST_PROJECT_JOIN = 'join';
57
+ exports.SECTION_ARCHIVE = 'archive';
58
+ exports.SECTION_UNARCHIVE = 'unarchive';
50
59
  exports.ENDPOINT_REST_PROJECTS_MOVE_TO_WORKSPACE = exports.ENDPOINT_REST_PROJECTS + '/move_to_workspace';
51
60
  exports.ENDPOINT_REST_PROJECTS_MOVE_TO_PERSONAL = exports.ENDPOINT_REST_PROJECTS + '/move_to_personal';
52
61
  exports.ENDPOINT_SYNC_QUICK_ADD = exports.ENDPOINT_REST_TASKS + '/quick';
@@ -55,6 +64,7 @@ exports.ENDPOINT_AUTHORIZATION = 'authorize';
55
64
  exports.ENDPOINT_GET_TOKEN = 'access_token';
56
65
  exports.ENDPOINT_REVOKE = 'revoke';
57
66
  // Workspace endpoints
67
+ exports.ENDPOINT_REST_WORKSPACES = 'workspaces';
58
68
  exports.ENDPOINT_WORKSPACE_INVITATIONS = 'workspaces/invitations';
59
69
  exports.ENDPOINT_WORKSPACE_INVITATIONS_ALL = 'workspaces/invitations/all';
60
70
  exports.ENDPOINT_WORKSPACE_INVITATIONS_DELETE = 'workspaces/invitations/delete';
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertInstance = assertInstance;
4
4
  // Has to use 'any' to express constructor type
5
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ // oxlint-disable-next-line no-explicit-any
6
6
  function assertInstance(value, type) {
7
7
  if (value instanceof type) {
8
8
  return;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = exports.COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = exports.RAW_COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = exports.COMMENT_WITH_OPTIONALS_AS_NULL_TASK = exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK = exports.INVALID_COMMENT = exports.DEFAULT_COMMENT = exports.DEFAULT_RAW_COMMENT = exports.INVALID_ATTACHMENT = exports.DEFAULT_ATTACHMENT = exports.INVALID_USER = exports.DEFAULT_USER = exports.INVALID_LABEL = exports.DEFAULT_LABEL = exports.INVALID_SECTION = exports.DEFAULT_SECTION = exports.PROJECT_WITH_OPTIONALS_AS_NULL = exports.INVALID_PROJECT = exports.DEFAULT_PROJECT = exports.TASK_WITH_OPTIONALS_AS_NULL = exports.INVALID_TASK = exports.DEFAULT_TASK = exports.DEFAULT_DEADLINE = exports.DEFAULT_DURATION = exports.DEFAULT_DUE_DATE = exports.INVALID_ENTITY_ID = exports.DEFAULT_REQUEST_ID = exports.DEFAULT_AUTH_TOKEN = exports.DEFAULT_PROJECT_VIEW_STYLE = exports.DEFAULT_PROJECT_NAME = exports.DEFAULT_PROJECT_ID = exports.DEFAULT_ORDER = exports.DEFAULT_TASK_PRIORITY = exports.DEFAULT_TASK_DESCRIPTION = exports.DEFAULT_TASK_CONTENT = exports.DEFAULT_TASK_ID = void 0;
3
+ exports.COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = exports.COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = exports.RAW_COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = exports.COMMENT_WITH_OPTIONALS_AS_NULL_TASK = exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK = exports.INVALID_COMMENT = exports.DEFAULT_LOCATION_REMINDER = exports.DEFAULT_ABSOLUTE_REMINDER = exports.DEFAULT_RELATIVE_REMINDER = exports.DEFAULT_REMINDER_ID = exports.DEFAULT_COMMENT = exports.DEFAULT_RAW_COMMENT = exports.INVALID_ATTACHMENT = exports.DEFAULT_ATTACHMENT = exports.INVALID_USER = exports.DEFAULT_USER = exports.INVALID_LABEL = exports.DEFAULT_LABEL = exports.INVALID_SECTION = exports.DEFAULT_SECTION = exports.PROJECT_WITH_OPTIONALS_AS_NULL = exports.INVALID_PROJECT = exports.DEFAULT_PROJECT = exports.TASK_WITH_OPTIONALS_AS_NULL = exports.INVALID_TASK = exports.DEFAULT_TASK = exports.DEFAULT_DEADLINE = exports.DEFAULT_DURATION = exports.DEFAULT_DUE_DATE = exports.INVALID_ENTITY_ID = exports.DEFAULT_REQUEST_ID = exports.DEFAULT_AUTH_TOKEN = exports.DEFAULT_PROJECT_VIEW_STYLE = exports.DEFAULT_PROJECT_NAME = exports.DEFAULT_PROJECT_ID = exports.DEFAULT_ORDER = exports.DEFAULT_TASK_PRIORITY = exports.DEFAULT_TASK_DESCRIPTION = exports.DEFAULT_TASK_CONTENT = exports.DEFAULT_TASK_ID = void 0;
4
4
  const url_helpers_1 = require("../utils/url-helpers");
5
5
  exports.DEFAULT_TASK_ID = '1234';
6
6
  exports.DEFAULT_TASK_CONTENT = 'This is a task';
@@ -179,6 +179,38 @@ exports.DEFAULT_RAW_COMMENT = {
179
179
  itemId: exports.DEFAULT_TASK_ID,
180
180
  };
181
181
  exports.DEFAULT_COMMENT = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { taskId: exports.DEFAULT_RAW_COMMENT.itemId, itemId: undefined });
182
+ exports.DEFAULT_REMINDER_ID = '6XGgmFQrx44wfGHr';
183
+ exports.DEFAULT_RELATIVE_REMINDER = {
184
+ id: exports.DEFAULT_REMINDER_ID,
185
+ itemId: exports.DEFAULT_TASK_ID,
186
+ notifyUid: DEFAULT_USER_ID,
187
+ isDeleted: false,
188
+ type: 'relative',
189
+ minuteOffset: 30,
190
+ due: exports.DEFAULT_DUE_DATE,
191
+ isUrgent: false,
192
+ };
193
+ exports.DEFAULT_ABSOLUTE_REMINDER = {
194
+ id: exports.DEFAULT_REMINDER_ID,
195
+ itemId: exports.DEFAULT_TASK_ID,
196
+ notifyUid: DEFAULT_USER_ID,
197
+ isDeleted: false,
198
+ type: 'absolute',
199
+ due: exports.DEFAULT_DUE_DATE,
200
+ isUrgent: true,
201
+ };
202
+ exports.DEFAULT_LOCATION_REMINDER = {
203
+ id: exports.DEFAULT_REMINDER_ID,
204
+ itemId: exports.DEFAULT_TASK_ID,
205
+ notifyUid: DEFAULT_USER_ID,
206
+ isDeleted: false,
207
+ type: 'location',
208
+ name: 'Aliados',
209
+ locLat: '41.148581',
210
+ locLong: '-8.610945000000015',
211
+ locTrigger: 'on_enter',
212
+ radius: 100,
213
+ };
182
214
  exports.INVALID_COMMENT = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { isDeleted: 'true' });
183
215
  exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { fileAttachment: null, uidsToNotify: null, reactions: null });
184
216
  exports.COMMENT_WITH_OPTIONALS_AS_NULL_TASK = Object.assign(Object.assign({}, exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK), { taskId: exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK.itemId, itemId: undefined });