@37signals/basecamp 0.11.0 → 0.13.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 (304) hide show
  1. package/README.md +112 -16
  2. package/dist/.build-complete +0 -0
  3. package/dist/client.d.ts +65 -11
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +235 -215
  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 +128 -15
  14. package/dist/errors.js.map +1 -1
  15. package/dist/generated/metadata.d.ts.map +1 -1
  16. package/dist/generated/metadata.js +443 -133
  17. package/dist/generated/metadata.js.map +1 -1
  18. package/dist/generated/metadata.ts +443 -133
  19. package/dist/generated/openapi-stripped.json +8999 -4907
  20. package/dist/generated/path-mapping.d.ts.map +1 -1
  21. package/dist/generated/path-mapping.js +40 -16
  22. package/dist/generated/path-mapping.js.map +1 -1
  23. package/dist/generated/path-mapping.ts +40 -16
  24. package/dist/generated/schema.d.ts +5508 -2346
  25. package/dist/generated/services/bookmarks.d.ts +76 -0
  26. package/dist/generated/services/bookmarks.d.ts.map +1 -0
  27. package/dist/generated/services/bookmarks.js +114 -0
  28. package/dist/generated/services/bookmarks.js.map +1 -0
  29. package/dist/generated/services/bookmarks.ts +158 -0
  30. package/dist/generated/services/boosts.d.ts +10 -0
  31. package/dist/generated/services/boosts.d.ts.map +1 -1
  32. package/dist/generated/services/boosts.js +8 -0
  33. package/dist/generated/services/boosts.js.map +1 -1
  34. package/dist/generated/services/boosts.ts +12 -0
  35. package/dist/generated/services/calendars.d.ts +47 -0
  36. package/dist/generated/services/calendars.d.ts.map +1 -0
  37. package/dist/generated/services/calendars.js +73 -0
  38. package/dist/generated/services/calendars.js.map +1 -0
  39. package/dist/generated/services/calendars.ts +102 -0
  40. package/dist/generated/services/campfires.d.ts +54 -40
  41. package/dist/generated/services/campfires.d.ts.map +1 -1
  42. package/dist/generated/services/campfires.js +82 -65
  43. package/dist/generated/services/campfires.js.map +1 -1
  44. package/dist/generated/services/campfires.ts +107 -85
  45. package/dist/generated/services/cards.d.ts +5 -0
  46. package/dist/generated/services/cards.d.ts.map +1 -1
  47. package/dist/generated/services/cards.js +4 -0
  48. package/dist/generated/services/cards.js.map +1 -1
  49. package/dist/generated/services/cards.ts +6 -0
  50. package/dist/generated/services/checkins.d.ts +14 -0
  51. package/dist/generated/services/checkins.d.ts.map +1 -1
  52. package/dist/generated/services/checkins.js +14 -1
  53. package/dist/generated/services/checkins.js.map +1 -1
  54. package/dist/generated/services/checkins.ts +20 -0
  55. package/dist/generated/services/client-approvals.d.ts +6 -3
  56. package/dist/generated/services/client-approvals.d.ts.map +1 -1
  57. package/dist/generated/services/client-approvals.js +8 -5
  58. package/dist/generated/services/client-approvals.js.map +1 -1
  59. package/dist/generated/services/client-approvals.ts +10 -5
  60. package/dist/generated/services/client-correspondences.d.ts +6 -3
  61. package/dist/generated/services/client-correspondences.d.ts.map +1 -1
  62. package/dist/generated/services/client-correspondences.js +8 -5
  63. package/dist/generated/services/client-correspondences.js.map +1 -1
  64. package/dist/generated/services/client-correspondences.ts +10 -5
  65. package/dist/generated/services/client-replies.d.ts +11 -4
  66. package/dist/generated/services/client-replies.d.ts.map +1 -1
  67. package/dist/generated/services/client-replies.js +16 -8
  68. package/dist/generated/services/client-replies.js.map +1 -1
  69. package/dist/generated/services/client-replies.ts +18 -8
  70. package/dist/generated/services/cloud-files.d.ts +92 -0
  71. package/dist/generated/services/cloud-files.d.ts.map +1 -0
  72. package/dist/generated/services/cloud-files.js +121 -0
  73. package/dist/generated/services/cloud-files.js.map +1 -0
  74. package/dist/generated/services/cloud-files.ts +188 -0
  75. package/dist/generated/services/comments.d.ts +5 -0
  76. package/dist/generated/services/comments.d.ts.map +1 -1
  77. package/dist/generated/services/comments.js +4 -0
  78. package/dist/generated/services/comments.js.map +1 -1
  79. package/dist/generated/services/comments.ts +6 -0
  80. package/dist/generated/services/documents.d.ts +12 -7
  81. package/dist/generated/services/documents.d.ts.map +1 -1
  82. package/dist/generated/services/documents.js +10 -6
  83. package/dist/generated/services/documents.js.map +1 -1
  84. package/dist/generated/services/documents.ts +14 -8
  85. package/dist/generated/services/drafts.d.ts +38 -0
  86. package/dist/generated/services/drafts.d.ts.map +1 -0
  87. package/dist/generated/services/drafts.js +40 -0
  88. package/dist/generated/services/drafts.js.map +1 -0
  89. package/dist/generated/services/drafts.ts +67 -0
  90. package/dist/generated/services/events.d.ts +5 -0
  91. package/dist/generated/services/events.d.ts.map +1 -1
  92. package/dist/generated/services/events.js +4 -0
  93. package/dist/generated/services/events.js.map +1 -1
  94. package/dist/generated/services/events.ts +6 -0
  95. package/dist/generated/services/everything.d.ts +83 -16
  96. package/dist/generated/services/everything.d.ts.map +1 -1
  97. package/dist/generated/services/everything.js +23 -13
  98. package/dist/generated/services/everything.js.map +1 -1
  99. package/dist/generated/services/everything.ts +100 -25
  100. package/dist/generated/services/folders.d.ts +96 -0
  101. package/dist/generated/services/folders.d.ts.map +1 -0
  102. package/dist/generated/services/folders.js +140 -0
  103. package/dist/generated/services/folders.js.map +1 -0
  104. package/dist/generated/services/folders.ts +201 -0
  105. package/dist/generated/services/forwards.d.ts +7 -20
  106. package/dist/generated/services/forwards.d.ts.map +1 -1
  107. package/dist/generated/services/forwards.js +6 -35
  108. package/dist/generated/services/forwards.js.map +1 -1
  109. package/dist/generated/services/forwards.ts +10 -48
  110. package/dist/generated/services/gauges.d.ts +7 -0
  111. package/dist/generated/services/gauges.d.ts.map +1 -1
  112. package/dist/generated/services/gauges.js +5 -1
  113. package/dist/generated/services/gauges.js.map +1 -1
  114. package/dist/generated/services/gauges.ts +9 -1
  115. package/dist/generated/services/google-documents.d.ts +98 -0
  116. package/dist/generated/services/google-documents.d.ts.map +1 -0
  117. package/dist/generated/services/google-documents.js +123 -0
  118. package/dist/generated/services/google-documents.js.map +1 -0
  119. package/dist/generated/services/google-documents.ts +196 -0
  120. package/dist/generated/services/index.d.ts +12 -5
  121. package/dist/generated/services/index.d.ts.map +1 -1
  122. package/dist/generated/services/index.js +12 -5
  123. package/dist/generated/services/index.js.map +1 -1
  124. package/dist/generated/services/index.ts +12 -5
  125. package/dist/generated/services/messages.d.ts +2 -0
  126. package/dist/generated/services/messages.d.ts.map +1 -1
  127. package/dist/generated/services/messages.js +1 -1
  128. package/dist/generated/services/messages.js.map +1 -1
  129. package/dist/generated/services/messages.ts +3 -1
  130. package/dist/generated/services/my-assignments.d.ts +52 -0
  131. package/dist/generated/services/my-assignments.d.ts.map +1 -1
  132. package/dist/generated/services/my-assignments.js +71 -0
  133. package/dist/generated/services/my-assignments.js.map +1 -1
  134. package/dist/generated/services/my-assignments.ts +104 -0
  135. package/dist/generated/services/my-notes.d.ts +45 -0
  136. package/dist/generated/services/my-notes.d.ts.map +1 -0
  137. package/dist/generated/services/my-notes.js +62 -0
  138. package/dist/generated/services/my-notes.js.map +1 -0
  139. package/dist/generated/services/my-notes.ts +92 -0
  140. package/dist/generated/services/my-notifications.d.ts +4 -2
  141. package/dist/generated/services/my-notifications.d.ts.map +1 -1
  142. package/dist/generated/services/my-notifications.js.map +1 -1
  143. package/dist/generated/services/my-notifications.ts +4 -2
  144. package/dist/generated/services/people.d.ts +11 -1
  145. package/dist/generated/services/people.d.ts.map +1 -1
  146. package/dist/generated/services/people.js +13 -2
  147. package/dist/generated/services/people.js.map +1 -1
  148. package/dist/generated/services/people.ts +15 -1
  149. package/dist/generated/services/projects.d.ts +26 -0
  150. package/dist/generated/services/projects.d.ts.map +1 -1
  151. package/dist/generated/services/projects.js +49 -1
  152. package/dist/generated/services/projects.js.map +1 -1
  153. package/dist/generated/services/projects.ts +61 -1
  154. package/dist/generated/services/recordings.d.ts +2 -12
  155. package/dist/generated/services/recordings.d.ts.map +1 -1
  156. package/dist/generated/services/recordings.js +1 -26
  157. package/dist/generated/services/recordings.js.map +1 -1
  158. package/dist/generated/services/recordings.ts +3 -31
  159. package/dist/generated/services/reports.d.ts +8 -12
  160. package/dist/generated/services/reports.d.ts.map +1 -1
  161. package/dist/generated/services/reports.js +11 -5
  162. package/dist/generated/services/reports.js.map +1 -1
  163. package/dist/generated/services/reports.ts +13 -14
  164. package/dist/generated/services/schedules.d.ts +94 -15
  165. package/dist/generated/services/schedules.d.ts.map +1 -1
  166. package/dist/generated/services/schedules.js +19 -8
  167. package/dist/generated/services/schedules.js.map +1 -1
  168. package/dist/generated/services/schedules.ts +107 -17
  169. package/dist/generated/services/search.d.ts +2 -0
  170. package/dist/generated/services/search.d.ts.map +1 -1
  171. package/dist/generated/services/search.js +1 -1
  172. package/dist/generated/services/search.js.map +1 -1
  173. package/dist/generated/services/search.ts +3 -1
  174. package/dist/generated/services/templates.d.ts +2 -0
  175. package/dist/generated/services/templates.d.ts.map +1 -1
  176. package/dist/generated/services/templates.js +1 -1
  177. package/dist/generated/services/templates.js.map +1 -1
  178. package/dist/generated/services/templates.ts +3 -1
  179. package/dist/generated/services/timeline.d.ts +2 -0
  180. package/dist/generated/services/timeline.d.ts.map +1 -1
  181. package/dist/generated/services/timeline.js +1 -0
  182. package/dist/generated/services/timeline.js.map +1 -1
  183. package/dist/generated/services/timeline.ts +3 -0
  184. package/dist/generated/services/timesheets.d.ts +16 -0
  185. package/dist/generated/services/timesheets.d.ts.map +1 -1
  186. package/dist/generated/services/timesheets.js +26 -2
  187. package/dist/generated/services/timesheets.js.map +1 -1
  188. package/dist/generated/services/timesheets.ts +35 -2
  189. package/dist/generated/services/todolist-groups.d.ts +11 -6
  190. package/dist/generated/services/todolist-groups.d.ts.map +1 -1
  191. package/dist/generated/services/todolist-groups.js +7 -3
  192. package/dist/generated/services/todolist-groups.js.map +1 -1
  193. package/dist/generated/services/todolist-groups.ts +13 -7
  194. package/dist/generated/services/todolists.d.ts +15 -13
  195. package/dist/generated/services/todolists.d.ts.map +1 -1
  196. package/dist/generated/services/todolists.js +11 -8
  197. package/dist/generated/services/todolists.js.map +1 -1
  198. package/dist/generated/services/todolists.ts +19 -14
  199. package/dist/generated/services/todos.d.ts +35 -12
  200. package/dist/generated/services/todos.d.ts.map +1 -1
  201. package/dist/generated/services/todos.js +47 -25
  202. package/dist/generated/services/todos.js.map +1 -1
  203. package/dist/generated/services/todos.ts +74 -30
  204. package/dist/generated/services/uploads.d.ts +5 -0
  205. package/dist/generated/services/uploads.d.ts.map +1 -1
  206. package/dist/generated/services/uploads.js +4 -0
  207. package/dist/generated/services/uploads.js.map +1 -1
  208. package/dist/generated/services/uploads.ts +6 -0
  209. package/dist/generated/services/vaults.d.ts +5 -0
  210. package/dist/generated/services/vaults.d.ts.map +1 -1
  211. package/dist/generated/services/vaults.js +4 -0
  212. package/dist/generated/services/vaults.js.map +1 -1
  213. package/dist/generated/services/vaults.ts +6 -0
  214. package/dist/hooks/otel.d.ts +1 -1
  215. package/dist/hooks/otel.js +1 -1
  216. package/dist/index.d.ts +21 -11
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +24 -9
  219. package/dist/index.js.map +1 -1
  220. package/dist/oauth/discovery.d.ts.map +1 -1
  221. package/dist/oauth/discovery.js +1 -0
  222. package/dist/oauth/discovery.js.map +1 -1
  223. package/dist/pagination-utils.d.ts +46 -0
  224. package/dist/pagination-utils.d.ts.map +1 -1
  225. package/dist/pagination-utils.js +85 -2
  226. package/dist/pagination-utils.js.map +1 -1
  227. package/dist/pagination.d.ts +12 -1
  228. package/dist/pagination.d.ts.map +1 -1
  229. package/dist/pagination.js +1 -1
  230. package/dist/pagination.js.map +1 -1
  231. package/dist/retry.d.ts +110 -0
  232. package/dist/retry.d.ts.map +1 -0
  233. package/dist/retry.js +253 -0
  234. package/dist/retry.js.map +1 -0
  235. package/dist/services/base.d.ts.map +1 -1
  236. package/dist/services/base.js +59 -5
  237. package/dist/services/base.js.map +1 -1
  238. package/dist/services/cards-extensions.d.ts +26 -21
  239. package/dist/services/cards-extensions.d.ts.map +1 -1
  240. package/dist/services/cards-extensions.js +28 -31
  241. package/dist/services/cards-extensions.js.map +1 -1
  242. package/dist/services/documents-extensions.d.ts +122 -0
  243. package/dist/services/documents-extensions.d.ts.map +1 -0
  244. package/dist/services/documents-extensions.js +125 -0
  245. package/dist/services/documents-extensions.js.map +1 -0
  246. package/dist/services/merge-safe.d.ts +167 -0
  247. package/dist/services/merge-safe.d.ts.map +1 -0
  248. package/dist/services/merge-safe.js +217 -0
  249. package/dist/services/merge-safe.js.map +1 -0
  250. package/dist/services/schedules-extensions.d.ts +266 -0
  251. package/dist/services/schedules-extensions.d.ts.map +1 -0
  252. package/dist/services/schedules-extensions.js +268 -0
  253. package/dist/services/schedules-extensions.js.map +1 -0
  254. package/dist/services/todolists-extensions.d.ts +110 -0
  255. package/dist/services/todolists-extensions.d.ts.map +1 -0
  256. package/dist/services/todolists-extensions.js +262 -0
  257. package/dist/services/todolists-extensions.js.map +1 -0
  258. package/dist/services/todos-extensions.d.ts +12 -1
  259. package/dist/services/todos-extensions.d.ts.map +1 -1
  260. package/dist/services/todos-extensions.js +27 -8
  261. package/dist/services/todos-extensions.js.map +1 -1
  262. package/package.json +5 -4
  263. package/src/generated/metadata.ts +443 -133
  264. package/src/generated/openapi-stripped.json +8999 -4907
  265. package/src/generated/path-mapping.ts +40 -16
  266. package/src/generated/schema.d.ts +5508 -2346
  267. package/src/generated/services/bookmarks.ts +158 -0
  268. package/src/generated/services/boosts.ts +12 -0
  269. package/src/generated/services/calendars.ts +102 -0
  270. package/src/generated/services/campfires.ts +107 -85
  271. package/src/generated/services/cards.ts +6 -0
  272. package/src/generated/services/checkins.ts +20 -0
  273. package/src/generated/services/client-approvals.ts +10 -5
  274. package/src/generated/services/client-correspondences.ts +10 -5
  275. package/src/generated/services/client-replies.ts +18 -8
  276. package/src/generated/services/cloud-files.ts +188 -0
  277. package/src/generated/services/comments.ts +6 -0
  278. package/src/generated/services/documents.ts +14 -8
  279. package/src/generated/services/drafts.ts +67 -0
  280. package/src/generated/services/events.ts +6 -0
  281. package/src/generated/services/everything.ts +100 -25
  282. package/src/generated/services/folders.ts +201 -0
  283. package/src/generated/services/forwards.ts +10 -48
  284. package/src/generated/services/gauges.ts +9 -1
  285. package/src/generated/services/google-documents.ts +196 -0
  286. package/src/generated/services/index.ts +12 -5
  287. package/src/generated/services/messages.ts +3 -1
  288. package/src/generated/services/my-assignments.ts +104 -0
  289. package/src/generated/services/my-notes.ts +92 -0
  290. package/src/generated/services/my-notifications.ts +4 -2
  291. package/src/generated/services/people.ts +15 -1
  292. package/src/generated/services/projects.ts +61 -1
  293. package/src/generated/services/recordings.ts +3 -31
  294. package/src/generated/services/reports.ts +13 -14
  295. package/src/generated/services/schedules.ts +107 -17
  296. package/src/generated/services/search.ts +3 -1
  297. package/src/generated/services/templates.ts +3 -1
  298. package/src/generated/services/timeline.ts +3 -0
  299. package/src/generated/services/timesheets.ts +35 -2
  300. package/src/generated/services/todolist-groups.ts +13 -7
  301. package/src/generated/services/todolists.ts +19 -14
  302. package/src/generated/services/todos.ts +74 -30
  303. package/src/generated/services/uploads.ts +6 -0
  304. package/src/generated/services/vaults.ts +6 -0
