@doist/todoist-sdk 9.2.0 → 9.3.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.
- package/dist/cjs/clients/app-client.js +17 -17
- package/dist/cjs/clients/comment-client.js +3 -4
- package/dist/cjs/clients/folder-client.js +3 -4
- package/dist/cjs/clients/insights-client.js +6 -7
- package/dist/cjs/clients/label-client.js +3 -4
- package/dist/cjs/clients/project-client.js +8 -9
- package/dist/cjs/clients/section-client.js +5 -6
- package/dist/cjs/clients/task-client.js +6 -7
- package/dist/cjs/clients/ui-extension-client.js +4 -5
- package/dist/cjs/clients/workspace-client.js +3 -4
- package/dist/cjs/utils/validators.js +7 -2
- package/dist/esm/clients/app-client.js +18 -18
- package/dist/esm/clients/comment-client.js +4 -5
- package/dist/esm/clients/folder-client.js +4 -5
- package/dist/esm/clients/insights-client.js +7 -8
- package/dist/esm/clients/label-client.js +4 -5
- package/dist/esm/clients/project-client.js +9 -10
- package/dist/esm/clients/section-client.js +6 -7
- package/dist/esm/clients/task-client.js +7 -8
- package/dist/esm/clients/ui-extension-client.js +5 -6
- package/dist/esm/clients/workspace-client.js +4 -5
- package/dist/esm/utils/validators.js +5 -0
- package/dist/types/utils/validators.d.ts +2 -0
- package/package.json +1 -1
|
@@ -41,7 +41,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
41
41
|
return (0, validators_1.validateAppArray)(response.data);
|
|
42
42
|
}
|
|
43
43
|
async getApp(appId, requestId) {
|
|
44
|
-
|
|
44
|
+
validators_1.IdSchema.parse(appId);
|
|
45
45
|
const response = await (0, http_client_1.request)({
|
|
46
46
|
httpMethod: 'GET',
|
|
47
47
|
baseUri: this.apiRootBase,
|
|
@@ -65,7 +65,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
65
65
|
return (0, validators_1.validateApp)(response.data);
|
|
66
66
|
}
|
|
67
67
|
async updateApp(appId, args, requestId) {
|
|
68
|
-
|
|
68
|
+
validators_1.IdSchema.parse(appId);
|
|
69
69
|
const { appTokenScopes } = args, rest = __rest(args, ["appTokenScopes"]);
|
|
70
70
|
const payload = Object.assign({}, rest);
|
|
71
71
|
if (appTokenScopes !== undefined) {
|
|
@@ -83,7 +83,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
83
83
|
return (0, validators_1.validateAppWithUserCount)(response.data);
|
|
84
84
|
}
|
|
85
85
|
async deleteApp(appId, requestId) {
|
|
86
|
-
|
|
86
|
+
validators_1.IdSchema.parse(appId);
|
|
87
87
|
const response = await (0, http_client_1.request)({
|
|
88
88
|
httpMethod: 'DELETE',
|
|
89
89
|
baseUri: this.apiRootBase,
|
|
@@ -95,7 +95,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
95
95
|
return (0, http_client_1.isSuccess)(response);
|
|
96
96
|
}
|
|
97
97
|
async getAppSecrets(appId, requestId) {
|
|
98
|
-
|
|
98
|
+
validators_1.IdSchema.parse(appId);
|
|
99
99
|
const response = await (0, http_client_1.request)({
|
|
100
100
|
httpMethod: 'GET',
|
|
101
101
|
baseUri: this.apiRootBase,
|
|
@@ -107,7 +107,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
107
107
|
return (0, validators_1.validateAppSecrets)(response.data);
|
|
108
108
|
}
|
|
109
109
|
async resetAppClientSecret(appId, requestId) {
|
|
110
|
-
|
|
110
|
+
validators_1.IdSchema.parse(appId);
|
|
111
111
|
const response = await (0, http_client_1.request)({
|
|
112
112
|
httpMethod: 'DELETE',
|
|
113
113
|
baseUri: this.apiRootBase,
|
|
@@ -119,7 +119,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
119
119
|
return (0, validators_1.validateAppWithUserCount)(response.data);
|
|
120
120
|
}
|
|
121
121
|
async revokeAppTokens(appId, requestId) {
|
|
122
|
-
|
|
122
|
+
validators_1.IdSchema.parse(appId);
|
|
123
123
|
const response = await (0, http_client_1.request)({
|
|
124
124
|
httpMethod: 'DELETE',
|
|
125
125
|
baseUri: this.apiRootBase,
|
|
@@ -131,7 +131,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
131
131
|
return (0, validators_1.validateAppWithUserCount)(response.data);
|
|
132
132
|
}
|
|
133
133
|
async uploadAppIcon({ appId, file, fileName = '', size = 'medium' }, requestId) {
|
|
134
|
-
|
|
134
|
+
validators_1.IdSchema.parse(appId);
|
|
135
135
|
if (Buffer.isBuffer(file) && file.length === 0) {
|
|
136
136
|
throw new Error('Cannot upload empty image file');
|
|
137
137
|
}
|
|
@@ -148,7 +148,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
148
148
|
return (0, validators_1.validateAppWithUserCount)((0, case_conversion_1.camelCaseKeys)(data));
|
|
149
149
|
}
|
|
150
150
|
async getAppTestToken(appId, requestId) {
|
|
151
|
-
|
|
151
|
+
validators_1.IdSchema.parse(appId);
|
|
152
152
|
const response = await (0, http_client_1.request)({
|
|
153
153
|
httpMethod: 'GET',
|
|
154
154
|
baseUri: this.apiRootBase,
|
|
@@ -160,7 +160,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
160
160
|
return (0, validators_1.validateAppTestToken)(response.data);
|
|
161
161
|
}
|
|
162
162
|
async createAppTestToken(appId, requestId) {
|
|
163
|
-
|
|
163
|
+
validators_1.IdSchema.parse(appId);
|
|
164
164
|
const response = await (0, http_client_1.request)({
|
|
165
165
|
httpMethod: 'PUT',
|
|
166
166
|
baseUri: this.apiRootBase,
|
|
@@ -172,7 +172,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
172
172
|
return (0, validators_1.validateAppTestToken)(response.data);
|
|
173
173
|
}
|
|
174
174
|
async getAppDistributionToken(appId, requestId) {
|
|
175
|
-
|
|
175
|
+
validators_1.IdSchema.parse(appId);
|
|
176
176
|
const response = await (0, http_client_1.request)({
|
|
177
177
|
httpMethod: 'GET',
|
|
178
178
|
baseUri: this.apiRootBase,
|
|
@@ -184,7 +184,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
184
184
|
return (0, validators_1.validateAppDistributionToken)(response.data);
|
|
185
185
|
}
|
|
186
186
|
async getAppVerificationToken(appId, requestId) {
|
|
187
|
-
|
|
187
|
+
validators_1.IdSchema.parse(appId);
|
|
188
188
|
const response = await (0, http_client_1.request)({
|
|
189
189
|
httpMethod: 'GET',
|
|
190
190
|
baseUri: this.apiRootBase,
|
|
@@ -196,7 +196,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
196
196
|
return (0, validators_1.validateAppVerificationToken)(response.data);
|
|
197
197
|
}
|
|
198
198
|
async resetAppVerificationToken(appId, requestId) {
|
|
199
|
-
|
|
199
|
+
validators_1.IdSchema.parse(appId);
|
|
200
200
|
const response = await (0, http_client_1.request)({
|
|
201
201
|
httpMethod: 'DELETE',
|
|
202
202
|
baseUri: this.apiRootBase,
|
|
@@ -221,7 +221,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
221
221
|
}
|
|
222
222
|
// --- App webhooks ---
|
|
223
223
|
async getAppWebhook(appId, requestId) {
|
|
224
|
-
|
|
224
|
+
validators_1.IdSchema.parse(appId);
|
|
225
225
|
const response = await (0, http_client_1.request)({
|
|
226
226
|
httpMethod: 'GET',
|
|
227
227
|
baseUri: this.apiRootBase,
|
|
@@ -246,7 +246,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
246
246
|
return (0, validators_1.validateAppWebhook)(response.data);
|
|
247
247
|
}
|
|
248
248
|
async deleteAppWebhook(appId, requestId) {
|
|
249
|
-
|
|
249
|
+
validators_1.IdSchema.parse(appId);
|
|
250
250
|
const response = await (0, http_client_1.request)({
|
|
251
251
|
httpMethod: 'DELETE',
|
|
252
252
|
baseUri: this.apiRootBase,
|
|
@@ -282,7 +282,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
282
282
|
return (0, validators_1.validateAppInstallation)(response.data);
|
|
283
283
|
}
|
|
284
284
|
async getAppInstallation(installationId, requestId) {
|
|
285
|
-
|
|
285
|
+
validators_1.IdSchema.parse(installationId);
|
|
286
286
|
const response = await (0, http_client_1.request)({
|
|
287
287
|
httpMethod: 'GET',
|
|
288
288
|
baseUri: this.apiRootBase,
|
|
@@ -294,7 +294,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
294
294
|
return (0, validators_1.validateAppInstallation)(response.data);
|
|
295
295
|
}
|
|
296
296
|
async updateAppInstallation(installationId, args, requestId) {
|
|
297
|
-
|
|
297
|
+
validators_1.IdSchema.parse(installationId);
|
|
298
298
|
const response = await (0, http_client_1.request)({
|
|
299
299
|
httpMethod: 'POST',
|
|
300
300
|
baseUri: this.apiRootBase,
|
|
@@ -307,7 +307,7 @@ class AppClient extends base_client_1.BaseClient {
|
|
|
307
307
|
return (0, validators_1.validateAppInstallation)(response.data);
|
|
308
308
|
}
|
|
309
309
|
async uninstallApp(installationId, requestId) {
|
|
310
|
-
|
|
310
|
+
validators_1.IdSchema.parse(installationId);
|
|
311
311
|
const response = await (0, http_client_1.request)({
|
|
312
312
|
httpMethod: 'DELETE',
|
|
313
313
|
baseUri: this.apiRootBase,
|
|
@@ -12,7 +12,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.CommentClient = void 0;
|
|
15
|
-
const zod_1 = require("zod");
|
|
16
15
|
const endpoints_1 = require("../consts/endpoints");
|
|
17
16
|
const http_client_1 = require("../transport/http-client");
|
|
18
17
|
const request_helpers_1 = require("../utils/request-helpers");
|
|
@@ -40,7 +39,7 @@ class CommentClient extends base_client_1.BaseClient {
|
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
async getComment(id) {
|
|
43
|
-
|
|
42
|
+
validators_1.IdSchema.parse(id);
|
|
44
43
|
const response = await (0, http_client_1.request)({
|
|
45
44
|
httpMethod: 'GET',
|
|
46
45
|
baseUri: this.syncApiBase,
|
|
@@ -64,7 +63,7 @@ class CommentClient extends base_client_1.BaseClient {
|
|
|
64
63
|
return (0, validators_1.validateComment)(response.data);
|
|
65
64
|
}
|
|
66
65
|
async updateComment(id, args, requestId) {
|
|
67
|
-
|
|
66
|
+
validators_1.IdSchema.parse(id);
|
|
68
67
|
const response = await (0, http_client_1.request)({
|
|
69
68
|
httpMethod: 'POST',
|
|
70
69
|
baseUri: this.syncApiBase,
|
|
@@ -77,7 +76,7 @@ class CommentClient extends base_client_1.BaseClient {
|
|
|
77
76
|
return (0, validators_1.validateComment)(response.data);
|
|
78
77
|
}
|
|
79
78
|
async deleteComment(id, requestId) {
|
|
80
|
-
|
|
79
|
+
validators_1.IdSchema.parse(id);
|
|
81
80
|
const response = await (0, http_client_1.request)({
|
|
82
81
|
httpMethod: 'DELETE',
|
|
83
82
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FolderClient = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
4
|
const endpoints_1 = require("../consts/endpoints");
|
|
6
5
|
const http_client_1 = require("../transport/http-client");
|
|
7
6
|
const request_helpers_1 = require("../utils/request-helpers");
|
|
@@ -29,7 +28,7 @@ class FolderClient extends base_client_1.BaseClient {
|
|
|
29
28
|
};
|
|
30
29
|
}
|
|
31
30
|
async getFolder(id) {
|
|
32
|
-
|
|
31
|
+
validators_1.IdSchema.parse(id);
|
|
33
32
|
const response = await (0, http_client_1.request)({
|
|
34
33
|
httpMethod: 'GET',
|
|
35
34
|
baseUri: this.syncApiBase,
|
|
@@ -52,7 +51,7 @@ class FolderClient extends base_client_1.BaseClient {
|
|
|
52
51
|
return (0, validators_1.validateFolder)(response.data);
|
|
53
52
|
}
|
|
54
53
|
async updateFolder(id, args, requestId) {
|
|
55
|
-
|
|
54
|
+
validators_1.IdSchema.parse(id);
|
|
56
55
|
const response = await (0, http_client_1.request)({
|
|
57
56
|
httpMethod: 'POST',
|
|
58
57
|
baseUri: this.syncApiBase,
|
|
@@ -65,7 +64,7 @@ class FolderClient extends base_client_1.BaseClient {
|
|
|
65
64
|
return (0, validators_1.validateFolder)(response.data);
|
|
66
65
|
}
|
|
67
66
|
async deleteFolder(id, requestId) {
|
|
68
|
-
|
|
67
|
+
validators_1.IdSchema.parse(id);
|
|
69
68
|
const response = await (0, http_client_1.request)({
|
|
70
69
|
httpMethod: 'DELETE',
|
|
71
70
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InsightsClient = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
4
|
const endpoints_1 = require("../consts/endpoints");
|
|
6
5
|
const http_client_1 = require("../transport/http-client");
|
|
7
6
|
const validators_1 = require("../utils/validators");
|
|
@@ -16,7 +15,7 @@ const base_client_1 = require("./base-client");
|
|
|
16
15
|
*/
|
|
17
16
|
class InsightsClient extends base_client_1.BaseClient {
|
|
18
17
|
async getProjectActivityStats(projectId, args = {}) {
|
|
19
|
-
|
|
18
|
+
validators_1.IdSchema.parse(projectId);
|
|
20
19
|
const response = await (0, http_client_1.request)({
|
|
21
20
|
httpMethod: 'GET',
|
|
22
21
|
baseUri: this.syncApiBase,
|
|
@@ -28,7 +27,7 @@ class InsightsClient extends base_client_1.BaseClient {
|
|
|
28
27
|
return (0, validators_1.validateProjectActivityStats)(response.data);
|
|
29
28
|
}
|
|
30
29
|
async getProjectHealth(projectId) {
|
|
31
|
-
|
|
30
|
+
validators_1.IdSchema.parse(projectId);
|
|
32
31
|
const response = await (0, http_client_1.request)({
|
|
33
32
|
httpMethod: 'GET',
|
|
34
33
|
baseUri: this.syncApiBase,
|
|
@@ -39,7 +38,7 @@ class InsightsClient extends base_client_1.BaseClient {
|
|
|
39
38
|
return (0, validators_1.validateProjectHealth)(response.data);
|
|
40
39
|
}
|
|
41
40
|
async getProjectHealthContext(projectId) {
|
|
42
|
-
|
|
41
|
+
validators_1.IdSchema.parse(projectId);
|
|
43
42
|
const response = await (0, http_client_1.request)({
|
|
44
43
|
httpMethod: 'GET',
|
|
45
44
|
baseUri: this.syncApiBase,
|
|
@@ -50,7 +49,7 @@ class InsightsClient extends base_client_1.BaseClient {
|
|
|
50
49
|
return (0, validators_1.validateProjectHealthContext)(response.data);
|
|
51
50
|
}
|
|
52
51
|
async getProjectProgress(projectId) {
|
|
53
|
-
|
|
52
|
+
validators_1.IdSchema.parse(projectId);
|
|
54
53
|
const response = await (0, http_client_1.request)({
|
|
55
54
|
httpMethod: 'GET',
|
|
56
55
|
baseUri: this.syncApiBase,
|
|
@@ -61,7 +60,7 @@ class InsightsClient extends base_client_1.BaseClient {
|
|
|
61
60
|
return (0, validators_1.validateProjectProgress)(response.data);
|
|
62
61
|
}
|
|
63
62
|
async getWorkspaceInsights(workspaceId, args = {}) {
|
|
64
|
-
|
|
63
|
+
validators_1.IdSchema.parse(workspaceId);
|
|
65
64
|
const response = await (0, http_client_1.request)({
|
|
66
65
|
httpMethod: 'GET',
|
|
67
66
|
baseUri: this.syncApiBase,
|
|
@@ -73,7 +72,7 @@ class InsightsClient extends base_client_1.BaseClient {
|
|
|
73
72
|
return (0, validators_1.validateWorkspaceInsights)(response.data);
|
|
74
73
|
}
|
|
75
74
|
async analyzeProjectHealth(projectId, requestId) {
|
|
76
|
-
|
|
75
|
+
validators_1.IdSchema.parse(projectId);
|
|
77
76
|
const response = await (0, http_client_1.request)({
|
|
78
77
|
httpMethod: 'POST',
|
|
79
78
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LabelClient = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
4
|
const endpoints_1 = require("../consts/endpoints");
|
|
6
5
|
const http_client_1 = require("../transport/http-client");
|
|
7
6
|
const request_helpers_1 = require("../utils/request-helpers");
|
|
@@ -15,7 +14,7 @@ const base_client_1 = require("./base-client");
|
|
|
15
14
|
*/
|
|
16
15
|
class LabelClient extends base_client_1.BaseClient {
|
|
17
16
|
async getLabel(id) {
|
|
18
|
-
|
|
17
|
+
validators_1.IdSchema.parse(id);
|
|
19
18
|
const response = await (0, http_client_1.request)({
|
|
20
19
|
httpMethod: 'GET',
|
|
21
20
|
baseUri: this.syncApiBase,
|
|
@@ -66,7 +65,7 @@ class LabelClient extends base_client_1.BaseClient {
|
|
|
66
65
|
return (0, validators_1.validateLabel)(response.data);
|
|
67
66
|
}
|
|
68
67
|
async updateLabel(id, args, requestId) {
|
|
69
|
-
|
|
68
|
+
validators_1.IdSchema.parse(id);
|
|
70
69
|
const response = await (0, http_client_1.request)({
|
|
71
70
|
httpMethod: 'POST',
|
|
72
71
|
baseUri: this.syncApiBase,
|
|
@@ -79,7 +78,7 @@ class LabelClient extends base_client_1.BaseClient {
|
|
|
79
78
|
return (0, validators_1.validateLabel)(response.data);
|
|
80
79
|
}
|
|
81
80
|
async deleteLabel(id, requestId) {
|
|
82
|
-
|
|
81
|
+
validators_1.IdSchema.parse(id);
|
|
83
82
|
const response = await (0, http_client_1.request)({
|
|
84
83
|
httpMethod: 'DELETE',
|
|
85
84
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProjectClient = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
4
|
const endpoints_1 = require("../consts/endpoints");
|
|
6
5
|
const http_client_1 = require("../transport/http-client");
|
|
7
6
|
const request_helpers_1 = require("../utils/request-helpers");
|
|
@@ -15,7 +14,7 @@ const base_client_1 = require("./base-client");
|
|
|
15
14
|
*/
|
|
16
15
|
class ProjectClient extends base_client_1.BaseClient {
|
|
17
16
|
async getProject(id) {
|
|
18
|
-
|
|
17
|
+
validators_1.IdSchema.parse(id);
|
|
19
18
|
const response = await (0, http_client_1.request)({
|
|
20
19
|
httpMethod: 'GET',
|
|
21
20
|
baseUri: this.syncApiBase,
|
|
@@ -80,7 +79,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
80
79
|
return (0, validators_1.validateProject)(response.data);
|
|
81
80
|
}
|
|
82
81
|
async updateProject(id, args, requestId) {
|
|
83
|
-
|
|
82
|
+
validators_1.IdSchema.parse(id);
|
|
84
83
|
const response = await (0, http_client_1.request)({
|
|
85
84
|
httpMethod: 'POST',
|
|
86
85
|
baseUri: this.syncApiBase,
|
|
@@ -93,7 +92,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
93
92
|
return (0, validators_1.validateProject)(response.data);
|
|
94
93
|
}
|
|
95
94
|
async deleteProject(id, requestId) {
|
|
96
|
-
|
|
95
|
+
validators_1.IdSchema.parse(id);
|
|
97
96
|
const response = await (0, http_client_1.request)({
|
|
98
97
|
httpMethod: 'DELETE',
|
|
99
98
|
baseUri: this.syncApiBase,
|
|
@@ -105,7 +104,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
105
104
|
return (0, http_client_1.isSuccess)(response);
|
|
106
105
|
}
|
|
107
106
|
async archiveProject(id, requestId) {
|
|
108
|
-
|
|
107
|
+
validators_1.IdSchema.parse(id);
|
|
109
108
|
const response = await (0, http_client_1.request)({
|
|
110
109
|
httpMethod: 'POST',
|
|
111
110
|
baseUri: this.syncApiBase,
|
|
@@ -117,7 +116,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
117
116
|
return (0, validators_1.validateProject)(response.data);
|
|
118
117
|
}
|
|
119
118
|
async unarchiveProject(id, requestId) {
|
|
120
|
-
|
|
119
|
+
validators_1.IdSchema.parse(id);
|
|
121
120
|
const response = await (0, http_client_1.request)({
|
|
122
121
|
httpMethod: 'POST',
|
|
123
122
|
baseUri: this.syncApiBase,
|
|
@@ -174,7 +173,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
174
173
|
return data;
|
|
175
174
|
}
|
|
176
175
|
async getFullProject(id, args = {}) {
|
|
177
|
-
|
|
176
|
+
validators_1.IdSchema.parse(id);
|
|
178
177
|
const { data } = await (0, http_client_1.request)({
|
|
179
178
|
httpMethod: 'GET',
|
|
180
179
|
baseUri: this.syncApiBase,
|
|
@@ -193,7 +192,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
193
192
|
};
|
|
194
193
|
}
|
|
195
194
|
async joinProject(id, requestId) {
|
|
196
|
-
|
|
195
|
+
validators_1.IdSchema.parse(id);
|
|
197
196
|
const { data } = await (0, http_client_1.request)({
|
|
198
197
|
httpMethod: 'POST',
|
|
199
198
|
baseUri: this.syncApiBase,
|
|
@@ -214,7 +213,7 @@ class ProjectClient extends base_client_1.BaseClient {
|
|
|
214
213
|
};
|
|
215
214
|
}
|
|
216
215
|
async getProjectCollaborators(projectId, args = {}) {
|
|
217
|
-
|
|
216
|
+
validators_1.IdSchema.parse(projectId);
|
|
218
217
|
const { data: { results, nextCursor }, } = await (0, http_client_1.request)({
|
|
219
218
|
httpMethod: 'GET',
|
|
220
219
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SectionClient = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
4
|
const endpoints_1 = require("../consts/endpoints");
|
|
6
5
|
const http_client_1 = require("../transport/http-client");
|
|
7
6
|
const request_helpers_1 = require("../utils/request-helpers");
|
|
@@ -43,7 +42,7 @@ class SectionClient extends base_client_1.BaseClient {
|
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
44
|
async getSection(id) {
|
|
46
|
-
|
|
45
|
+
validators_1.IdSchema.parse(id);
|
|
47
46
|
const response = await (0, http_client_1.request)({
|
|
48
47
|
httpMethod: 'GET',
|
|
49
48
|
baseUri: this.syncApiBase,
|
|
@@ -66,7 +65,7 @@ class SectionClient extends base_client_1.BaseClient {
|
|
|
66
65
|
return (0, validators_1.validateSection)(response.data);
|
|
67
66
|
}
|
|
68
67
|
async updateSection(id, args, requestId) {
|
|
69
|
-
|
|
68
|
+
validators_1.IdSchema.parse(id);
|
|
70
69
|
const response = await (0, http_client_1.request)({
|
|
71
70
|
httpMethod: 'POST',
|
|
72
71
|
baseUri: this.syncApiBase,
|
|
@@ -79,7 +78,7 @@ class SectionClient extends base_client_1.BaseClient {
|
|
|
79
78
|
return (0, validators_1.validateSection)(response.data);
|
|
80
79
|
}
|
|
81
80
|
async deleteSection(id, requestId) {
|
|
82
|
-
|
|
81
|
+
validators_1.IdSchema.parse(id);
|
|
83
82
|
const response = await (0, http_client_1.request)({
|
|
84
83
|
httpMethod: 'DELETE',
|
|
85
84
|
baseUri: this.syncApiBase,
|
|
@@ -91,7 +90,7 @@ class SectionClient extends base_client_1.BaseClient {
|
|
|
91
90
|
return (0, http_client_1.isSuccess)(response);
|
|
92
91
|
}
|
|
93
92
|
async archiveSection(id, requestId) {
|
|
94
|
-
|
|
93
|
+
validators_1.IdSchema.parse(id);
|
|
95
94
|
const response = await (0, http_client_1.request)({
|
|
96
95
|
httpMethod: 'POST',
|
|
97
96
|
baseUri: this.syncApiBase,
|
|
@@ -103,7 +102,7 @@ class SectionClient extends base_client_1.BaseClient {
|
|
|
103
102
|
return (0, validators_1.validateSection)(response.data);
|
|
104
103
|
}
|
|
105
104
|
async unarchiveSection(id, requestId) {
|
|
106
|
-
|
|
105
|
+
validators_1.IdSchema.parse(id);
|
|
107
106
|
const response = await (0, http_client_1.request)({
|
|
108
107
|
httpMethod: 'POST',
|
|
109
108
|
baseUri: this.syncApiBase,
|
|
@@ -13,7 +13,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.TaskClient = void 0;
|
|
15
15
|
const uuid_1 = require("uuid");
|
|
16
|
-
const zod_1 = require("zod");
|
|
17
16
|
const endpoints_1 = require("../consts/endpoints");
|
|
18
17
|
const http_client_1 = require("../transport/http-client");
|
|
19
18
|
const sync_request_1 = require("../transport/sync-request");
|
|
@@ -31,7 +30,7 @@ const MAX_COMMAND_COUNT = 100;
|
|
|
31
30
|
*/
|
|
32
31
|
class TaskClient extends base_client_1.BaseClient {
|
|
33
32
|
async getTask(id) {
|
|
34
|
-
|
|
33
|
+
validators_1.IdSchema.parse(id);
|
|
35
34
|
const response = await (0, http_client_1.request)({
|
|
36
35
|
httpMethod: 'GET',
|
|
37
36
|
baseUri: this.syncApiBase,
|
|
@@ -155,7 +154,7 @@ class TaskClient extends base_client_1.BaseClient {
|
|
|
155
154
|
return (0, validators_1.validateTask)(response.data);
|
|
156
155
|
}
|
|
157
156
|
async updateTask(id, args, requestId) {
|
|
158
|
-
|
|
157
|
+
validators_1.IdSchema.parse(id);
|
|
159
158
|
// Translate SDK alias for due-date clearing to Todoist's accepted payload value.
|
|
160
159
|
const normalizedArgs = args.dueString === null ? Object.assign(Object.assign({}, args), { dueString: 'no date' }) : args;
|
|
161
160
|
// Process content if both content and isUncompletable are provided
|
|
@@ -203,7 +202,7 @@ class TaskClient extends base_client_1.BaseClient {
|
|
|
203
202
|
return (0, validators_1.validateTaskArray)(syncTasks);
|
|
204
203
|
}
|
|
205
204
|
async moveTask(id, args, requestId) {
|
|
206
|
-
|
|
205
|
+
validators_1.IdSchema.parse(id);
|
|
207
206
|
const response = await (0, http_client_1.request)({
|
|
208
207
|
httpMethod: 'POST',
|
|
209
208
|
baseUri: this.syncApiBase,
|
|
@@ -216,7 +215,7 @@ class TaskClient extends base_client_1.BaseClient {
|
|
|
216
215
|
return (0, validators_1.validateTask)(response.data);
|
|
217
216
|
}
|
|
218
217
|
async closeTask(id, requestId) {
|
|
219
|
-
|
|
218
|
+
validators_1.IdSchema.parse(id);
|
|
220
219
|
const response = await (0, http_client_1.request)({
|
|
221
220
|
httpMethod: 'POST',
|
|
222
221
|
baseUri: this.syncApiBase,
|
|
@@ -228,7 +227,7 @@ class TaskClient extends base_client_1.BaseClient {
|
|
|
228
227
|
return (0, http_client_1.isSuccess)(response);
|
|
229
228
|
}
|
|
230
229
|
async reopenTask(id, requestId) {
|
|
231
|
-
|
|
230
|
+
validators_1.IdSchema.parse(id);
|
|
232
231
|
const response = await (0, http_client_1.request)({
|
|
233
232
|
httpMethod: 'POST',
|
|
234
233
|
baseUri: this.syncApiBase,
|
|
@@ -240,7 +239,7 @@ class TaskClient extends base_client_1.BaseClient {
|
|
|
240
239
|
return (0, http_client_1.isSuccess)(response);
|
|
241
240
|
}
|
|
242
241
|
async deleteTask(id, requestId) {
|
|
243
|
-
|
|
242
|
+
validators_1.IdSchema.parse(id);
|
|
244
243
|
const response = await (0, http_client_1.request)({
|
|
245
244
|
httpMethod: 'DELETE',
|
|
246
245
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UiExtensionClient = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
4
|
const endpoints_1 = require("../consts/endpoints");
|
|
6
5
|
const http_client_1 = require("../transport/http-client");
|
|
7
6
|
const case_conversion_1 = require("../utils/case-conversion");
|
|
@@ -17,7 +16,7 @@ const base_client_1 = require("./base-client");
|
|
|
17
16
|
*/
|
|
18
17
|
class UiExtensionClient extends base_client_1.BaseClient {
|
|
19
18
|
async getUiExtension(uiExtensionId, requestId) {
|
|
20
|
-
|
|
19
|
+
validators_1.IdSchema.parse(uiExtensionId);
|
|
21
20
|
const response = await (0, http_client_1.request)({
|
|
22
21
|
httpMethod: 'GET',
|
|
23
22
|
baseUri: this.apiRootBase,
|
|
@@ -40,7 +39,7 @@ class UiExtensionClient extends base_client_1.BaseClient {
|
|
|
40
39
|
return (0, validators_1.validateUiExtensionArray)(response.data);
|
|
41
40
|
}
|
|
42
41
|
async getUiExtensionsForApp(appId, requestId) {
|
|
43
|
-
|
|
42
|
+
validators_1.IdSchema.parse(appId);
|
|
44
43
|
const response = await (0, http_client_1.request)({
|
|
45
44
|
httpMethod: 'GET',
|
|
46
45
|
baseUri: this.apiRootBase,
|
|
@@ -64,7 +63,7 @@ class UiExtensionClient extends base_client_1.BaseClient {
|
|
|
64
63
|
return (0, validators_1.validateUiExtension)(response.data);
|
|
65
64
|
}
|
|
66
65
|
async updateUiExtension(uiExtensionId, args, requestId) {
|
|
67
|
-
|
|
66
|
+
validators_1.IdSchema.parse(uiExtensionId);
|
|
68
67
|
const response = await (0, http_client_1.request)({
|
|
69
68
|
httpMethod: 'PATCH',
|
|
70
69
|
baseUri: this.apiRootBase,
|
|
@@ -77,7 +76,7 @@ class UiExtensionClient extends base_client_1.BaseClient {
|
|
|
77
76
|
return (0, validators_1.validateUiExtension)(response.data);
|
|
78
77
|
}
|
|
79
78
|
async deleteUiExtension(uiExtensionId, requestId) {
|
|
80
|
-
|
|
79
|
+
validators_1.IdSchema.parse(uiExtensionId);
|
|
81
80
|
const response = await (0, http_client_1.request)({
|
|
82
81
|
httpMethod: 'DELETE',
|
|
83
82
|
baseUri: this.apiRootBase,
|
|
@@ -12,7 +12,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.WorkspaceClient = void 0;
|
|
15
|
-
const zod_1 = require("zod");
|
|
16
15
|
const endpoints_1 = require("../consts/endpoints");
|
|
17
16
|
const http_client_1 = require("../transport/http-client");
|
|
18
17
|
const multipart_upload_1 = require("../utils/multipart-upload");
|
|
@@ -199,7 +198,7 @@ class WorkspaceClient extends base_client_1.BaseClient {
|
|
|
199
198
|
return (0, validators_1.validateWorkspaceArray)(response.data);
|
|
200
199
|
}
|
|
201
200
|
async getWorkspace(id, requestId) {
|
|
202
|
-
|
|
201
|
+
validators_1.IdSchema.parse(id);
|
|
203
202
|
const response = await (0, http_client_1.request)({
|
|
204
203
|
httpMethod: 'GET',
|
|
205
204
|
baseUri: this.syncApiBase,
|
|
@@ -223,7 +222,7 @@ class WorkspaceClient extends base_client_1.BaseClient {
|
|
|
223
222
|
return (0, validators_1.validateWorkspace)(response.data);
|
|
224
223
|
}
|
|
225
224
|
async updateWorkspace(id, args, requestId) {
|
|
226
|
-
|
|
225
|
+
validators_1.IdSchema.parse(id);
|
|
227
226
|
const response = await (0, http_client_1.request)({
|
|
228
227
|
httpMethod: 'POST',
|
|
229
228
|
baseUri: this.syncApiBase,
|
|
@@ -236,7 +235,7 @@ class WorkspaceClient extends base_client_1.BaseClient {
|
|
|
236
235
|
return (0, validators_1.validateWorkspace)(response.data);
|
|
237
236
|
}
|
|
238
237
|
async deleteWorkspace(id, requestId) {
|
|
239
|
-
|
|
238
|
+
validators_1.IdSchema.parse(id);
|
|
240
239
|
const response = await (0, http_client_1.request)({
|
|
241
240
|
httpMethod: 'DELETE',
|
|
242
241
|
baseUri: this.syncApiBase,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
exports.validateUiExtensionArray = exports.validateUiExtension = exports.validateUserAuthorizationArray = exports.validateUserAuthorization = exports.validateAppInstallationArray = exports.validateAppInstallation = exports.validateAppWebhook = exports.validateAppByDistributionToken = exports.validateAppDistributionToken = exports.validateAppTestToken = exports.validateAppVerificationToken = exports.validateAppSecrets = exports.validateAppWithUserCount = exports.validateAppArray = exports.validateApp = exports.validateSuggestionArray = exports.validateSuggestion = exports.validateUserSettings = exports.validateSyncUser = exports.validateSyncWorkspaceArray = exports.validateSyncWorkspace = exports.validateLiveNotificationArray = exports.validateLiveNotification = exports.validateUserPlanLimits = exports.validateProjectViewOptionsDefaultsArray = exports.validateProjectViewOptionsDefaults = exports.validateViewOptionsArray = exports.validateViewOptions = exports.validateCompletedInfoArray = exports.validateCompletedInfo = exports.validateLocationReminderArray = exports.validateLocationReminder = exports.validateReminderArray = exports.validateReminder = exports.validateCalendarAccountArray = exports.validateCalendarAccount = exports.validateCalendarArray = exports.validateCalendar = exports.validateWorkspaceGoalArray = exports.validateWorkspaceGoal = exports.validateWorkspaceFilterArray = exports.validateWorkspaceFilter = exports.validateTooltips = exports.validateNoteArray = exports.validateNote = void 0;
|
|
4
|
+
exports.validateFolder = exports.validateCollaboratorStateArray = exports.validateCollaboratorState = exports.validateCollaboratorArray = exports.validateCollaborator = exports.validateFilterArray = exports.validateFilter = exports.validateMovedIdArray = exports.validateMovedId = exports.validateIdMappingArray = exports.validateIdMapping = exports.validateBackupArray = exports.validateBackup = exports.validateWorkspaceInsights = exports.validateProjectProgress = exports.validateProjectHealthContext = exports.validateProjectHealth = exports.validateProjectActivityStats = exports.validateWorkspaceUserTaskArray = exports.validateWorkspaceUserTask = exports.validateMemberActivityInfoArray = exports.validateMemberActivityInfo = exports.validateWorkspaceArray = exports.validateWorkspace = exports.validateJoinWorkspaceResult = exports.validateWorkspacePlanDetails = exports.validateWorkspaceInvitationArray = exports.validateWorkspaceInvitation = exports.validateWorkspaceUserArray = exports.validateWorkspaceUser = exports.validateAttachment = exports.validateActivityEventArray = exports.validateActivityEvent = exports.validateCurrentUser = exports.validateProductivityStats = exports.validateUserArray = exports.validateUser = exports.validateCommentArray = exports.validateComment = exports.validateLabelArray = exports.validateLabel = exports.validateSectionArray = exports.validateSection = exports.validateWorkspaceProjectArray = exports.validateWorkspaceProject = exports.validateProjectArray = exports.validateProject = exports.validateTaskArray = exports.validateTask = exports.IdSchema = void 0;
|
|
5
|
+
exports.validateUiExtensionArray = exports.validateUiExtension = exports.validateUserAuthorizationArray = exports.validateUserAuthorization = exports.validateAppInstallationArray = exports.validateAppInstallation = exports.validateAppWebhook = exports.validateAppByDistributionToken = exports.validateAppDistributionToken = exports.validateAppTestToken = exports.validateAppVerificationToken = exports.validateAppSecrets = exports.validateAppWithUserCount = exports.validateAppArray = exports.validateApp = exports.validateSuggestionArray = exports.validateSuggestion = exports.validateUserSettings = exports.validateSyncUser = exports.validateSyncWorkspaceArray = exports.validateSyncWorkspace = exports.validateLiveNotificationArray = exports.validateLiveNotification = exports.validateUserPlanLimits = exports.validateProjectViewOptionsDefaultsArray = exports.validateProjectViewOptionsDefaults = exports.validateViewOptionsArray = exports.validateViewOptions = exports.validateCompletedInfoArray = exports.validateCompletedInfo = exports.validateLocationReminderArray = exports.validateLocationReminder = exports.validateReminderArray = exports.validateReminder = exports.validateCalendarAccountArray = exports.validateCalendarAccount = exports.validateCalendarArray = exports.validateCalendar = exports.validateWorkspaceGoalArray = exports.validateWorkspaceGoal = exports.validateWorkspaceFilterArray = exports.validateWorkspaceFilter = exports.validateTooltips = exports.validateNoteArray = exports.validateNote = exports.validateFolderArray = void 0;
|
|
6
6
|
exports.parseSyncResponse = parseSyncResponse;
|
|
7
7
|
const zod_1 = require("zod");
|
|
8
8
|
const types_1 = require("../types/activity/types");
|
|
@@ -27,6 +27,11 @@ function createValidator(schema) {
|
|
|
27
27
|
validateArray: (input) => zod_1.z.array(schema).parse(input),
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
const TMP_ID_MESSAGE = 'This looks like a client-side placeholder — wait for sync to complete before calling the API.';
|
|
31
|
+
exports.IdSchema = zod_1.z
|
|
32
|
+
.string()
|
|
33
|
+
.min(1)
|
|
34
|
+
.refine((id) => !id.startsWith('tmp-'), { message: TMP_ID_MESSAGE });
|
|
30
35
|
// Entity validators
|
|
31
36
|
_a = createValidator(types_11.TaskSchema), exports.validateTask = _a.validate, exports.validateTaskArray = _a.validateArray;
|
|
32
37
|
/**
|
|
@@ -15,7 +15,7 @@ import { isSuccess, request } from '../transport/http-client.js';
|
|
|
15
15
|
import { webhookEventToWireName } from '../types/apps/index.js';
|
|
16
16
|
import { camelCaseKeys } from '../utils/case-conversion.js';
|
|
17
17
|
import { uploadMultipartFile } from '../utils/multipart-upload.js';
|
|
18
|
-
import { validateApp, validateAppArray, validateAppByDistributionToken, validateAppDistributionToken, validateAppInstallation, validateAppInstallationArray, validateAppSecrets, validateAppTestToken, validateAppVerificationToken, validateAppWebhook, validateAppWithUserCount, validateUserAuthorizationArray, } from '../utils/validators.js';
|
|
18
|
+
import { IdSchema, validateApp, validateAppArray, validateAppByDistributionToken, validateAppDistributionToken, validateAppInstallation, validateAppInstallationArray, validateAppSecrets, validateAppTestToken, validateAppVerificationToken, validateAppWebhook, validateAppWithUserCount, validateUserAuthorizationArray, } from '../utils/validators.js';
|
|
19
19
|
import { BaseClient } from './base-client.js';
|
|
20
20
|
/**
|
|
21
21
|
* Internal sub-client handling all developer-app management endpoints
|
|
@@ -38,7 +38,7 @@ export class AppClient extends BaseClient {
|
|
|
38
38
|
return validateAppArray(response.data);
|
|
39
39
|
}
|
|
40
40
|
async getApp(appId, requestId) {
|
|
41
|
-
|
|
41
|
+
IdSchema.parse(appId);
|
|
42
42
|
const response = await request({
|
|
43
43
|
httpMethod: 'GET',
|
|
44
44
|
baseUri: this.apiRootBase,
|
|
@@ -62,7 +62,7 @@ export class AppClient extends BaseClient {
|
|
|
62
62
|
return validateApp(response.data);
|
|
63
63
|
}
|
|
64
64
|
async updateApp(appId, args, requestId) {
|
|
65
|
-
|
|
65
|
+
IdSchema.parse(appId);
|
|
66
66
|
const { appTokenScopes } = args, rest = __rest(args, ["appTokenScopes"]);
|
|
67
67
|
const payload = Object.assign({}, rest);
|
|
68
68
|
if (appTokenScopes !== undefined) {
|
|
@@ -80,7 +80,7 @@ export class AppClient extends BaseClient {
|
|
|
80
80
|
return validateAppWithUserCount(response.data);
|
|
81
81
|
}
|
|
82
82
|
async deleteApp(appId, requestId) {
|
|
83
|
-
|
|
83
|
+
IdSchema.parse(appId);
|
|
84
84
|
const response = await request({
|
|
85
85
|
httpMethod: 'DELETE',
|
|
86
86
|
baseUri: this.apiRootBase,
|
|
@@ -92,7 +92,7 @@ export class AppClient extends BaseClient {
|
|
|
92
92
|
return isSuccess(response);
|
|
93
93
|
}
|
|
94
94
|
async getAppSecrets(appId, requestId) {
|
|
95
|
-
|
|
95
|
+
IdSchema.parse(appId);
|
|
96
96
|
const response = await request({
|
|
97
97
|
httpMethod: 'GET',
|
|
98
98
|
baseUri: this.apiRootBase,
|
|
@@ -104,7 +104,7 @@ export class AppClient extends BaseClient {
|
|
|
104
104
|
return validateAppSecrets(response.data);
|
|
105
105
|
}
|
|
106
106
|
async resetAppClientSecret(appId, requestId) {
|
|
107
|
-
|
|
107
|
+
IdSchema.parse(appId);
|
|
108
108
|
const response = await request({
|
|
109
109
|
httpMethod: 'DELETE',
|
|
110
110
|
baseUri: this.apiRootBase,
|
|
@@ -116,7 +116,7 @@ export class AppClient extends BaseClient {
|
|
|
116
116
|
return validateAppWithUserCount(response.data);
|
|
117
117
|
}
|
|
118
118
|
async revokeAppTokens(appId, requestId) {
|
|
119
|
-
|
|
119
|
+
IdSchema.parse(appId);
|
|
120
120
|
const response = await request({
|
|
121
121
|
httpMethod: 'DELETE',
|
|
122
122
|
baseUri: this.apiRootBase,
|
|
@@ -128,7 +128,7 @@ export class AppClient extends BaseClient {
|
|
|
128
128
|
return validateAppWithUserCount(response.data);
|
|
129
129
|
}
|
|
130
130
|
async uploadAppIcon({ appId, file, fileName = '', size = 'medium' }, requestId) {
|
|
131
|
-
|
|
131
|
+
IdSchema.parse(appId);
|
|
132
132
|
if (Buffer.isBuffer(file) && file.length === 0) {
|
|
133
133
|
throw new Error('Cannot upload empty image file');
|
|
134
134
|
}
|
|
@@ -145,7 +145,7 @@ export class AppClient extends BaseClient {
|
|
|
145
145
|
return validateAppWithUserCount(camelCaseKeys(data));
|
|
146
146
|
}
|
|
147
147
|
async getAppTestToken(appId, requestId) {
|
|
148
|
-
|
|
148
|
+
IdSchema.parse(appId);
|
|
149
149
|
const response = await request({
|
|
150
150
|
httpMethod: 'GET',
|
|
151
151
|
baseUri: this.apiRootBase,
|
|
@@ -157,7 +157,7 @@ export class AppClient extends BaseClient {
|
|
|
157
157
|
return validateAppTestToken(response.data);
|
|
158
158
|
}
|
|
159
159
|
async createAppTestToken(appId, requestId) {
|
|
160
|
-
|
|
160
|
+
IdSchema.parse(appId);
|
|
161
161
|
const response = await request({
|
|
162
162
|
httpMethod: 'PUT',
|
|
163
163
|
baseUri: this.apiRootBase,
|
|
@@ -169,7 +169,7 @@ export class AppClient extends BaseClient {
|
|
|
169
169
|
return validateAppTestToken(response.data);
|
|
170
170
|
}
|
|
171
171
|
async getAppDistributionToken(appId, requestId) {
|
|
172
|
-
|
|
172
|
+
IdSchema.parse(appId);
|
|
173
173
|
const response = await request({
|
|
174
174
|
httpMethod: 'GET',
|
|
175
175
|
baseUri: this.apiRootBase,
|
|
@@ -181,7 +181,7 @@ export class AppClient extends BaseClient {
|
|
|
181
181
|
return validateAppDistributionToken(response.data);
|
|
182
182
|
}
|
|
183
183
|
async getAppVerificationToken(appId, requestId) {
|
|
184
|
-
|
|
184
|
+
IdSchema.parse(appId);
|
|
185
185
|
const response = await request({
|
|
186
186
|
httpMethod: 'GET',
|
|
187
187
|
baseUri: this.apiRootBase,
|
|
@@ -193,7 +193,7 @@ export class AppClient extends BaseClient {
|
|
|
193
193
|
return validateAppVerificationToken(response.data);
|
|
194
194
|
}
|
|
195
195
|
async resetAppVerificationToken(appId, requestId) {
|
|
196
|
-
|
|
196
|
+
IdSchema.parse(appId);
|
|
197
197
|
const response = await request({
|
|
198
198
|
httpMethod: 'DELETE',
|
|
199
199
|
baseUri: this.apiRootBase,
|
|
@@ -218,7 +218,7 @@ export class AppClient extends BaseClient {
|
|
|
218
218
|
}
|
|
219
219
|
// --- App webhooks ---
|
|
220
220
|
async getAppWebhook(appId, requestId) {
|
|
221
|
-
|
|
221
|
+
IdSchema.parse(appId);
|
|
222
222
|
const response = await request({
|
|
223
223
|
httpMethod: 'GET',
|
|
224
224
|
baseUri: this.apiRootBase,
|
|
@@ -243,7 +243,7 @@ export class AppClient extends BaseClient {
|
|
|
243
243
|
return validateAppWebhook(response.data);
|
|
244
244
|
}
|
|
245
245
|
async deleteAppWebhook(appId, requestId) {
|
|
246
|
-
|
|
246
|
+
IdSchema.parse(appId);
|
|
247
247
|
const response = await request({
|
|
248
248
|
httpMethod: 'DELETE',
|
|
249
249
|
baseUri: this.apiRootBase,
|
|
@@ -279,7 +279,7 @@ export class AppClient extends BaseClient {
|
|
|
279
279
|
return validateAppInstallation(response.data);
|
|
280
280
|
}
|
|
281
281
|
async getAppInstallation(installationId, requestId) {
|
|
282
|
-
|
|
282
|
+
IdSchema.parse(installationId);
|
|
283
283
|
const response = await request({
|
|
284
284
|
httpMethod: 'GET',
|
|
285
285
|
baseUri: this.apiRootBase,
|
|
@@ -291,7 +291,7 @@ export class AppClient extends BaseClient {
|
|
|
291
291
|
return validateAppInstallation(response.data);
|
|
292
292
|
}
|
|
293
293
|
async updateAppInstallation(installationId, args, requestId) {
|
|
294
|
-
|
|
294
|
+
IdSchema.parse(installationId);
|
|
295
295
|
const response = await request({
|
|
296
296
|
httpMethod: 'POST',
|
|
297
297
|
baseUri: this.apiRootBase,
|
|
@@ -304,7 +304,7 @@ export class AppClient extends BaseClient {
|
|
|
304
304
|
return validateAppInstallation(response.data);
|
|
305
305
|
}
|
|
306
306
|
async uninstallApp(installationId, requestId) {
|
|
307
|
-
|
|
307
|
+
IdSchema.parse(installationId);
|
|
308
308
|
const response = await request({
|
|
309
309
|
httpMethod: 'DELETE',
|
|
310
310
|
baseUri: this.apiRootBase,
|
|
@@ -9,11 +9,10 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import { z } from 'zod';
|
|
13
12
|
import { ENDPOINT_REST_COMMENTS } from '../consts/endpoints.js';
|
|
14
13
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
15
14
|
import { generatePath } from '../utils/request-helpers.js';
|
|
16
|
-
import { validateComment, validateCommentArray } from '../utils/validators.js';
|
|
15
|
+
import { IdSchema, validateComment, validateCommentArray } from '../utils/validators.js';
|
|
17
16
|
import { BaseClient } from './base-client.js';
|
|
18
17
|
/**
|
|
19
18
|
* Internal sub-client handling all comment-domain endpoints.
|
|
@@ -37,7 +36,7 @@ export class CommentClient extends BaseClient {
|
|
|
37
36
|
};
|
|
38
37
|
}
|
|
39
38
|
async getComment(id) {
|
|
40
|
-
|
|
39
|
+
IdSchema.parse(id);
|
|
41
40
|
const response = await request({
|
|
42
41
|
httpMethod: 'GET',
|
|
43
42
|
baseUri: this.syncApiBase,
|
|
@@ -61,7 +60,7 @@ export class CommentClient extends BaseClient {
|
|
|
61
60
|
return validateComment(response.data);
|
|
62
61
|
}
|
|
63
62
|
async updateComment(id, args, requestId) {
|
|
64
|
-
|
|
63
|
+
IdSchema.parse(id);
|
|
65
64
|
const response = await request({
|
|
66
65
|
httpMethod: 'POST',
|
|
67
66
|
baseUri: this.syncApiBase,
|
|
@@ -74,7 +73,7 @@ export class CommentClient extends BaseClient {
|
|
|
74
73
|
return validateComment(response.data);
|
|
75
74
|
}
|
|
76
75
|
async deleteComment(id, requestId) {
|
|
77
|
-
|
|
76
|
+
IdSchema.parse(id);
|
|
78
77
|
const response = await request({
|
|
79
78
|
httpMethod: 'DELETE',
|
|
80
79
|
baseUri: this.syncApiBase,
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { ENDPOINT_REST_FOLDERS } from '../consts/endpoints.js';
|
|
3
2
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
4
3
|
import { generatePath } from '../utils/request-helpers.js';
|
|
5
|
-
import { validateFolder, validateFolderArray } from '../utils/validators.js';
|
|
4
|
+
import { IdSchema, validateFolder, validateFolderArray } from '../utils/validators.js';
|
|
6
5
|
import { BaseClient } from './base-client.js';
|
|
7
6
|
/**
|
|
8
7
|
* Internal sub-client handling all folder-domain endpoints.
|
|
@@ -26,7 +25,7 @@ export class FolderClient extends BaseClient {
|
|
|
26
25
|
};
|
|
27
26
|
}
|
|
28
27
|
async getFolder(id) {
|
|
29
|
-
|
|
28
|
+
IdSchema.parse(id);
|
|
30
29
|
const response = await request({
|
|
31
30
|
httpMethod: 'GET',
|
|
32
31
|
baseUri: this.syncApiBase,
|
|
@@ -49,7 +48,7 @@ export class FolderClient extends BaseClient {
|
|
|
49
48
|
return validateFolder(response.data);
|
|
50
49
|
}
|
|
51
50
|
async updateFolder(id, args, requestId) {
|
|
52
|
-
|
|
51
|
+
IdSchema.parse(id);
|
|
53
52
|
const response = await request({
|
|
54
53
|
httpMethod: 'POST',
|
|
55
54
|
baseUri: this.syncApiBase,
|
|
@@ -62,7 +61,7 @@ export class FolderClient extends BaseClient {
|
|
|
62
61
|
return validateFolder(response.data);
|
|
63
62
|
}
|
|
64
63
|
async deleteFolder(id, requestId) {
|
|
65
|
-
|
|
64
|
+
IdSchema.parse(id);
|
|
66
65
|
const response = await request({
|
|
67
66
|
httpMethod: 'DELETE',
|
|
68
67
|
baseUri: this.syncApiBase,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { getProjectInsightsActivityStatsEndpoint, getProjectInsightsHealthAnalyzeEndpoint, getProjectInsightsHealthContextEndpoint, getProjectInsightsHealthEndpoint, getProjectInsightsProgressEndpoint, getWorkspaceInsightsEndpoint, } from '../consts/endpoints.js';
|
|
3
2
|
import { request } from '../transport/http-client.js';
|
|
4
|
-
import { validateProjectActivityStats, validateProjectHealth, validateProjectHealthContext, validateProjectProgress, validateWorkspaceInsights, } from '../utils/validators.js';
|
|
3
|
+
import { IdSchema, validateProjectActivityStats, validateProjectHealth, validateProjectHealthContext, validateProjectProgress, validateWorkspaceInsights, } from '../utils/validators.js';
|
|
5
4
|
import { BaseClient } from './base-client.js';
|
|
6
5
|
/**
|
|
7
6
|
* Internal sub-client handling all insights-domain endpoints
|
|
@@ -13,7 +12,7 @@ import { BaseClient } from './base-client.js';
|
|
|
13
12
|
*/
|
|
14
13
|
export class InsightsClient extends BaseClient {
|
|
15
14
|
async getProjectActivityStats(projectId, args = {}) {
|
|
16
|
-
|
|
15
|
+
IdSchema.parse(projectId);
|
|
17
16
|
const response = await request({
|
|
18
17
|
httpMethod: 'GET',
|
|
19
18
|
baseUri: this.syncApiBase,
|
|
@@ -25,7 +24,7 @@ export class InsightsClient extends BaseClient {
|
|
|
25
24
|
return validateProjectActivityStats(response.data);
|
|
26
25
|
}
|
|
27
26
|
async getProjectHealth(projectId) {
|
|
28
|
-
|
|
27
|
+
IdSchema.parse(projectId);
|
|
29
28
|
const response = await request({
|
|
30
29
|
httpMethod: 'GET',
|
|
31
30
|
baseUri: this.syncApiBase,
|
|
@@ -36,7 +35,7 @@ export class InsightsClient extends BaseClient {
|
|
|
36
35
|
return validateProjectHealth(response.data);
|
|
37
36
|
}
|
|
38
37
|
async getProjectHealthContext(projectId) {
|
|
39
|
-
|
|
38
|
+
IdSchema.parse(projectId);
|
|
40
39
|
const response = await request({
|
|
41
40
|
httpMethod: 'GET',
|
|
42
41
|
baseUri: this.syncApiBase,
|
|
@@ -47,7 +46,7 @@ export class InsightsClient extends BaseClient {
|
|
|
47
46
|
return validateProjectHealthContext(response.data);
|
|
48
47
|
}
|
|
49
48
|
async getProjectProgress(projectId) {
|
|
50
|
-
|
|
49
|
+
IdSchema.parse(projectId);
|
|
51
50
|
const response = await request({
|
|
52
51
|
httpMethod: 'GET',
|
|
53
52
|
baseUri: this.syncApiBase,
|
|
@@ -58,7 +57,7 @@ export class InsightsClient extends BaseClient {
|
|
|
58
57
|
return validateProjectProgress(response.data);
|
|
59
58
|
}
|
|
60
59
|
async getWorkspaceInsights(workspaceId, args = {}) {
|
|
61
|
-
|
|
60
|
+
IdSchema.parse(workspaceId);
|
|
62
61
|
const response = await request({
|
|
63
62
|
httpMethod: 'GET',
|
|
64
63
|
baseUri: this.syncApiBase,
|
|
@@ -70,7 +69,7 @@ export class InsightsClient extends BaseClient {
|
|
|
70
69
|
return validateWorkspaceInsights(response.data);
|
|
71
70
|
}
|
|
72
71
|
async analyzeProjectHealth(projectId, requestId) {
|
|
73
|
-
|
|
72
|
+
IdSchema.parse(projectId);
|
|
74
73
|
const response = await request({
|
|
75
74
|
httpMethod: 'POST',
|
|
76
75
|
baseUri: this.syncApiBase,
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { ENDPOINT_REST_LABELS, ENDPOINT_REST_LABELS_SEARCH, ENDPOINT_REST_LABELS_SHARED, ENDPOINT_REST_LABELS_SHARED_REMOVE, ENDPOINT_REST_LABELS_SHARED_RENAME, } from '../consts/endpoints.js';
|
|
3
2
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
4
3
|
import { generatePath } from '../utils/request-helpers.js';
|
|
5
|
-
import { validateLabel, validateLabelArray } from '../utils/validators.js';
|
|
4
|
+
import { IdSchema, validateLabel, validateLabelArray } from '../utils/validators.js';
|
|
6
5
|
import { BaseClient } from './base-client.js';
|
|
7
6
|
/**
|
|
8
7
|
* Internal sub-client handling all label-domain endpoints.
|
|
@@ -12,7 +11,7 @@ import { BaseClient } from './base-client.js';
|
|
|
12
11
|
*/
|
|
13
12
|
export class LabelClient extends BaseClient {
|
|
14
13
|
async getLabel(id) {
|
|
15
|
-
|
|
14
|
+
IdSchema.parse(id);
|
|
16
15
|
const response = await request({
|
|
17
16
|
httpMethod: 'GET',
|
|
18
17
|
baseUri: this.syncApiBase,
|
|
@@ -63,7 +62,7 @@ export class LabelClient extends BaseClient {
|
|
|
63
62
|
return validateLabel(response.data);
|
|
64
63
|
}
|
|
65
64
|
async updateLabel(id, args, requestId) {
|
|
66
|
-
|
|
65
|
+
IdSchema.parse(id);
|
|
67
66
|
const response = await request({
|
|
68
67
|
httpMethod: 'POST',
|
|
69
68
|
baseUri: this.syncApiBase,
|
|
@@ -76,7 +75,7 @@ export class LabelClient extends BaseClient {
|
|
|
76
75
|
return validateLabel(response.data);
|
|
77
76
|
}
|
|
78
77
|
async deleteLabel(id, requestId) {
|
|
79
|
-
|
|
78
|
+
IdSchema.parse(id);
|
|
80
79
|
const response = await request({
|
|
81
80
|
httpMethod: 'DELETE',
|
|
82
81
|
baseUri: this.syncApiBase,
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { ENDPOINT_REST_PROJECTS, ENDPOINT_REST_PROJECTS_ARCHIVED, ENDPOINT_REST_PROJECTS_ARCHIVED_COUNT, ENDPOINT_REST_PROJECTS_MOVE_TO_PERSONAL, ENDPOINT_REST_PROJECTS_MOVE_TO_WORKSPACE, ENDPOINT_REST_PROJECTS_PERMISSIONS, ENDPOINT_REST_PROJECTS_SEARCH, ENDPOINT_REST_PROJECT_COLLABORATORS, ENDPOINT_REST_PROJECT_FULL, ENDPOINT_REST_PROJECT_JOIN, PROJECT_ARCHIVE, PROJECT_UNARCHIVE, } from '../consts/endpoints.js';
|
|
3
2
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
4
3
|
import { generatePath } from '../utils/request-helpers.js';
|
|
5
|
-
import { validateCollaboratorArray, validateCollaboratorStateArray, validateCommentArray, validateFolder, validateNoteArray, validateProject, validateProjectArray, validateSectionArray, validateTaskArray, validateUserArray, validateWorkspaceProject, validateWorkspaceProjectArray, } from '../utils/validators.js';
|
|
4
|
+
import { IdSchema, validateCollaboratorArray, validateCollaboratorStateArray, validateCommentArray, validateFolder, validateNoteArray, validateProject, validateProjectArray, validateSectionArray, validateTaskArray, validateUserArray, validateWorkspaceProject, validateWorkspaceProjectArray, } from '../utils/validators.js';
|
|
6
5
|
import { BaseClient } from './base-client.js';
|
|
7
6
|
/**
|
|
8
7
|
* Internal sub-client handling all project-domain endpoints.
|
|
@@ -12,7 +11,7 @@ import { BaseClient } from './base-client.js';
|
|
|
12
11
|
*/
|
|
13
12
|
export class ProjectClient extends BaseClient {
|
|
14
13
|
async getProject(id) {
|
|
15
|
-
|
|
14
|
+
IdSchema.parse(id);
|
|
16
15
|
const response = await request({
|
|
17
16
|
httpMethod: 'GET',
|
|
18
17
|
baseUri: this.syncApiBase,
|
|
@@ -77,7 +76,7 @@ export class ProjectClient extends BaseClient {
|
|
|
77
76
|
return validateProject(response.data);
|
|
78
77
|
}
|
|
79
78
|
async updateProject(id, args, requestId) {
|
|
80
|
-
|
|
79
|
+
IdSchema.parse(id);
|
|
81
80
|
const response = await request({
|
|
82
81
|
httpMethod: 'POST',
|
|
83
82
|
baseUri: this.syncApiBase,
|
|
@@ -90,7 +89,7 @@ export class ProjectClient extends BaseClient {
|
|
|
90
89
|
return validateProject(response.data);
|
|
91
90
|
}
|
|
92
91
|
async deleteProject(id, requestId) {
|
|
93
|
-
|
|
92
|
+
IdSchema.parse(id);
|
|
94
93
|
const response = await request({
|
|
95
94
|
httpMethod: 'DELETE',
|
|
96
95
|
baseUri: this.syncApiBase,
|
|
@@ -102,7 +101,7 @@ export class ProjectClient extends BaseClient {
|
|
|
102
101
|
return isSuccess(response);
|
|
103
102
|
}
|
|
104
103
|
async archiveProject(id, requestId) {
|
|
105
|
-
|
|
104
|
+
IdSchema.parse(id);
|
|
106
105
|
const response = await request({
|
|
107
106
|
httpMethod: 'POST',
|
|
108
107
|
baseUri: this.syncApiBase,
|
|
@@ -114,7 +113,7 @@ export class ProjectClient extends BaseClient {
|
|
|
114
113
|
return validateProject(response.data);
|
|
115
114
|
}
|
|
116
115
|
async unarchiveProject(id, requestId) {
|
|
117
|
-
|
|
116
|
+
IdSchema.parse(id);
|
|
118
117
|
const response = await request({
|
|
119
118
|
httpMethod: 'POST',
|
|
120
119
|
baseUri: this.syncApiBase,
|
|
@@ -171,7 +170,7 @@ export class ProjectClient extends BaseClient {
|
|
|
171
170
|
return data;
|
|
172
171
|
}
|
|
173
172
|
async getFullProject(id, args = {}) {
|
|
174
|
-
|
|
173
|
+
IdSchema.parse(id);
|
|
175
174
|
const { data } = await request({
|
|
176
175
|
httpMethod: 'GET',
|
|
177
176
|
baseUri: this.syncApiBase,
|
|
@@ -190,7 +189,7 @@ export class ProjectClient extends BaseClient {
|
|
|
190
189
|
};
|
|
191
190
|
}
|
|
192
191
|
async joinProject(id, requestId) {
|
|
193
|
-
|
|
192
|
+
IdSchema.parse(id);
|
|
194
193
|
const { data } = await request({
|
|
195
194
|
httpMethod: 'POST',
|
|
196
195
|
baseUri: this.syncApiBase,
|
|
@@ -211,7 +210,7 @@ export class ProjectClient extends BaseClient {
|
|
|
211
210
|
};
|
|
212
211
|
}
|
|
213
212
|
async getProjectCollaborators(projectId, args = {}) {
|
|
214
|
-
|
|
213
|
+
IdSchema.parse(projectId);
|
|
215
214
|
const { data: { results, nextCursor }, } = await request({
|
|
216
215
|
httpMethod: 'GET',
|
|
217
216
|
baseUri: this.syncApiBase,
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { ENDPOINT_REST_SECTIONS, ENDPOINT_REST_SECTIONS_SEARCH, SECTION_ARCHIVE, SECTION_UNARCHIVE, } from '../consts/endpoints.js';
|
|
3
2
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
4
3
|
import { generatePath } from '../utils/request-helpers.js';
|
|
5
|
-
import { validateSection, validateSectionArray } from '../utils/validators.js';
|
|
4
|
+
import { IdSchema, validateSection, validateSectionArray } from '../utils/validators.js';
|
|
6
5
|
import { BaseClient } from './base-client.js';
|
|
7
6
|
/**
|
|
8
7
|
* Internal sub-client handling all section-domain endpoints.
|
|
@@ -40,7 +39,7 @@ export class SectionClient extends BaseClient {
|
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
async getSection(id) {
|
|
43
|
-
|
|
42
|
+
IdSchema.parse(id);
|
|
44
43
|
const response = await request({
|
|
45
44
|
httpMethod: 'GET',
|
|
46
45
|
baseUri: this.syncApiBase,
|
|
@@ -63,7 +62,7 @@ export class SectionClient extends BaseClient {
|
|
|
63
62
|
return validateSection(response.data);
|
|
64
63
|
}
|
|
65
64
|
async updateSection(id, args, requestId) {
|
|
66
|
-
|
|
65
|
+
IdSchema.parse(id);
|
|
67
66
|
const response = await request({
|
|
68
67
|
httpMethod: 'POST',
|
|
69
68
|
baseUri: this.syncApiBase,
|
|
@@ -76,7 +75,7 @@ export class SectionClient extends BaseClient {
|
|
|
76
75
|
return validateSection(response.data);
|
|
77
76
|
}
|
|
78
77
|
async deleteSection(id, requestId) {
|
|
79
|
-
|
|
78
|
+
IdSchema.parse(id);
|
|
80
79
|
const response = await request({
|
|
81
80
|
httpMethod: 'DELETE',
|
|
82
81
|
baseUri: this.syncApiBase,
|
|
@@ -88,7 +87,7 @@ export class SectionClient extends BaseClient {
|
|
|
88
87
|
return isSuccess(response);
|
|
89
88
|
}
|
|
90
89
|
async archiveSection(id, requestId) {
|
|
91
|
-
|
|
90
|
+
IdSchema.parse(id);
|
|
92
91
|
const response = await request({
|
|
93
92
|
httpMethod: 'POST',
|
|
94
93
|
baseUri: this.syncApiBase,
|
|
@@ -100,7 +99,7 @@ export class SectionClient extends BaseClient {
|
|
|
100
99
|
return validateSection(response.data);
|
|
101
100
|
}
|
|
102
101
|
async unarchiveSection(id, requestId) {
|
|
103
|
-
|
|
102
|
+
IdSchema.parse(id);
|
|
104
103
|
const response = await request({
|
|
105
104
|
httpMethod: 'POST',
|
|
106
105
|
baseUri: this.syncApiBase,
|
|
@@ -10,14 +10,13 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import { v4 as uuidv4 } from 'uuid';
|
|
13
|
-
import { z } from 'zod';
|
|
14
13
|
import { ENDPOINT_REST_TASKS, ENDPOINT_REST_TASKS_COMPLETED, ENDPOINT_REST_TASKS_COMPLETED_BY_COMPLETION_DATE, ENDPOINT_REST_TASKS_COMPLETED_BY_DUE_DATE, ENDPOINT_REST_TASKS_COMPLETED_SEARCH, ENDPOINT_REST_TASKS_FILTER, ENDPOINT_REST_TASK_CLOSE, ENDPOINT_REST_TASK_MOVE, ENDPOINT_REST_TASK_REOPEN, ENDPOINT_SYNC_QUICK_ADD, } from '../consts/endpoints.js';
|
|
15
14
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
16
15
|
import { performSyncRequest } from '../transport/sync-request.js';
|
|
17
16
|
import { TodoistRequestError } from '../types/index.js';
|
|
18
17
|
import { generatePath, spreadIfDefined } from '../utils/request-helpers.js';
|
|
19
18
|
import { processTaskContent } from '../utils/uncompletable-helpers.js';
|
|
20
|
-
import { validateTask, validateTaskArray } from '../utils/validators.js';
|
|
19
|
+
import { IdSchema, validateTask, validateTaskArray } from '../utils/validators.js';
|
|
21
20
|
import { BaseClient } from './base-client.js';
|
|
22
21
|
const MAX_COMMAND_COUNT = 100;
|
|
23
22
|
/**
|
|
@@ -28,7 +27,7 @@ const MAX_COMMAND_COUNT = 100;
|
|
|
28
27
|
*/
|
|
29
28
|
export class TaskClient extends BaseClient {
|
|
30
29
|
async getTask(id) {
|
|
31
|
-
|
|
30
|
+
IdSchema.parse(id);
|
|
32
31
|
const response = await request({
|
|
33
32
|
httpMethod: 'GET',
|
|
34
33
|
baseUri: this.syncApiBase,
|
|
@@ -152,7 +151,7 @@ export class TaskClient extends BaseClient {
|
|
|
152
151
|
return validateTask(response.data);
|
|
153
152
|
}
|
|
154
153
|
async updateTask(id, args, requestId) {
|
|
155
|
-
|
|
154
|
+
IdSchema.parse(id);
|
|
156
155
|
// Translate SDK alias for due-date clearing to Todoist's accepted payload value.
|
|
157
156
|
const normalizedArgs = args.dueString === null ? Object.assign(Object.assign({}, args), { dueString: 'no date' }) : args;
|
|
158
157
|
// Process content if both content and isUncompletable are provided
|
|
@@ -200,7 +199,7 @@ export class TaskClient extends BaseClient {
|
|
|
200
199
|
return validateTaskArray(syncTasks);
|
|
201
200
|
}
|
|
202
201
|
async moveTask(id, args, requestId) {
|
|
203
|
-
|
|
202
|
+
IdSchema.parse(id);
|
|
204
203
|
const response = await request({
|
|
205
204
|
httpMethod: 'POST',
|
|
206
205
|
baseUri: this.syncApiBase,
|
|
@@ -213,7 +212,7 @@ export class TaskClient extends BaseClient {
|
|
|
213
212
|
return validateTask(response.data);
|
|
214
213
|
}
|
|
215
214
|
async closeTask(id, requestId) {
|
|
216
|
-
|
|
215
|
+
IdSchema.parse(id);
|
|
217
216
|
const response = await request({
|
|
218
217
|
httpMethod: 'POST',
|
|
219
218
|
baseUri: this.syncApiBase,
|
|
@@ -225,7 +224,7 @@ export class TaskClient extends BaseClient {
|
|
|
225
224
|
return isSuccess(response);
|
|
226
225
|
}
|
|
227
226
|
async reopenTask(id, requestId) {
|
|
228
|
-
|
|
227
|
+
IdSchema.parse(id);
|
|
229
228
|
const response = await request({
|
|
230
229
|
httpMethod: 'POST',
|
|
231
230
|
baseUri: this.syncApiBase,
|
|
@@ -237,7 +236,7 @@ export class TaskClient extends BaseClient {
|
|
|
237
236
|
return isSuccess(response);
|
|
238
237
|
}
|
|
239
238
|
async deleteTask(id, requestId) {
|
|
240
|
-
|
|
239
|
+
IdSchema.parse(id);
|
|
241
240
|
const response = await request({
|
|
242
241
|
httpMethod: 'DELETE',
|
|
243
242
|
baseUri: this.syncApiBase,
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { ENDPOINT_REST_APPS_UI_EXTENSIONS, ENDPOINT_REST_APPS_UI_EXTENSIONS_INSTALLED, getUiExtensionEndpoint, getUiExtensionIconEndpoint, getUiExtensionsByIntegrationEndpoint, } from '../consts/endpoints.js';
|
|
3
2
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
4
3
|
import { camelCaseKeys } from '../utils/case-conversion.js';
|
|
5
4
|
import { uploadMultipartFile } from '../utils/multipart-upload.js';
|
|
6
|
-
import { validateUiExtension, validateUiExtensionArray } from '../utils/validators.js';
|
|
5
|
+
import { IdSchema, validateUiExtension, validateUiExtensionArray } from '../utils/validators.js';
|
|
7
6
|
import { BaseClient } from './base-client.js';
|
|
8
7
|
/**
|
|
9
8
|
* Internal sub-client handling all UI-extension endpoints for developer
|
|
@@ -14,7 +13,7 @@ import { BaseClient } from './base-client.js';
|
|
|
14
13
|
*/
|
|
15
14
|
export class UiExtensionClient extends BaseClient {
|
|
16
15
|
async getUiExtension(uiExtensionId, requestId) {
|
|
17
|
-
|
|
16
|
+
IdSchema.parse(uiExtensionId);
|
|
18
17
|
const response = await request({
|
|
19
18
|
httpMethod: 'GET',
|
|
20
19
|
baseUri: this.apiRootBase,
|
|
@@ -37,7 +36,7 @@ export class UiExtensionClient extends BaseClient {
|
|
|
37
36
|
return validateUiExtensionArray(response.data);
|
|
38
37
|
}
|
|
39
38
|
async getUiExtensionsForApp(appId, requestId) {
|
|
40
|
-
|
|
39
|
+
IdSchema.parse(appId);
|
|
41
40
|
const response = await request({
|
|
42
41
|
httpMethod: 'GET',
|
|
43
42
|
baseUri: this.apiRootBase,
|
|
@@ -61,7 +60,7 @@ export class UiExtensionClient extends BaseClient {
|
|
|
61
60
|
return validateUiExtension(response.data);
|
|
62
61
|
}
|
|
63
62
|
async updateUiExtension(uiExtensionId, args, requestId) {
|
|
64
|
-
|
|
63
|
+
IdSchema.parse(uiExtensionId);
|
|
65
64
|
const response = await request({
|
|
66
65
|
httpMethod: 'PATCH',
|
|
67
66
|
baseUri: this.apiRootBase,
|
|
@@ -74,7 +73,7 @@ export class UiExtensionClient extends BaseClient {
|
|
|
74
73
|
return validateUiExtension(response.data);
|
|
75
74
|
}
|
|
76
75
|
async deleteUiExtension(uiExtensionId, requestId) {
|
|
77
|
-
|
|
76
|
+
IdSchema.parse(uiExtensionId);
|
|
78
77
|
const response = await request({
|
|
79
78
|
httpMethod: 'DELETE',
|
|
80
79
|
baseUri: this.apiRootBase,
|
|
@@ -9,12 +9,11 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import { z } from 'zod';
|
|
13
12
|
import { ENDPOINT_REST_WORKSPACES, ENDPOINT_WORKSPACE_INVITATIONS, ENDPOINT_WORKSPACE_INVITATIONS_ALL, ENDPOINT_WORKSPACE_INVITATIONS_DELETE, ENDPOINT_WORKSPACE_JOIN, ENDPOINT_WORKSPACE_LOGO, ENDPOINT_WORKSPACE_MEMBERS, ENDPOINT_WORKSPACE_PLAN_DETAILS, ENDPOINT_WORKSPACE_USERS, getWorkspaceActiveProjectsEndpoint, getWorkspaceArchivedProjectsEndpoint, getWorkspaceInvitationAcceptEndpoint, getWorkspaceInvitationRejectEndpoint, getWorkspaceInviteUsersEndpoint, getWorkspaceUserEndpoint, getWorkspaceUserTasksEndpoint, } from '../consts/endpoints.js';
|
|
14
13
|
import { isSuccess, request } from '../transport/http-client.js';
|
|
15
14
|
import { uploadMultipartFile } from '../utils/multipart-upload.js';
|
|
16
15
|
import { generatePath } from '../utils/request-helpers.js';
|
|
17
|
-
import { validateJoinWorkspaceResult, validateMemberActivityInfoArray, validateProject, validateWorkspace, validateWorkspaceArray, validateWorkspaceInvitation, validateWorkspaceInvitationArray, validateWorkspacePlanDetails, validateWorkspaceUserArray, validateWorkspaceUserTaskArray, } from '../utils/validators.js';
|
|
16
|
+
import { IdSchema, validateJoinWorkspaceResult, validateMemberActivityInfoArray, validateProject, validateWorkspace, validateWorkspaceArray, validateWorkspaceInvitation, validateWorkspaceInvitationArray, validateWorkspacePlanDetails, validateWorkspaceUserArray, validateWorkspaceUserTaskArray, } from '../utils/validators.js';
|
|
18
17
|
import { BaseClient } from './base-client.js';
|
|
19
18
|
/**
|
|
20
19
|
* Internal sub-client handling all workspace-domain endpoints —
|
|
@@ -196,7 +195,7 @@ export class WorkspaceClient extends BaseClient {
|
|
|
196
195
|
return validateWorkspaceArray(response.data);
|
|
197
196
|
}
|
|
198
197
|
async getWorkspace(id, requestId) {
|
|
199
|
-
|
|
198
|
+
IdSchema.parse(id);
|
|
200
199
|
const response = await request({
|
|
201
200
|
httpMethod: 'GET',
|
|
202
201
|
baseUri: this.syncApiBase,
|
|
@@ -220,7 +219,7 @@ export class WorkspaceClient extends BaseClient {
|
|
|
220
219
|
return validateWorkspace(response.data);
|
|
221
220
|
}
|
|
222
221
|
async updateWorkspace(id, args, requestId) {
|
|
223
|
-
|
|
222
|
+
IdSchema.parse(id);
|
|
224
223
|
const response = await request({
|
|
225
224
|
httpMethod: 'POST',
|
|
226
225
|
baseUri: this.syncApiBase,
|
|
@@ -233,7 +232,7 @@ export class WorkspaceClient extends BaseClient {
|
|
|
233
232
|
return validateWorkspace(response.data);
|
|
234
233
|
}
|
|
235
234
|
async deleteWorkspace(id, requestId) {
|
|
236
|
-
|
|
235
|
+
IdSchema.parse(id);
|
|
237
236
|
const response = await request({
|
|
238
237
|
httpMethod: 'DELETE',
|
|
239
238
|
baseUri: this.syncApiBase,
|
|
@@ -21,6 +21,11 @@ function createValidator(schema) {
|
|
|
21
21
|
validateArray: (input) => z.array(schema).parse(input),
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
+
const TMP_ID_MESSAGE = 'This looks like a client-side placeholder — wait for sync to complete before calling the API.';
|
|
25
|
+
export const IdSchema = z
|
|
26
|
+
.string()
|
|
27
|
+
.min(1)
|
|
28
|
+
.refine((id) => !id.startsWith('tmp-'), { message: TMP_ID_MESSAGE });
|
|
24
29
|
// Entity validators
|
|
25
30
|
export const { validate: validateTask, validateArray: validateTaskArray } = createValidator(TaskSchema);
|
|
26
31
|
/**
|
package/package.json
CHANGED