@37signals/basecamp 0.12.0 → 0.14.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 (294) hide show
  1. package/README.md +114 -17
  2. package/dist/.build-complete +0 -0
  3. package/dist/client.d.ts +53 -11
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +132 -150
  6. package/dist/client.js.map +1 -1
  7. package/dist/download.d.ts +7 -0
  8. package/dist/download.d.ts.map +1 -1
  9. package/dist/download.js +82 -22
  10. package/dist/download.js.map +1 -1
  11. package/dist/errors.d.ts +19 -1
  12. package/dist/errors.d.ts.map +1 -1
  13. package/dist/errors.js +138 -14
  14. package/dist/errors.js.map +1 -1
  15. package/dist/generated/metadata.d.ts.map +1 -1
  16. package/dist/generated/metadata.js +291 -141
  17. package/dist/generated/metadata.js.map +1 -1
  18. package/dist/generated/metadata.ts +291 -141
  19. package/dist/generated/openapi-stripped.json +5954 -3523
  20. package/dist/generated/path-mapping.d.ts.map +1 -1
  21. package/dist/generated/path-mapping.js +28 -16
  22. package/dist/generated/path-mapping.js.map +1 -1
  23. package/dist/generated/path-mapping.ts +28 -16
  24. package/dist/generated/schema.d.ts +4390 -2357
  25. package/dist/generated/services/bookmarks.d.ts +1 -1
  26. package/dist/generated/services/bookmarks.d.ts.map +1 -1
  27. package/dist/generated/services/bookmarks.ts +1 -1
  28. package/dist/generated/services/boosts.d.ts +10 -0
  29. package/dist/generated/services/boosts.d.ts.map +1 -1
  30. package/dist/generated/services/boosts.js +8 -0
  31. package/dist/generated/services/boosts.js.map +1 -1
  32. package/dist/generated/services/boosts.ts +12 -0
  33. package/dist/generated/services/campfires.d.ts +54 -40
  34. package/dist/generated/services/campfires.d.ts.map +1 -1
  35. package/dist/generated/services/campfires.js +82 -65
  36. package/dist/generated/services/campfires.js.map +1 -1
  37. package/dist/generated/services/campfires.ts +107 -85
  38. package/dist/generated/services/cards.d.ts +5 -0
  39. package/dist/generated/services/cards.d.ts.map +1 -1
  40. package/dist/generated/services/cards.js +4 -0
  41. package/dist/generated/services/cards.js.map +1 -1
  42. package/dist/generated/services/cards.ts +6 -0
  43. package/dist/generated/services/checkins.d.ts +14 -0
  44. package/dist/generated/services/checkins.d.ts.map +1 -1
  45. package/dist/generated/services/checkins.js +14 -1
  46. package/dist/generated/services/checkins.js.map +1 -1
  47. package/dist/generated/services/checkins.ts +20 -0
  48. package/dist/generated/services/client-approvals.d.ts +6 -3
  49. package/dist/generated/services/client-approvals.d.ts.map +1 -1
  50. package/dist/generated/services/client-approvals.js +8 -5
  51. package/dist/generated/services/client-approvals.js.map +1 -1
  52. package/dist/generated/services/client-approvals.ts +10 -5
  53. package/dist/generated/services/client-correspondences.d.ts +6 -3
  54. package/dist/generated/services/client-correspondences.d.ts.map +1 -1
  55. package/dist/generated/services/client-correspondences.js +8 -5
  56. package/dist/generated/services/client-correspondences.js.map +1 -1
  57. package/dist/generated/services/client-correspondences.ts +10 -5
  58. package/dist/generated/services/client-replies.d.ts +11 -4
  59. package/dist/generated/services/client-replies.d.ts.map +1 -1
  60. package/dist/generated/services/client-replies.js +16 -8
  61. package/dist/generated/services/client-replies.js.map +1 -1
  62. package/dist/generated/services/client-replies.ts +18 -8
  63. package/dist/generated/services/cloud-files.d.ts +92 -0
  64. package/dist/generated/services/cloud-files.d.ts.map +1 -0
  65. package/dist/generated/services/cloud-files.js +121 -0
  66. package/dist/generated/services/cloud-files.js.map +1 -0
  67. package/dist/generated/services/cloud-files.ts +188 -0
  68. package/dist/generated/services/comments.d.ts +5 -0
  69. package/dist/generated/services/comments.d.ts.map +1 -1
  70. package/dist/generated/services/comments.js +4 -0
  71. package/dist/generated/services/comments.js.map +1 -1
  72. package/dist/generated/services/comments.ts +6 -0
  73. package/dist/generated/services/documents.d.ts +12 -7
  74. package/dist/generated/services/documents.d.ts.map +1 -1
  75. package/dist/generated/services/documents.js +10 -6
  76. package/dist/generated/services/documents.js.map +1 -1
  77. package/dist/generated/services/documents.ts +14 -8
  78. package/dist/generated/services/drafts.d.ts +1 -1
  79. package/dist/generated/services/drafts.d.ts.map +1 -1
  80. package/dist/generated/services/drafts.ts +1 -1
  81. package/dist/generated/services/events.d.ts +5 -0
  82. package/dist/generated/services/events.d.ts.map +1 -1
  83. package/dist/generated/services/events.js +4 -0
  84. package/dist/generated/services/events.js.map +1 -1
  85. package/dist/generated/services/events.ts +6 -0
  86. package/dist/generated/services/everything.d.ts +14 -14
  87. package/dist/generated/services/everything.d.ts.map +1 -1
  88. package/dist/generated/services/everything.ts +14 -14
  89. package/dist/generated/services/folders.d.ts +96 -0
  90. package/dist/generated/services/folders.d.ts.map +1 -0
  91. package/dist/generated/services/folders.js +140 -0
  92. package/dist/generated/services/folders.js.map +1 -0
  93. package/dist/generated/services/folders.ts +201 -0
  94. package/dist/generated/services/forwards.d.ts +7 -20
  95. package/dist/generated/services/forwards.d.ts.map +1 -1
  96. package/dist/generated/services/forwards.js +6 -35
  97. package/dist/generated/services/forwards.js.map +1 -1
  98. package/dist/generated/services/forwards.ts +10 -48
  99. package/dist/generated/services/gauges.d.ts +7 -0
  100. package/dist/generated/services/gauges.d.ts.map +1 -1
  101. package/dist/generated/services/gauges.js +5 -1
  102. package/dist/generated/services/gauges.js.map +1 -1
  103. package/dist/generated/services/gauges.ts +9 -1
  104. package/dist/generated/services/google-documents.d.ts +98 -0
  105. package/dist/generated/services/google-documents.d.ts.map +1 -0
  106. package/dist/generated/services/google-documents.js +123 -0
  107. package/dist/generated/services/google-documents.js.map +1 -0
  108. package/dist/generated/services/google-documents.ts +196 -0
  109. package/dist/generated/services/index.d.ts +7 -4
  110. package/dist/generated/services/index.d.ts.map +1 -1
  111. package/dist/generated/services/index.js +7 -4
  112. package/dist/generated/services/index.js.map +1 -1
  113. package/dist/generated/services/index.ts +7 -4
  114. package/dist/generated/services/messages.d.ts +2 -0
  115. package/dist/generated/services/messages.d.ts.map +1 -1
  116. package/dist/generated/services/messages.js +1 -1
  117. package/dist/generated/services/messages.js.map +1 -1
  118. package/dist/generated/services/messages.ts +3 -1
  119. package/dist/generated/services/my-notes.d.ts +1 -1
  120. package/dist/generated/services/my-notes.js +1 -1
  121. package/dist/generated/services/my-notes.ts +1 -1
  122. package/dist/generated/services/my-notifications.d.ts +4 -2
  123. package/dist/generated/services/my-notifications.d.ts.map +1 -1
  124. package/dist/generated/services/my-notifications.js.map +1 -1
  125. package/dist/generated/services/my-notifications.ts +4 -2
  126. package/dist/generated/services/people.d.ts +11 -1
  127. package/dist/generated/services/people.d.ts.map +1 -1
  128. package/dist/generated/services/people.js +13 -2
  129. package/dist/generated/services/people.js.map +1 -1
  130. package/dist/generated/services/people.ts +15 -1
  131. package/dist/generated/services/projects.d.ts +26 -0
  132. package/dist/generated/services/projects.d.ts.map +1 -1
  133. package/dist/generated/services/projects.js +49 -1
  134. package/dist/generated/services/projects.js.map +1 -1
  135. package/dist/generated/services/projects.ts +61 -1
  136. package/dist/generated/services/recordings.d.ts +2 -12
  137. package/dist/generated/services/recordings.d.ts.map +1 -1
  138. package/dist/generated/services/recordings.js +1 -26
  139. package/dist/generated/services/recordings.js.map +1 -1
  140. package/dist/generated/services/recordings.ts +3 -31
  141. package/dist/generated/services/reports.d.ts +8 -12
  142. package/dist/generated/services/reports.d.ts.map +1 -1
  143. package/dist/generated/services/reports.js +11 -5
  144. package/dist/generated/services/reports.js.map +1 -1
  145. package/dist/generated/services/reports.ts +13 -14
  146. package/dist/generated/services/schedules.d.ts +94 -15
  147. package/dist/generated/services/schedules.d.ts.map +1 -1
  148. package/dist/generated/services/schedules.js +19 -8
  149. package/dist/generated/services/schedules.js.map +1 -1
  150. package/dist/generated/services/schedules.ts +107 -17
  151. package/dist/generated/services/search.d.ts +2 -0
  152. package/dist/generated/services/search.d.ts.map +1 -1
  153. package/dist/generated/services/search.js +1 -1
  154. package/dist/generated/services/search.js.map +1 -1
  155. package/dist/generated/services/search.ts +3 -1
  156. package/dist/generated/services/templates.d.ts +2 -0
  157. package/dist/generated/services/templates.d.ts.map +1 -1
  158. package/dist/generated/services/templates.js +1 -1
  159. package/dist/generated/services/templates.js.map +1 -1
  160. package/dist/generated/services/templates.ts +3 -1
  161. package/dist/generated/services/timeline.d.ts +2 -0
  162. package/dist/generated/services/timeline.d.ts.map +1 -1
  163. package/dist/generated/services/timeline.js +1 -0
  164. package/dist/generated/services/timeline.js.map +1 -1
  165. package/dist/generated/services/timeline.ts +3 -0
  166. package/dist/generated/services/timesheets.d.ts +16 -0
  167. package/dist/generated/services/timesheets.d.ts.map +1 -1
  168. package/dist/generated/services/timesheets.js +26 -2
  169. package/dist/generated/services/timesheets.js.map +1 -1
  170. package/dist/generated/services/timesheets.ts +35 -2
  171. package/dist/generated/services/todolist-groups.d.ts +11 -6
  172. package/dist/generated/services/todolist-groups.d.ts.map +1 -1
  173. package/dist/generated/services/todolist-groups.js +7 -3
  174. package/dist/generated/services/todolist-groups.js.map +1 -1
  175. package/dist/generated/services/todolist-groups.ts +13 -7
  176. package/dist/generated/services/todolists.d.ts +15 -13
  177. package/dist/generated/services/todolists.d.ts.map +1 -1
  178. package/dist/generated/services/todolists.js +11 -8
  179. package/dist/generated/services/todolists.js.map +1 -1
  180. package/dist/generated/services/todolists.ts +19 -14
  181. package/dist/generated/services/todos.d.ts +2 -12
  182. package/dist/generated/services/todos.d.ts.map +1 -1
  183. package/dist/generated/services/todos.js +1 -25
  184. package/dist/generated/services/todos.js.map +1 -1
  185. package/dist/generated/services/todos.ts +3 -30
  186. package/dist/generated/services/uploads.d.ts +41 -2
  187. package/dist/generated/services/uploads.d.ts.map +1 -1
  188. package/dist/generated/services/uploads.js +41 -1
  189. package/dist/generated/services/uploads.js.map +1 -1
  190. package/dist/generated/services/uploads.ts +71 -2
  191. package/dist/generated/services/vaults.d.ts +5 -0
  192. package/dist/generated/services/vaults.d.ts.map +1 -1
  193. package/dist/generated/services/vaults.js +4 -0
  194. package/dist/generated/services/vaults.js.map +1 -1
  195. package/dist/generated/services/vaults.ts +6 -0
  196. package/dist/index.d.ts +16 -10
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +19 -8
  199. package/dist/index.js.map +1 -1
  200. package/dist/oauth/authorization-document.d.ts +201 -0
  201. package/dist/oauth/authorization-document.d.ts.map +1 -0
  202. package/dist/oauth/authorization-document.js +130 -0
  203. package/dist/oauth/authorization-document.js.map +1 -0
  204. package/dist/oauth/identity.d.ts +7 -1
  205. package/dist/oauth/identity.d.ts.map +1 -1
  206. package/dist/oauth/identity.js +8 -19
  207. package/dist/oauth/identity.js.map +1 -1
  208. package/dist/oauth/index.d.ts +1 -0
  209. package/dist/oauth/index.d.ts.map +1 -1
  210. package/dist/oauth/index.js +2 -0
  211. package/dist/oauth/index.js.map +1 -1
  212. package/dist/pagination-utils.d.ts +46 -0
  213. package/dist/pagination-utils.d.ts.map +1 -1
  214. package/dist/pagination-utils.js +85 -2
  215. package/dist/pagination-utils.js.map +1 -1
  216. package/dist/pagination.d.ts +11 -0
  217. package/dist/pagination.d.ts.map +1 -1
  218. package/dist/pagination.js.map +1 -1
  219. package/dist/retry.d.ts +110 -0
  220. package/dist/retry.d.ts.map +1 -0
  221. package/dist/retry.js +253 -0
  222. package/dist/retry.js.map +1 -0
  223. package/dist/services/authorization.d.ts +22 -52
  224. package/dist/services/authorization.d.ts.map +1 -1
  225. package/dist/services/authorization.js +14 -32
  226. package/dist/services/authorization.js.map +1 -1
  227. package/dist/services/base.d.ts.map +1 -1
  228. package/dist/services/base.js +59 -5
  229. package/dist/services/base.js.map +1 -1
  230. package/dist/services/cards-extensions.d.ts +26 -21
  231. package/dist/services/cards-extensions.d.ts.map +1 -1
  232. package/dist/services/cards-extensions.js +28 -31
  233. package/dist/services/cards-extensions.js.map +1 -1
  234. package/dist/services/documents-extensions.d.ts +122 -0
  235. package/dist/services/documents-extensions.d.ts.map +1 -0
  236. package/dist/services/documents-extensions.js +125 -0
  237. package/dist/services/documents-extensions.js.map +1 -0
  238. package/dist/services/merge-safe.d.ts +167 -0
  239. package/dist/services/merge-safe.d.ts.map +1 -0
  240. package/dist/services/merge-safe.js +217 -0
  241. package/dist/services/merge-safe.js.map +1 -0
  242. package/dist/services/schedules-extensions.d.ts +266 -0
  243. package/dist/services/schedules-extensions.d.ts.map +1 -0
  244. package/dist/services/schedules-extensions.js +268 -0
  245. package/dist/services/schedules-extensions.js.map +1 -0
  246. package/dist/services/todolists-extensions.d.ts +110 -0
  247. package/dist/services/todolists-extensions.d.ts.map +1 -0
  248. package/dist/services/todolists-extensions.js +262 -0
  249. package/dist/services/todolists-extensions.js.map +1 -0
  250. package/dist/services/todos-extensions.d.ts +12 -1
  251. package/dist/services/todos-extensions.d.ts.map +1 -1
  252. package/dist/services/todos-extensions.js +27 -8
  253. package/dist/services/todos-extensions.js.map +1 -1
  254. package/package.json +6 -5
  255. package/src/generated/metadata.ts +291 -141
  256. package/src/generated/openapi-stripped.json +5954 -3523
  257. package/src/generated/path-mapping.ts +28 -16
  258. package/src/generated/schema.d.ts +4390 -2357
  259. package/src/generated/services/bookmarks.ts +1 -1
  260. package/src/generated/services/boosts.ts +12 -0
  261. package/src/generated/services/campfires.ts +107 -85
  262. package/src/generated/services/cards.ts +6 -0
  263. package/src/generated/services/checkins.ts +20 -0
  264. package/src/generated/services/client-approvals.ts +10 -5
  265. package/src/generated/services/client-correspondences.ts +10 -5
  266. package/src/generated/services/client-replies.ts +18 -8
  267. package/src/generated/services/cloud-files.ts +188 -0
  268. package/src/generated/services/comments.ts +6 -0
  269. package/src/generated/services/documents.ts +14 -8
  270. package/src/generated/services/drafts.ts +1 -1
  271. package/src/generated/services/events.ts +6 -0
  272. package/src/generated/services/everything.ts +14 -14
  273. package/src/generated/services/folders.ts +201 -0
  274. package/src/generated/services/forwards.ts +10 -48
  275. package/src/generated/services/gauges.ts +9 -1
  276. package/src/generated/services/google-documents.ts +196 -0
  277. package/src/generated/services/index.ts +7 -4
  278. package/src/generated/services/messages.ts +3 -1
  279. package/src/generated/services/my-notes.ts +1 -1
  280. package/src/generated/services/my-notifications.ts +4 -2
  281. package/src/generated/services/people.ts +15 -1
  282. package/src/generated/services/projects.ts +61 -1
  283. package/src/generated/services/recordings.ts +3 -31
  284. package/src/generated/services/reports.ts +13 -14
  285. package/src/generated/services/schedules.ts +107 -17
  286. package/src/generated/services/search.ts +3 -1
  287. package/src/generated/services/templates.ts +3 -1
  288. package/src/generated/services/timeline.ts +3 -0
  289. package/src/generated/services/timesheets.ts +35 -2
  290. package/src/generated/services/todolist-groups.ts +13 -7
  291. package/src/generated/services/todolists.ts +19 -14
  292. package/src/generated/services/todos.ts +3 -30
  293. package/src/generated/services/uploads.ts +71 -2
  294. package/src/generated/services/vaults.ts +6 -0