@@ -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,17 +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";
12
+ export { TodosService } from "./todos.js";
13
+ export { CloudFilesService } from "./cloud-files.js";
14
+ export { GoogleDocumentsService } from "./google-documents.js";
8
15
  export { WebhooksService } from "./webhooks.js";
16
+ export { CalendarsService } from "./calendars.js";
9
17
  export { CardsService } from "./cards.js";
10
18
  export { CardStepsService } from "./card-steps.js";
11
19
  export { CardTablesService } from "./card-tables.js";
12
20
  export { EverythingService } from "./everything.js";
13
- export { CampfiresService } from "./campfires.js";
14
21
  export { PeopleService } from "./people.js";
15
- export { ClientApprovalsService } from "./client-approvals.js";
16
- export { ClientCorrespondencesService } from "./client-correspondences.js";
17
- export { ClientRepliesService } from "./client-replies.js";
18
22
  export { CommentsService } from "./comments.js";
19
23
  export { DocumentsService } from "./documents.js";
20
24
  export { GaugesService } from "./gauges.js";
@@ -24,6 +28,9 @@ export { LineupService } from "./lineup.js";
24
28
  export { MessageBoardsService } from "./message-boards.js";
25
29
  export { MessagesService } from "./messages.js";
26
30
  export { MyAssignmentsService } from "./my-assignments.js";
