@37signals/basecamp 0.2.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 (356) hide show
  1. package/README.md +600 -0
  2. package/dist/auth-strategy.d.ts +36 -0
  3. package/dist/auth-strategy.d.ts.map +1 -0
  4. package/dist/auth-strategy.js +33 -0
  5. package/dist/auth-strategy.js.map +1 -0
  6. package/dist/client.d.ts +224 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +715 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/errors.d.ts +137 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +269 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/generated/metadata.json +2281 -0
  15. package/dist/generated/openapi-stripped.json +21268 -0
  16. package/dist/generated/path-mapping.d.ts +8 -0
  17. package/dist/generated/path-mapping.d.ts.map +1 -0
  18. package/dist/generated/path-mapping.js +192 -0
  19. package/dist/generated/path-mapping.js.map +1 -0
  20. package/dist/generated/path-mapping.ts +199 -0
  21. package/dist/generated/schema.d.ts +14883 -0
  22. package/dist/generated/services/attachments.d.ts +27 -0
  23. package/dist/generated/services/attachments.d.ts.map +1 -0
  24. package/dist/generated/services/attachments.js +49 -0
  25. package/dist/generated/services/attachments.js.map +1 -0
  26. package/dist/generated/services/attachments.ts +59 -0
  27. package/dist/generated/services/boosts.d.ts +114 -0
  28. package/dist/generated/services/boosts.d.ts.map +1 -0
  29. package/dist/generated/services/boosts.js +179 -0
  30. package/dist/generated/services/boosts.js.map +1 -0
  31. package/dist/generated/services/boosts.ts +250 -0
  32. package/dist/generated/services/campfires.d.ts +202 -0
  33. package/dist/generated/services/campfires.d.ts.map +1 -0
  34. package/dist/generated/services/campfires.js +309 -0
  35. package/dist/generated/services/campfires.js.map +1 -0
  36. package/dist/generated/services/campfires.ts +433 -0
  37. package/dist/generated/services/card-columns.d.ts +163 -0
  38. package/dist/generated/services/card-columns.d.ts.map +1 -0
  39. package/dist/generated/services/card-columns.js +264 -0
  40. package/dist/generated/services/card-columns.js.map +1 -0
  41. package/dist/generated/services/card-columns.ts +360 -0
  42. package/dist/generated/services/card-steps.d.ts +105 -0
  43. package/dist/generated/services/card-steps.d.ts.map +1 -0
  44. package/dist/generated/services/card-steps.js +148 -0
  45. package/dist/generated/services/card-steps.js.map +1 -0
  46. package/dist/generated/services/card-steps.ts +221 -0
  47. package/dist/generated/services/card-tables.d.ts +27 -0
  48. package/dist/generated/services/card-tables.d.ts.map +1 -0
  49. package/dist/generated/services/card-tables.js +40 -0
  50. package/dist/generated/services/card-tables.js.map +1 -0
  51. package/dist/generated/services/card-tables.ts +55 -0
  52. package/dist/generated/services/cards.d.ts +118 -0
  53. package/dist/generated/services/cards.d.ts.map +1 -0
  54. package/dist/generated/services/cards.js +166 -0
  55. package/dist/generated/services/cards.js.map +1 -0
  56. package/dist/generated/services/cards.ts +247 -0
  57. package/dist/generated/services/checkins.d.ts +278 -0
  58. package/dist/generated/services/checkins.d.ts.map +1 -0
  59. package/dist/generated/services/checkins.js +420 -0
  60. package/dist/generated/services/checkins.js.map +1 -0
  61. package/dist/generated/services/checkins.ts +600 -0
  62. package/dist/generated/services/client-approvals.d.ts +45 -0
  63. package/dist/generated/services/client-approvals.d.ts.map +1 -0
  64. package/dist/generated/services/client-approvals.js +58 -0
  65. package/dist/generated/services/client-approvals.js.map +1 -0
  66. package/dist/generated/services/client-approvals.ts +89 -0
  67. package/dist/generated/services/client-correspondences.d.ts +45 -0
  68. package/dist/generated/services/client-correspondences.d.ts.map +1 -0
  69. package/dist/generated/services/client-correspondences.js +58 -0
  70. package/dist/generated/services/client-correspondences.js.map +1 -0
  71. package/dist/generated/services/client-correspondences.ts +89 -0
  72. package/dist/generated/services/client-replies.d.ts +47 -0
  73. package/dist/generated/services/client-replies.d.ts.map +1 -0
  74. package/dist/generated/services/client-replies.js +65 -0
  75. package/dist/generated/services/client-replies.js.map +1 -0
  76. package/dist/generated/services/client-replies.ts +95 -0
  77. package/dist/generated/services/client-visibility.d.ts +35 -0
  78. package/dist/generated/services/client-visibility.d.ts.map +1 -0
  79. package/dist/generated/services/client-visibility.js +44 -0
  80. package/dist/generated/services/client-visibility.js.map +1 -0
  81. package/dist/generated/services/client-visibility.ts +68 -0
  82. package/dist/generated/services/comments.d.ts +86 -0
  83. package/dist/generated/services/comments.d.ts.map +1 -0
  84. package/dist/generated/services/comments.js +129 -0
  85. package/dist/generated/services/comments.js.map +1 -0
  86. package/dist/generated/services/comments.ts +185 -0
  87. package/dist/generated/services/documents.d.ts +92 -0
  88. package/dist/generated/services/documents.d.ts.map +1 -0
  89. package/dist/generated/services/documents.js +129 -0
  90. package/dist/generated/services/documents.js.map +1 -0
  91. package/dist/generated/services/documents.ts +191 -0
  92. package/dist/generated/services/events.d.ts +34 -0
  93. package/dist/generated/services/events.d.ts.map +1 -0
  94. package/dist/generated/services/events.js +39 -0
  95. package/dist/generated/services/events.js.map +1 -0
  96. package/dist/generated/services/events.ts +64 -0
  97. package/dist/generated/services/forwards.d.ts +112 -0
  98. package/dist/generated/services/forwards.d.ts.map +1 -0
  99. package/dist/generated/services/forwards.js +172 -0
  100. package/dist/generated/services/forwards.js.map +1 -0
  101. package/dist/generated/services/forwards.ts +241 -0
  102. package/dist/generated/services/index.d.ts +39 -0
  103. package/dist/generated/services/index.d.ts.map +1 -0
  104. package/dist/generated/services/index.js +39 -0
  105. package/dist/generated/services/index.js.map +1 -0
  106. package/dist/generated/services/index.ts +38 -0
  107. package/dist/generated/services/lineup.d.ts +67 -0
  108. package/dist/generated/services/lineup.d.ts.map +1 -0
  109. package/dist/generated/services/lineup.js +99 -0
  110. package/dist/generated/services/lineup.js.map +1 -0
  111. package/dist/generated/services/lineup.ts +143 -0
  112. package/dist/generated/services/message-boards.d.ts +27 -0
  113. package/dist/generated/services/message-boards.d.ts.map +1 -0
  114. package/dist/generated/services/message-boards.js +40 -0
  115. package/dist/generated/services/message-boards.js.map +1 -0
  116. package/dist/generated/services/message-boards.ts +55 -0
  117. package/dist/generated/services/message-types.d.ts +100 -0
  118. package/dist/generated/services/message-types.d.ts.map +1 -0
  119. package/dist/generated/services/message-types.js +144 -0
  120. package/dist/generated/services/message-types.js.map +1 -0
  121. package/dist/generated/services/message-types.ts +210 -0
  122. package/dist/generated/services/messages.d.ts +122 -0
  123. package/dist/generated/services/messages.d.ts.map +1 -0
  124. package/dist/generated/services/messages.js +180 -0
  125. package/dist/generated/services/messages.js.map +1 -0
  126. package/dist/generated/services/messages.ts +258 -0
  127. package/dist/generated/services/people.d.ts +122 -0
  128. package/dist/generated/services/people.d.ts.map +1 -0
  129. package/dist/generated/services/people.js +167 -0
  130. package/dist/generated/services/people.js.map +1 -0
  131. package/dist/generated/services/people.ts +252 -0
  132. package/dist/generated/services/projects.d.ts +109 -0
  133. package/dist/generated/services/projects.d.ts.map +1 -0
  134. package/dist/generated/services/projects.js +153 -0
  135. package/dist/generated/services/projects.js.map +1 -0
  136. package/dist/generated/services/projects.ts +224 -0
  137. package/dist/generated/services/recordings.d.ts +93 -0
  138. package/dist/generated/services/recordings.d.ts.map +1 -0
  139. package/dist/generated/services/recordings.js +138 -0
  140. package/dist/generated/services/recordings.js.map +1 -0
  141. package/dist/generated/services/recordings.ts +191 -0
  142. package/dist/generated/services/reports.d.ts +90 -0
  143. package/dist/generated/services/reports.d.ts.map +1 -0
  144. package/dist/generated/services/reports.js +124 -0
  145. package/dist/generated/services/reports.js.map +1 -0
  146. package/dist/generated/services/reports.ts +187 -0
  147. package/dist/generated/services/schedules.d.ts +162 -0
  148. package/dist/generated/services/schedules.d.ts.map +1 -0
  149. package/dist/generated/services/schedules.js +228 -0
  150. package/dist/generated/services/schedules.js.map +1 -0
  151. package/dist/generated/services/schedules.ts +335 -0
  152. package/dist/generated/services/search.d.ts +45 -0
  153. package/dist/generated/services/search.d.ts.map +1 -0
  154. package/dist/generated/services/search.js +56 -0
  155. package/dist/generated/services/search.js.map +1 -0
  156. package/dist/generated/services/search.ts +89 -0
  157. package/dist/generated/services/subscriptions.d.ts +73 -0
  158. package/dist/generated/services/subscriptions.d.ts.map +1 -0
  159. package/dist/generated/services/subscriptions.js +119 -0
  160. package/dist/generated/services/subscriptions.js.map +1 -0
  161. package/dist/generated/services/subscriptions.ts +160 -0
  162. package/dist/generated/services/templates.d.ts +140 -0
  163. package/dist/generated/services/templates.d.ts.map +1 -0
  164. package/dist/generated/services/templates.js +207 -0
  165. package/dist/generated/services/templates.js.map +1 -0
  166. package/dist/generated/services/templates.ts +294 -0
  167. package/dist/generated/services/timeline.d.ts +31 -0
  168. package/dist/generated/services/timeline.d.ts.map +1 -0
  169. package/dist/generated/services/timeline.js +39 -0
  170. package/dist/generated/services/timeline.js.map +1 -0
  171. package/dist/generated/services/timeline.ts +62 -0
  172. package/dist/generated/services/timesheets.d.ts +145 -0
  173. package/dist/generated/services/timesheets.d.ts.map +1 -0
  174. package/dist/generated/services/timesheets.js +186 -0
  175. package/dist/generated/services/timesheets.js.map +1 -0
  176. package/dist/generated/services/timesheets.ts +289 -0
  177. package/dist/generated/services/todolist-groups.d.ts +74 -0
  178. package/dist/generated/services/todolist-groups.d.ts.map +1 -0
  179. package/dist/generated/services/todolist-groups.js +100 -0
  180. package/dist/generated/services/todolist-groups.js.map +1 -0
  181. package/dist/generated/services/todolist-groups.ts +151 -0
  182. package/dist/generated/services/todolists.d.ts +95 -0
  183. package/dist/generated/services/todolists.d.ts.map +1 -0
  184. package/dist/generated/services/todolists.js +130 -0
  185. package/dist/generated/services/todolists.js.map +1 -0
  186. package/dist/generated/services/todolists.ts +192 -0
  187. package/dist/generated/services/todos.d.ts +175 -0
  188. package/dist/generated/services/todos.d.ts.map +1 -0
  189. package/dist/generated/services/todos.js +255 -0
  190. package/dist/generated/services/todos.js.map +1 -0
  191. package/dist/generated/services/todos.ts +369 -0
  192. package/dist/generated/services/todosets.d.ts +27 -0
  193. package/dist/generated/services/todosets.d.ts.map +1 -0
  194. package/dist/generated/services/todosets.js +40 -0
  195. package/dist/generated/services/todosets.js.map +1 -0
  196. package/dist/generated/services/todosets.ts +55 -0
  197. package/dist/generated/services/tools.d.ts +122 -0
  198. package/dist/generated/services/tools.d.ts.map +1 -0
  199. package/dist/generated/services/tools.js +197 -0
  200. package/dist/generated/services/tools.js.map +1 -0
  201. package/dist/generated/services/tools.ts +267 -0
  202. package/dist/generated/services/uploads.d.ts +109 -0
  203. package/dist/generated/services/uploads.d.ts.map +1 -0
  204. package/dist/generated/services/uploads.js +153 -0
  205. package/dist/generated/services/uploads.js.map +1 -0
  206. package/dist/generated/services/uploads.ts +227 -0
  207. package/dist/generated/services/vaults.d.ts +86 -0
  208. package/dist/generated/services/vaults.d.ts.map +1 -0
  209. package/dist/generated/services/vaults.js +126 -0
  210. package/dist/generated/services/vaults.js.map +1 -0
  211. package/dist/generated/services/vaults.ts +182 -0
  212. package/dist/generated/services/webhooks.d.ts +106 -0
  213. package/dist/generated/services/webhooks.d.ts.map +1 -0
  214. package/dist/generated/services/webhooks.js +157 -0
  215. package/dist/generated/services/webhooks.js.map +1 -0
  216. package/dist/generated/services/webhooks.ts +226 -0
  217. package/dist/hooks/otel.d.ts +136 -0
  218. package/dist/hooks/otel.d.ts.map +1 -0
  219. package/dist/hooks/otel.js +240 -0
  220. package/dist/hooks/otel.js.map +1 -0
  221. package/dist/hooks.d.ts +171 -0
  222. package/dist/hooks.d.ts.map +1 -0
  223. package/dist/hooks.js +196 -0
  224. package/dist/hooks.js.map +1 -0
  225. package/dist/index.d.ts +90 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +122 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/oauth/authorize.d.ts +48 -0
  230. package/dist/oauth/authorize.d.ts.map +1 -0
  231. package/dist/oauth/authorize.js +56 -0
  232. package/dist/oauth/authorize.js.map +1 -0
  233. package/dist/oauth/callback-server.d.ts +56 -0
  234. package/dist/oauth/callback-server.d.ts.map +1 -0
  235. package/dist/oauth/callback-server.js +150 -0
  236. package/dist/oauth/callback-server.js.map +1 -0
  237. package/dist/oauth/discovery.d.ts +54 -0
  238. package/dist/oauth/discovery.d.ts.map +1 -0
  239. package/dist/oauth/discovery.js +116 -0
  240. package/dist/oauth/discovery.js.map +1 -0
  241. package/dist/oauth/exchange.d.ts +96 -0
  242. package/dist/oauth/exchange.d.ts.map +1 -0
  243. package/dist/oauth/exchange.js +324 -0
  244. package/dist/oauth/exchange.js.map +1 -0
  245. package/dist/oauth/identity.d.ts +30 -0
  246. package/dist/oauth/identity.d.ts.map +1 -0
  247. package/dist/oauth/identity.js +82 -0
  248. package/dist/oauth/identity.js.map +1 -0
  249. package/dist/oauth/index.d.ts +50 -0
  250. package/dist/oauth/index.d.ts.map +1 -0
  251. package/dist/oauth/index.js +58 -0
  252. package/dist/oauth/index.js.map +1 -0
  253. package/dist/oauth/interactive-login.d.ts +62 -0
  254. package/dist/oauth/interactive-login.d.ts.map +1 -0
  255. package/dist/oauth/interactive-login.js +106 -0
  256. package/dist/oauth/interactive-login.js.map +1 -0
  257. package/dist/oauth/pkce.d.ts +68 -0
  258. package/dist/oauth/pkce.d.ts.map +1 -0
  259. package/dist/oauth/pkce.js +80 -0
  260. package/dist/oauth/pkce.js.map +1 -0
  261. package/dist/oauth/token-manager.d.ts +92 -0
  262. package/dist/oauth/token-manager.d.ts.map +1 -0
  263. package/dist/oauth/token-manager.js +126 -0
  264. package/dist/oauth/token-manager.js.map +1 -0
  265. package/dist/oauth/token-store.d.ts +45 -0
  266. package/dist/oauth/token-store.d.ts.map +1 -0
  267. package/dist/oauth/token-store.js +105 -0
  268. package/dist/oauth/token-store.js.map +1 -0
  269. package/dist/oauth/types.d.ts +98 -0
  270. package/dist/oauth/types.d.ts.map +1 -0
  271. package/dist/oauth/types.js +8 -0
  272. package/dist/oauth/types.js.map +1 -0
  273. package/dist/pagination-utils.d.ts +27 -0
  274. package/dist/pagination-utils.d.ts.map +1 -0
  275. package/dist/pagination-utils.js +54 -0
  276. package/dist/pagination-utils.js.map +1 -0
  277. package/dist/pagination.d.ts +56 -0
  278. package/dist/pagination.d.ts.map +1 -0
  279. package/dist/pagination.js +57 -0
  280. package/dist/pagination.js.map +1 -0
  281. package/dist/security.d.ts +68 -0
  282. package/dist/security.d.ts.map +1 -0
  283. package/dist/security.js +107 -0
  284. package/dist/security.js.map +1 -0
  285. package/dist/services/authorization.d.ts +124 -0
  286. package/dist/services/authorization.d.ts.map +1 -0
  287. package/dist/services/authorization.js +117 -0
  288. package/dist/services/authorization.js.map +1 -0
  289. package/dist/services/base.d.ts +102 -0
  290. package/dist/services/base.d.ts.map +1 -0
  291. package/dist/services/base.js +230 -0
  292. package/dist/services/base.js.map +1 -0
  293. package/dist/webhooks/adapters/node-http.d.ts +14 -0
  294. package/dist/webhooks/adapters/node-http.d.ts.map +1 -0
  295. package/dist/webhooks/adapters/node-http.js +60 -0
  296. package/dist/webhooks/adapters/node-http.js.map +1 -0
  297. package/dist/webhooks/events.d.ts +52 -0
  298. package/dist/webhooks/events.d.ts.map +1 -0
  299. package/dist/webhooks/events.js +52 -0
  300. package/dist/webhooks/events.js.map +1 -0
  301. package/dist/webhooks/handler.d.ts +62 -0
  302. package/dist/webhooks/handler.d.ts.map +1 -0
  303. package/dist/webhooks/handler.js +226 -0
  304. package/dist/webhooks/handler.js.map +1 -0
  305. package/dist/webhooks/index.d.ts +5 -0
  306. package/dist/webhooks/index.d.ts.map +1 -0
  307. package/dist/webhooks/index.js +5 -0
  308. package/dist/webhooks/index.js.map +1 -0
  309. package/dist/webhooks/verify.d.ts +11 -0
  310. package/dist/webhooks/verify.d.ts.map +1 -0
  311. package/dist/webhooks/verify.js +25 -0
  312. package/dist/webhooks/verify.js.map +1 -0
  313. package/package.json +70 -0
  314. package/src/generated/metadata.json +2281 -0
  315. package/src/generated/openapi-stripped.json +21268 -0
  316. package/src/generated/path-mapping.ts +199 -0
  317. package/src/generated/schema.d.ts +14883 -0
  318. package/src/generated/services/attachments.ts +59 -0
  319. package/src/generated/services/boosts.ts +250 -0
  320. package/src/generated/services/campfires.ts +433 -0
  321. package/src/generated/services/card-columns.ts +360 -0
  322. package/src/generated/services/card-steps.ts +221 -0
  323. package/src/generated/services/card-tables.ts +55 -0
  324. package/src/generated/services/cards.ts +247 -0
  325. package/src/generated/services/checkins.ts +600 -0
  326. package/src/generated/services/client-approvals.ts +89 -0
  327. package/src/generated/services/client-correspondences.ts +89 -0
  328. package/src/generated/services/client-replies.ts +95 -0
  329. package/src/generated/services/client-visibility.ts +68 -0
  330. package/src/generated/services/comments.ts +185 -0
  331. package/src/generated/services/documents.ts +191 -0
  332. package/src/generated/services/events.ts +64 -0
  333. package/src/generated/services/forwards.ts +241 -0
  334. package/src/generated/services/index.ts +38 -0
  335. package/src/generated/services/lineup.ts +143 -0
  336. package/src/generated/services/message-boards.ts +55 -0
  337. package/src/generated/services/message-types.ts +210 -0
  338. package/src/generated/services/messages.ts +258 -0
  339. package/src/generated/services/people.ts +252 -0
  340. package/src/generated/services/projects.ts +224 -0
  341. package/src/generated/services/recordings.ts +191 -0
  342. package/src/generated/services/reports.ts +187 -0
  343. package/src/generated/services/schedules.ts +335 -0
  344. package/src/generated/services/search.ts +89 -0
  345. package/src/generated/services/subscriptions.ts +160 -0
  346. package/src/generated/services/templates.ts +294 -0
  347. package/src/generated/services/timeline.ts +62 -0
  348. package/src/generated/services/timesheets.ts +289 -0
  349. package/src/generated/services/todolist-groups.ts +151 -0
  350. package/src/generated/services/todolists.ts +192 -0
  351. package/src/generated/services/todos.ts +369 -0
  352. package/src/generated/services/todosets.ts +55 -0
  353. package/src/generated/services/tools.ts +267 -0
  354. package/src/generated/services/uploads.ts +227 -0
  355. package/src/generated/services/vaults.ts +182 -0
  356. package/src/generated/services/webhooks.ts +226 -0
