@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
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Folders 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
+ /** Folder entity from the Basecamp API. */
16
+ export type Folder = components["schemas"]["Folder"];
17
+ /** FolderWithProjects entity from the Basecamp API. */
18
+ export type FolderWithProjects = components["schemas"]["FolderWithProjects"];
19
+
20
+ /**
21
+ * Request parameters for createFolder.
22
+ */
23
+ export interface CreateFolderFolderRequest {
24
+ /** The folder's name. Defaults to `New folder` when blank, null, or omitted. */
25
+ name?: string;
26
+ /** IDs of the projects to file into the folder — the same ids the folder
27
+ reports back as `bucket_ids` and expands as `projects`. This does not
28
+ round-trip under its own name. Omit it, or send null or an empty array,
29
+ for an empty folder. */
30
+ projectIds?: number[];
31
+ }
32
+
33
+ /**
34
+ * Request parameters for updateFolder.
35
+ */
36
+ export interface UpdateFolderFolderRequest {
37
+ /** The folder's new name. Blank is rejected with 422 — unlike create, update
38
+ does not fall back to a default name. */
39
+ name: string;
40
+ }
41
+
42
+
43
+ // =============================================================================
44
+ // Service
45
+ // =============================================================================
46
+
47
+ /**
48
+ * Service for Folders operations.
49
+ */
50
+ export class FoldersService extends BaseService {
51
+
52
+ /**
53
+ * List the authenticated user's folders in home-screen order.
54
+ * @returns Array of Folder
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const result = await client.folders.listFolders();
59
+ * ```
60
+ */
61
+ async listFolders(): Promise<Folder[]> {
62
+ const response = await this.request(
63
+ {
64
+ service: "Folders",
65
+ operation: "ListFolders",
66
+ resourceType: "folder",
67
+ isMutation: false,
68
+ },
69
+ () =>
70
+ this.client.GET("/stacks.json", {
71
+ })
72
+ );
73
+ return response ?? [];
74
+ }
75
+
76
+ /**
77
+ * Create a folder for the authenticated user and file the given projects into it.
78
+ * @param req - Folder creation parameters
79
+ * @returns The FolderWithProjects
80
+ * @throws {BasecampError} If required fields are missing or invalid
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * const result = await client.folders.createFolder({ });
85
+ * ```
86
+ */
87
+ async createFolder(req: CreateFolderFolderRequest): Promise<FolderWithProjects> {
88
+ const response = await this.request(
89
+ {
90
+ service: "Folders",
91
+ operation: "CreateFolder",
92
+ resourceType: "folder",
93
+ isMutation: true,
94
+ },
95
+ () =>
96
+ this.client.POST("/stacks.json", {
97
+ body: {
98
+ name: req.name,
99
+ project_ids: req.projectIds,
100
+ },
101
+ })
102
+ );
103
+ return response;
104
+ }
105
+
106
+ /**
107
+ * Get one folder, with the projects grouped inside it expanded under `projects`.
108
+ * @param folderId - The folder ID
109
+ * @returns The FolderWithProjects
110
+ * @throws {BasecampError} If the resource is not found
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * const result = await client.folders.getFolder(123);
115
+ * ```
116
+ */
117
+ async getFolder(folderId: number): Promise<FolderWithProjects> {
118
+ const response = await this.request(
119
+ {
120
+ service: "Folders",
121
+ operation: "GetFolder",
122
+ resourceType: "folder",
123
+ isMutation: false,
124
+ resourceId: folderId,
125
+ },
126
+ () =>
127
+ this.client.GET("/stacks/{folderId}", {
128
+ params: {
129
+ path: { folderId },
130
+ },
131
+ })
132
+ );
133
+ return response;
134
+ }
135
+
136
+ /**
137
+ * Rename a folder.
138
+ * @param folderId - The folder ID
139
+ * @param req - Folder update parameters
140
+ * @returns The FolderWithProjects
141
+ * @throws {BasecampError} If the resource is not found or fields are invalid
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * const result = await client.folders.updateFolder(123, { name: "My example" });
146
+ * ```
147
+ */
148
+ async updateFolder(folderId: number, req: UpdateFolderFolderRequest): Promise<FolderWithProjects> {
149
+ if (!req.name) {
150
+ throw Errors.validation("Name is required");
151
+ }
152
+ const response = await this.request(
153
+ {
154
+ service: "Folders",
155
+ operation: "UpdateFolder",
156
+ resourceType: "folder",
157
+ isMutation: true,
158
+ resourceId: folderId,
159
+ },
160
+ () =>
161
+ this.client.PUT("/stacks/{folderId}", {
162
+ params: {
163
+ path: { folderId },
164
+ },
165
+ body: {
166
+ name: req.name,
167
+ },
168
+ })
169
+ );
170
+ return response;
171
+ }
172
+
173
+ /**
174
+ * Delete a folder and unpin its projects from the home screen.
175
+ * @param folderId - The folder ID
176
+ * @returns void
177
+ * @throws {BasecampError} If the request fails
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * await client.folders.deleteFolder(123);
182
+ * ```
183
+ */
184
+ async deleteFolder(folderId: number): Promise<void> {
185
+ await this.request(
186
+ {
187
+ service: "Folders",
188
+ operation: "DeleteFolder",
189
+ resourceType: "folder",
190
+ isMutation: true,
191
+ resourceId: folderId,
192
+ },
193
+ () =>
194
+ this.client.DELETE("/stacks/{folderId}", {
195
+ params: {
196
+ path: { folderId },
197
+ },
198
+ })
199
+ );
200
+ }
201
+ }
@@ -8,7 +8,6 @@ import { BaseService } from "../../services/base.js";
8
8
  import type { components } from "../schema.js";