31
+ export { BookmarksService } from "./bookmarks.js";
32
+ export { DraftsService } from "./drafts.js";
33
+ export { MyNotesService } from "./my-notes.js";
27
34
  export { CheckinsService } from "./checkins.js";
28
35
  export { MyNotificationsService } from "./my-notifications.js";
29
36
  export { ProjectsService } from "./projects.js";
@@ -36,10 +43,10 @@ export { SubscriptionsService } from "./subscriptions.js";
36
43
  export { ReportsService } from "./reports.js";
37
44
  export { SchedulesService } from "./schedules.js";
38
45
  export { SearchService } from "./search.js";
46
+ export { FoldersService } from "./folders.js";
39
47
  export { TemplatesService } from "./templates.js";
40
48
  export { TodolistGroupsService } from "./todolist-groups.js";
41
49
  export { TodolistsService } from "./todolists.js";
42
- export { TodosService } from "./todos.js";
43
50
  export { TodosetsService } from "./todosets.js";
44
51
  export { HillChartsService } from "./hill-charts.js";
45
52
  export { UploadsService } from "./uploads.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
@@ -21,6 +21,24 @@ due_later_this_week, due_next_week, due_later */
21
21
  scope?: string;
22
22
  }
23
23
 
24
+ /**
25
+ * Request parameters for prioritizeAssignment.
26
+ */
27
+ export interface PrioritizeAssignmentMyAssignmentRequest {
28
+ /** The recording id to prioritize. */
29
+ id: number;
30
+ }
31
+
32
+ /**
33
+ * Request parameters for reorderUpNext.
34
+ */
35
+ export interface ReorderUpNextMyAssignmentRequest {
36
+ /** The recording id to move, chosen the same way as when prioritizing. */
37
+ sourceId: number;
38
+ /** The 1-based position to move it to. */
39
+ position: number;
40
+ }
41
+
24
42
 
