@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,144 @@
1
+ /**
2
+ * Account 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
+ * Request parameters for updateAccountName.
18
+ */
19
+ export interface UpdateAccountNameAccountRequest {
20
+ /** Display name */
21
+ name: string;
22
+ }
23
+
24
+
25
+ // =============================================================================
26
+ // Service
27
+ // =============================================================================
28
+
29
+ /**
30
+ * Service for Account operations.
31
+ */
32
+ export class AccountService extends BaseService {
33
+
34
+ /**
35
+ * Get the account for the current access token
36
+ * @returns The account
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const result = await client.account.account();
41
+ * ```
42
+ */
43
+ async account(): Promise<components["schemas"]["GetAccountResponseContent"]> {
44
+ const response = await this.request(
45
+ {
46
+ service: "Account",
47
+ operation: "GetAccount",
48
+ resourceType: "account",
49
+ isMutation: false,
50
+ },
51
+ () =>
52
+ this.client.GET("/account.json", {
53
+ })
54
+ );
55
+ return response;
56
+ }
57
+
58
+ /**
59
+ * Upload or replace the account logo.
60
+ * @param file - File or Blob to upload
61
+ * @param filename - Display name for the uploaded file
62
+ * @returns void
63
+ * @throws {BasecampError} If the resource is not found or fields are invalid
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * await client.account.updateAccountLogo();
68
+ * ```
69
+ */
70
+ async updateAccountLogo(file: Blob | File, filename?: string): Promise<void> {
71
+ const url = `${this.baseUrl}` +
72
+ `/account/logo.json`;
73
+ return this.requestMultipartUpload(
74
+ {
75
+ service: "Account",
76
+ operation: "UpdateAccountLogo",
77
+ resourceType: "account_logo",
78
+ isMutation: true,
79
+ },
80
+ url,
81
+ "PUT",
82
+ file,
83
+ "logo",
84
+ filename,
85
+ );
86
+ }
87
+
88
+
89
+ /**
90
+ * Remove the account logo. Only administrators and account owners can use this endpoint.
91
+ * @returns void
92
+ * @throws {BasecampError} If the request fails
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * await client.account.removeAccountLogo();
97
+ * ```
98
+ */
99
+ async removeAccountLogo(): Promise<void> {
100
+ await this.request(
101
+ {
102
+ service: "Account",
103
+ operation: "RemoveAccountLogo",
104
+ resourceType: "resource",
105
+ isMutation: true,
106
+ },
107
+ () =>
108
+ this.client.DELETE("/account/logo.json", {
109
+ })
110
+ );
111
+ }
112
+
113
+ /**
114
+ * Rename the current account. Only account owners can use this endpoint.
115
+ * @param req - Account_name update parameters
116
+ * @returns The account_name
117
+ * @throws {BasecampError} If the resource is not found or fields are invalid
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const result = await client.account.updateAccountName({ name: "My example" });
122
+ * ```
123
+ */
124
+ async updateAccountName(req: UpdateAccountNameAccountRequest): Promise<components["schemas"]["UpdateAccountNameResponseContent"]> {
125
+ if (!req.name) {
126
+ throw Errors.validation("Name is required");
127
+ }
128
+ const response = await this.request(
129
+ {
130
+ service: "Account",
131
+ operation: "UpdateAccountName",
132
+ resourceType: "account_name",
133
+ isMutation: true,
134
+ },
135
+ () =>
136
+ this.client.PUT("/account/name.json", {
137
+ body: {
138
+ name: req.name,
139
+ },
140
+ })
141
+ );
142
+ return response;
143
+ }
144
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Automation 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
+ /** LineupMarker entity from the Basecamp API. */
15
+ export type LineupMarker = components["schemas"]["LineupMarker"];
16
+
17
+ // =============================================================================
18
+ // Service
19
+ // =============================================================================
20
+
21
+ /**
22
+ * Service for Automation operations.
23
+ */
24
+ export class AutomationService extends BaseService {
25
+
26
+ /**
27
+ * List all lineup markers for the account
28
+ * @returns Array of LineupMarker
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const result = await client.automation.listLineupMarkers();
33
+ * ```
34
+ */
35
+ async listLineupMarkers(): Promise<LineupMarker[]> {
36
+ const response = await this.request(
37
+ {
38
+ service: "Automation",
39
+ operation: "ListLineupMarkers",
40
+ resourceType: "lineup_marker",
41
+ isMutation: false,
42
+ },
43
+ () =>
44
+ this.client.GET("/lineup/markers.json", {
45
+ })
46
+ );
47
+ return response ?? [];
48
+ }
49
+ }
@@ -198,7 +198,7 @@ export class BoostsService extends BaseService {
198
198
  operation: "ListEventBoosts",
199
199
  resourceType: "event_boost",
200
200
  isMutation: false,
201
- resourceId: recordingId,
201
+ resourceId: eventId,
202
202
  },
203
203
  () =>
204
204
  this.client.GET("/recordings/{recordingId}/events/{eventId}/boosts.json", {
@@ -233,7 +233,7 @@ export class BoostsService extends BaseService {
233
233
  operation: "CreateEventBoost",
234
234
  resourceType: "event_boost",
235
235
  isMutation: true,
236
- resourceId: recordingId,
236
+ resourceId: eventId,
237
237
  },
238
238
  () =>
239
239
  this.client.POST("/recordings/{recordingId}/events/{eventId}/boosts.json", {
@@ -57,6 +57,10 @@ export interface UpdateChatbotCampfireRequest {
57
57
  * Options for listLines.
58
58
  */
59
59
  export interface ListLinesCampfireOptions extends PaginationOptions {
60
+ /** Filter by sort */
61
+ sort?: "created_at" | "updated_at";
62
+ /** Filter by direction */
63
+ direction?: "asc" | "desc";
60
64
  }
61
65
 
62
66
  /**
@@ -73,6 +77,10 @@ export interface CreateLineCampfireRequest {
73
77
  * Options for listUploads.
74
78
  */
75
79
  export interface ListUploadsCampfireOptions extends PaginationOptions {
80
+ /** Filter by sort */
81
+ sort?: "created_at" | "updated_at";
82
+ /** Filter by direction */
83
+ direction?: "asc" | "desc";
76
84
  }
77
85
 
78
86
 
@@ -227,7 +235,7 @@ export class CampfiresService extends BaseService {
227
235
  operation: "GetChatbot",
228
236
  resourceType: "chatbot",
229
237
  isMutation: false,
230
- resourceId: campfireId,
238
+ resourceId: chatbotId,
231
239
  },
232
240
  () =>
233
241
  this.client.GET("/chats/{campfireId}/integrations/{chatbotId}", {
@@ -262,7 +270,7 @@ export class CampfiresService extends BaseService {
262
270
  operation: "UpdateChatbot",
263
271
  resourceType: "chatbot",
264
272
  isMutation: true,
265
- resourceId: campfireId,
273
+ resourceId: chatbotId,
266
274
  },
267
275
  () =>
268
276
  this.client.PUT("/chats/{campfireId}/integrations/{chatbotId}", {
@@ -297,7 +305,7 @@ export class CampfiresService extends BaseService {
297
305
  operation: "DeleteChatbot",
298
306
  resourceType: "chatbot",
299
307
  isMutation: true,
300
- resourceId: campfireId,
308
+ resourceId: chatbotId,
301
309
  },
302
310
  () =>
303
311
  this.client.DELETE("/chats/{campfireId}/integrations/{chatbotId}", {
@@ -317,6 +325,9 @@ export class CampfiresService extends BaseService {
317
325
  * @example
318
326
  * ```ts
319
327
  * const result = await client.campfires.listLines(123);
328
+ *
329
+ * // With options
330
+ * const filtered = await client.campfires.listLines(123, { sort: "created_at" });
320
331
  * ```
321
332
  */
322
333
  async listLines(campfireId: number, options?: ListLinesCampfireOptions): Promise<ListResult<CampfireLine>> {
@@ -332,6 +343,7 @@ export class CampfiresService extends BaseService {
332
343
  this.client.GET("/chats/{campfireId}/lines.json", {
333
344
  params: {
334
345
  path: { campfireId },
346
+ query: { sort: options?.sort, direction: options?.direction },
335
347
  },
336
348
  })
337
349
  , options
@@ -395,7 +407,7 @@ export class CampfiresService extends BaseService {
395
407
  operation: "GetCampfireLine",
396
408
  resourceType: "campfire_line",
397
409
  isMutation: false,
398
- resourceId: campfireId,
410
+ resourceId: lineId,
399
411
  },
400
412
  () =>
401
413
  this.client.GET("/chats/{campfireId}/lines/{lineId}", {
@@ -426,7 +438,7 @@ export class CampfiresService extends BaseService {
426
438
  operation: "DeleteCampfireLine",
427
439
  resourceType: "campfire_line",
428
440
  isMutation: true,
429
- resourceId: campfireId,
441
+ resourceId: lineId,
430
442
  },
431
443
  () =>
432
444
  this.client.DELETE("/chats/{campfireId}/lines/{lineId}", {
@@ -446,6 +458,9 @@ export class CampfiresService extends BaseService {
446
458
  * @example
447
459
  * ```ts
448
460
  * const result = await client.campfires.listUploads(123);
461
+ *
462
+ * // With options
463
+ * const filtered = await client.campfires.listUploads(123, { sort: "created_at" });
449
464
  * ```
450
465
  */
451
466
  async listUploads(campfireId: number, options?: ListUploadsCampfireOptions): Promise<ListResult<CampfireLine>> {
@@ -461,6 +476,7 @@ export class CampfiresService extends BaseService {
461
476
  this.client.GET("/chats/{campfireId}/uploads.json", {
462
477
  params: {
463
478
  path: { campfireId },
479
+ query: { sort: options?.sort, direction: options?.direction },
464
480
  },
465
481
  })
466
482
  , options
@@ -143,6 +143,36 @@ export class CardStepsService extends BaseService {
143
143
  return response;
144
144
  }
145
145
 
146
+ /**
147
+ * Get a step by ID
148
+ * @param stepId - The step ID
149
+ * @returns The CardStep
150
+ * @throws {BasecampError} If the resource is not found
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * const result = await client.cardSteps.get(123);
155
+ * ```
156
+ */
157
+ async get(stepId: number): Promise<CardStep> {
158
+ const response = await this.request(
159
+ {
160
+ service: "CardSteps",
161
+ operation: "GetCardStep",
162
+ resourceType: "card_step",
163
+ isMutation: false,
164
+ resourceId: stepId,
165
+ },
166
+ () =>
167
+ this.client.GET("/card_tables/steps/{stepId}", {
168
+ params: {
169
+ path: { stepId },
170
+ },
171
+ })
172
+ );
173
+ return response;
174
+ }
175
+
146
176
  /**
147
177
  * Update an existing step
148
178
  * @param stepId - The step ID
@@ -37,6 +37,8 @@ export interface UpdateCardRequest {
37
37
  export interface MoveCardRequest {
38
38
  /** Column id */
39
39
  columnId: number;
40
+ /** 1-indexed position within the destination column. Defaults to 1 (top). */
41
+ position?: number;
40
42
  }
41
43
 
42
44
  /**
@@ -167,6 +169,7 @@ export class CardsService extends BaseService {
167
169
  },
168
170
  body: {
169
171
  column_id: req.columnId,
172
+ position: req.position,
170
173
  },
171
174
  })
172
175
  );
@@ -491,7 +491,7 @@ export class CheckinsService extends BaseService {
491
491
  operation: "GetAnswersByPerson",
492
492
  resourceType: "answers_by_person",
493
493
  isMutation: false,
494
- resourceId: questionId,
494
+ resourceId: personId,
495
495
  },
496
496
  () =>
497
497
  this.client.GET("/questions/{questionId}/answers/by/{personId}", {
@@ -20,6 +20,10 @@ export type ClientApproval = components["schemas"]["ClientApproval"];
20
20
  * Options for list.
21
21
  */
22
22
  export interface ListClientApprovalOptions extends PaginationOptions {
23
+ /** Filter by sort */
24
+ sort?: "created_at" | "updated_at";
25
+ /** Filter by direction */
26
+ direction?: "asc" | "desc";
23
27
  }
24
28
 
25
29
 
@@ -40,6 +44,9 @@ export class ClientApprovalsService extends BaseService {
40
44
  * @example
41
45
  * ```ts
42
46
  * const result = await client.clientApprovals.list();
47
+ *
48
+ * // With options
49
+ * const filtered = await client.clientApprovals.list({ sort: "created_at" });
43
50
  * ```
44
51
  */
45
52
  async list(options?: ListClientApprovalOptions): Promise<ListResult<ClientApproval>> {
@@ -52,6 +59,9 @@ export class ClientApprovalsService extends BaseService {
52
59
  },
53
60
  () =>
54
61
  this.client.GET("/client/approvals.json", {
62
+ params: {
63
+ query: { sort: options?.sort, direction: options?.direction },
64
+ },
55
65
  })
56
66
  , options
57
67
  );
@@ -20,6 +20,10 @@ export type ClientCorrespondence = components["schemas"]["ClientCorrespondence"]
20
20
  * Options for list.
21
21
  */
22
22
  export interface ListClientCorrespondenceOptions extends PaginationOptions {
23
+ /** Filter by sort */
24
+ sort?: "created_at" | "updated_at";
25
+ /** Filter by direction */
26
+ direction?: "asc" | "desc";
23
27
  }
24
28
 
25
29
 
@@ -40,6 +44,9 @@ export class ClientCorrespondencesService extends BaseService {
40
44
  * @example
41
45
  * ```ts
42
46
  * const result = await client.clientCorrespondences.list();
47
+ *
48
+ * // With options
49
+ * const filtered = await client.clientCorrespondences.list({ sort: "created_at" });
43
50
  * ```
44
51
  */
45
52
  async list(options?: ListClientCorrespondenceOptions): Promise<ListResult<ClientCorrespondence>> {
@@ -52,6 +59,9 @@ export class ClientCorrespondencesService extends BaseService {
52
59
  },
53
60
  () =>
54
61
  this.client.GET("/client/correspondences.json", {
62
+ params: {
63
+ query: { sort: options?.sort, direction: options?.direction },
64
+ },
55
65
  })
56
66
  , options
57
67
  );
@@ -81,7 +81,7 @@ export class ClientRepliesService extends BaseService {
81
81
  operation: "GetClientReply",
82
82
  resourceType: "client_reply",
83
83
  isMutation: false,
84
- resourceId: recordingId,
84
+ resourceId: replyId,
85
85
  },
86
86
  () =>
87
87
  this.client.GET("/client/recordings/{recordingId}/replies/{replyId}", {
@@ -39,6 +39,10 @@ export interface CreateReplyForwardRequest {
39
39
  * Options for list.
40
40
  */
41
41
  export interface ListForwardOptions extends PaginationOptions {
42
+ /** Filter by sort */
43
+ sort?: "created_at" | "updated_at";
44
+ /** Filter by direction */
45
+ direction?: "asc" | "desc";
42
46
  }
43
47
 
44
48
 
@@ -167,7 +171,7 @@ export class ForwardsService extends BaseService {
167
171
  operation: "GetForwardReply",
168
172
  resourceType: "forward_reply",
169
173
  isMutation: false,
170
- resourceId: forwardId,
174
+ resourceId: replyId,
171
175
  },
172
176
  () =>
173
177
  this.client.GET("/inbox_forwards/{forwardId}/replies/{replyId}", {
@@ -218,6 +222,9 @@ export class ForwardsService extends BaseService {
218
222
  * @example
219
223
  * ```ts
220
224
  * const result = await client.forwards.list(123);
225
+ *
226
+ * // With options
227
+ * const filtered = await client.forwards.list(123, { sort: "created_at" });
221
228
  * ```
222
229
  */
223
230
  async list(inboxId: number, options?: ListForwardOptions): Promise<ListResult<Forward>> {
@@ -233,6 +240,7 @@ export class ForwardsService extends BaseService {
233
240
  this.client.GET("/inboxes/{inboxId}/forwards.json", {
234
241
  params: {
235
242
  path: { inboxId },
243
+ query: { sort: options?.sort, direction: options?.direction },
236
244
  },
237
245
  })
238
246
  , options