@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,600 @@
1
+ /**
2
+ * Checkins 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 { ListResult } from "../../pagination.js";
10
+ import type { PaginationOptions } from "../../pagination.js";
11
+ import { Errors } from "../../errors.js";
12
+
13
+ // =============================================================================
14
+ // Types
15
+ // =============================================================================
16
+
17
+ /** Answer entity from the Basecamp API. */
18
+ export type Answer = components["schemas"]["QuestionAnswer"];
19
+ /** Questionnaire entity from the Basecamp API. */
20
+ export type Questionnaire = components["schemas"]["Questionnaire"];
21
+ /** Question entity from the Basecamp API. */
22
+ export type Question = components["schemas"]["Question"];
23
+ /** Person entity from the Basecamp API. */
24
+ export type Person = components["schemas"]["Person"];
25
+
26
+ /**
27
+ * Options for reminders.
28
+ */
29
+ export interface RemindersCheckinOptions extends PaginationOptions {
30
+ }
31
+
32
+ /**
33
+ * Request parameters for updateAnswer.
34
+ */
35
+ export interface UpdateAnswerCheckinRequest {
36
+ /** Text content */
37
+ content: string;
38
+ }
39
+
40
+ /**
41
+ * Options for listQuestions.
42
+ */
43
+ export interface ListQuestionsCheckinOptions extends PaginationOptions {
44
+ }
45
+
46
+ /**
47
+ * Request parameters for createQuestion.
48
+ */
49
+ export interface CreateQuestionCheckinRequest {
50
+ /** Title */
51
+ title: string;
52
+ /** Schedule */
53
+ schedule: components["schemas"]["QuestionSchedule"];
54
+ }
55
+
56
+ /**
57
+ * Request parameters for updateQuestion.
58
+ */
59
+ export interface UpdateQuestionCheckinRequest {
60
+ /** Title */
61
+ title?: string;
62
+ /** Schedule */
63
+ schedule?: components["schemas"]["QuestionSchedule"];
64
+ /** Paused */
65
+ paused?: boolean;
66
+ }
67
+
68
+ /**
69
+ * Options for listAnswers.
70
+ */
71
+ export interface ListAnswersCheckinOptions extends PaginationOptions {
72
+ }
73
+
74
+ /**
75
+ * Request parameters for createAnswer.
76
+ */
77
+ export interface CreateAnswerCheckinRequest {
78
+ /** Text content */
79
+ content: string;
80
+ /** Group on (YYYY-MM-DD) */
81
+ groupOn?: string;
82
+ }
83
+
84
+ /**
85
+ * Options for answerers.
86
+ */
87
+ export interface AnswerersCheckinOptions extends PaginationOptions {
88
+ }
89
+
90
+ /**
91
+ * Options for byPerson.
92
+ */
93
+ export interface ByPersonCheckinOptions extends PaginationOptions {
94
+ }
95
+
96
+ /**
97
+ * Request parameters for updateNotificationSettings.
98
+ */
99
+ export interface UpdateNotificationSettingsCheckinRequest {
100
+ /** Notify when someone answers */
101
+ notifyOnAnswer?: boolean;
102
+ /** Include unanswered in digest */
103
+ digestIncludeUnanswered?: boolean;
104
+ }
105
+
106
+
107
+ // =============================================================================
108
+ // Service
109
+ // =============================================================================
110
+
111
+ /**
112
+ * Service for Checkins operations.
113
+ */
114
+ export class CheckinsService extends BaseService {
115
+
116
+ /**
117
+ * Get pending check-in reminders for the current user
118
+ * @param options - Optional query parameters
119
+ * @returns All results across all pages, with .meta.totalCount
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * const result = await client.checkins.reminders();
124
+ * ```
125
+ */
126
+ async reminders(options?: RemindersCheckinOptions): Promise<components["schemas"]["GetQuestionRemindersResponseContent"]> {
127
+ return this.requestPaginated(
128
+ {
129
+ service: "Checkins",
130
+ operation: "GetQuestionReminders",
131
+ resourceType: "question_reminder",
132
+ isMutation: false,
133
+ },
134
+ () =>
135
+ this.client.GET("/my/question_reminders.json", {
136
+ })
137
+ , options
138
+ );
139
+ }
140
+
141
+ /**
142
+ * Get a single answer by id
143
+ * @param answerId - The answer ID
144
+ * @returns The Answer
145
+ * @throws {BasecampError} If the resource is not found
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * const result = await client.checkins.getAnswer(123);
150
+ * ```
151
+ */
152
+ async getAnswer(answerId: number): Promise<Answer> {
153
+ const response = await this.request(
154
+ {
155
+ service: "Checkins",
156
+ operation: "GetAnswer",
157
+ resourceType: "answer",
158
+ isMutation: false,
159
+ resourceId: answerId,
160
+ },
161
+ () =>
162
+ this.client.GET("/question_answers/{answerId}", {
163
+ params: {
164
+ path: { answerId },
165
+ },
166
+ })
167
+ );
168
+ return response;
169
+ }
170
+
171
+ /**
172
+ * Update an existing answer
173
+ * @param answerId - The answer ID
174
+ * @param req - Answer update parameters
175
+ * @returns void
176
+ * @throws {BasecampError} If the resource is not found or fields are invalid
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * await client.checkins.updateAnswer(123, { content: "Hello world" });
181
+ * ```
182
+ */
183
+ async updateAnswer(answerId: number, req: UpdateAnswerCheckinRequest): Promise<void> {
184
+ if (!req.content) {
185
+ throw Errors.validation("Content is required");
186
+ }
187
+ await this.request(
188
+ {
189
+ service: "Checkins",
190
+ operation: "UpdateAnswer",
191
+ resourceType: "answer",
192
+ isMutation: true,
193
+ resourceId: answerId,
194
+ },
195
+ () =>
196
+ this.client.PUT("/question_answers/{answerId}", {
197
+ params: {
198
+ path: { answerId },
199
+ },
200
+ body: {
201
+ content: req.content,
202
+ },
203
+ })
204
+ );
205
+ }
206
+
207
+ /**
208
+ * Get a questionnaire (automatic check-ins container) by id
209
+ * @param questionnaireId - The questionnaire ID
210
+ * @returns The Questionnaire
211
+ * @throws {BasecampError} If the resource is not found
212
+ *
213
+ * @example
214
+ * ```ts
215
+ * const result = await client.checkins.getQuestionnaire(123);
216
+ * ```
217
+ */
218
+ async getQuestionnaire(questionnaireId: number): Promise<Questionnaire> {
219
+ const response = await this.request(
220
+ {
221
+ service: "Checkins",
222
+ operation: "GetQuestionnaire",
223
+ resourceType: "questionnaire",
224
+ isMutation: false,
225
+ resourceId: questionnaireId,
226
+ },
227
+ () =>
228
+ this.client.GET("/questionnaires/{questionnaireId}", {
229
+ params: {
230
+ path: { questionnaireId },
231
+ },
232
+ })
233
+ );
234
+ return response;
235
+ }
236
+
237
+ /**
238
+ * List all questions in a questionnaire
239
+ * @param questionnaireId - The questionnaire ID
240
+ * @param options - Optional query parameters
241
+ * @returns All Question across all pages, with .meta.totalCount
242
+ *
243
+ * @example
244
+ * ```ts
245
+ * const result = await client.checkins.listQuestions(123);
246
+ * ```
247
+ */
248
+ async listQuestions(questionnaireId: number, options?: ListQuestionsCheckinOptions): Promise<ListResult<Question>> {
249
+ return this.requestPaginated(
250
+ {
251
+ service: "Checkins",
252
+ operation: "ListQuestions",
253
+ resourceType: "question",
254
+ isMutation: false,
255
+ resourceId: questionnaireId,
256
+ },
257
+ () =>
258
+ this.client.GET("/questionnaires/{questionnaireId}/questions.json", {
259
+ params: {
260
+ path: { questionnaireId },
261
+ },
262
+ })
263
+ , options
264
+ );
265
+ }
266
+
267
+ /**
268
+ * Create a new question in a questionnaire
269
+ * @param questionnaireId - The questionnaire ID
270
+ * @param req - Question creation parameters
271
+ * @returns The Question
272
+ * @throws {BasecampError} If required fields are missing or invalid
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * const result = await client.checkins.createQuestion(123, { title: "example", schedule: "example" });
277
+ * ```
278
+ */
279
+ async createQuestion(questionnaireId: number, req: CreateQuestionCheckinRequest): Promise<Question> {
280
+ if (!req.title) {
281
+ throw Errors.validation("Title is required");
282
+ }
283
+ if (!req.schedule) {
284
+ throw Errors.validation("Schedule is required");
285
+ }
286
+ const response = await this.request(
287
+ {
288
+ service: "Checkins",
289
+ operation: "CreateQuestion",
290
+ resourceType: "question",
291
+ isMutation: true,
292
+ resourceId: questionnaireId,
293
+ },
294
+ () =>
295
+ this.client.POST("/questionnaires/{questionnaireId}/questions.json", {
296
+ params: {
297
+ path: { questionnaireId },
298
+ },
299
+ body: {
300
+ title: req.title,
301
+ schedule: req.schedule,
302
+ },
303
+ })
304
+ );
305
+ return response;
306
+ }
307
+
308
+ /**
309
+ * Get a single question by id
310
+ * @param questionId - The question ID
311
+ * @returns The Question
312
+ * @throws {BasecampError} If the resource is not found
313
+ *
314
+ * @example
315
+ * ```ts
316
+ * const result = await client.checkins.getQuestion(123);
317
+ * ```
318
+ */
319
+ async getQuestion(questionId: number): Promise<Question> {
320
+ const response = await this.request(
321
+ {
322
+ service: "Checkins",
323
+ operation: "GetQuestion",
324
+ resourceType: "question",
325
+ isMutation: false,
326
+ resourceId: questionId,
327
+ },
328
+ () =>
329
+ this.client.GET("/questions/{questionId}", {
330
+ params: {
331
+ path: { questionId },
332
+ },
333
+ })
334
+ );
335
+ return response;
336
+ }
337
+
338
+ /**
339
+ * Update an existing question
340
+ * @param questionId - The question ID
341
+ * @param req - Question update parameters
342
+ * @returns The Question
343
+ * @throws {BasecampError} If the resource is not found or fields are invalid
344
+ *
345
+ * @example
346
+ * ```ts
347
+ * const result = await client.checkins.updateQuestion(123, { });
348
+ * ```
349
+ */
350
+ async updateQuestion(questionId: number, req: UpdateQuestionCheckinRequest): Promise<Question> {
351
+ const response = await this.request(
352
+ {
353
+ service: "Checkins",
354
+ operation: "UpdateQuestion",
355
+ resourceType: "question",
356
+ isMutation: true,
357
+ resourceId: questionId,
358
+ },
359
+ () =>
360
+ this.client.PUT("/questions/{questionId}", {
361
+ params: {
362
+ path: { questionId },
363
+ },
364
+ body: {
365
+ title: req.title,
366
+ schedule: req.schedule,
367
+ paused: req.paused,
368
+ },
369
+ })
370
+ );
371
+ return response;
372
+ }
373
+
374
+ /**
375
+ * List all answers for a question
376
+ * @param questionId - The question ID
377
+ * @param options - Optional query parameters
378
+ * @returns All Answer across all pages, with .meta.totalCount
379
+ *
380
+ * @example
381
+ * ```ts
382
+ * const result = await client.checkins.listAnswers(123);
383
+ * ```
384
+ */
385
+ async listAnswers(questionId: number, options?: ListAnswersCheckinOptions): Promise<ListResult<Answer>> {
386
+ return this.requestPaginated(
387
+ {
388
+ service: "Checkins",
389
+ operation: "ListAnswers",
390
+ resourceType: "answer",
391
+ isMutation: false,
392
+ resourceId: questionId,
393
+ },
394
+ () =>
395
+ this.client.GET("/questions/{questionId}/answers.json", {
396
+ params: {
397
+ path: { questionId },
398
+ },
399
+ })
400
+ , options
401
+ );
402
+ }
403
+
404
+ /**
405
+ * Create a new answer for a question
406
+ * @param questionId - The question ID
407
+ * @param req - Answer creation parameters
408
+ * @returns The Answer
409
+ * @throws {BasecampError} If required fields are missing or invalid
410
+ *
411
+ * @example
412
+ * ```ts
413
+ * const result = await client.checkins.createAnswer(123, { content: "Hello world" });
414
+ * ```
415
+ */
416
+ async createAnswer(questionId: number, req: CreateAnswerCheckinRequest): Promise<Answer> {
417
+ if (!req.content) {
418
+ throw Errors.validation("Content is required");
419
+ }
420
+ if (req.groupOn && !/^\d{4}-\d{2}-\d{2}$/.test(req.groupOn)) {
421
+ throw Errors.validation("Group on must be in YYYY-MM-DD format");
422
+ }
423
+ const response = await this.request(
424
+ {
425
+ service: "Checkins",
426
+ operation: "CreateAnswer",
427
+ resourceType: "answer",
428
+ isMutation: true,
429
+ resourceId: questionId,
430
+ },
431
+ () =>
432
+ this.client.POST("/questions/{questionId}/answers.json", {
433
+ params: {
434
+ path: { questionId },
435
+ },
436
+ body: {
437
+ content: req.content,
438
+ group_on: req.groupOn,
439
+ },
440
+ })
441
+ );
442
+ return response;
443
+ }
444
+
445
+ /**
446
+ * List all people who have answered a question (answerers)
447
+ * @param questionId - The question ID
448
+ * @param options - Optional query parameters
449
+ * @returns All Person across all pages, with .meta.totalCount
450
+ *
451
+ * @example
452
+ * ```ts
453
+ * const result = await client.checkins.answerers(123);
454
+ * ```
455
+ */
456
+ async answerers(questionId: number, options?: AnswerersCheckinOptions): Promise<ListResult<Person>> {
457
+ return this.requestPaginated(
458
+ {
459
+ service: "Checkins",
460
+ operation: "ListQuestionAnswerers",
461
+ resourceType: "question_answerer",
462
+ isMutation: false,
463
+ resourceId: questionId,
464
+ },
465
+ () =>
466
+ this.client.GET("/questions/{questionId}/answers/by.json", {
467
+ params: {
468
+ path: { questionId },
469
+ },
470
+ })
471
+ , options
472
+ );
473
+ }
474
+
475
+ /**
476
+ * Get all answers from a specific person for a question
477
+ * @param questionId - The question ID
478
+ * @param personId - The person ID
479
+ * @param options - Optional query parameters
480
+ * @returns All Answer across all pages, with .meta.totalCount
481
+ *
482
+ * @example
483
+ * ```ts
484
+ * const result = await client.checkins.byPerson(123, 123);
485
+ * ```
486
+ */
487
+ async byPerson(questionId: number, personId: number, options?: ByPersonCheckinOptions): Promise<ListResult<Answer>> {
488
+ return this.requestPaginated(
489
+ {
490
+ service: "Checkins",
491
+ operation: "GetAnswersByPerson",
492
+ resourceType: "answers_by_person",
493
+ isMutation: false,
494
+ resourceId: questionId,
495
+ },
496
+ () =>
497
+ this.client.GET("/questions/{questionId}/answers/by/{personId}", {
498
+ params: {
499
+ path: { questionId, personId },
500
+ },
501
+ })
502
+ , options
503
+ );
504
+ }
505
+
506
+ /**
507
+ * Update notification settings for a check-in question
508
+ * @param questionId - The question ID
509
+ * @param req - Question_notification_setting update parameters
510
+ * @returns The question_notification_setting
511
+ * @throws {BasecampError} If the resource is not found or fields are invalid
512
+ *
513
+ * @example
514
+ * ```ts
515
+ * const result = await client.checkins.updateNotificationSettings(123, { });
516
+ * ```
517
+ */
518
+ async updateNotificationSettings(questionId: number, req: UpdateNotificationSettingsCheckinRequest): Promise<components["schemas"]["UpdateQuestionNotificationSettingsResponseContent"]> {
519
+ const response = await this.request(
520
+ {
521
+ service: "Checkins",
522
+ operation: "UpdateQuestionNotificationSettings",
523
+ resourceType: "question_notification_setting",
524
+ isMutation: true,
525
+ resourceId: questionId,
526
+ },
527
+ () =>
528
+ this.client.PUT("/questions/{questionId}/notification_settings.json", {
529
+ params: {
530
+ path: { questionId },
531
+ },
532
+ body: {
533
+ notify_on_answer: req.notifyOnAnswer,
534
+ digest_include_unanswered: req.digestIncludeUnanswered,
535
+ },
536
+ })
537
+ );
538
+ return response;
539
+ }
540
+
541
+ /**
542
+ * Pause a check-in question (stops sending reminders)
543
+ * @param questionId - The question ID
544
+ * @returns The question
545
+ * @throws {BasecampError} If the request fails
546
+ *
547
+ * @example
548
+ * ```ts
549
+ * const result = await client.checkins.pause(123);
550
+ * ```
551
+ */
552
+ async pause(questionId: number): Promise<components["schemas"]["PauseQuestionResponseContent"]> {
553
+ const response = await this.request(
554
+ {
555
+ service: "Checkins",
556
+ operation: "PauseQuestion",
557
+ resourceType: "question",
558
+ isMutation: true,
559
+ resourceId: questionId,
560
+ },
561
+ () =>
562
+ this.client.POST("/questions/{questionId}/pause.json", {
563
+ params: {
564
+ path: { questionId },
565
+ },
566
+ })
567
+ );
568
+ return response;
569
+ }
570
+
571
+ /**
572
+ * Resume a paused check-in question (resumes sending reminders)
573
+ * @param questionId - The question ID
574
+ * @returns The question
575
+ * @throws {BasecampError} If the request fails
576
+ *
577
+ * @example
578
+ * ```ts
579
+ * const result = await client.checkins.resume(123);
580
+ * ```
581
+ */
582
+ async resume(questionId: number): Promise<components["schemas"]["ResumeQuestionResponseContent"]> {
583
+ const response = await this.request(
584
+ {
585
+ service: "Checkins",
586
+ operation: "ResumeQuestion",
587
+ resourceType: "question",
588
+ isMutation: true,
589
+ resourceId: questionId,
590
+ },
591
+ () =>
592
+ this.client.DELETE("/questions/{questionId}/pause.json", {
593
+ params: {
594
+ path: { questionId },
595
+ },
596
+ })
597
+ );
598
+ return response;
599
+ }
600
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * ClientApprovals 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 { ListResult } from "../../pagination.js";
10
+ import type { PaginationOptions } from "../../pagination.js";
11
+
12
+ // =============================================================================
13
+ // Types
14
+ // =============================================================================
15
+
16
+ /** ClientApproval entity from the Basecamp API. */
17
+ export type ClientApproval = components["schemas"]["ClientApproval"];
18
+
19
+ /**
20
+ * Options for list.
21
+ */
22
+ export interface ListClientApprovalOptions extends PaginationOptions {
23
+ }
24
+
25
+
26
+ // =============================================================================
27
+ // Service
28
+ // =============================================================================
29
+
30
+ /**
31
+ * Service for ClientApprovals operations.
32
+ */
33
+ export class ClientApprovalsService extends BaseService {
34
+
35
+ /**
36
+ * List all client approvals in a project
37
+ * @param options - Optional query parameters
38
+ * @returns All ClientApproval across all pages, with .meta.totalCount
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const result = await client.clientApprovals.list();
43
+ * ```
44
+ */
45
+ async list(options?: ListClientApprovalOptions): Promise<ListResult<ClientApproval>> {
46
+ return this.requestPaginated(
47
+ {
48
+ service: "ClientApprovals",
49
+ operation: "ListClientApprovals",
50
+ resourceType: "client_approval",
51
+ isMutation: false,
52
+ },
53
+ () =>
54
+ this.client.GET("/client/approvals.json", {
55
+ })
56
+ , options
57
+ );
58
+ }
59
+
60
+ /**
61
+ * Get a single client approval by id
62
+ * @param approvalId - The approval ID
63
+ * @returns The ClientApproval
64
+ * @throws {BasecampError} If the resource is not found
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * const result = await client.clientApprovals.get(123);
69
+ * ```
70
+ */
71
+ async get(approvalId: number): Promise<ClientApproval> {
72
+ const response = await this.request(
73
+ {
74
+ service: "ClientApprovals",
75
+ operation: "GetClientApproval",
76
+ resourceType: "client_approval",
77
+ isMutation: false,
78
+ resourceId: approvalId,
79
+ },
80
+ () =>
81
+ this.client.GET("/client/approvals/{approvalId}", {
82
+ params: {
83
+ path: { approvalId },
84
+ },
85
+ })
86
+ );
87
+ return response;
88
+ }
89
+ }