25
43
  // =============================================================================
26
44
  // Service
@@ -106,4 +124,90 @@ export class MyAssignmentsService extends BaseService {
106
124
  );
107
125
  return response ?? [];
108
126
  }
127
+
128
+ /**
129
+ * Add a recording to Up Next — the current user's ordered list of prioritized
130
+ * @param req - Resource request parameters
131
+ * @returns void
132
+ * @throws {BasecampError} If the request fails
133
+ *
134
+ * @example
135
+ * ```ts
136
+ * await client.myAssignments.prioritizeAssignment({ id: 1 });
137
+ * ```
138
+ */
139
+ async prioritizeAssignment(req: PrioritizeAssignmentMyAssignmentRequest): Promise<void> {
140
+ await this.request(
141
+ {
142
+ service: "MyAssignments",
143
+ operation: "PrioritizeAssignment",
144
+ resourceType: "resource",
145
+ isMutation: true,
146
+ },
147
+ () =>
148
+ this.client.POST("/my/priorities.json", {
149
+ body: {
150
+ id: req.id,
151
+ },
152
+ })
153
+ );
154
+ }
155
+
156
+ /**
157
+ * Remove a recording from Up Next. Exact-target:
158
+ * @param recordingId - The recording ID
159
+ * @returns void
160
+ * @throws {BasecampError} If the request fails
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * await client.myAssignments.deprioritizeAssignment(123);
165
+ * ```
166
+ */
167
+ async deprioritizeAssignment(recordingId: number): Promise<void> {
168
+ await this.request(
169
+ {
170
+ service: "MyAssignments",
171
+ operation: "DeprioritizeAssignment",
172
+ resourceType: "resource",
173
+ isMutation: true,
174
+ resourceId: recordingId,
175
+ },
176
+ () =>
177
+ this.client.DELETE("/my/priorities/{recordingId}", {
178
+ params: {
179
+ path: { recordingId },
180
+ },
181
+ })
182
+ );
183
+ }
184
+
185
+ /**
186
+ * Move an already-prioritized recording to a new 1-based position in Up Next
187
+ * @param req - Resource request parameters
188
+ * @returns void
189
+ * @throws {BasecampError} If the request fails
190
+ *
191
+ * @example
192
+ * ```ts
193
+ * await client.myAssignments.reorderUpNext({ sourceId: 1, position: 1 });
194
+ * ```
195
+ */
196
+ async reorderUpNext(req: ReorderUpNextMyAssignmentRequest): Promise<void> {
197
+ await this.request(
198
+ {
199
+ service: "MyAssignments",
200
+ operation: "ReorderUpNext",
201
+ resourceType: "resource",
202
+ isMutation: true,
203
+ },
204
+ () =>
205
+ this.client.POST("/my/priority_moves.json", {
206
+ body: {
207
+ source_id: req.sourceId,
208
+ position: req.position,
209
+ },
210
+ })
211
+ );
212
+ }
109
213
  }
