@37signals/basecamp 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/client.d.ts +22 -1
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +37 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/download.d.ts +40 -0
  6. package/dist/download.d.ts.map +1 -0
  7. package/dist/download.js +182 -0
  8. package/dist/download.js.map +1 -0
  9. package/dist/generated/metadata.json +330 -1
  10. package/dist/generated/openapi-stripped.json +5261 -1905
  11. package/dist/generated/path-mapping.d.ts.map +1 -1
  12. package/dist/generated/path-mapping.js +28 -2
  13. package/dist/generated/path-mapping.js.map +1 -1
  14. package/dist/generated/path-mapping.ts +29 -3
  15. package/dist/generated/schema.d.ts +2578 -333
  16. package/dist/generated/services/account.d.ts +66 -0
  17. package/dist/generated/services/account.d.ts.map +1 -0
  18. package/dist/generated/services/account.js +101 -0
  19. package/dist/generated/services/account.js.map +1 -0
  20. package/dist/generated/services/account.ts +144 -0
  21. package/dist/generated/services/automation.d.ts +25 -0
  22. package/dist/generated/services/automation.d.ts.map +1 -0
  23. package/dist/generated/services/automation.js +33 -0
  24. package/dist/generated/services/automation.js.map +1 -0
  25. package/dist/generated/services/automation.ts +49 -0
  26. package/dist/generated/services/boosts.js +2 -2
  27. package/dist/generated/services/boosts.js.map +1 -1
  28. package/dist/generated/services/boosts.ts +2 -2
  29. package/dist/generated/services/campfires.d.ts +14 -0
  30. package/dist/generated/services/campfires.d.ts.map +1 -1
  31. package/dist/generated/services/campfires.js +13 -5
  32. package/dist/generated/services/campfires.js.map +1 -1
  33. package/dist/generated/services/campfires.ts +21 -5
  34. package/dist/generated/services/card-steps.d.ts +12 -0
  35. package/dist/generated/services/card-steps.d.ts.map +1 -1
  36. package/dist/generated/services/card-steps.js +25 -0
  37. package/dist/generated/services/card-steps.js.map +1 -1
  38. package/dist/generated/services/card-steps.ts +30 -0
  39. package/dist/generated/services/cards.d.ts +2 -0
  40. package/dist/generated/services/cards.d.ts.map +1 -1
  41. package/dist/generated/services/cards.js +1 -0
  42. package/dist/generated/services/cards.js.map +1 -1
  43. package/dist/generated/services/cards.ts +3 -0
  44. package/dist/generated/services/checkins.js +1 -1
  45. package/dist/generated/services/checkins.js.map +1 -1
  46. package/dist/generated/services/checkins.ts +1 -1
  47. package/dist/generated/services/client-approvals.d.ts +7 -0
  48. package/dist/generated/services/client-approvals.d.ts.map +1 -1
  49. package/dist/generated/services/client-approvals.js +8 -1
  50. package/dist/generated/services/client-approvals.js.map +1 -1
  51. package/dist/generated/services/client-approvals.ts +10 -0
  52. package/dist/generated/services/client-correspondences.d.ts +7 -0
  53. package/dist/generated/services/client-correspondences.d.ts.map +1 -1
  54. package/dist/generated/services/client-correspondences.js +8 -1
  55. package/dist/generated/services/client-correspondences.js.map +1 -1
  56. package/dist/generated/services/client-correspondences.ts +10 -0
  57. package/dist/generated/services/client-replies.js +1 -1
  58. package/dist/generated/services/client-replies.js.map +1 -1
  59. package/dist/generated/services/client-replies.ts +1 -1
  60. package/dist/generated/services/forwards.d.ts +7 -0
  61. package/dist/generated/services/forwards.d.ts.map +1 -1
  62. package/dist/generated/services/forwards.js +5 -1
  63. package/dist/generated/services/forwards.js.map +1 -1
  64. package/dist/generated/services/forwards.ts +9 -1
  65. package/dist/generated/services/gauges.d.ts +140 -0
  66. package/dist/generated/services/gauges.d.ts.map +1 -0
  67. package/dist/generated/services/gauges.js +207 -0
  68. package/dist/generated/services/gauges.js.map +1 -0
  69. package/dist/generated/services/gauges.ts +298 -0
  70. package/dist/generated/services/hill-charts.d.ts +47 -0
  71. package/dist/generated/services/hill-charts.d.ts.map +1 -0
  72. package/dist/generated/services/hill-charts.js +70 -0
  73. package/dist/generated/services/hill-charts.js.map +1 -0
  74. package/dist/generated/services/hill-charts.ts +99 -0
  75. package/dist/generated/services/index.d.ts +6 -0
  76. package/dist/generated/services/index.d.ts.map +1 -1
  77. package/dist/generated/services/index.js +6 -0
  78. package/dist/generated/services/index.js.map +1 -1
  79. package/dist/generated/services/index.ts +6 -0
  80. package/dist/generated/services/my-assignments.d.ts +52 -0
  81. package/dist/generated/services/my-assignments.d.ts.map +1 -0
  82. package/dist/generated/services/my-assignments.js +74 -0
  83. package/dist/generated/services/my-assignments.js.map +1 -0
  84. package/dist/generated/services/my-assignments.ts +109 -0
  85. package/dist/generated/services/my-notifications.d.ts +50 -0
  86. package/dist/generated/services/my-notifications.d.ts.map +1 -0
  87. package/dist/generated/services/my-notifications.js +65 -0
  88. package/dist/generated/services/my-notifications.js.map +1 -0
  89. package/dist/generated/services/my-notifications.ts +100 -0
  90. package/dist/generated/services/people.d.ts +105 -0
  91. package/dist/generated/services/people.d.ts.map +1 -1
  92. package/dist/generated/services/people.js +156 -0
  93. package/dist/generated/services/people.js.map +1 -1
  94. package/dist/generated/services/people.ts +225 -0
  95. package/dist/generated/services/search.d.ts +1 -1
  96. package/dist/generated/services/search.ts +1 -1
  97. package/dist/generated/services/templates.js +1 -1
  98. package/dist/generated/services/templates.js.map +1 -1
  99. package/dist/generated/services/templates.ts +1 -1
  100. package/dist/generated/services/tools.d.ts +2 -0
  101. package/dist/generated/services/tools.d.ts.map +1 -1
  102. package/dist/generated/services/tools.js +1 -0
  103. package/dist/generated/services/tools.js.map +1 -1
  104. package/dist/generated/services/tools.ts +3 -0
  105. package/dist/index.d.ts +7 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +13 -0
  108. package/dist/index.js.map +1 -1
  109. package/dist/services/base.d.ts +19 -1
  110. package/dist/services/base.d.ts.map +1 -1
  111. package/dist/services/base.js +110 -1
  112. package/dist/services/base.js.map +1 -1
  113. package/package.json +1 -1
  114. package/src/generated/metadata.json +330 -1
  115. package/src/generated/openapi-stripped.json +5261 -1905
  116. package/src/generated/path-mapping.ts +29 -3
  117. package/src/generated/schema.d.ts +2578 -333
  118. package/src/generated/services/account.ts +144 -0
  119. package/src/generated/services/automation.ts +49 -0
  120. package/src/generated/services/boosts.ts +2 -2
  121. package/src/generated/services/campfires.ts +21 -5
  122. package/src/generated/services/card-steps.ts +30 -0
  123. package/src/generated/services/cards.ts +3 -0
  124. package/src/generated/services/checkins.ts +1 -1
  125. package/src/generated/services/client-approvals.ts +10 -0
  126. package/src/generated/services/client-correspondences.ts +10 -0
  127. package/src/generated/services/client-replies.ts +1 -1
  128. package/src/generated/services/forwards.ts +9 -1
  129. package/src/generated/services/gauges.ts +298 -0
  130. package/src/generated/services/hill-charts.ts +99 -0
  131. package/src/generated/services/index.ts +6 -0
  132. package/src/generated/services/my-assignments.ts +109 -0
  133. package/src/generated/services/my-notifications.ts +100 -0
  134. package/src/generated/services/people.ts +225 -0
  135. package/src/generated/services/search.ts +1 -1
  136. package/src/generated/services/templates.ts +1 -1
  137. package/src/generated/services/tools.ts +3 -0
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Gauges service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+
7
+ import { BaseService } from "../../services/base.js";
8
+ import type { components } from "../schema.js";
9
+ import { ListResult } from "../../pagination.js";
10
+ import type { PaginationOptions } from "../../pagination.js";
11
+ import { Errors } from "../../errors.js";
12
+
13
+ // =============================================================================
14
+ // Types
15
+ // =============================================================================
16
+
17
+
18
+ /**
19
+ * Request parameters for updateGaugeNeedle.
20
+ */
21
+ export interface UpdateGaugeNeedleGaugeRequest {
22
+ /** Gauge needle */
23
+ gaugeNeedle?: components["schemas"]["GaugeNeedleUpdatePayload"];
24
+ }
25
+
26
+ /**
27
+ * Request parameters for toggleGauge.
28
+ */
29
+ export interface ToggleGaugeGaugeRequest {
30
+ /** Gauge */
31
+ gauge: components["schemas"]["GaugeTogglePayload"];
32
+ }
33
+
34
+ /**
35
+ * Options for listGaugeNeedles.
36
+ */
37
+ export interface ListGaugeNeedlesGaugeOptions extends PaginationOptions {
38
+ }
39
+
40
+ /**
41
+ * Request parameters for createGaugeNeedle.
42
+ */
43
+ export interface CreateGaugeNeedleGaugeRequest {
44
+ /** Gauge needle */
45
+ gaugeNeedle: components["schemas"]["GaugeNeedlePayload"];
46
+ /** Who to notify: "everyone", "working_on", "custom", or omit for nobody */
47
+ notify?: string;
48
+ /** Array of people IDs to notify (only used when notify is "custom") */
49
+ subscriptions?: number[];
50
+ }
51
+
52
+ /**
53
+ * Options for listGauges.
54
+ */
55
+ export interface ListGaugesGaugeOptions extends PaginationOptions {
56
+ /** Comma-separated list of project IDs. When provided, results are returned
57
+ in the order specified instead of by risk level. */
58
+ bucketIds?: string;
59
+ }
60
+
61
+
62
+ // =============================================================================
63
+ // Service
64
+ // =============================================================================
65
+
66
+ /**
67
+ * Service for Gauges operations.
68
+ */
69
+ export class GaugesService extends BaseService {
70
+
71
+ /**
72
+ * Get a gauge needle by ID
73
+ * @param needleId - The needle ID
74
+ * @returns The gauge_needle
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * const result = await client.gauges.gaugeNeedle(123);
79
+ * ```
80
+ */
81
+ async gaugeNeedle(needleId: number): Promise<components["schemas"]["GetGaugeNeedleResponseContent"]> {
82
+ const response = await this.request(
83
+ {
84
+ service: "Gauges",
85
+ operation: "GetGaugeNeedle",
86
+ resourceType: "gauge_needle",
87
+ isMutation: false,
88
+ resourceId: needleId,
89
+ },
90
+ () =>
91
+ this.client.GET("/gauge_needles/{needleId}", {
92
+ params: {
93
+ path: { needleId },
94
+ },
95
+ })
96
+ );
97
+ return response;
98
+ }
99
+
100
+ /**
101
+ * Update a gauge needle's description. Position and color are immutable.
102
+ * @param needleId - The needle ID
103
+ * @param req - Gauge_needle update parameters
104
+ * @returns The gauge_needle
105
+ * @throws {BasecampError} If the resource is not found or fields are invalid
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * const result = await client.gauges.updateGaugeNeedle(123, { });
110
+ * ```
111
+ */
112
+ async updateGaugeNeedle(needleId: number, req: UpdateGaugeNeedleGaugeRequest): Promise<components["schemas"]["UpdateGaugeNeedleResponseContent"]> {
113
+ const response = await this.request(
114
+ {
115
+ service: "Gauges",
116
+ operation: "UpdateGaugeNeedle",
117
+ resourceType: "gauge_needle",
118
+ isMutation: true,
119
+ resourceId: needleId,
120
+ },
121
+ () =>
122
+ this.client.PUT("/gauge_needles/{needleId}", {
123
+ params: {
124
+ path: { needleId },
125
+ },
126
+ body: {
127
+ gauge_needle: req.gaugeNeedle,
128
+ },
129
+ })
130
+ );
131
+ return response;
132
+ }
133
+
134
+ /**
135
+ * Destroy a gauge needle
136
+ * @param needleId - The needle ID
137
+ * @returns void
138
+ * @throws {BasecampError} If the request fails
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * await client.gauges.destroyGaugeNeedle(123);
143
+ * ```
144
+ */
145
+ async destroyGaugeNeedle(needleId: number): Promise<void> {
146
+ await this.request(
147
+ {
148
+ service: "Gauges",
149
+ operation: "DestroyGaugeNeedle",
150
+ resourceType: "resource",
151
+ isMutation: true,
152
+ resourceId: needleId,
153
+ },
154
+ () =>
155
+ this.client.DELETE("/gauge_needles/{needleId}", {
156
+ params: {
157
+ path: { needleId },
158
+ },
159
+ })
160
+ );
161
+ }
162
+
163
+ /**
164
+ * Enable or disable the gauge for a project. Only project admins can toggle gauges.
165
+ * @param projectId - The project ID
166
+ * @param req - Resource request parameters
167
+ * @returns void
168
+ * @throws {BasecampError} If the request fails
169
+ *
170
+ * @example
171
+ * ```ts
172
+ * await client.gauges.toggleGauge(123, { gauge: "example" });
173
+ * ```
174
+ */
175
+ async toggleGauge(projectId: number, req: ToggleGaugeGaugeRequest): Promise<void> {
176
+ if (!req.gauge) {
177
+ throw Errors.validation("Gauge is required");
178
+ }
179
+ await this.request(
180
+ {
181
+ service: "Gauges",
182
+ operation: "ToggleGauge",
183
+ resourceType: "resource",
184
+ isMutation: true,
185
+ projectId,
186
+ },
187
+ () =>
188
+ this.client.PUT("/projects/{projectId}/gauge.json", {
189
+ params: {
190
+ path: { projectId },
191
+ },
192
+ body: {
193
+ gauge: req.gauge,
194
+ },
195
+ })
196
+ );
197
+ }
198
+
199
+ /**
200
+ * List gauge needles for a project, ordered newest first.
201
+ * @param projectId - The project ID
202
+ * @param options - Optional query parameters
203
+ * @returns All results across all pages, with .meta.totalCount
204
+ *
205
+ * @example
206
+ * ```ts
207
+ * const result = await client.gauges.listGaugeNeedles(123);
208
+ * ```
209
+ */
210
+ async listGaugeNeedles(projectId: number, options?: ListGaugeNeedlesGaugeOptions): Promise<components["schemas"]["ListGaugeNeedlesResponseContent"]> {
211
+ return this.requestPaginated(
212
+ {
213
+ service: "Gauges",
214
+ operation: "ListGaugeNeedles",
215
+ resourceType: "gauge_needle",
216
+ isMutation: false,
217
+ projectId,
218
+ },
219
+ () =>
220
+ this.client.GET("/projects/{projectId}/gauge/needles.json", {
221
+ params: {
222
+ path: { projectId },
223
+ },
224
+ })
225
+ , options
226
+ );
227
+ }
228
+
229
+ /**
230
+ * Create a gauge needle (progress update) for a project
231
+ * @param projectId - The project ID
232
+ * @param req - Gauge_needle creation parameters
233
+ * @returns The gauge_needle
234
+ * @throws {BasecampError} If required fields are missing or invalid
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * const result = await client.gauges.createGaugeNeedle(123, { gaugeNeedle: "example" });
239
+ * ```
240
+ */
241
+ async createGaugeNeedle(projectId: number, req: CreateGaugeNeedleGaugeRequest): Promise<components["schemas"]["CreateGaugeNeedleResponseContent"]> {
242
+ if (!req.gaugeNeedle) {
243
+ throw Errors.validation("Gauge needle is required");
244
+ }
245
+ const response = await this.request(
246
+ {
247
+ service: "Gauges",
248
+ operation: "CreateGaugeNeedle",
249
+ resourceType: "gauge_needle",
250
+ isMutation: true,
251
+ projectId,
252
+ },
253
+ () =>
254
+ this.client.POST("/projects/{projectId}/gauge/needles.json", {
255
+ params: {
256
+ path: { projectId },
257
+ },
258
+ body: {
259
+ gauge_needle: req.gaugeNeedle,
260
+ notify: req.notify,
261
+ subscriptions: req.subscriptions,
262
+ },
263
+ })
264
+ );
265
+ return response;
266
+ }
267
+
268
+ /**
269
+ * List gauges across all projects the authenticated user has access to.
270
+ * @param options - Optional query parameters
271
+ * @returns All results across all pages, with .meta.totalCount
272
+ *
273
+ * @example
274
+ * ```ts
275
+ * const result = await client.gauges.listGauges();
276
+ *
277
+ * // With options
278
+ * const filtered = await client.gauges.listGauges({ bucketIds: "example" });
279
+ * ```
280
+ */
281
+ async listGauges(options?: ListGaugesGaugeOptions): Promise<components["schemas"]["ListGaugesResponseContent"]> {
282
+ return this.requestPaginated(
283
+ {
284
+ service: "Gauges",
285
+ operation: "ListGauges",
286
+ resourceType: "gauge",
287
+ isMutation: false,
288
+ },
289
+ () =>
290
+ this.client.GET("/reports/gauges.json", {
291
+ params: {
292
+ query: { "bucket_ids": options?.bucketIds },
293
+ },
294
+ })
295
+ , options
296
+ );
297
+ }
298
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * HillCharts service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+
7
+ import { BaseService } from "../../services/base.js";
8
+ import type { components } from "../schema.js";
9
+
10
+ // =============================================================================
11
+ // Types
12
+ // =============================================================================
13
+
14
+
15
+ /**
16
+ * Request parameters for updateSettings.
17
+ */
18
+ export interface UpdateSettingsHillChartRequest {
19
+ /** Tracked */
20
+ tracked?: number[];
21
+ /** Untracked */
22
+ untracked?: number[];
23
+ }
24
+
25
+
26
+ // =============================================================================
27
+ // Service
28
+ // =============================================================================
29
+
30
+ /**
31
+ * Service for HillCharts operations.
32
+ */
33
+ export class HillChartsService extends BaseService {
34
+
35
+ /**
36
+ * Get the hill chart for a todoset
37
+ * @param todosetId - The todoset ID
38
+ * @returns The hill_chart
39
+ * @throws {BasecampError} If the resource is not found
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const result = await client.hillCharts.get(123);
44
+ * ```
45
+ */
46
+ async get(todosetId: number): Promise<components["schemas"]["GetHillChartResponseContent"]> {
47
+ const response = await this.request(
48
+ {
49
+ service: "HillCharts",
50
+ operation: "GetHillChart",
51
+ resourceType: "hill_chart",
52
+ isMutation: false,
53
+ resourceId: todosetId,
54
+ },
55
+ () =>
56
+ this.client.GET("/todosets/{todosetId}/hill.json", {
57
+ params: {
58
+ path: { todosetId },
59
+ },
60
+ })
61
+ );
62
+ return response;
63
+ }
64
+
65
+ /**
66
+ * Track or untrack todolists on a hill chart
67
+ * @param todosetId - The todoset ID
68
+ * @param req - Hill_chart update parameters
69
+ * @returns The hill_chart
70
+ * @throws {BasecampError} If the resource is not found or fields are invalid
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * const result = await client.hillCharts.updateSettings(123, { });
75
+ * ```
76
+ */
77
+ async updateSettings(todosetId: number, req: UpdateSettingsHillChartRequest): Promise<components["schemas"]["UpdateHillChartSettingsResponseContent"]> {
78
+ const response = await this.request(
79
+ {
80
+ service: "HillCharts",
81
+ operation: "UpdateHillChartSettings",
82
+ resourceType: "hill_chart",
83
+ isMutation: true,
84
+ resourceId: todosetId,
85
+ },
86
+ () =>
87
+ this.client.PUT("/todosets/{todosetId}/hills/settings.json", {
88
+ params: {
89
+ path: { todosetId },
90
+ },
91
+ body: {
92
+ tracked: req.tracked,
93
+ untracked: req.untracked,
94
+ },
95
+ })
96
+ );
97
+ return response;
98
+ }
99
+ }
@@ -1,3 +1,4 @@
1
+ export { AccountService } from "./account.js";
1
2
  export { AttachmentsService } from "./attachments.js";
2
3
  export { BoostsService } from "./boosts.js";
3
4
  export { WebhooksService } from "./webhooks.js";
@@ -14,11 +15,15 @@ export { ClientRepliesService } from "./client-replies.js";
14
15
  export { CommentsService } from "./comments.js";
15
16
  export { ToolsService } from "./tools.js";
16
17
  export { DocumentsService } from "./documents.js";
18
+ export { GaugesService } from "./gauges.js";
17
19
  export { ForwardsService } from "./forwards.js";
20
+ export { AutomationService } from "./automation.js";
18
21
  export { LineupService } from "./lineup.js";
19
22
  export { MessageBoardsService } from "./message-boards.js";
20
23
  export { MessagesService } from "./messages.js";
24
+ export { MyAssignmentsService } from "./my-assignments.js";
21
25
  export { CheckinsService } from "./checkins.js";
26
+ export { MyNotificationsService } from "./my-notifications.js";
22
27
  export { ProjectsService } from "./projects.js";
23
28
  export { RecordingsService } from "./recordings.js";
24
29
  export { TimelineService } from "./timeline.js";
@@ -34,5 +39,6 @@ export { TodolistGroupsService } from "./todolist-groups.js";
34
39
  export { TodolistsService } from "./todolists.js";
35
40
  export { TodosService } from "./todos.js";
36
41
  export { TodosetsService } from "./todosets.js";
42
+ export { HillChartsService } from "./hill-charts.js";
37
43
  export { UploadsService } from "./uploads.js";
38
44
  export { VaultsService } from "./vaults.js";
@@ -0,0 +1,109 @@
1
+ /**
2
+ * MyAssignments service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+
7
+ import { BaseService } from "../../services/base.js";
8
+ import type { components } from "../schema.js";
9
+
10
+ // =============================================================================
11
+ // Types
12
+ // =============================================================================
13
+
14
+
15
+ /**
16
+ * Options for myDueAssignments.
17
+ */
18
+ export interface MyDueAssignmentsMyAssignmentOptions {
19
+ /** Filter by due date range: overdue, due_today, due_tomorrow,
20
+ due_later_this_week, due_next_week, due_later */
21
+ scope?: string;
22
+ }
23
+
24
+
25
+ // =============================================================================
26
+ // Service
27
+ // =============================================================================
28
+
29
+ /**
30
+ * Service for MyAssignments operations.
31
+ */
32
+ export class MyAssignmentsService extends BaseService {
33
+
34
+ /**
35
+ * Get the current user's active assignments grouped into priorities and non_priorities.
36
+ * @returns The my_assignment
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const result = await client.myAssignments.myAssignments();
41
+ * ```
42
+ */
43
+ async myAssignments(): Promise<components["schemas"]["GetMyAssignmentsResponseContent"]> {
44
+ const response = await this.request(
45
+ {
46
+ service: "MyAssignments",
47
+ operation: "GetMyAssignments",
48
+ resourceType: "my_assignment",
49
+ isMutation: false,
50
+ },
51
+ () =>
52
+ this.client.GET("/my/assignments.json", {
53
+ })
54
+ );
55
+ return response;
56
+ }
57
+
58
+ /**
59
+ * Get the current user's completed assignments.
60
+ * @returns Array of results
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const result = await client.myAssignments.myCompletedAssignments();
65
+ * ```
66
+ */
67
+ async myCompletedAssignments(): Promise<components["schemas"]["GetMyCompletedAssignmentsResponseContent"]> {
68
+ const response = await this.request(
69
+ {
70
+ service: "MyAssignments",
71
+ operation: "GetMyCompletedAssignments",
72
+ resourceType: "my_completed_assignment",
73
+ isMutation: false,
74
+ },
75
+ () =>
76
+ this.client.GET("/my/assignments/completed.json", {
77
+ })
78
+ );
79
+ return response ?? [];
80
+ }
81
+
82
+ /**
83
+ * Get the current user's assignments filtered by due date scope.
84
+ * @param options - Optional query parameters
85
+ * @returns Array of results
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const result = await client.myAssignments.myDueAssignments();
90
+ * ```
91
+ */
92
+ async myDueAssignments(options?: MyDueAssignmentsMyAssignmentOptions): Promise<components["schemas"]["GetMyDueAssignmentsResponseContent"]> {
93
+ const response = await this.request(
94
+ {
95
+ service: "MyAssignments",
96
+ operation: "GetMyDueAssignments",
97
+ resourceType: "my_due_assignment",
98
+ isMutation: false,
99
+ },
100
+ () =>
101
+ this.client.GET("/my/assignments/due.json", {
102
+ params: {
103
+ query: { scope: options?.scope },
104
+ },
105
+ })
106
+ );
107
+ return response ?? [];
108
+ }
109
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * MyNotifications service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+
7
+ import { BaseService } from "../../services/base.js";
8
+ import type { components } from "../schema.js";
9
+ import { Errors } from "../../errors.js";
10
+
11
+ // =============================================================================
12
+ // Types
13
+ // =============================================================================
14
+
15
+
16
+ /**
17
+ * Options for myNotifications.
18
+ */
19
+ export interface MyNotificationsMyNotificationOptions {
20
+ /** Page number for paginating through read items. Defaults to 1. */
21
+ page?: number;
22
+ }
23
+
24
+ /**
25
+ * Request parameters for markAsRead.
26
+ */
27
+ export interface MarkAsReadMyNotificationRequest {
28
+ /** Array of readable_sgid values identifying the items to mark as read */
29
+ readables: string[];
30
+ }
31
+
32
+
33
+ // =============================================================================
34
+ // Service
35
+ // =============================================================================
36
+
37
+ /**
38
+ * Service for MyNotifications operations.
39
+ */
40
+ export class MyNotificationsService extends BaseService {
41
+
42
+ /**
43
+ * Get the current user's notification inbox (the "Hey!" menu).
44
+ * @param options - Optional query parameters
45
+ * @returns The my_notification
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const result = await client.myNotifications.myNotifications();
50
+ * ```
51
+ */
52
+ async myNotifications(options?: MyNotificationsMyNotificationOptions): Promise<components["schemas"]["GetMyNotificationsResponseContent"]> {
53
+ const response = await this.request(
54
+ {
55
+ service: "MyNotifications",
56
+ operation: "GetMyNotifications",
57
+ resourceType: "my_notification",
58
+ isMutation: false,
59
+ },
60
+ () =>
61
+ this.client.GET("/my/readings.json", {
62
+ params: {
63
+ query: { page: options?.page },
64
+ },
65
+ })
66
+ );
67
+ return response;
68
+ }
69
+
70
+ /**
71
+ * Mark specified items as read
72
+ * @param req - Resource request parameters
73
+ * @returns void
74
+ * @throws {BasecampError} If the request fails
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * await client.myNotifications.markAsRead({ readables: [1234] });
79
+ * ```
80
+ */
81
+ async markAsRead(req: MarkAsReadMyNotificationRequest): Promise<void> {
82
+ if (!req.readables) {
83
+ throw Errors.validation("Readables is required");
84
+ }
85
+ await this.request(
86
+ {
87
+ service: "MyNotifications",
88
+ operation: "MarkAsRead",
89
+ resourceType: "resource",
90
+ isMutation: true,
91
+ },
92
+ () =>
93
+ this.client.PUT("/my/unreads.json", {
94
+ body: {
95
+ readables: req.readables,
96
+ },
97
+ })
98
+ );
99
+ }
100
+ }