9
9
  import { ListResult } from "../../pagination.js";
10
10
  import type { PaginationOptions } from "../../pagination.js";
11
- import { Errors } from "../../errors.js";
12
11
 
13
12
  // =============================================================================
14
13
  // Types
@@ -25,14 +24,8 @@ export type Inbox = components["schemas"]["Inbox"];
25
24
  * Options for listReplies.
26
25
  */
27
26
  export interface ListRepliesForwardOptions extends PaginationOptions {
28
- }
29
-
30
- /**
31
- * Request parameters for createReply.
32
- */
33
- export interface CreateReplyForwardRequest {
34
- /** Text content */
35
- content: string;
27
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
28
+ page?: number;
36
29
  }
37
30
 
38
31
  /**
@@ -43,6 +36,8 @@ export interface ListForwardOptions extends PaginationOptions {
43
36
  sort?: "created_at" | "updated_at";
44
37
  /** Filter by direction */
45
38
  direction?: "asc" | "desc";
39
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
40
+ page?: number;
46
41
  }
47
42
 
48
43
 
@@ -94,6 +89,9 @@ export class ForwardsService extends BaseService {
94
89
  * @example
95
90
  * ```ts
96
91
  * const result = await client.forwards.listReplies(123);
92
+ *
93
+ * // With options
94
+ * const filtered = await client.forwards.listReplies(123, { page: 1 });
97
95
  * ```
98
96
  */
99
97
  async listReplies(forwardId: number, options?: ListRepliesForwardOptions): Promise<ListResult<ForwardReply>> {
@@ -109,49 +107,13 @@ export class ForwardsService extends BaseService {
109
107
  this.client.GET("/inbox_forwards/{forwardId}/replies.json", {
110
108
  params: {
111
109
  path: { forwardId },
110
+ query: { page: options?.page },
112
111
  },
113
112
  })
114
113
  , options
115
114
  );
116
115
  }
117
116
 
118
- /**
119
- * Create a reply to a forward
120
- * @param forwardId - The forward ID
121
- * @param req - Forward_reply creation parameters
122
- * @returns The ForwardReply
123
- * @throws {BasecampError} If required fields are missing or invalid
124
- *
125
- * @example
126
- * ```ts
127
- * const result = await client.forwards.createReply(123, { content: "Hello world" });
128
- * ```
129
- */
130
- async createReply(forwardId: number, req: CreateReplyForwardRequest): Promise<ForwardReply> {
131
- if (!req.content) {
132
- throw Errors.validation("Content is required");
133
- }
134
- const response = await this.request(
135
- {
136
- service: "Forwards",
137
- operation: "CreateForwardReply",
138
- resourceType: "forward_reply",
139
- isMutation: true,
140
- resourceId: forwardId,
141
- },
142
- () =>
143
- this.client.POST("/inbox_forwards/{forwardId}/replies.json", {
144
- params: {
145
- path: { forwardId },
146
- },
147
- body: {
148
- content: req.content,
149
- },
150
- })
151
- );
152
- return response;
153
- }
154
-
155
117
  /**
156
118
  * Get a forward reply by ID
157
119
  * @param forwardId - The forward ID
@@ -237,10 +199,10 @@ export class ForwardsService extends BaseService {
237
199
  resourceId: inboxId,
238
200
  },
239
201
  () =>
240
- this.client.GET("/inboxes/{inboxId}/forwards.json", {
202
+ this.client.GET("/inboxes/{inboxId}/inbox_forwards.json", {
241
203
  params: {
242
204
  path: { inboxId },
243
- query: { sort: options?.sort, direction: options?.direction },
205
+ query: { sort: options?.sort, direction: options?.direction, page: options?.page },
244
206
  },
245
207
  })
246
208
  , options
@@ -35,6 +35,8 @@ export interface ToggleGaugeGaugeRequest {
35
35
  * Options for listGaugeNeedles.
36
36
  */
37
37
  export interface ListGaugeNeedlesGaugeOptions extends PaginationOptions {
38
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
39
+ page?: number;
38
40
  }
39
41
 
40
42
  /**
@@ -56,6 +58,8 @@ export interface ListGaugesGaugeOptions extends PaginationOptions {
56
58
  /** Comma-separated list of project IDs. When provided, results are returned
57
59
  in the order specified instead of by risk level. */
58
60
  bucketIds?: string;
61
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
62
+ page?: number;
59
63
  }