@@ -0,0 +1,92 @@
1
+ /**
2
+ * MyNotes 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
+ /** MyNote entity from the Basecamp API. */
16
+ export type MyNote = components["schemas"]["MyNote"];
17
+
18
+ /**
19
+ * Request parameters for updateMyNote.
20
+ */
21
+ export interface UpdateMyNoteMyNoteRequest {
22
+ /** Note */
23
+ note: components["schemas"]["MyNoteAttributes"];
24
+ }
25
+
26
+
27
+ // =============================================================================
28
+ // Service
29
+ // =============================================================================
30
+
31
+ /**
32
+ * Service for MyNotes operations.
33
+ */
34
+ export class MyNotesService extends BaseService {
35
+
36
+ /**
37
+ * Get the authenticated user's note — a per-person notebook singleton at
38
+ * @returns The MyNote
39
+ * @throws {BasecampError} If the resource is not found
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const result = await client.myNotes.getMyNote();
44
+ * ```
45
+ */
46
+ async getMyNote(): Promise<MyNote> {
47
+ const response = await this.request(
48
+ {
49
+ service: "MyNotes",
50
+ operation: "GetMyNote",
51
+ resourceType: "my_note",
52
+ isMutation: false,
53
+ },
54
+ () =>
55
+ this.client.GET("/my/notes.json", {
56
+ })
57
+ );
58
+ return response;
59
+ }
60
+
61
+ /**
62
+ * Replace the note's content, recording a new revision server-side.
63
+ * @param req - My_note update parameters
64
+ * @returns The MyNote
65
+ * @throws {BasecampError} If the resource is not found or fields are invalid
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const result = await client.myNotes.updateMyNote({ note: { content: "Hello world" } });
70
+ * ```
71
+ */
72
+ async updateMyNote(req: UpdateMyNoteMyNoteRequest): Promise<MyNote> {
73
+ if (!req.note) {
74
+ throw Errors.validation("Note is required");
75
+ }
76
+ const response = await this.request(
77
+ {
78
+ service: "MyNotes",
79
+ operation: "UpdateMyNote",
80
+ resourceType: "my_note",
81
+ isMutation: true,
82
+ },
83
+ () =>
84
+ this.client.PUT("/my/notes.json", {
85
+ body: {
86
+ note: req.note,
87
+ },
88
+ })
89
+ );
90
+ return response;
91
+ }
92
+ }
@@ -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
@@ -23,6 +23,8 @@ export type Project = components["schemas"]["Project"];
23
23
  export interface ListProjectOptions extends PaginationOptions {
24
24
  /** Filter by status */
25
25
  status?: "active" | "archived" | "trashed";
26
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
27
+ page?: number;
26
28
  }
