@37signals/basecamp 0.9.0 → 0.10.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 +1 -1
- package/dist/client.d.ts +6 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +33 -13
- package/dist/client.js.map +1 -1
- package/dist/generated/metadata.d.ts.map +1 -1
- package/dist/generated/metadata.js +290 -12
- package/dist/generated/metadata.js.map +1 -1
- package/dist/generated/metadata.ts +290 -12
- package/dist/generated/openapi-stripped.json +6274 -3872
- package/dist/generated/path-mapping.d.ts.map +1 -1
- package/dist/generated/path-mapping.js +23 -5
- package/dist/generated/path-mapping.js.map +1 -1
- package/dist/generated/path-mapping.ts +23 -5
- package/dist/generated/schema.d.ts +3004 -1145
- package/dist/generated/services/boosts.d.ts +13 -10
- package/dist/generated/services/boosts.d.ts.map +1 -1
- package/dist/generated/services/boosts.js +5 -5
- package/dist/generated/services/boosts.js.map +1 -1
- package/dist/generated/services/boosts.ts +12 -10
- package/dist/generated/services/cards.d.ts +4 -4
- package/dist/generated/services/cards.d.ts.map +1 -1
- package/dist/generated/services/cards.js +2 -2
- package/dist/generated/services/cards.js.map +1 -1
- package/dist/generated/services/cards.ts +4 -4
- package/dist/generated/services/everything.d.ts +323 -0
- package/dist/generated/services/everything.d.ts.map +1 -0
- package/dist/generated/services/everything.js +381 -0
- package/dist/generated/services/everything.js.map +1 -0
- package/dist/generated/services/everything.ts +632 -0
- package/dist/generated/services/index.d.ts +2 -1
- package/dist/generated/services/index.d.ts.map +1 -1
- package/dist/generated/services/index.js +2 -1
- package/dist/generated/services/index.js.map +1 -1
- package/dist/generated/services/index.ts +2 -1
- package/dist/generated/services/message-types.d.ts +15 -10
- package/dist/generated/services/message-types.d.ts.map +1 -1
- package/dist/generated/services/message-types.js +35 -18
- package/dist/generated/services/message-types.js.map +1 -1
- package/dist/generated/services/message-types.ts +34 -18
- package/dist/generated/services/my-notifications.d.ts +27 -0
- package/dist/generated/services/my-notifications.d.ts.map +1 -1
- package/dist/generated/services/my-notifications.js +23 -1
- package/dist/generated/services/my-notifications.js.map +1 -1
- package/dist/generated/services/my-notifications.ts +46 -1
- package/dist/generated/services/recordings.d.ts +2 -2
- package/dist/generated/services/recordings.d.ts.map +1 -1
- package/dist/generated/services/recordings.js +1 -1
- package/dist/generated/services/recordings.js.map +1 -1
- package/dist/generated/services/recordings.ts +2 -2
- package/dist/generated/services/schedules.d.ts +9 -1
- package/dist/generated/services/schedules.d.ts.map +1 -1
- package/dist/generated/services/schedules.js.map +1 -1
- package/dist/generated/services/schedules.ts +9 -1
- package/dist/generated/services/tools.d.ts +2 -0
- package/dist/generated/services/tools.d.ts.map +1 -1
- package/dist/generated/services/tools.js +1 -0
- package/dist/generated/services/tools.js.map +1 -1
- package/dist/generated/services/tools.ts +3 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/services/cards-extensions.d.ts +76 -0
- package/dist/services/cards-extensions.d.ts.map +1 -0
- package/dist/services/cards-extensions.js +67 -0
- package/dist/services/cards-extensions.js.map +1 -0
- package/package.json +2 -2
- package/src/generated/metadata.ts +290 -12
- package/src/generated/openapi-stripped.json +6274 -3872
- package/src/generated/path-mapping.ts +23 -5
- package/src/generated/schema.d.ts +3004 -1145
- package/src/generated/services/boosts.ts +12 -10
- package/src/generated/services/cards.ts +4 -4
- package/src/generated/services/everything.ts +632 -0
- package/src/generated/services/index.ts +2 -1
- package/src/generated/services/message-types.ts +34 -18
- package/src/generated/services/my-notifications.ts +46 -1
- package/src/generated/services/recordings.ts +2 -2
- package/src/generated/services/schedules.ts +9 -1
- package/src/generated/services/tools.ts +3 -0
|
@@ -55,24 +55,29 @@ export class MessageTypesService extends BaseService {
|
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* List message types in a project
|
|
58
|
+
* @param bucketId - The bucket ID
|
|
58
59
|
* @param options - Optional query parameters
|
|
59
60
|
* @returns All MessageType across all pages, with .meta.totalCount
|
|
60
61
|
*
|
|
61
62
|
* @example
|
|
62
63
|
* ```ts
|
|
63
|
-
* const result = await client.messageTypes.list();
|
|
64
|
+
* const result = await client.messageTypes.list(123);
|
|
64
65
|
* ```
|
|
65
66
|
*/
|
|
66
|
-
async list(options?: ListMessageTypeOptions): Promise<ListResult<MessageType>> {
|
|
67
|
+
async list(bucketId: number, options?: ListMessageTypeOptions): Promise<ListResult<MessageType>> {
|
|
67
68
|
return this.requestPaginated(
|
|
68
69
|
{
|
|
69
70
|
service: "MessageTypes",
|
|
70
71
|
operation: "ListMessageTypes",
|
|
71
72
|
resourceType: "message_type",
|
|
72
73
|
isMutation: false,
|
|
74
|
+
projectId: bucketId,
|
|
73
75
|
},
|
|
74
76
|
() =>
|
|
75
|
-
this.client.GET("/categories.json", {
|
|
77
|
+
this.client.GET("/buckets/{bucketId}/categories.json", {
|
|
78
|
+
params: {
|
|
79
|
+
path: { bucketId },
|
|
80
|
+
},
|
|
76
81
|
})
|
|
77
82
|
, options
|
|
78
83
|
);
|
|
@@ -80,16 +85,17 @@ export class MessageTypesService extends BaseService {
|
|
|
80
85
|
|
|
81
86
|
/**
|
|
82
87
|
* Create a new message type in a project
|
|
88
|
+
* @param bucketId - The bucket ID
|
|
83
89
|
* @param req - Message_type creation parameters
|
|
84
90
|
* @returns The MessageType
|
|
85
91
|
* @throws {BasecampError} If required fields are missing or invalid
|
|
86
92
|
*
|
|
87
93
|
* @example
|
|
88
94
|
* ```ts
|
|
89
|
-
* const result = await client.messageTypes.create({ name: "My example", icon: "example" });
|
|
95
|
+
* const result = await client.messageTypes.create(123, { name: "My example", icon: "example" });
|
|
90
96
|
* ```
|
|
91
97
|
*/
|
|
92
|
-
async create(req: CreateMessageTypeRequest): Promise<MessageType> {
|
|
98
|
+
async create(bucketId: number, req: CreateMessageTypeRequest): Promise<MessageType> {
|
|
93
99
|
if (!req.name) {
|
|
94
100
|
throw Errors.validation("Name is required");
|
|
95
101
|
}
|
|
@@ -102,9 +108,13 @@ export class MessageTypesService extends BaseService {
|
|
|
102
108
|
operation: "CreateMessageType",
|
|
103
109
|
resourceType: "message_type",
|
|
104
110
|
isMutation: true,
|
|
111
|
+
projectId: bucketId,
|
|
105
112
|
},
|
|
106
113
|
() =>
|
|
107
|
-
this.client.POST("/categories.json", {
|
|
114
|
+
this.client.POST("/buckets/{bucketId}/categories.json", {
|
|
115
|
+
params: {
|
|
116
|
+
path: { bucketId },
|
|
117
|
+
},
|
|
108
118
|
body: {
|
|
109
119
|
name: req.name,
|
|
110
120
|
icon: req.icon,
|
|
@@ -116,28 +126,30 @@ export class MessageTypesService extends BaseService {
|
|
|
116
126
|
|
|
117
127
|
/**
|
|
118
128
|
* Get a single message type by id
|
|
129
|
+
* @param bucketId - The bucket ID
|
|
119
130
|
* @param typeId - The type ID
|
|
120
131
|
* @returns The MessageType
|
|
121
132
|
* @throws {BasecampError} If the resource is not found
|
|
122
133
|
*
|
|
123
134
|
* @example
|
|
124
135
|
* ```ts
|
|
125
|
-
* const result = await client.messageTypes.get(123);
|
|
136
|
+
* const result = await client.messageTypes.get(123, 123);
|
|
126
137
|
* ```
|
|
127
138
|
*/
|
|
128
|
-
async get(typeId: number): Promise<MessageType> {
|
|
139
|
+
async get(bucketId: number, typeId: number): Promise<MessageType> {
|
|
129
140
|
const response = await this.request(
|
|
130
141
|
{
|
|
131
142
|
service: "MessageTypes",
|
|
132
143
|
operation: "GetMessageType",
|
|
133
144
|
resourceType: "message_type",
|
|
134
145
|
isMutation: false,
|
|
146
|
+
projectId: bucketId,
|
|
135
147
|
resourceId: typeId,
|
|
136
148
|
},
|
|
137
149
|
() =>
|
|
138
|
-
this.client.GET("/categories/{typeId}", {
|
|
150
|
+
this.client.GET("/buckets/{bucketId}/categories/{typeId}", {
|
|
139
151
|
params: {
|
|
140
|
-
path: { typeId },
|
|
152
|
+
path: { bucketId, typeId },
|
|
141
153
|
},
|
|
142
154
|
})
|
|
143
155
|
);
|
|
@@ -146,6 +158,7 @@ export class MessageTypesService extends BaseService {
|
|
|
146
158
|
|
|
147
159
|
/**
|
|
148
160
|
* Update an existing message type
|
|
161
|
+
* @param bucketId - The bucket ID
|
|
149
162
|
* @param typeId - The type ID
|
|
150
163
|
* @param req - Message_type update parameters
|
|
151
164
|
* @returns The MessageType
|
|
@@ -153,22 +166,23 @@ export class MessageTypesService extends BaseService {
|
|
|
153
166
|
*
|
|
154
167
|
* @example
|
|
155
168
|
* ```ts
|
|
156
|
-
* const result = await client.messageTypes.update(123, { });
|
|
169
|
+
* const result = await client.messageTypes.update(123, 123, { });
|
|
157
170
|
* ```
|
|
158
171
|
*/
|
|
159
|
-
async update(typeId: number, req: UpdateMessageTypeRequest): Promise<MessageType> {
|
|
172
|
+
async update(bucketId: number, typeId: number, req: UpdateMessageTypeRequest): Promise<MessageType> {
|
|
160
173
|
const response = await this.request(
|
|
161
174
|
{
|
|
162
175
|
service: "MessageTypes",
|
|
163
176
|
operation: "UpdateMessageType",
|
|
164
177
|
resourceType: "message_type",
|
|
165
178
|
isMutation: true,
|
|
179
|
+
projectId: bucketId,
|
|
166
180
|
resourceId: typeId,
|
|
167
181
|
},
|
|
168
182
|
() =>
|
|
169
|
-
this.client.PUT("/categories/{typeId}", {
|
|
183
|
+
this.client.PUT("/buckets/{bucketId}/categories/{typeId}", {
|
|
170
184
|
params: {
|
|
171
|
-
path: { typeId },
|
|
185
|
+
path: { bucketId, typeId },
|
|
172
186
|
},
|
|
173
187
|
body: {
|
|
174
188
|
name: req.name,
|
|
@@ -181,28 +195,30 @@ export class MessageTypesService extends BaseService {
|
|
|
181
195
|
|
|
182
196
|
/**
|
|
183
197
|
* Delete a message type
|
|
198
|
+
* @param bucketId - The bucket ID
|
|
184
199
|
* @param typeId - The type ID
|
|
185
200
|
* @returns void
|
|
186
201
|
* @throws {BasecampError} If the request fails
|
|
187
202
|
*
|
|
188
203
|
* @example
|
|
189
204
|
* ```ts
|
|
190
|
-
* await client.messageTypes.delete(123);
|
|
205
|
+
* await client.messageTypes.delete(123, 123);
|
|
191
206
|
* ```
|
|
192
207
|
*/
|
|
193
|
-
async delete(typeId: number): Promise<void> {
|
|
208
|
+
async delete(bucketId: number, typeId: number): Promise<void> {
|
|
194
209
|
await this.request(
|
|
195
210
|
{
|
|
196
211
|
service: "MessageTypes",
|
|
197
212
|
operation: "DeleteMessageType",
|
|
198
213
|
resourceType: "message_type",
|
|
199
214
|
isMutation: true,
|
|
215
|
+
projectId: bucketId,
|
|
200
216
|
resourceId: typeId,
|
|
201
217
|
},
|
|
202
218
|
() =>
|
|
203
|
-
this.client.DELETE("/categories/{typeId}", {
|
|
219
|
+
this.client.DELETE("/buckets/{bucketId}/categories/{typeId}", {
|
|
204
220
|
params: {
|
|
205
|
-
path: { typeId },
|
|
221
|
+
path: { bucketId, typeId },
|
|
206
222
|
},
|
|
207
223
|
})
|
|
208
224
|
);
|
|
@@ -6,12 +6,16 @@
|
|
|
6
6
|
|
|
7
7
|
import { BaseService } from "../../services/base.js";
|
|
8
8
|
import type { components } from "../schema.js";
|
|
9
|
+
import { ListResult } from "../../pagination.js";
|
|
10
|
+
import type { PaginationOptions } from "../../pagination.js";
|
|
9
11
|
import { Errors } from "../../errors.js";
|
|
10
12
|
|
|
11
13
|
// =============================================================================
|
|
12
14
|
// Types
|
|
13
15
|
// =============================================================================
|
|
14
16
|
|
|
17
|
+
/** Notification entity from the Basecamp API. */
|
|
18
|
+
export type Notification = components["schemas"]["Notification"];
|
|
15
19
|
|
|
16
20
|
/**
|
|
17
21
|
* Options for myNotifications.
|
|
@@ -19,6 +23,19 @@ import { Errors } from "../../errors.js";
|
|
|
19
23
|
export interface MyNotificationsMyNotificationOptions {
|
|
20
24
|
/** Page number for paginating through read items. Defaults to 1. */
|
|
21
25
|
page?: number;
|
|
26
|
+
/** Set to true to cap `bubble_ups` at 2 current bubble-ups and omit the
|
|
27
|
+
`scheduled_bubble_ups` key entirely. Defaults to false. Use the dedicated
|
|
28
|
+
bubble-ups endpoint (GetBubbleUps) to page through all current and
|
|
29
|
+
scheduled bubble-ups. */
|
|
30
|
+
limitBubbleUps?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Options for bubbleUps.
|
|
35
|
+
*/
|
|
36
|
+
export interface BubbleUpsMyNotificationOptions extends PaginationOptions {
|
|
37
|
+
/** Page number. Defaults to 1. */
|
|
38
|
+
page?: number;
|
|
22
39
|
}
|
|
23
40
|
|
|
24
41
|
/**
|
|
@@ -60,13 +77,41 @@ export class MyNotificationsService extends BaseService {
|
|
|
60
77
|
() =>
|
|
61
78
|
this.client.GET("/my/readings.json", {
|
|
62
79
|
params: {
|
|
63
|
-
query: { page: options?.page },
|
|
80
|
+
query: { page: options?.page, "limit_bubble_ups": options?.limitBubbleUps },
|
|
64
81
|
},
|
|
65
82
|
})
|
|
66
83
|
);
|
|
67
84
|
return response;
|
|
68
85
|
}
|
|
69
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Get the current user's current and scheduled bubble-ups (paginated, 50 per page).
|
|
89
|
+
* @param options - Optional query parameters
|
|
90
|
+
* @returns All Notification across all pages, with .meta.totalCount
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* const result = await client.myNotifications.bubbleUps();
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
async bubbleUps(options?: BubbleUpsMyNotificationOptions): Promise<ListResult<Notification>> {
|
|
98
|
+
return this.requestPaginated(
|
|
99
|
+
{
|
|
100
|
+
service: "MyNotifications",
|
|
101
|
+
operation: "GetBubbleUps",
|
|
102
|
+
resourceType: "bubble_up",
|
|
103
|
+
isMutation: false,
|
|
104
|
+
},
|
|
105
|
+
() =>
|
|
106
|
+
this.client.GET("/my/readings/bubble_ups.json", {
|
|
107
|
+
params: {
|
|
108
|
+
query: { page: options?.page },
|
|
109
|
+
},
|
|
110
|
+
})
|
|
111
|
+
, options
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
70
115
|
/**
|
|
71
116
|
* Mark specified items as read
|
|
72
117
|
* @param req - Resource request parameters
|
|
@@ -42,7 +42,7 @@ export class RecordingsService extends BaseService {
|
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* List recordings of a given type across projects
|
|
45
|
-
* @param type - Comment|Document|Kanban::Card|Kanban::Step|Message|Question::Answer|Schedule::Entry|Todo|Todolist|Upload|Vault
|
|
45
|
+
* @param type - Comment|Document|Door|Kanban::Card|Kanban::Step|Message|Question::Answer|Schedule::Entry|Todo|Todolist|Upload|Vault
|
|
46
46
|
* @param options - Optional query parameters
|
|
47
47
|
* @returns All Recording across all pages, with .meta.totalCount
|
|
48
48
|
*
|
|
@@ -54,7 +54,7 @@ export class RecordingsService extends BaseService {
|
|
|
54
54
|
* const filtered = await client.recordings.list("type", { bucket: [123] });
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
|
-
async list(type: "Comment" | "Document" | "Kanban::Card" | "Kanban::Step" | "Message" | "Question::Answer" | "Schedule::Entry" | "Todo" | "Todolist" | "Upload" | "Vault", options?: ListRecordingOptions): Promise<ListResult<Recording>> {
|
|
57
|
+
async list(type: "Comment" | "Document" | "Door" | "Kanban::Card" | "Kanban::Step" | "Message" | "Question::Answer" | "Schedule::Entry" | "Todo" | "Todolist" | "Upload" | "Vault", options?: ListRecordingOptions): Promise<ListResult<Recording>> {
|
|
58
58
|
return this.requestPaginated(
|
|
59
59
|
{
|
|
60
60
|
service: "Recordings",
|
|
@@ -31,7 +31,15 @@ export interface UpdateEntryScheduleRequest {
|
|
|
31
31
|
endsAt?: string;
|
|
32
32
|
/** Rich text description (HTML) */
|
|
33
33
|
description?: string;
|
|
34
|
-
/**
|
|
34
|
+
/** Replaces the entry's participants.
|
|
35
|
+
|
|
36
|
+
Omitting this member preserves the current participants; sending an empty
|
|
37
|
+
array clears them. That guarantee is BC3-side and recent: until
|
|
38
|
+
basecamp/bc3#12425, `Schedules::EntriesController#update` called
|
|
39
|
+
`replace_participants` unconditionally, so any update omitting the key —
|
|
40
|
+
including the shape in BC3's own "Update a schedule entry" doc example —
|
|
41
|
+
silently removed every participant and notified each one. The controller
|
|
42
|
+
now guards on the request actually addressing participants. */
|
|
35
43
|
participantIds?: number[];
|
|
36
44
|
/** All day */
|
|
37
45
|
allDay?: boolean;
|
|
@@ -23,6 +23,8 @@ export interface CreateToolRequest {
|
|
|
23
23
|
toolType: string;
|
|
24
24
|
/** Title for the new tool. When omitted, Basecamp assigns the next available default title for the tool type. */
|
|
25
25
|
title?: string;
|
|
26
|
+
/** Create the tool already visible to clients. Honored only for tool types that manage their own client visibility (Chat::Transcript, Kanban::Board), which otherwise start hidden; every other tool type ignores it and inherits the project default. */
|
|
27
|
+
visibleToClients?: boolean;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -83,6 +85,7 @@ export class ToolsService extends BaseService {
|
|
|
83
85
|
body: {
|
|
84
86
|
tool_type: req.toolType,
|
|
85
87
|
title: req.title,
|
|
88
|
+
visible_to_clients: req.visibleToClients,
|
|
86
89
|
},
|
|
87
90
|
})
|
|
88
91
|
);
|