60
64
 
61
65
 
@@ -205,6 +209,9 @@ export class GaugesService extends BaseService {
205
209
  * @example
206
210
  * ```ts
207
211
  * const result = await client.gauges.listGaugeNeedles(123);
212
+ *
213
+ * // With options
214
+ * const filtered = await client.gauges.listGaugeNeedles(123, { page: 1 });
208
215
  * ```
209
216
  */
210
217
  async listGaugeNeedles(projectId: number, options?: ListGaugeNeedlesGaugeOptions): Promise<components["schemas"]["ListGaugeNeedlesResponseContent"]> {
@@ -220,6 +227,7 @@ export class GaugesService extends BaseService {
220
227
  this.client.GET("/projects/{projectId}/gauge/needles.json", {
221
228
  params: {
222
229
  path: { projectId },
230
+ query: { page: options?.page },
223
231
  },
224
232
  })
225
233
  , options
@@ -289,7 +297,7 @@ export class GaugesService extends BaseService {
289
297
  () =>
290
298
  this.client.GET("/reports/gauges.json", {
291
299
  params: {
292
- query: { "bucket_ids": options?.bucketIds },
300
+ query: { "bucket_ids": options?.bucketIds, page: options?.page },
293
301
  },
294
302
  })
295
303
  , options
@@ -0,0 +1,196 @@
1
+ /**
2
+ * GoogleDocuments 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
+ /** GoogleDocument entity from the Basecamp API. */
16
+ export type GoogleDocument = components["schemas"]["GoogleDocument"];
17
+
18
+ /**
19
+ * Request parameters for createGoogleDocument.
20
+ */
21
+ export interface CreateGoogleDocumentGoogleDocumentRequest {
22
+ /** Url */
23
+ url: string;
24
+ /** One of "doc", "sheet", "slide", "other". Backed by a Rails enum, so an
25
+ unrecognized value is rejected up front with a field-keyed 422
26
+ ({"errors": {"document_type": ["is not a valid document type"]}}) rather
27
+ than reaching validation. */
28
+ documentType: string;
29
+ /** Title */
30
+ title?: string;
31
+ /** Rich text description (HTML) */
32
+ description?: string;
33
+ /** active|drafted — defaults to drafted */
34
+ status?: string;
35
+ /** Subscriptions */
36
+ subscriptions?: number[];
37
+ /** Whether the document is visible to the project's clients. Applies only
38
+ when creating directly in the tool's vault — an item created inside a
39
+ folder inherits the folder's visibility and ignores this. A client caller
40
+ always creates client-visible records regardless of what is sent. */
41
+ visibleToClients?: boolean;
42
+ }
43
+
44
+ /**
45
+ * Request parameters for updateGoogleDocument.
46
+ */
47
+ export interface UpdateGoogleDocumentGoogleDocumentRequest {
48
+ /** Url */
49
+ url: string;
50
+ /** One of "doc", "sheet", "slide", "other". Backed by a Rails enum, so an
51
+ unrecognized value is rejected up front with a field-keyed 422
52
+ ({"errors": {"document_type": ["is not a valid document type"]}}) rather
53
+ than reaching validation. */
54
+ documentType: string;
55
+ /** Title */
56
+ title?: string;
57
+ /** Rich text description (HTML) */
58
+ description?: string;
59
+ /** Status */
60
+ status?: "active" | "drafted";
61
+ /** Subscriptions */
62
+ subscriptions?: number[];
63
+ }
64
+
65
+
66
+ // =============================================================================
67
+ // Service
68
+ // =============================================================================
69
+
70
+ /**
71
+ * Service for GoogleDocuments operations.
72
+ */
73
+ export class GoogleDocumentsService extends BaseService {
74
+
75
+ /**
76
+ * Create a new Google document in a vault.
77
+ * @param bucketId - The bucket ID
78
+ * @param vaultId - The vault ID
79
+ * @param req - Google_document creation parameters
80
+ * @returns The GoogleDocument
81
+ * @throws {BasecampError} If required fields are missing or invalid
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * const result = await client.googleDocuments.createGoogleDocument(123, 123, { url: "example", documentType: "example" });
86
+ * ```
87
+ */
88
+ async createGoogleDocument(bucketId: number, vaultId: number, req: CreateGoogleDocumentGoogleDocumentRequest): Promise<GoogleDocument> {
89
+ if (!req.url) {
90
+ throw Errors.validation("Url is required");
91
+ }
92
+ if (!req.documentType) {
93
+ throw Errors.validation("Document type is required");
94
+ }
95
+ const response = await this.request(
96
+ {
97
+ service: "GoogleDocuments",
98
+ operation: "CreateGoogleDocument",
99
+ resourceType: "google_document",
100
+ isMutation: true,
101
+ projectId: bucketId,
102
+ resourceId: vaultId,
103
+ },
104
+ () =>
105
+ this.client.POST("/buckets/{bucketId}/vaults/{vaultId}/google_documents.json", {
106
+ params: {
107
+ path: { bucketId, vaultId },
108
+ },
109
+ body: {
110
+ url: req.url,
111
+ document_type: req.documentType,
112
+ title: req.title,
113
+ description: req.description,
114
+ status: req.status,
115
+ subscriptions: req.subscriptions,
116
+ visible_to_clients: req.visibleToClients,
117
+ },
118
+ })
119
+ );
120
+ return response;
121
+ }
122
+
123
+ /**
124
+ * Get a single Google document by id
125
+ * @param googleDocumentId - The google document ID
126
+ * @returns The GoogleDocument
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * const result = await client.googleDocuments.googleDocument(123);
131
+ * ```
132
+ */
133
+ async googleDocument(googleDocumentId: number): Promise<GoogleDocument> {
134
+ const response = await this.request(
135
+ {
136
+ service: "GoogleDocuments",
137
+ operation: "GetGoogleDocument",
138
+ resourceType: "google_document",
139
+ isMutation: false,
140
+ resourceId: googleDocumentId,
141
+ },
142
+ () =>
143
+ this.client.GET("/google_documents/{googleDocumentId}", {
144
+ params: {
145
+ path: { googleDocumentId },
146
+ },
147
+ })
148
+ );
149
+ return response;
150
+ }
151
+
152
+ /**
153
+ * Replace a Google document with a new complete representation.
154
+ * @param googleDocumentId - The google document ID
155
+ * @param req - Google_document update parameters
156
+ * @returns The GoogleDocument
157
+ * @throws {BasecampError} If the resource is not found or fields are invalid
158
+ *
159
+ * @example
160
+ * ```ts
161
+ * const result = await client.googleDocuments.updateGoogleDocument(123, { url: "example", documentType: "example" });
162
+ * ```
163
+ */
164
+ async updateGoogleDocument(googleDocumentId: number, req: UpdateGoogleDocumentGoogleDocumentRequest): Promise<GoogleDocument> {
165
+ if (!req.url) {
166
+ throw Errors.validation("Url is required");
167
+ }
168
+ if (!req.documentType) {
169
+ throw Errors.validation("Document type is required");
170
+ }
171
+ const response = await this.request(
172
+ {
173
+ service: "GoogleDocuments",
174
+ operation: "UpdateGoogleDocument",
175
+ resourceType: "google_document",
176
+ isMutation: true,
177
+ resourceId: googleDocumentId,
178
+ },
179
+ () =>
180
+ this.client.PUT("/google_documents/{googleDocumentId}", {
181
+ params: {
182
+ path: { googleDocumentId },
183
+ },
184
+ body: {
185
+ url: req.url,
186
+ document_type: req.documentType,
187
+ title: req.title,
188
+ description: req.description,
189
+ status: req.status,
190
+ subscriptions: req.subscriptions,
191
+ },
192
+ })
193
+ );
194
+ return response;
195
+ }
196
+ }
@@ -4,19 +4,21 @@ export { BoostsService } from "./boosts.js";
4
4
  export { CardColumnsService } from "./card-columns.js";
5
5
  export { WormholesService } from "./wormholes.js";
6
6
  export { MessageTypesService } from "./message-types.js";
7
+ export { CampfiresService } from "./campfires.js";
8
+ export { ClientApprovalsService } from "./client-approvals.js";
9
+ export { ClientCorrespondencesService } from "./client-correspondences.js";
10
+ export { ClientRepliesService } from "./client-replies.js";
7
11
  export { ToolsService } from "./tools.js";
8
12
  export { TodosService } from "./todos.js";
13
+ export { CloudFilesService } from "./cloud-files.js";
14
+ export { GoogleDocumentsService } from "./google-documents.js";
9
15
  export { WebhooksService } from "./webhooks.js";
10
16
  export { CalendarsService } from "./calendars.js";
11
17
  export { CardsService } from "./cards.js";
12
18
  export { CardStepsService } from "./card-steps.js";
13
19
  export { CardTablesService } from "./card-tables.js";
14
20
  export { EverythingService } from "./everything.js";
15
- export { CampfiresService } from "./campfires.js";
16
21
  export { PeopleService } from "./people.js";
17
- export { ClientApprovalsService } from "./client-approvals.js";
18
- export { ClientCorrespondencesService } from "./client-correspondences.js";
19
- export { ClientRepliesService } from "./client-replies.js";
20
22
  export { CommentsService } from "./comments.js";
21
23
  export { DocumentsService } from "./documents.js";
22
24
  export { GaugesService } from "./gauges.js";
@@ -41,6 +43,7 @@ export { SubscriptionsService } from "./subscriptions.js";
41
43
  export { ReportsService } from "./reports.js";
42
44
  export { SchedulesService } from "./schedules.js";
43
45
  export { SearchService } from "./search.js";
46
+ export { FoldersService } from "./folders.js";
44
47
  export { TemplatesService } from "./templates.js";
45
48
  export { TodolistGroupsService } from "./todolist-groups.js";
46
49
  export { TodolistsService } from "./todolists.js";
@@ -25,6 +25,8 @@ export interface ListMessageOptions extends PaginationOptions {
25
25
  sort?: "created_at" | "updated_at";
26
26
  /** Filter by direction */
27
27
  direction?: "asc" | "desc";
28
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
29
+ page?: number;
28
30
  }
29
31
 
30
32
  /**
@@ -96,7 +98,7 @@ export class MessagesService extends BaseService {
96
98
  this.client.GET("/message_boards/{boardId}/messages.json", {
97
99
  params: {
98
100
  path: { boardId },
99
- query: { sort: options?.sort, direction: options?.direction },
101
+ query: { sort: options?.sort, direction: options?.direction, page: options?.page },
100
102
  },
101
103
  })
102
104
  , options
@@ -59,7 +59,7 @@ export class MyNotesService extends BaseService {
59
59
  }
60
60
 
61
61
  /**
62
- * Replace the note's content, recording a new revision server-side. The first
62
+ * Replace the note's content, recording a new revision server-side.
63
63
  * @param req - My_note update parameters
64
64
  * @returns The MyNote
65
65
  * @throws {BasecampError} If the resource is not found or fields are invalid
@@ -21,7 +21,9 @@ export type Notification = components["schemas"]["Notification"];
21
21
  * Options for myNotifications.
22
22
  */
23
23
  export interface MyNotificationsMyNotificationOptions {
24
- /** Page number for paginating through read items. Defaults to 1. */
24
+ /** Page number for paginating through read items. Defaults to 1. This
25
+ operation is not auto-paginated in any SDK, so a page is returned as
26
+ asked for and later pages are not followed. */
25
27
  page?: number;
26
28
  /** Set to true to cap `bubble_ups` at 2 current bubble-ups and omit the
27
29
  `scheduled_bubble_ups` key entirely. Defaults to false. Use the dedicated
@@ -34,7 +36,7 @@ scheduled bubble-ups. */
34
36
  * Options for bubbleUps.
35
37
  */
36
38
  export interface BubbleUpsMyNotificationOptions extends PaginationOptions {
37
- /** Page number. Defaults to 1. */
39
+ /** Page number. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
38
40
  page?: number;
39
41
  }
40
42
 
@@ -57,6 +57,8 @@ export interface UpdateMyProfilePeopleRequest {
57
57
  * Options for list.
58
58
  */
59
59
  export interface ListPeopleOptions extends PaginationOptions {
60
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
61
+ page?: number;
60
62
  }
61
63
 
62
64
  /**
@@ -71,6 +73,8 @@ export interface EnableOutOfOfficePeopleRequest {
71
73
  * Options for listForProject.
72
74
  */
73
75
  export interface ListForProjectPeopleOptions extends PaginationOptions {
76
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
77
+ page?: number;
74
78
  }
75
79
 
76
80
  /**
@@ -145,7 +149,7 @@ export class PeopleService extends BaseService {
145
149
  }
146
150
 
147
151
  /**
148
- * Update the current user's preferences
152
+ * Update the current user's preferences.
149
153
  * @param req - My_preference update parameters
150
154
  * @returns The my_preference
151
155
  * @throws {BasecampError} If the resource is not found or fields are invalid
@@ -243,6 +247,9 @@ export class PeopleService extends BaseService {
243
247
  * @example
244
248
  * ```ts
245
249
  * const result = await client.people.list();
250
+ *
251
+ * // With options
252
+ * const filtered = await client.people.list({ page: 1 });
246
253
  * ```
247
254
  */
248
255
  async list(options?: ListPeopleOptions): Promise<ListResult<Person>> {
@@ -255,6 +262,9 @@ export class PeopleService extends BaseService {
255
262
  },
256
263
  () =>
257
264
  this.client.GET("/people.json", {
265
+ params: {
266
+ query: { page: options?.page },
267
+ },
258
268
  })
259
269
  , options
260
270
  );
@@ -394,6 +404,9 @@ export class PeopleService extends BaseService {
394
404
  * @example
395
405
  * ```ts
396
406
  * const result = await client.people.listForProject(123);
407
+ *
408
+ * // With options
409
+ * const filtered = await client.people.listForProject(123, { page: 1 });
397
410
  * ```
398
411
  */
399
412
  async listForProject(projectId: number, options?: ListForProjectPeopleOptions): Promise<ListResult<Person>> {
@@ -409,6 +422,7 @@ export class PeopleService extends BaseService {
409
422
  this.client.GET("/projects/{projectId}/people.json", {
410
423
  params: {
411
424
  path: { projectId },
425
+ query: { page: options?.page },
412
426
  },
413
427
  })
414
428
  , options