@37signals/basecamp 0.7.2 → 0.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.
- package/README.md +80 -1
- package/dist/client.d.ts +4 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -23
- package/dist/client.js.map +1 -1
- package/dist/download.d.ts.map +1 -1
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -1
- package/dist/errors.js.map +1 -1
- package/dist/generated/metadata.d.ts +32 -0
- package/dist/generated/metadata.d.ts.map +1 -0
- package/dist/generated/metadata.js +2670 -0
- package/dist/generated/metadata.js.map +1 -0
- package/dist/generated/{metadata.json → metadata.ts} +98 -45
- package/dist/generated/openapi-stripped.json +713 -440
- package/dist/generated/path-mapping.d.ts.map +1 -1
- package/dist/generated/path-mapping.js +6 -5
- package/dist/generated/path-mapping.js.map +1 -1
- package/dist/generated/path-mapping.ts +6 -5
- package/dist/generated/schema.d.ts +510 -297
- package/dist/generated/services/campfires.d.ts +22 -1
- package/dist/generated/services/campfires.d.ts.map +1 -1
- package/dist/generated/services/campfires.js +33 -1
- package/dist/generated/services/campfires.js.map +1 -1
- package/dist/generated/services/campfires.ts +46 -1
- package/dist/generated/services/card-columns.d.ts +31 -28
- package/dist/generated/services/card-columns.d.ts.map +1 -1
- package/dist/generated/services/card-columns.js +54 -51
- package/dist/generated/services/card-columns.js.map +1 -1
- package/dist/generated/services/card-columns.ts +62 -59
- package/dist/generated/services/index.d.ts +2 -2
- package/dist/generated/services/index.d.ts.map +1 -1
- package/dist/generated/services/index.js +2 -2
- package/dist/generated/services/index.js.map +1 -1
- package/dist/generated/services/index.ts +2 -2
- package/dist/generated/services/reports.d.ts +1 -1
- package/dist/generated/services/reports.js +1 -1
- package/dist/generated/services/reports.ts +1 -1
- package/dist/generated/services/todos.d.ts +8 -8
- package/dist/generated/services/todos.d.ts.map +1 -1
- package/dist/generated/services/todos.js +9 -6
- package/dist/generated/services/todos.js.map +1 -1
- package/dist/generated/services/todos.ts +12 -9
- package/dist/generated/services/tools.d.ts +11 -10
- package/dist/generated/services/tools.d.ts.map +1 -1
- package/dist/generated/services/tools.js +16 -8
- package/dist/generated/services/tools.js.map +1 -1
- package/dist/generated/services/tools.ts +21 -13
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/oauth/discovery.d.ts +105 -23
- package/dist/oauth/discovery.d.ts.map +1 -1
- package/dist/oauth/discovery.js +453 -61
- package/dist/oauth/discovery.js.map +1 -1
- package/dist/oauth/index.d.ts +2 -2
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +1 -1
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/interactive-login.d.ts +20 -2
- package/dist/oauth/interactive-login.d.ts.map +1 -1
- package/dist/oauth/interactive-login.js +58 -4
- package/dist/oauth/interactive-login.js.map +1 -1
- package/dist/oauth/types.d.ts +54 -2
- package/dist/oauth/types.d.ts.map +1 -1
- package/dist/security.d.ts +22 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +56 -1
- package/dist/security.js.map +1 -1
- package/dist/services/authorization.d.ts.map +1 -1
- package/dist/services/authorization.js +3 -0
- package/dist/services/authorization.js.map +1 -1
- package/dist/services/base.d.ts.map +1 -1
- package/dist/services/base.js +1 -3
- package/dist/services/base.js.map +1 -1
- package/dist/services/todos-extensions.d.ts +118 -0
- package/dist/services/todos-extensions.d.ts.map +1 -0
- package/dist/services/todos-extensions.js +113 -0
- package/dist/services/todos-extensions.js.map +1 -0
- package/dist/services/uploads-extensions.d.ts +33 -0
- package/dist/services/uploads-extensions.d.ts.map +1 -0
- package/dist/services/uploads-extensions.js +48 -0
- package/dist/services/uploads-extensions.js.map +1 -0
- package/package.json +7 -4
- package/src/generated/{metadata.json → metadata.ts} +98 -45
- package/src/generated/openapi-stripped.json +713 -440
- package/src/generated/path-mapping.ts +6 -5
- package/src/generated/schema.d.ts +510 -297
- package/src/generated/services/campfires.ts +46 -1
- package/src/generated/services/card-columns.ts +62 -59
- package/src/generated/services/index.ts +2 -2
- package/src/generated/services/reports.ts +1 -1
- package/src/generated/services/todos.ts +12 -9
- package/src/generated/services/tools.ts +21 -13
|
@@ -73,6 +73,14 @@ export interface CreateLineCampfireRequest {
|
|
|
73
73
|
contentType?: string;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Request parameters for updateLine.
|
|
78
|
+
*/
|
|
79
|
+
export interface UpdateLineCampfireRequest {
|
|
80
|
+
/** The new line content, interpreted as rich text (HTML) */
|
|
81
|
+
content: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
76
84
|
/**
|
|
77
85
|
* Options for listUploads.
|
|
78
86
|
*/
|
|
@@ -420,7 +428,44 @@ export class CampfiresService extends BaseService {
|
|
|
420
428
|
}
|
|
421
429
|
|
|
422
430
|
/**
|
|
423
|
-
*
|
|
431
|
+
* Update an existing campfire line; the content is always treated as rich text (HTML).
|
|
432
|
+
* @param campfireId - The campfire ID
|
|
433
|
+
* @param lineId - The line ID
|
|
434
|
+
* @param req - Campfire_line update parameters
|
|
435
|
+
* @returns void
|
|
436
|
+
* @throws {BasecampError} If the resource is not found or fields are invalid
|
|
437
|
+
*
|
|
438
|
+
* @example
|
|
439
|
+
* ```ts
|
|
440
|
+
* await client.campfires.updateLine(123, 123, { content: "Hello world" });
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
async updateLine(campfireId: number, lineId: number, req: UpdateLineCampfireRequest): Promise<void> {
|
|
444
|
+
if (!req.content) {
|
|
445
|
+
throw Errors.validation("Content is required");
|
|
446
|
+
}
|
|
447
|
+
await this.request(
|
|
448
|
+
{
|
|
449
|
+
service: "Campfires",
|
|
450
|
+
operation: "UpdateCampfireLine",
|
|
451
|
+
resourceType: "campfire_line",
|
|
452
|
+
isMutation: true,
|
|
453
|
+
resourceId: lineId,
|
|
454
|
+
},
|
|
455
|
+
() =>
|
|
456
|
+
this.client.PUT("/chats/{campfireId}/lines/{lineId}", {
|
|
457
|
+
params: {
|
|
458
|
+
path: { campfireId, lineId },
|
|
459
|
+
},
|
|
460
|
+
body: {
|
|
461
|
+
content: req.content,
|
|
462
|
+
},
|
|
463
|
+
})
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Delete a campfire line; allowed for the line's creator or an admin.
|
|
424
469
|
* @param campfireId - The campfire ID
|
|
425
470
|
* @param lineId - The line ID
|
|
426
471
|
* @returns void
|
|
@@ -15,6 +15,14 @@ import { Errors } from "../../errors.js";
|
|
|
15
15
|
/** CardColumn entity from the Basecamp API. */
|
|
16
16
|
export type CardColumn = components["schemas"]["CardColumn"];
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Request parameters for setColor.
|
|
20
|
+
*/
|
|
21
|
+
export interface SetColorCardColumnRequest {
|
|
22
|
+
/** Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown */
|
|
23
|
+
color: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
18
26
|
/**
|
|
19
27
|
* Request parameters for update.
|
|
20
28
|
*/
|
|
@@ -25,14 +33,6 @@ export interface UpdateCardColumnRequest {
|
|
|
25
33
|
description?: string;
|
|
26
34
|
}
|
|
27
35
|
|
|
28
|
-
/**
|
|
29
|
-
* Request parameters for setColor.
|
|
30
|
-
*/
|
|
31
|
-
export interface SetColorCardColumnRequest {
|
|
32
|
-
/** Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown */
|
|
33
|
-
color: string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
36
|
/**
|
|
37
37
|
* Request parameters for create.
|
|
38
38
|
*/
|
|
@@ -66,29 +66,37 @@ export interface MoveCardColumnRequest {
|
|
|
66
66
|
export class CardColumnsService extends BaseService {
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
69
|
+
* Set the color of a column
|
|
70
|
+
* @param bucketId - The bucket ID
|
|
70
71
|
* @param columnId - The column ID
|
|
72
|
+
* @param req - Card_column_color request parameters
|
|
71
73
|
* @returns The CardColumn
|
|
72
|
-
* @throws {BasecampError} If the
|
|
74
|
+
* @throws {BasecampError} If the request fails
|
|
73
75
|
*
|
|
74
76
|
* @example
|
|
75
77
|
* ```ts
|
|
76
|
-
* const result = await client.cardColumns.
|
|
78
|
+
* const result = await client.cardColumns.setColor(123, 123, { color: "example" });
|
|
77
79
|
* ```
|
|
78
80
|
*/
|
|
79
|
-
async
|
|
81
|
+
async setColor(bucketId: number, columnId: number, req: SetColorCardColumnRequest): Promise<CardColumn> {
|
|
82
|
+
if (!req.color) {
|
|
83
|
+
throw Errors.validation("Color is required");
|
|
84
|
+
}
|
|
80
85
|
const response = await this.request(
|
|
81
86
|
{
|
|
82
87
|
service: "CardColumns",
|
|
83
|
-
operation: "
|
|
84
|
-
resourceType: "
|
|
85
|
-
isMutation:
|
|
88
|
+
operation: "SetCardColumnColor",
|
|
89
|
+
resourceType: "card_column_color",
|
|
90
|
+
isMutation: true,
|
|
86
91
|
resourceId: columnId,
|
|
87
92
|
},
|
|
88
93
|
() =>
|
|
89
|
-
this.client.
|
|
94
|
+
this.client.PUT("/buckets/{bucketId}/card_tables/columns/{columnId}/color.json", {
|
|
90
95
|
params: {
|
|
91
|
-
path: { columnId },
|
|
96
|
+
path: { bucketId, columnId },
|
|
97
|
+
},
|
|
98
|
+
body: {
|
|
99
|
+
color: req.color,
|
|
92
100
|
},
|
|
93
101
|
})
|
|
94
102
|
);
|
|
@@ -96,34 +104,30 @@ export class CardColumnsService extends BaseService {
|
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
/**
|
|
99
|
-
*
|
|
107
|
+
* Enable on-hold section in a column
|
|
108
|
+
* @param bucketId - The bucket ID
|
|
100
109
|
* @param columnId - The column ID
|
|
101
|
-
* @param req - Card_column update parameters
|
|
102
110
|
* @returns The CardColumn
|
|
103
|
-
* @throws {BasecampError} If the
|
|
111
|
+
* @throws {BasecampError} If the request fails
|
|
104
112
|
*
|
|
105
113
|
* @example
|
|
106
114
|
* ```ts
|
|
107
|
-
* const result = await client.cardColumns.
|
|
115
|
+
* const result = await client.cardColumns.enableOnHold(123, 123);
|
|
108
116
|
* ```
|
|
109
117
|
*/
|
|
110
|
-
async
|
|
118
|
+
async enableOnHold(bucketId: number, columnId: number): Promise<CardColumn> {
|
|
111
119
|
const response = await this.request(
|
|
112
120
|
{
|
|
113
121
|
service: "CardColumns",
|
|
114
|
-
operation: "
|
|
115
|
-
resourceType: "
|
|
122
|
+
operation: "EnableCardColumnOnHold",
|
|
123
|
+
resourceType: "card_column_on_hold",
|
|
116
124
|
isMutation: true,
|
|
117
125
|
resourceId: columnId,
|
|
118
126
|
},
|
|
119
127
|
() =>
|
|
120
|
-
this.client.
|
|
128
|
+
this.client.POST("/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json", {
|
|
121
129
|
params: {
|
|
122
|
-
path: { columnId },
|
|
123
|
-
},
|
|
124
|
-
body: {
|
|
125
|
-
title: req.title,
|
|
126
|
-
description: req.description,
|
|
130
|
+
path: { bucketId, columnId },
|
|
127
131
|
},
|
|
128
132
|
})
|
|
129
133
|
);
|
|
@@ -131,36 +135,30 @@ export class CardColumnsService extends BaseService {
|
|
|
131
135
|
}
|
|
132
136
|
|
|
133
137
|
/**
|
|
134
|
-
*
|
|
138
|
+
* Disable on-hold section in a column
|
|
139
|
+
* @param bucketId - The bucket ID
|
|
135
140
|
* @param columnId - The column ID
|
|
136
|
-
* @param req - Card_column_color request parameters
|
|
137
141
|
* @returns The CardColumn
|
|
138
142
|
* @throws {BasecampError} If the request fails
|
|
139
143
|
*
|
|
140
144
|
* @example
|
|
141
145
|
* ```ts
|
|
142
|
-
* const result = await client.cardColumns.
|
|
146
|
+
* const result = await client.cardColumns.disableOnHold(123, 123);
|
|
143
147
|
* ```
|
|
144
148
|
*/
|
|
145
|
-
async
|
|
146
|
-
if (!req.color) {
|
|
147
|
-
throw Errors.validation("Color is required");
|
|
148
|
-
}
|
|
149
|
+
async disableOnHold(bucketId: number, columnId: number): Promise<CardColumn> {
|
|
149
150
|
const response = await this.request(
|
|
150
151
|
{
|
|
151
152
|
service: "CardColumns",
|
|
152
|
-
operation: "
|
|
153
|
-
resourceType: "
|
|
153
|
+
operation: "DisableCardColumnOnHold",
|
|
154
|
+
resourceType: "card_column_on_hold",
|
|
154
155
|
isMutation: true,
|
|
155
156
|
resourceId: columnId,
|
|
156
157
|
},
|
|
157
158
|
() =>
|
|
158
|
-
this.client.
|
|
159
|
+
this.client.DELETE("/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json", {
|
|
159
160
|
params: {
|
|
160
|
-
path: { columnId },
|
|
161
|
-
},
|
|
162
|
-
body: {
|
|
163
|
-
color: req.color,
|
|
161
|
+
path: { bucketId, columnId },
|
|
164
162
|
},
|
|
165
163
|
})
|
|
166
164
|
);
|
|
@@ -168,27 +166,27 @@ export class CardColumnsService extends BaseService {
|
|
|
168
166
|
}
|
|
169
167
|
|
|
170
168
|
/**
|
|
171
|
-
*
|
|
169
|
+
* Get a card column by ID
|
|
172
170
|
* @param columnId - The column ID
|
|
173
171
|
* @returns The CardColumn
|
|
174
|
-
* @throws {BasecampError} If the
|
|
172
|
+
* @throws {BasecampError} If the resource is not found
|
|
175
173
|
*
|
|
176
174
|
* @example
|
|
177
175
|
* ```ts
|
|
178
|
-
* const result = await client.cardColumns.
|
|
176
|
+
* const result = await client.cardColumns.get(123);
|
|
179
177
|
* ```
|
|
180
178
|
*/
|
|
181
|
-
async
|
|
179
|
+
async get(columnId: number): Promise<CardColumn> {
|
|
182
180
|
const response = await this.request(
|
|
183
181
|
{
|
|
184
182
|
service: "CardColumns",
|
|
185
|
-
operation: "
|
|
186
|
-
resourceType: "
|
|
187
|
-
isMutation:
|
|
183
|
+
operation: "GetCardColumn",
|
|
184
|
+
resourceType: "card_column",
|
|
185
|
+
isMutation: false,
|
|
188
186
|
resourceId: columnId,
|
|
189
187
|
},
|
|
190
188
|
() =>
|
|
191
|
-
this.client.
|
|
189
|
+
this.client.GET("/card_tables/columns/{columnId}", {
|
|
192
190
|
params: {
|
|
193
191
|
path: { columnId },
|
|
194
192
|
},
|
|
@@ -198,30 +196,35 @@ export class CardColumnsService extends BaseService {
|
|
|
198
196
|
}
|
|
199
197
|
|
|
200
198
|
/**
|
|
201
|
-
*
|
|
199
|
+
* Update an existing column
|
|
202
200
|
* @param columnId - The column ID
|
|
201
|
+
* @param req - Card_column update parameters
|
|
203
202
|
* @returns The CardColumn
|
|
204
|
-
* @throws {BasecampError} If the
|
|
203
|
+
* @throws {BasecampError} If the resource is not found or fields are invalid
|
|
205
204
|
*
|
|
206
205
|
* @example
|
|
207
206
|
* ```ts
|
|
208
|
-
* const result = await client.cardColumns.
|
|
207
|
+
* const result = await client.cardColumns.update(123, { });
|
|
209
208
|
* ```
|
|
210
209
|
*/
|
|
211
|
-
async
|
|
210
|
+
async update(columnId: number, req: UpdateCardColumnRequest): Promise<CardColumn> {
|
|
212
211
|
const response = await this.request(
|
|
213
212
|
{
|
|
214
213
|
service: "CardColumns",
|
|
215
|
-
operation: "
|
|
216
|
-
resourceType: "
|
|
214
|
+
operation: "UpdateCardColumn",
|
|
215
|
+
resourceType: "card_column",
|
|
217
216
|
isMutation: true,
|
|
218
217
|
resourceId: columnId,
|
|
219
218
|
},
|
|
220
219
|
() =>
|
|
221
|
-
this.client.
|
|
220
|
+
this.client.PUT("/card_tables/columns/{columnId}", {
|
|
222
221
|
params: {
|
|
223
222
|
path: { columnId },
|
|
224
223
|
},
|
|
224
|
+
body: {
|
|
225
|
+
title: req.title,
|
|
226
|
+
description: req.description,
|
|
227
|
+
},
|
|
225
228
|
})
|
|
226
229
|
);
|
|
227
230
|
return response;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { AccountService } from "./account.js";
|
|
2
2
|
export { AttachmentsService } from "./attachments.js";
|
|
3
3
|
export { BoostsService } from "./boosts.js";
|
|
4
|
+
export { CardColumnsService } from "./card-columns.js";
|
|
5
|
+
export { ToolsService } from "./tools.js";
|
|
4
6
|
export { WebhooksService } from "./webhooks.js";
|
|
5
7
|
export { CardsService } from "./cards.js";
|
|
6
8
|
export { CardStepsService } from "./card-steps.js";
|
|
7
|
-
export { CardColumnsService } from "./card-columns.js";
|
|
8
9
|
export { CardTablesService } from "./card-tables.js";
|
|
9
10
|
export { MessageTypesService } from "./message-types.js";
|
|
10
11
|
export { CampfiresService } from "./campfires.js";
|
|
@@ -13,7 +14,6 @@ export { ClientApprovalsService } from "./client-approvals.js";
|
|
|
13
14
|
export { ClientCorrespondencesService } from "./client-correspondences.js";
|
|
14
15
|
export { ClientRepliesService } from "./client-replies.js";
|
|
15
16
|
export { CommentsService } from "./comments.js";
|
|
16
|
-
export { ToolsService } from "./tools.js";
|
|
17
17
|
export { DocumentsService } from "./documents.js";
|
|
18
18
|
export { GaugesService } from "./gauges.js";
|
|
19
19
|
export { ForwardsService } from "./forwards.js";
|
|
@@ -84,7 +84,7 @@ export class ReportsService extends BaseService {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/**
|
|
87
|
-
* Get upcoming schedule entries within a date window
|
|
87
|
+
* Get upcoming schedule entries and assignable items within a date window.
|
|
88
88
|
* @param options - Optional query parameters
|
|
89
89
|
* @returns The upcoming_schedule
|
|
90
90
|
*
|
|
@@ -48,11 +48,11 @@ export interface CreateTodoRequest {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
* Request parameters for
|
|
51
|
+
* Request parameters for replace.
|
|
52
52
|
*/
|
|
53
|
-
export interface
|
|
53
|
+
export interface ReplaceTodoRequest {
|
|
54
54
|
/** Text content */
|
|
55
|
-
content
|
|
55
|
+
content: string;
|
|
56
56
|
/** Rich text description (HTML) */
|
|
57
57
|
description?: string;
|
|
58
58
|
/** Person IDs to assign to */
|
|
@@ -201,18 +201,21 @@ export class TodosService extends BaseService {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
/**
|
|
204
|
-
*
|
|
204
|
+
* Replace a todo with a new complete representation.
|
|
205
205
|
* @param todoId - The todo ID
|
|
206
|
-
* @param req - Todo
|
|
206
|
+
* @param req - Todo request parameters
|
|
207
207
|
* @returns The Todo
|
|
208
|
-
* @throws {BasecampError} If the
|
|
208
|
+
* @throws {BasecampError} If the request fails
|
|
209
209
|
*
|
|
210
210
|
* @example
|
|
211
211
|
* ```ts
|
|
212
|
-
* const result = await client.todos.
|
|
212
|
+
* const result = await client.todos.replace(123, { content: "Hello world" });
|
|
213
213
|
* ```
|
|
214
214
|
*/
|
|
215
|
-
async
|
|
215
|
+
async replace(todoId: number, req: ReplaceTodoRequest): Promise<Todo> {
|
|
216
|
+
if (!req.content) {
|
|
217
|
+
throw Errors.validation("Content is required");
|
|
218
|
+
}
|
|
216
219
|
if (req.dueOn && !/^\d{4}-\d{2}-\d{2}$/.test(req.dueOn)) {
|
|
217
220
|
throw Errors.validation("Due on must be in YYYY-MM-DD format");
|
|
218
221
|
}
|
|
@@ -222,7 +225,7 @@ export class TodosService extends BaseService {
|
|
|
222
225
|
const response = await this.request(
|
|
223
226
|
{
|
|
224
227
|
service: "Todos",
|
|
225
|
-
operation: "
|
|
228
|
+
operation: "ReplaceTodo",
|
|
226
229
|
resourceType: "todo",
|
|
227
230
|
isMutation: true,
|
|
228
231
|
resourceId: todoId,
|
|
@@ -16,12 +16,12 @@ import { Errors } from "../../errors.js";
|
|
|
16
16
|
export type Tool = components["schemas"]["Tool"];
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Request parameters for
|
|
19
|
+
* Request parameters for create.
|
|
20
20
|
*/
|
|
21
|
-
export interface
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
/** Title */
|
|
21
|
+
export interface CreateToolRequest {
|
|
22
|
+
/** Tool type to add to the project dock. Values: Chat::Transcript|Inbox|Kanban::Board|Message::Board|Questionnaire|Schedule|Todoset|Vault. */
|
|
23
|
+
toolType: string;
|
|
24
|
+
/** Title for the new tool. When omitted, Basecamp assigns the next available default title for the tool type. */
|
|
25
25
|
title?: string;
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -52,28 +52,36 @@ export interface RepositionToolRequest {
|
|
|
52
52
|
export class ToolsService extends BaseService {
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
56
|
-
* @param
|
|
55
|
+
* Create a tool in a project dock
|
|
56
|
+
* @param bucketId - The bucket ID
|
|
57
|
+
* @param req - Tool creation parameters
|
|
57
58
|
* @returns The Tool
|
|
58
|
-
* @throws {BasecampError} If
|
|
59
|
+
* @throws {BasecampError} If required fields are missing or invalid
|
|
59
60
|
*
|
|
60
61
|
* @example
|
|
61
62
|
* ```ts
|
|
62
|
-
* const result = await client.tools.
|
|
63
|
+
* const result = await client.tools.create(123, { toolType: "example" });
|
|
63
64
|
* ```
|
|
64
65
|
*/
|
|
65
|
-
async
|
|
66
|
+
async create(bucketId: number, req: CreateToolRequest): Promise<Tool> {
|
|
67
|
+
if (!req.toolType) {
|
|
68
|
+
throw Errors.validation("Tool type is required");
|
|
69
|
+
}
|
|
66
70
|
const response = await this.request(
|
|
67
71
|
{
|
|
68
72
|
service: "Tools",
|
|
69
|
-
operation: "
|
|
73
|
+
operation: "CreateTool",
|
|
70
74
|
resourceType: "tool",
|
|
71
75
|
isMutation: true,
|
|
76
|
+
resourceId: bucketId,
|
|
72
77
|
},
|
|
73
78
|
() =>
|
|
74
|
-
this.client.POST("/dock/tools.json", {
|
|
79
|
+
this.client.POST("/buckets/{bucketId}/dock/tools.json", {
|
|
80
|
+
params: {
|
|
81
|
+
path: { bucketId },
|
|
82
|
+
},
|
|
75
83
|
body: {
|
|
76
|
-
|
|
84
|
+
tool_type: req.toolType,
|
|
77
85
|
title: req.title,
|
|
78
86
|
},
|
|
79
87
|
})
|