@@ -18,12 +18,12 @@ import { Errors } from "../../errors.js";
18
18
  export type Todolist = components["schemas"]["Todolist"];
19
19
 
20
20
  /**
21
- * Request parameters for update.
21
+ * Request parameters for replace.
22
22
  */
23
- export interface UpdateTodolistRequest {
24
- /** Name (required for both Todolist and TodolistGroup) */
25
- name?: string;
26
- /** Description (Todolist only, ignored for groups) */
23
+ export interface ReplaceTodolistRequest {
24
+ /** Name (required for a to-do list and for a group alike) - presence-validated server-side, so omitting it is a 422, not a preserve */
25
+ name: string;
26
+ /** Description (rich text HTML) - writable for a todolist group as well as a todolist, and omitting it clears it either way */
27
27
  description?: string;
28
28
  }
29
29
 
@@ -41,6 +41,8 @@ export interface RepositionTodolistRequest {
41
41
  export interface ListTodolistOptions extends PaginationOptions {
42
42
  /** Filter by status */
43
43
  status?: "active" | "archived" | "trashed";
44
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
45
+ page?: number;
44
46
  }
45
47
 
46
48
  /**
@@ -68,7 +70,7 @@ export class TodolistsService extends BaseService {
68
70
  /**
69
71
  * Get a single todolist or todolist group by id
70
72
  * @param id - The id
71
- * @returns The todolist_or_group
73
+ * @returns The Todolist
72
74
  * @throws {BasecampError} If the resource is not found
73
75
  *
74
76
  * @example
@@ -76,7 +78,7 @@ export class TodolistsService extends BaseService {
76
78
  * const result = await client.todolists.get(123);
77
79
  * ```
78
80
  */
79
- async get(id: number): Promise<components["schemas"]["GetTodolistOrGroupResponseContent"]> {
81
+ async get(id: number): Promise<Todolist> {
80
82
  const response = await this.request(
81
83
  {
82
84
  service: "Todolists",
@@ -96,18 +98,21 @@ export class TodolistsService extends BaseService {
96
98
  }
97
99
 
98
100
  /**
99
- * Update an existing todolist or todolist group
101
+ * Replace a todolist (or todolist group) with a new complete representation.
100
102
  * @param id - The id
101
- * @param req - Todolist_or_group update parameters
102
- * @returns The todolist_or_group
103
- * @throws {BasecampError} If the resource is not found or fields are invalid
103
+ * @param req - Todolist_or_group request parameters
104
+ * @returns The Todolist
105
+ * @throws {BasecampError} If the request fails
104
106
  *
105
107
  * @example
106
108
  * ```ts
107
- * const result = await client.todolists.update(123, { });
109
+ * const result = await client.todolists.replace(123, { name: "My example" });
108
110
  * ```
109
111
  */
110
- async update(id: number, req: UpdateTodolistRequest): Promise<components["schemas"]["UpdateTodolistOrGroupResponseContent"]> {
112
+ async replace(id: number, req: ReplaceTodolistRequest): Promise<Todolist> {
113
+ if (!req.name) {
114
+ throw Errors.validation("Name is required");
115
+ }
111
116
  const response = await this.request(
112
117
  {
113
118
  service: "Todolists",
@@ -190,7 +195,7 @@ export class TodolistsService extends BaseService {
190
195
  this.client.GET("/todosets/{todosetId}/todolists.json", {
191
196
  params: {
192
197
  path: { todosetId },
193
- query: { status: options?.status },
198
+ query: { status: options?.status, page: options?.page },
194
199
  },
195
200
  })
196
201
  , options
@@ -45,6 +45,8 @@ export interface ListTodoOptions extends PaginationOptions {
45
45
  status?: "active" | "archived" | "trashed";
46
46
  /** Completed */
47
47
  completed?: boolean;
48
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
49
+ page?: number;
48
50
  }
49
51
 
50
52
  /**
@@ -185,7 +187,7 @@ export class TodosService extends BaseService {
185
187
  this.client.GET("/todolists/{todolistId}/todos.json", {
186
188
  params: {
187
189
  path: { todolistId },
188
- query: { status: options?.status, completed: options?.completed },
190
+ query: { status: options?.status, completed: options?.completed, page: options?.page },
189
191
  },
190
192
  })
191
193
  , options
@@ -320,35 +322,6 @@ export class TodosService extends BaseService {
320
322
  return response;
321
323
  }
322
324
 
323
- /**
324
- * Trash a todo. Trashed items can be recovered.
325
- * @param todoId - The todo ID
326
- * @returns void
327
- * @throws {BasecampError} If the request fails
328
- *
329
- * @example
330
- * ```ts
331
- * await client.todos.trash(123);
332
- * ```
333
- */
334
- async trash(todoId: number): Promise<void> {
335
- await this.request(
336
- {
337
- service: "Todos",
338
- operation: "TrashTodo",
339
- resourceType: "todo",
340
- isMutation: true,
341
- resourceId: todoId,
342
- },
343
- () =>
344
- this.client.DELETE("/todos/{todoId}", {
345
- params: {
346
- path: { todoId },
347
- },
348
- })
349
- );
350
- }
351
-
352
325
  /**
353
326
  * Mark a todo as complete
354
327
  * @param todoId - The todo ID
@@ -16,6 +16,8 @@ import { Errors } from "../../errors.js";
16
16
 
17
17
  /** Upload entity from the Basecamp API. */
18
18
  export type Upload = components["schemas"]["Upload"];
19
+ /** UploadVersion entity from the Basecamp API. */
20
+ export type UploadVersion = components["schemas"]["UploadVersion"];
19
21
 
20
22
  /**
21
23
  * Request parameters for update.
@@ -33,10 +35,32 @@ export interface UpdateUploadRequest {
33
35
  export interface ListVersionsUploadOptions extends PaginationOptions {
34
36
  }
35
37
 
38
+ /**
39
+ * Request parameters for createVersion.
40
+ */
41
+ export interface CreateVersionUploadRequest {
42
+ /** Attachable sgid */
43
+ attachableSgid: string;
44
+ /** Omit to keep the uploaded file's own name. Sending "" also keeps it. */
45
+ baseName?: string;
46
+ /** Presence-aware: omit to carry the previous version's description forward,
47
+ send "" to clear it, send a value to set it. */
48
+ description?: string;
49
+ /** Who to notify: "default", "everyone", or "custom" (the people in subscriptions).
50
+
51
+ Omit both this and subscriptions to notify nobody. A subscriptions array sent
52
+ without notify is read as "custom". */
53
+ notify?: string;
54
+ /** People to notify about the replacement and subscribe to the upload. */
55
+ subscriptions?: number[];
56
+ }
57
+
36
58
  /**
37
59
  * Options for list.
38
60
  */
39
61
  export interface ListUploadOptions extends PaginationOptions {
62
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
63
+ page?: number;
40
64
  }
41
65
 
42
66
  /**
@@ -134,14 +158,14 @@ export class UploadsService extends BaseService {
134
158
  * List versions of an upload
135
159
  * @param uploadId - The upload ID
136
160
  * @param options - Optional query parameters
137
- * @returns All Upload across all pages, with .meta.totalCount
161
+ * @returns All UploadVersion across all pages, with .meta.totalCount
138
162
  *
139
163
  * @example
140
164
  * ```ts
141
165
  * const result = await client.uploads.listVersions(123);
142
166
  * ```
143
167
  */
144
- async listVersions(uploadId: number, options?: ListVersionsUploadOptions): Promise<ListResult<Upload>> {
168
+ async listVersions(uploadId: number, options?: ListVersionsUploadOptions): Promise<ListResult<UploadVersion>> {
145
169
  return this.requestPaginated(
146
170
  {
147
171
  service: "Uploads",
@@ -160,6 +184,47 @@ export class UploadsService extends BaseService {
160
184
  );
161
185
  }
162
186
 
187
+ /**
188
+ * Replace an upload's file with a new version
189
+ * @param uploadId - The upload ID
190
+ * @param req - Upload_version creation parameters
191
+ * @returns The Upload
192
+ * @throws {BasecampError} If required fields are missing or invalid
193
+ *
194
+ * @example
195
+ * ```ts
196
+ * const result = await client.uploads.createVersion(123, { attachableSgid: "example" });
197
+ * ```
198
+ */
199
+ async createVersion(uploadId: number, req: CreateVersionUploadRequest): Promise<Upload> {
200
+ if (!req.attachableSgid) {
201
+ throw Errors.validation("Attachable sgid is required");
202
+ }
203
+ const response = await this.request(
204
+ {
205
+ service: "Uploads",
206
+ operation: "CreateUploadVersion",
207
+ resourceType: "upload_version",
208
+ isMutation: true,
209
+ resourceId: uploadId,
210
+ },
211
+ () =>
212
+ this.client.POST("/uploads/{uploadId}/versions.json", {
213
+ params: {
214
+ path: { uploadId },
215
+ },
216
+ body: {
217
+ attachable_sgid: req.attachableSgid,
218
+ base_name: req.baseName,
219
+ description: req.description,
220
+ notify: req.notify,
221
+ subscriptions: req.subscriptions,
222
+ },
223
+ })
224
+ );
225
+ return response;
226
+ }
227
+
163
228
  /**
164
229
  * List uploads in a vault
165
230
  * @param vaultId - The vault ID
@@ -169,6 +234,9 @@ export class UploadsService extends BaseService {
169
234
  * @example
170
235
  * ```ts
171
236
  * const result = await client.uploads.list(123);
237
+ *
238
+ * // With options
239
+ * const filtered = await client.uploads.list(123, { page: 1 });
172
240
  * ```
173
241
  */
174
242
  async list(vaultId: number, options?: ListUploadOptions): Promise<ListResult<Upload>> {
@@ -184,6 +252,7 @@ export class UploadsService extends BaseService {
184
252
  this.client.GET("/vaults/{vaultId}/uploads.json", {
185
253
  params: {
186
254
  path: { vaultId },
255
+ query: { page: options?.page },
187
256
  },
188
257
  })
189
258
  , options
@@ -29,6 +29,8 @@ export interface UpdateVaultRequest {
29
29
  * Options for list.
30
30
  */
31
31
  export interface ListVaultOptions extends PaginationOptions {
32
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
33
+ page?: number;
32
34
  }
33
35
 
34
36
  /**
@@ -122,6 +124,9 @@ export class VaultsService extends BaseService {
122
124
  * @example
123
125
  * ```ts
124
126
  * const result = await client.vaults.list(123);
127
+ *
128
+ * // With options
129
+ * const filtered = await client.vaults.list(123, { page: 1 });
125
130
  * ```
126
131
  */
127
132
  async list(vaultId: number, options?: ListVaultOptions): Promise<ListResult<Vault>> {
@@ -137,6 +142,7 @@ export class VaultsService extends BaseService {
137
142
  this.client.GET("/vaults/{vaultId}/vaults.json", {
138
143
  params: {
139
144
  path: { vaultId },
145
+ query: { page: options?.page },
140
146
  },
141
147
  })
142
148
  , options