@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,335 @@
1
+ /**
2
+ * Schedules 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
+ /** ScheduleEntry entity from the Basecamp API. */
18
+ export type ScheduleEntry = components["schemas"]["ScheduleEntry"];
19
+ /** Schedule entity from the Basecamp API. */
20
+ export type Schedule = components["schemas"]["Schedule"];
21
+
22
+ /**
23
+ * Request parameters for updateEntry.
24
+ */
25
+ export interface UpdateEntryScheduleRequest {
26
+ /** Summary text */
27
+ summary?: string;
28
+ /** Starts at (RFC3339 (e.g., 2024-12-15T09:00:00Z)) */
29
+ startsAt?: string;
30
+ /** Ends at (RFC3339 (e.g., 2024-12-15T09:00:00Z)) */
31
+ endsAt?: string;
32
+ /** Rich text description (HTML) */
33
+ description?: string;
34
+ /** Participant ids */
35
+ participantIds?: number[];
36
+ /** All day */
37
+ allDay?: boolean;
38
+ /** Whether to send notifications to relevant people */
39
+ notify?: boolean;
40
+ }
41
+
42
+ /**
43
+ * Request parameters for updateSettings.
44
+ */
45
+ export interface UpdateSettingsScheduleRequest {
46
+ /** Include due assignments */
47
+ includeDueAssignments: boolean;
48
+ }
49
+
50
+ /**
51
+ * Options for listEntries.
52
+ */
53
+ export interface ListEntriesScheduleOptions extends PaginationOptions {
54
+ /** Filter by status */
55
+ status?: "active" | "archived" | "trashed";
56
+ }
57
+
58
+ /**
59
+ * Request parameters for createEntry.
60
+ */
61
+ export interface CreateEntryScheduleRequest {
62
+ /** Summary text */
63
+ summary: string;
64
+ /** Starts at (RFC3339 (e.g., 2024-12-15T09:00:00Z)) */
65
+ startsAt: string;
66
+ /** Ends at (RFC3339 (e.g., 2024-12-15T09:00:00Z)) */
67
+ endsAt: string;
68
+ /** Rich text description (HTML) */
69
+ description?: string;
70
+ /** Participant ids */
71
+ participantIds?: number[];
72
+ /** All day */
73
+ allDay?: boolean;
74
+ /** Whether to send notifications to relevant people */
75
+ notify?: boolean;
76
+ }
77
+
78
+
79
+ // =============================================================================
80
+ // Service
81
+ // =============================================================================
82
+
83
+ /**
84
+ * Service for Schedules operations.
85
+ */
86
+ export class SchedulesService extends BaseService {
87
+
88
+ /**
89
+ * Get a single schedule entry by id.
90
+ * @param entryId - The entry ID
91
+ * @returns The ScheduleEntry
92
+ * @throws {BasecampError} If the resource is not found
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * const result = await client.schedules.getEntry(123);
97
+ * ```
98
+ */
99
+ async getEntry(entryId: number): Promise<ScheduleEntry> {
100
+ const response = await this.request(
101
+ {
102
+ service: "Schedules",
103
+ operation: "GetScheduleEntry",
104
+ resourceType: "schedule_entry",
105
+ isMutation: false,
106
+ resourceId: entryId,
107
+ },
108
+ () =>
109
+ this.client.GET("/schedule_entries/{entryId}", {
110
+ params: {
111
+ path: { entryId },
112
+ },
113
+ })
114
+ );
115
+ return response;
116
+ }
117
+
118
+ /**
119
+ * Update an existing schedule entry
120
+ * @param entryId - The entry ID
121
+ * @param req - Schedule_entry update parameters
122
+ * @returns The ScheduleEntry
123
+ * @throws {BasecampError} If the resource is not found or fields are invalid
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const result = await client.schedules.updateEntry(123, { });
128
+ * ```
129
+ */
130
+ async updateEntry(entryId: number, req: UpdateEntryScheduleRequest): Promise<ScheduleEntry> {
131
+ const response = await this.request(
132
+ {
133
+ service: "Schedules",
134
+ operation: "UpdateScheduleEntry",
135
+ resourceType: "schedule_entry",
136
+ isMutation: true,
137
+ resourceId: entryId,
138
+ },
139
+ () =>
140
+ this.client.PUT("/schedule_entries/{entryId}", {
141
+ params: {
142
+ path: { entryId },
143
+ },
144
+ body: {
145
+ summary: req.summary,
146
+ starts_at: req.startsAt,
147
+ ends_at: req.endsAt,
148
+ description: req.description,
149
+ participant_ids: req.participantIds,
150
+ all_day: req.allDay,
151
+ notify: req.notify,
152
+ },
153
+ })
154
+ );
155
+ return response;
156
+ }
157
+
158
+ /**
159
+ * Get a specific occurrence of a recurring schedule entry
160
+ * @param entryId - The entry ID
161
+ * @param date - The date
162
+ * @returns The ScheduleEntry
163
+ * @throws {BasecampError} If the resource is not found
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * const result = await client.schedules.getEntryOccurrence(123, "example");
168
+ * ```
169
+ */
170
+ async getEntryOccurrence(entryId: number, date: string): Promise<ScheduleEntry> {
171
+ const response = await this.request(
172
+ {
173
+ service: "Schedules",
174
+ operation: "GetScheduleEntryOccurrence",
175
+ resourceType: "schedule_entry_occurrence",
176
+ isMutation: false,
177
+ resourceId: entryId,
178
+ },
179
+ () =>
180
+ this.client.GET("/schedule_entries/{entryId}/occurrences/{date}", {
181
+ params: {
182
+ path: { entryId, date },
183
+ },
184
+ })
185
+ );
186
+ return response;
187
+ }
188
+
189
+ /**
190
+ * Get a schedule
191
+ * @param scheduleId - The schedule ID
192
+ * @returns The Schedule
193
+ * @throws {BasecampError} If the resource is not found
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * const result = await client.schedules.get(123);
198
+ * ```
199
+ */
200
+ async get(scheduleId: number): Promise<Schedule> {
201
+ const response = await this.request(
202
+ {
203
+ service: "Schedules",
204
+ operation: "GetSchedule",
205
+ resourceType: "schedule",
206
+ isMutation: false,
207
+ resourceId: scheduleId,
208
+ },
209
+ () =>
210
+ this.client.GET("/schedules/{scheduleId}", {
211
+ params: {
212
+ path: { scheduleId },
213
+ },
214
+ })
215
+ );
216
+ return response;
217
+ }
218
+
219
+ /**
220
+ * Update schedule settings
221
+ * @param scheduleId - The schedule ID
222
+ * @param req - Schedule_setting update parameters
223
+ * @returns The Schedule
224
+ * @throws {BasecampError} If the resource is not found or fields are invalid
225
+ *
226
+ * @example
227
+ * ```ts
228
+ * const result = await client.schedules.updateSettings(123, { includeDueAssignments: true });
229
+ * ```
230
+ */
231
+ async updateSettings(scheduleId: number, req: UpdateSettingsScheduleRequest): Promise<Schedule> {
232
+ const response = await this.request(
233
+ {
234
+ service: "Schedules",
235
+ operation: "UpdateScheduleSettings",
236
+ resourceType: "schedule_setting",
237
+ isMutation: true,
238
+ resourceId: scheduleId,
239
+ },
240
+ () =>
241
+ this.client.PUT("/schedules/{scheduleId}", {
242
+ params: {
243
+ path: { scheduleId },
244
+ },
245
+ body: {
246
+ include_due_assignments: req.includeDueAssignments,
247
+ },
248
+ })
249
+ );
250
+ return response;
251
+ }
252
+
253
+ /**
254
+ * List entries on a schedule
255
+ * @param scheduleId - The schedule ID
256
+ * @param options - Optional query parameters
257
+ * @returns All ScheduleEntry across all pages, with .meta.totalCount
258
+ *
259
+ * @example
260
+ * ```ts
261
+ * const result = await client.schedules.listEntries(123);
262
+ *
263
+ * // With options
264
+ * const filtered = await client.schedules.listEntries(123, { status: "active" });
265
+ * ```
266
+ */
267
+ async listEntries(scheduleId: number, options?: ListEntriesScheduleOptions): Promise<ListResult<ScheduleEntry>> {
268
+ return this.requestPaginated(
269
+ {
270
+ service: "Schedules",
271
+ operation: "ListScheduleEntries",
272
+ resourceType: "schedule_entrie",
273
+ isMutation: false,
274
+ resourceId: scheduleId,
275
+ },
276
+ () =>
277
+ this.client.GET("/schedules/{scheduleId}/entries.json", {
278
+ params: {
279
+ path: { scheduleId },
280
+ query: { status: options?.status },
281
+ },
282
+ })
283
+ , options
284
+ );
285
+ }
286
+
287
+ /**
288
+ * Create a new schedule entry
289
+ * @param scheduleId - The schedule ID
290
+ * @param req - Schedule_entry creation parameters
291
+ * @returns The ScheduleEntry
292
+ * @throws {BasecampError} If required fields are missing or invalid
293
+ *
294
+ * @example
295
+ * ```ts
296
+ * const result = await client.schedules.createEntry(123, { summary: "example", startsAt: "2025-06-01T09:00:00Z", endsAt: "2025-06-01T09:00:00Z" });
297
+ * ```
298
+ */
299
+ async createEntry(scheduleId: number, req: CreateEntryScheduleRequest): Promise<ScheduleEntry> {
300
+ if (!req.summary) {
301
+ throw Errors.validation("Summary is required");
302
+ }
303
+ if (!req.startsAt) {
304
+ throw Errors.validation("Starts at is required");
305
+ }
306
+ if (!req.endsAt) {
307
+ throw Errors.validation("Ends at is required");
308
+ }
309
+ const response = await this.request(
310
+ {
311
+ service: "Schedules",
312
+ operation: "CreateScheduleEntry",
313
+ resourceType: "schedule_entry",
314
+ isMutation: true,
315
+ resourceId: scheduleId,
316
+ },
317
+ () =>
318
+ this.client.POST("/schedules/{scheduleId}/entries.json", {
319
+ params: {
320
+ path: { scheduleId },
321
+ },
322
+ body: {
323
+ summary: req.summary,
324
+ starts_at: req.startsAt,
325
+ ends_at: req.endsAt,
326
+ description: req.description,
327
+ participant_ids: req.participantIds,
328
+ all_day: req.allDay,
329
+ notify: req.notify,
330
+ },
331
+ })
332
+ );
333
+ return response;
334
+ }
335
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Search 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
+
17
+ /**
18
+ * Options for search.
19
+ */
20
+ export interface SearchSearchOptions extends PaginationOptions {
21
+ /** Filter by sort */
22
+ sort?: "created_at" | "updated_at";
23
+ /** Page */
24
+ page?: number;
25
+ }
26
+
27
+
28
+ // =============================================================================
29
+ // Service
30
+ // =============================================================================
31
+
32
+ /**
33
+ * Service for Search operations.
34
+ */
35
+ export class SearchService extends BaseService {
36
+
37
+ /**
38
+ * Search for content across the account
39
+ * @param query - query
40
+ * @param options - Optional query parameters
41
+ * @returns All results across all pages, with .meta.totalCount
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const result = await client.search.search("query");
46
+ * ```
47
+ */
48
+ async search(query: string, options?: SearchSearchOptions): Promise<components["schemas"]["SearchResponseContent"]> {
49
+ return this.requestPaginated(
50
+ {
51
+ service: "Search",
52
+ operation: "Search",
53
+ resourceType: "resource",
54
+ isMutation: false,
55
+ },
56
+ () =>
57
+ this.client.GET("/search.json", {
58
+ params: {
59
+ query: { query: query, sort: options?.sort, page: options?.page },
60
+ },
61
+ })
62
+ , options
63
+ );
64
+ }
65
+
66
+ /**
67
+ * Get search metadata (available filter options)
68
+ * @returns The search_metadata
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * const result = await client.search.metadata();
73
+ * ```
74
+ */
75
+ async metadata(): Promise<components["schemas"]["GetSearchMetadataResponseContent"]> {
76
+ const response = await this.request(
77
+ {
78
+ service: "Search",
79
+ operation: "GetSearchMetadata",
80
+ resourceType: "search_metadata",
81
+ isMutation: false,
82
+ },
83
+ () =>
84
+ this.client.GET("/searches/metadata.json", {
85
+ })
86
+ );
87
+ return response;
88
+ }
89
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Subscriptions 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
+ /** Subscription entity from the Basecamp API. */
15
+ export type Subscription = components["schemas"]["Subscription"];
16
+
17
+ /**
18
+ * Request parameters for update.
19
+ */
20
+ export interface UpdateSubscriptionRequest {
21
+ /** Subscriptions */
22
+ subscriptions?: number[];
23
+ /** Unsubscriptions */
24
+ unsubscriptions?: number[];
25
+ }
26
+
27
+
28
+ // =============================================================================
29
+ // Service
30
+ // =============================================================================
31
+
32
+ /**
33
+ * Service for Subscriptions operations.
34
+ */
35
+ export class SubscriptionsService extends BaseService {
36
+
37
+ /**
38
+ * Get subscription information for a recording
39
+ * @param recordingId - The recording ID
40
+ * @returns The Subscription
41
+ * @throws {BasecampError} If the resource is not found
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const result = await client.subscriptions.get(123);
46
+ * ```
47
+ */
48
+ async get(recordingId: number): Promise<Subscription> {
49
+ const response = await this.request(
50
+ {
51
+ service: "Subscriptions",
52
+ operation: "GetSubscription",
53
+ resourceType: "subscription",
54
+ isMutation: false,
55
+ resourceId: recordingId,
56
+ },
57
+ () =>
58
+ this.client.GET("/recordings/{recordingId}/subscription.json", {
59
+ params: {
60
+ path: { recordingId },
61
+ },
62
+ })
63
+ );
64
+ return response;
65
+ }
66
+
67
+ /**
68
+ * Subscribe the current user to a recording
69
+ * @param recordingId - The recording ID
70
+ * @returns The Subscription
71
+ * @throws {BasecampError} If the request fails
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * const result = await client.subscriptions.subscribe(123);
76
+ * ```
77
+ */
78
+ async subscribe(recordingId: number): Promise<Subscription> {
79
+ const response = await this.request(
80
+ {
81
+ service: "Subscriptions",
82
+ operation: "Subscribe",
83
+ resourceType: "resource",
84
+ isMutation: true,
85
+ resourceId: recordingId,
86
+ },
87
+ () =>
88
+ this.client.POST("/recordings/{recordingId}/subscription.json", {
89
+ params: {
90
+ path: { recordingId },
91
+ },
92
+ })
93
+ );
94
+ return response;
95
+ }
96
+
97
+ /**
98
+ * Update subscriptions by adding or removing specific users
99
+ * @param recordingId - The recording ID
100
+ * @param req - Subscription update parameters
101
+ * @returns The Subscription
102
+ * @throws {BasecampError} If the resource is not found or fields are invalid
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * const result = await client.subscriptions.update(123, { });
107
+ * ```
108
+ */
109
+ async update(recordingId: number, req: UpdateSubscriptionRequest): Promise<Subscription> {
110
+ const response = await this.request(
111
+ {
112
+ service: "Subscriptions",
113
+ operation: "UpdateSubscription",
114
+ resourceType: "subscription",
115
+ isMutation: true,
116
+ resourceId: recordingId,
117
+ },
118
+ () =>
119
+ this.client.PUT("/recordings/{recordingId}/subscription.json", {
120
+ params: {
121
+ path: { recordingId },
122
+ },
123
+ body: {
124
+ subscriptions: req.subscriptions,
125
+ unsubscriptions: req.unsubscriptions,
126
+ },
127
+ })
128
+ );
129
+ return response;
130
+ }
131
+
132
+ /**
133
+ * Unsubscribe the current user from a recording
134
+ * @param recordingId - The recording ID
135
+ * @returns void
136
+ * @throws {BasecampError} If the request fails
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * await client.subscriptions.unsubscribe(123);
141
+ * ```
142
+ */
143
+ async unsubscribe(recordingId: number): Promise<void> {
144
+ await this.request(
145
+ {
146
+ service: "Subscriptions",
147
+ operation: "Unsubscribe",
148
+ resourceType: "resource",
149
+ isMutation: true,
150
+ resourceId: recordingId,
151
+ },
152
+ () =>
153
+ this.client.DELETE("/recordings/{recordingId}/subscription.json", {
154
+ params: {
155
+ path: { recordingId },
156
+ },
157
+ })
158
+ );
159
+ }
160
+ }