27
29
 
28
30
  /**
@@ -83,7 +85,7 @@ export class ProjectsService extends BaseService {
83
85
  () =>
84
86
  this.client.GET("/projects.json", {
85
87
  params: {
86
- query: { status: options?.status },
88
+ query: { status: options?.status, page: options?.page },
87
89
  },
88
90
  })
89
91
  , options
@@ -221,4 +223,62 @@ export class ProjectsService extends BaseService {
221
223
  })
222
224
  );
223
225
  }
226
+
227
+ /**
228
+ * Restore a project to active status from trash as well as from the archive.
229
+ * @param projectId - The project ID
230
+ * @returns void
231
+ * @throws {BasecampError} If the request fails
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * await client.projects.unarchive(123);
236
+ * ```
237
+ */
238
+ async unarchive(projectId: number): Promise<void> {
239
+ await this.request(
240
+ {
241
+ service: "Projects",
242
+ operation: "UnarchiveProject",
243
+ resourceType: "project",
244
+ isMutation: true,
245
+ projectId,
246
+ },
247
+ () =>
248
+ this.client.PUT("/projects/{projectId}/status/active.json", {
249
+ params: {
250
+ path: { projectId },
251
+ },
252
+ })
253
+ );
254
+ }
255
+
256
+ /**
257
+ * Archive a project, removing it from the active project list.
258
+ * @param projectId - The project ID
259
+ * @returns void
260
+ * @throws {BasecampError} If the request fails
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * await client.projects.archive(123);
265
+ * ```
266
+ */
267
+ async archive(projectId: number): Promise<void> {
268
+ await this.request(
269
+ {
270
+ service: "Projects",
271
+ operation: "ArchiveProject",
272
+ resourceType: "project",
273
+ isMutation: true,
274
+ projectId,
275
+ },
276
+ () =>
277
+ this.client.PUT("/projects/{projectId}/status/archived.json", {
278
+ params: {
279
+ path: { projectId },
280
+ },
281
+ })
282
+ );
283
+ }
224
284
  }