@@ -0,0 +1,360 @@
1
+ /**
2
+ * CardColumns 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
+ /** CardColumn entity from the Basecamp API. */
16
+ export type CardColumn = components["schemas"]["CardColumn"];
17
+
18
+ /**
19
+ * Request parameters for update.
20
+ */
21
+ export interface UpdateCardColumnRequest {
22
+ /** Title */
23
+ title?: string;
24
+ /** Rich text description (HTML) */
25
+ description?: string;
26
+ }
27
+
28
+ /**
29
+ * Request parameters for setColor.
30
+ */
31
+ export interface SetColorCardColumnRequest {
32
+ /** Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown */
33
+ color: string;
34
+ }
35
+
36
+ /**
37
+ * Request parameters for create.
38
+ */
39
+ export interface CreateCardColumnRequest {
40
+ /** Title */
41
+ title: string;
42
+ /** Rich text description (HTML) */
43
+ description?: string;
44
+ }
45
+
46
+ /**
47
+ * Request parameters for move.
48
+ */
49
+ export interface MoveCardColumnRequest {
50
+ /** Source id */
51
+ sourceId: number;
52
+ /** Target id */
53
+ targetId: number;
54
+ /** Position for ordering (1-based) */
55
+ position?: number;
56
+ }
57
+
58
+
59
+ // =============================================================================
60
+ // Service
61
+ // =============================================================================
62
+
63
+ /**
64
+ * Service for CardColumns operations.
65
+ */
66
+ export class CardColumnsService extends BaseService {
67
+
68
+ /**
69
+ * Get a card column by ID
70
+ * @param columnId - The column ID
71
+ * @returns The CardColumn
72
+ * @throws {BasecampError} If the resource is not found
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const result = await client.cardColumns.get(123);
77
+ * ```
78
+ */
79
+ async get(columnId: number): Promise<CardColumn> {
80
+ const response = await this.request(
81
+ {
82
+ service: "CardColumns",
83
+ operation: "GetCardColumn",
84
+ resourceType: "card_column",
85
+ isMutation: false,
86
+ resourceId: columnId,
87
+ },
88
+ () =>
89
+ this.client.GET("/card_tables/columns/{columnId}", {
90
+ params: {
91
+ path: { columnId },
92
+ },
93
+ })
94
+ );
95
+ return response;
96
+ }
97
+
98
+ /**
99
+ * Update an existing column
100
+ * @param columnId - The column ID
101
+ * @param req - Card_column update parameters
102
+ * @returns The CardColumn
103
+ * @throws {BasecampError} If the resource is not found or fields are invalid
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * const result = await client.cardColumns.update(123, { });
108
+ * ```
109
+ */
110
+ async update(columnId: number, req: UpdateCardColumnRequest): Promise<CardColumn> {
111
+ const response = await this.request(
112
+ {
113
+ service: "CardColumns",
114
+ operation: "UpdateCardColumn",
115
+ resourceType: "card_column",
116
+ isMutation: true,
117
+ resourceId: columnId,
118
+ },
119
+ () =>
120
+ this.client.PUT("/card_tables/columns/{columnId}", {
121
+ params: {
122
+ path: { columnId },
123
+ },
124
+ body: {
125
+ title: req.title,
126
+ description: req.description,
127
+ },
128
+ })
129
+ );
130
+ return response;
131
+ }
132
+
133
+ /**
134
+ * Set the color of a column
135
+ * @param columnId - The column ID
136
+ * @param req - Card_column_color request parameters
137
+ * @returns The CardColumn
138
+ * @throws {BasecampError} If the request fails
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * const result = await client.cardColumns.setColor(123, { color: "example" });
143
+ * ```
144
+ */
145
+ async setColor(columnId: number, req: SetColorCardColumnRequest): Promise<CardColumn> {
146
+ if (!req.color) {
147
+ throw Errors.validation("Color is required");
148
+ }
149
+ const response = await this.request(
150
+ {
151
+ service: "CardColumns",
152
+ operation: "SetCardColumnColor",
153
+ resourceType: "card_column_color",
154
+ isMutation: true,
155
+ resourceId: columnId,
156
+ },
157
+ () =>
158
+ this.client.PUT("/card_tables/columns/{columnId}/color.json", {
159
+ params: {
160
+ path: { columnId },
161
+ },
162
+ body: {
163
+ color: req.color,
164
+ },
165
+ })
166
+ );
167
+ return response;
168
+ }
169
+
170
+ /**
171
+ * Enable on-hold section in a column
172
+ * @param columnId - The column ID
173
+ * @returns The CardColumn
174
+ * @throws {BasecampError} If the request fails
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * const result = await client.cardColumns.enableOnHold(123);
179
+ * ```
180
+ */
181
+ async enableOnHold(columnId: number): Promise<CardColumn> {
182
+ const response = await this.request(
183
+ {
184
+ service: "CardColumns",
185
+ operation: "EnableCardColumnOnHold",
186
+ resourceType: "card_column_on_hold",
187
+ isMutation: true,
188
+ resourceId: columnId,
189
+ },
190
+ () =>
191
+ this.client.POST("/card_tables/columns/{columnId}/on_hold.json", {
192
+ params: {
193
+ path: { columnId },
194
+ },
195
+ })
196
+ );
197
+ return response;
198
+ }
199
+
200
+ /**
201
+ * Disable on-hold section in a column
202
+ * @param columnId - The column ID
203
+ * @returns The CardColumn
204
+ * @throws {BasecampError} If the request fails
205
+ *
206
+ * @example
207
+ * ```ts
208
+ * const result = await client.cardColumns.disableOnHold(123);
209
+ * ```
210
+ */
211
+ async disableOnHold(columnId: number): Promise<CardColumn> {
212
+ const response = await this.request(
213
+ {
214
+ service: "CardColumns",
215
+ operation: "DisableCardColumnOnHold",
216
+ resourceType: "card_column_on_hold",
217
+ isMutation: true,
218
+ resourceId: columnId,
219
+ },
220
+ () =>
221
+ this.client.DELETE("/card_tables/columns/{columnId}/on_hold.json", {
222
+ params: {
223
+ path: { columnId },
224
+ },
225
+ })
226
+ );
227
+ return response;
228
+ }
229
+
230
+ /**
231
+ * Subscribe to a card column (watch for changes)
232
+ * @param columnId - The column ID
233
+ * @returns void
234
+ * @throws {BasecampError} If the request fails
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * await client.cardColumns.subscribeToColumn(123);
239
+ * ```
240
+ */
241
+ async subscribeToColumn(columnId: number): Promise<void> {
242
+ await this.request(
243
+ {
244
+ service: "CardColumns",
245
+ operation: "SubscribeToCardColumn",
246
+ resourceType: "to_card_column",
247
+ isMutation: true,
248
+ resourceId: columnId,
249
+ },
250
+ () =>
251
+ this.client.POST("/card_tables/lists/{columnId}/subscription.json", {
252
+ params: {
253
+ path: { columnId },
254
+ },
255
+ })
256
+ );
257
+ }
258
+
259
+ /**
260
+ * Unsubscribe from a card column (stop watching for changes)
261
+ * @param columnId - The column ID
262
+ * @returns void
263
+ * @throws {BasecampError} If the request fails
264
+ *
265
+ * @example
266
+ * ```ts
267
+ * await client.cardColumns.unsubscribeFromColumn(123);
268
+ * ```
269
+ */
270
+ async unsubscribeFromColumn(columnId: number): Promise<void> {
271
+ await this.request(
272
+ {
273
+ service: "CardColumns",
274
+ operation: "UnsubscribeFromCardColumn",
275
+ resourceType: "from_card_column",
276
+ isMutation: true,
277
+ resourceId: columnId,
278
+ },
279
+ () =>
280
+ this.client.DELETE("/card_tables/lists/{columnId}/subscription.json", {
281
+ params: {
282
+ path: { columnId },
283
+ },
284
+ })
285
+ );
286
+ }
287
+
288
+ /**
289
+ * Create a column in a card table
290
+ * @param cardTableId - The card table ID
291
+ * @param req - Card_column creation parameters
292
+ * @returns The CardColumn
293
+ * @throws {BasecampError} If required fields are missing or invalid
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * const result = await client.cardColumns.create(123, { title: "example" });
298
+ * ```
299
+ */
300
+ async create(cardTableId: number, req: CreateCardColumnRequest): Promise<CardColumn> {
301
+ if (!req.title) {
302
+ throw Errors.validation("Title is required");
303
+ }
304
+ const response = await this.request(
305
+ {
306
+ service: "CardColumns",
307
+ operation: "CreateCardColumn",
308
+ resourceType: "card_column",
309
+ isMutation: true,
310
+ resourceId: cardTableId,
311
+ },
312
+ () =>
313
+ this.client.POST("/card_tables/{cardTableId}/columns.json", {
314
+ params: {
315
+ path: { cardTableId },
316
+ },
317
+ body: {
318
+ title: req.title,
319
+ description: req.description,
320
+ },
321
+ })
322
+ );
323
+ return response;
324
+ }
325
+
326
+ /**
327
+ * Move a column within a card table
328
+ * @param cardTableId - The card table ID
329
+ * @param req - Card_column request parameters
330
+ * @returns void
331
+ * @throws {BasecampError} If the request fails
332
+ *
333
+ * @example
334
+ * ```ts
335
+ * await client.cardColumns.move(123, { sourceId: 1, targetId: 1 });
336
+ * ```
337
+ */
338
+ async move(cardTableId: number, req: MoveCardColumnRequest): Promise<void> {
339
+ await this.request(
340
+ {
341
+ service: "CardColumns",
342
+ operation: "MoveCardColumn",
343
+ resourceType: "card_column",
344
+ isMutation: true,
345
+ resourceId: cardTableId,
346
+ },
347
+ () =>
348
+ this.client.POST("/card_tables/{cardTableId}/moves.json", {
349
+ params: {
350
+ path: { cardTableId },
351
+ },
352
+ body: {
353
+ source_id: req.sourceId,
354
+ target_id: req.targetId,
355
+ position: req.position,
356
+ },
357
+ })
358
+ );
359
+ }
360
+ }
@@ -0,0 +1,221 @@
1
+ /**
2
+ * CardSteps 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
+ /** CardStep entity from the Basecamp API. */
16
+ export type CardStep = components["schemas"]["CardStep"];
17
+
18
+ /**
19
+ * Request parameters for reposition.
20
+ */
21
+ export interface RepositionCardStepRequest {
22
+ /** Source id */
23
+ sourceId: number;
24
+ /** 0-indexed position */
25
+ position: number;
26
+ }
27
+
28
+ /**
29
+ * Request parameters for create.
30
+ */
31
+ export interface CreateCardStepRequest {
32
+ /** Title */
33
+ title: string;
34
+ /** Due date (YYYY-MM-DD) */
35
+ dueOn?: string;
36
+ /** Assignees */
37
+ assignees?: number[];
38
+ }
39
+
40
+ /**
41
+ * Request parameters for update.
42
+ */
43
+ export interface UpdateCardStepRequest {
44
+ /** Title */
45
+ title?: string;
46
+ /** Due date (YYYY-MM-DD) */
47
+ dueOn?: string;
48
+ /** Assignees */
49
+ assignees?: number[];
50
+ }
51
+
52
+ /**
53
+ * Request parameters for setCompletion.
54
+ */
55
+ export interface SetCompletionCardStepRequest {
56
+ /** Set to "on" to complete the step, "" (empty) to uncomplete */
57
+ completion: string;
58
+ }
59
+
60
+
61
+ // =============================================================================
62
+ // Service
63
+ // =============================================================================
64
+
65
+ /**
66
+ * Service for CardSteps operations.
67
+ */
68
+ export class CardStepsService extends BaseService {
69
+
70
+ /**
71
+ * Reposition a step within a card
72
+ * @param cardId - The card ID
73
+ * @param req - Card_step request parameters
74
+ * @returns void
75
+ * @throws {BasecampError} If the request fails
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * await client.cardSteps.reposition(123, { sourceId: 1, position: 1 });
80
+ * ```
81
+ */
82
+ async reposition(cardId: number, req: RepositionCardStepRequest): Promise<void> {
83
+ await this.request(
84
+ {
85
+ service: "CardSteps",
86
+ operation: "RepositionCardStep",
87
+ resourceType: "card_step",
88
+ isMutation: true,
89
+ resourceId: cardId,
90
+ },
91
+ () =>
92
+ this.client.POST("/card_tables/cards/{cardId}/positions.json", {
93
+ params: {
94
+ path: { cardId },
95
+ },
96
+ body: {
97
+ source_id: req.sourceId,
98
+ position: req.position,
99
+ },
100
+ })
101
+ );
102
+ }
103
+
104
+ /**
105
+ * Create a step on a card
106
+ * @param cardId - The card ID
107
+ * @param req - Card_step creation parameters
108
+ * @returns The CardStep
109
+ * @throws {BasecampError} If required fields are missing or invalid
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * const result = await client.cardSteps.create(123, { title: "example" });
114
+ * ```
115
+ */
116
+ async create(cardId: number, req: CreateCardStepRequest): Promise<CardStep> {
117
+ if (!req.title) {
118
+ throw Errors.validation("Title is required");
119
+ }
120
+ if (req.dueOn && !/^\d{4}-\d{2}-\d{2}$/.test(req.dueOn)) {
121
+ throw Errors.validation("Due on must be in YYYY-MM-DD format");
122
+ }
123
+ const response = await this.request(
124
+ {
125
+ service: "CardSteps",
126
+ operation: "CreateCardStep",
127
+ resourceType: "card_step",
128
+ isMutation: true,
129
+ resourceId: cardId,
130
+ },
131
+ () =>
132
+ this.client.POST("/card_tables/cards/{cardId}/steps.json", {
133
+ params: {
134
+ path: { cardId },
135
+ },
136
+ body: {
137
+ title: req.title,
138
+ due_on: req.dueOn,
139
+ assignees: req.assignees,
140
+ },
141
+ })
142
+ );
143
+ return response;
144
+ }
145
+
146
+ /**
147
+ * Update an existing step
148
+ * @param stepId - The step ID
149
+ * @param req - Card_step update parameters
150
+ * @returns The CardStep
151
+ * @throws {BasecampError} If the resource is not found or fields are invalid
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * const result = await client.cardSteps.update(123, { });
156
+ * ```
157
+ */
158
+ async update(stepId: number, req: UpdateCardStepRequest): Promise<CardStep> {
159
+ if (req.dueOn && !/^\d{4}-\d{2}-\d{2}$/.test(req.dueOn)) {
160
+ throw Errors.validation("Due on must be in YYYY-MM-DD format");
161
+ }
162
+ const response = await this.request(
163
+ {
164
+ service: "CardSteps",
165
+ operation: "UpdateCardStep",
166
+ resourceType: "card_step",
167
+ isMutation: true,
168
+ resourceId: stepId,
169
+ },
170
+ () =>
171
+ this.client.PUT("/card_tables/steps/{stepId}", {
172
+ params: {
173
+ path: { stepId },
174
+ },
175
+ body: {
176
+ title: req.title,
177
+ due_on: req.dueOn,
178
+ assignees: req.assignees,
179
+ },
180
+ })
181
+ );
182
+ return response;
183
+ }
184
+
185
+ /**
186
+ * Set card step completion status (PUT with completion: "on" to complete, "" to uncomplete)
187
+ * @param stepId - The step ID
188
+ * @param req - Card_step_completion request parameters
189
+ * @returns The CardStep
190
+ * @throws {BasecampError} If the request fails
191
+ *
192
+ * @example
193
+ * ```ts
194
+ * const result = await client.cardSteps.setCompletion(123, { completion: "example" });
195
+ * ```
196
+ */
197
+ async setCompletion(stepId: number, req: SetCompletionCardStepRequest): Promise<CardStep> {
198
+ if (!req.completion) {
199
+ throw Errors.validation("Completion is required");
200
+ }
201
+ const response = await this.request(
202
+ {
203
+ service: "CardSteps",
204
+ operation: "SetCardStepCompletion",
205
+ resourceType: "card_step_completion",
206
+ isMutation: true,
207
+ resourceId: stepId,
208
+ },
209
+ () =>
210
+ this.client.PUT("/card_tables/steps/{stepId}/completions.json", {
211
+ params: {
212
+ path: { stepId },
213
+ },
214
+ body: {
215
+ completion: req.completion,
216
+ },
217
+ })
218
+ );
219
+ return response;
220
+ }
221
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * CardTables service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+
7
+ import { BaseService } from "../../services/base.js";
8
+ import type { components } from "../schema.js";
9
+
10
+ // =============================================================================
11
+ // Types
12
+ // =============================================================================
13
+
14
+ /** CardTable entity from the Basecamp API. */
15
+ export type CardTable = components["schemas"]["CardTable"];
16
+
17
+ // =============================================================================
18
+ // Service
19
+ // =============================================================================
20
+
21
+ /**
22
+ * Service for CardTables operations.
23
+ */
24
+ export class CardTablesService extends BaseService {
25
+
26
+ /**
27
+ * Get a card table by ID
28
+ * @param cardTableId - The card table ID
29
+ * @returns The CardTable
30
+ * @throws {BasecampError} If the resource is not found
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const result = await client.cardTables.get(123);
35
+ * ```
36
+ */
37
+ async get(cardTableId: number): Promise<CardTable> {
38
+ const response = await this.request(
39
+ {
40
+ service: "CardTables",
41
+ operation: "GetCardTable",
42
+ resourceType: "card_table",
43
+ isMutation: false,
44
+ resourceId: cardTableId,
45
+ },
46
+ () =>
47
+ this.client.GET("/card_tables/{cardTableId}", {
48
+ params: {
49
+ path: { cardTableId },
50
+ },
51
+ })
52
+ );
53
+ return response;
54
+ }
55
+ }