@@ -28,6 +28,8 @@ export interface ListRecordingOptions extends PaginationOptions {
28
28
  sort?: "created_at" | "updated_at";
29
29
  /** Filter by direction */
30
30
  direction?: "asc" | "desc";
31
+ /** Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
32
+ page?: number;
31
33
  }
32
34
 
33
35
 
@@ -65,43 +67,13 @@ export class RecordingsService extends BaseService {
65
67
  () =>
66
68
  this.client.GET("/projects/recordings.json", {
67
69
  params: {
68
- query: { type: type, bucket: options?.bucket?.join(","), status: options?.status, sort: options?.sort, direction: options?.direction },
70
+ query: { type: type, bucket: options?.bucket?.join(","), status: options?.status, sort: options?.sort, direction: options?.direction, page: options?.page },
69
71
  },
70
72
  })
71
73
  , options
72
74
  );
73
75
  }
74
76
 
75
- /**
76
- * Get a single recording by id
77
- * @param recordingId - The recording ID
78
- * @returns The Recording
79
- * @throws {BasecampError} If the resource is not found
80
- *
81
- * @example
82
- * ```ts
83
- * const result = await client.recordings.get(123);
84
- * ```
85
- */
86
- async get(recordingId: number): Promise<Recording> {
87
- const response = await this.request(
88
- {
89
- service: "Recordings",
90
- operation: "GetRecording",
91
- resourceType: "recording",
92
- isMutation: false,
93
- resourceId: recordingId,
94
- },
95
- () =>
96
- this.client.GET("/recordings/{recordingId}", {
97
- params: {
98
- path: { recordingId },
99
- },
100
- })
101
- );
102
- return response;
103
- }
104
-
105
77
  /**
106
78
  * Unarchive a recording (restore to active status)
107
79
  * @param recordingId - The recording ID