@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,182 @@
1
+ /**
2
+ * Vaults 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
+ /** Vault entity from the Basecamp API. */
18
+ export type Vault = components["schemas"]["Vault"];
19
+
20
+ /**
21
+ * Request parameters for update.
22
+ */
23
+ export interface UpdateVaultRequest {
24
+ /** Title */
25
+ title?: string;
26
+ }
27
+
28
+ /**
29
+ * Options for list.
30
+ */
31
+ export interface ListVaultOptions extends PaginationOptions {
32
+ }
33
+
34
+ /**
35
+ * Request parameters for create.
36
+ */
37
+ export interface CreateVaultRequest {
38
+ /** Title */
39
+ title: string;
40
+ }
41
+
42
+
43
+ // =============================================================================
44
+ // Service
45
+ // =============================================================================
46
+
47
+ /**
48
+ * Service for Vaults operations.
49
+ */
50
+ export class VaultsService extends BaseService {
51
+
52
+ /**
53
+ * Get a single vault by id
54
+ * @param vaultId - The vault ID
55
+ * @returns The Vault
56
+ * @throws {BasecampError} If the resource is not found
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * const result = await client.vaults.get(123);
61
+ * ```
62
+ */
63
+ async get(vaultId: number): Promise<Vault> {
64
+ const response = await this.request(
65
+ {
66
+ service: "Vaults",
67
+ operation: "GetVault",
68
+ resourceType: "vault",
69
+ isMutation: false,
70
+ resourceId: vaultId,
71
+ },
72
+ () =>
73
+ this.client.GET("/vaults/{vaultId}", {
74
+ params: {
75
+ path: { vaultId },
76
+ },
77
+ })
78
+ );
79
+ return response;
80
+ }
81
+
82
+ /**
83
+ * Update an existing vault
84
+ * @param vaultId - The vault ID
85
+ * @param req - Vault update parameters
86
+ * @returns The Vault
87
+ * @throws {BasecampError} If the resource is not found or fields are invalid
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * const result = await client.vaults.update(123, { });
92
+ * ```
93
+ */
94
+ async update(vaultId: number, req: UpdateVaultRequest): Promise<Vault> {
95
+ const response = await this.request(
96
+ {
97
+ service: "Vaults",
98
+ operation: "UpdateVault",
99
+ resourceType: "vault",
100
+ isMutation: true,
101
+ resourceId: vaultId,
102
+ },
103
+ () =>
104
+ this.client.PUT("/vaults/{vaultId}", {
105
+ params: {
106
+ path: { vaultId },
107
+ },
108
+ body: {
109
+ title: req.title,
110
+ },
111
+ })
112
+ );
113
+ return response;
114
+ }
115
+
116
+ /**
117
+ * List vaults (subfolders) in a vault
118
+ * @param vaultId - The vault ID
119
+ * @param options - Optional query parameters
120
+ * @returns All Vault across all pages, with .meta.totalCount
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * const result = await client.vaults.list(123);
125
+ * ```
126
+ */
127
+ async list(vaultId: number, options?: ListVaultOptions): Promise<ListResult<Vault>> {
128
+ return this.requestPaginated(
129
+ {
130
+ service: "Vaults",
131
+ operation: "ListVaults",
132
+ resourceType: "vault",
133
+ isMutation: false,
134
+ resourceId: vaultId,
135
+ },
136
+ () =>
137
+ this.client.GET("/vaults/{vaultId}/vaults.json", {
138
+ params: {
139
+ path: { vaultId },
140
+ },
141
+ })
142
+ , options
143
+ );
144
+ }
145
+
146
+ /**
147
+ * Create a new vault (subfolder) in a vault
148
+ * @param vaultId - The vault ID
149
+ * @param req - Vault creation parameters
150
+ * @returns The Vault
151
+ * @throws {BasecampError} If required fields are missing or invalid
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * const result = await client.vaults.create(123, { title: "example" });
156
+ * ```
157
+ */
158
+ async create(vaultId: number, req: CreateVaultRequest): Promise<Vault> {
159
+ if (!req.title) {
160
+ throw Errors.validation("Title is required");
161
+ }
162
+ const response = await this.request(
163
+ {
164
+ service: "Vaults",
165
+ operation: "CreateVault",
166
+ resourceType: "vault",
167
+ isMutation: true,
168
+ resourceId: vaultId,
169
+ },
170
+ () =>
171
+ this.client.POST("/vaults/{vaultId}/vaults.json", {
172
+ params: {
173
+ path: { vaultId },
174
+ },
175
+ body: {
176
+ title: req.title,
177
+ },
178
+ })
179
+ );
180
+ return response;
181
+ }
182
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Webhooks service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+ import { BaseService } from "../../services/base.js";
7
+ import type { components } from "../schema.js";
8
+ import { ListResult } from "../../pagination.js";
9
+ import type { PaginationOptions } from "../../pagination.js";
10
+ /** Webhook entity from the Basecamp API. */
11
+ export type Webhook = components["schemas"]["Webhook"];
12
+ /**
13
+ * Options for list.
14
+ */
15
+ export interface ListWebhookOptions extends PaginationOptions {
16
+ }
17
+ /**
18
+ * Request parameters for create.
19
+ */
20
+ export interface CreateWebhookRequest {
21
+ /** Payload url */
22
+ payloadUrl: string;
23
+ /** Types */
24
+ types: string[];
25
+ /** Active */
26
+ active?: boolean;
27
+ }
28
+ /**
29
+ * Request parameters for update.
30
+ */
31
+ export interface UpdateWebhookRequest {
32
+ /** Payload url */
33
+ payloadUrl?: string;
34
+ /** Types */
35
+ types?: string[];
36
+ /** Active */
37
+ active?: boolean;
38
+ }
39
+ /**
40
+ * Service for Webhooks operations.
41
+ */
42
+ export declare class WebhooksService extends BaseService {
43
+ /**
44
+ * List all webhooks for a project
45
+ * @param bucketId - The bucket ID
46
+ * @param options - Optional query parameters
47
+ * @returns All Webhook across all pages, with .meta.totalCount
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * const result = await client.webhooks.list(123);
52
+ * ```
53
+ */
54
+ list(bucketId: number, options?: ListWebhookOptions): Promise<ListResult<Webhook>>;
55
+ /**
56
+ * Create a new webhook for a project
57
+ * @param bucketId - The bucket ID
58
+ * @param req - Webhook creation parameters
59
+ * @returns The Webhook
60
+ * @throws {BasecampError} If required fields are missing or invalid
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const result = await client.webhooks.create(123, { payloadUrl: "example", types: [1234] });
65
+ * ```
66
+ */
67
+ create(bucketId: number, req: CreateWebhookRequest): Promise<Webhook>;
68
+ /**
69
+ * Get a single webhook by id
70
+ * @param webhookId - The webhook ID
71
+ * @returns The Webhook
72
+ * @throws {BasecampError} If the resource is not found
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const result = await client.webhooks.get(123);
77
+ * ```
78
+ */
79
+ get(webhookId: number): Promise<Webhook>;
80
+ /**
81
+ * Update an existing webhook
82
+ * @param webhookId - The webhook ID
83
+ * @param req - Webhook update parameters
84
+ * @returns The Webhook
85
+ * @throws {BasecampError} If the resource is not found or fields are invalid
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const result = await client.webhooks.update(123, { });
90
+ * ```
91
+ */
92
+ update(webhookId: number, req: UpdateWebhookRequest): Promise<Webhook>;
93
+ /**
94
+ * Delete a webhook
95
+ * @param webhookId - The webhook ID
96
+ * @returns void
97
+ * @throws {BasecampError} If the request fails
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * await client.webhooks.delete(123);
102
+ * ```
103
+ */
104
+ delete(webhookId: number): Promise<void>;
105
+ }
106
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../src/generated/services/webhooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAO7D,4CAA4C;AAC5C,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAE9C;;;;;;;;;;OAUG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAmBxF;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B3E;;;;;;;;;;OAUG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9C;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB5E;;;;;;;;;;OAUG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB/C"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Webhooks service for the Basecamp API.
3
+ *
4
+ * @generated from OpenAPI spec - do not edit directly
5
+ */
6
+ import { BaseService } from "../../services/base.js";
7
+ import { Errors } from "../../errors.js";
8
+ // =============================================================================
9
+ // Service
10
+ // =============================================================================
11
+ /**
12
+ * Service for Webhooks operations.
13
+ */
14
+ export class WebhooksService extends BaseService {
15
+ /**
16
+ * List all webhooks for a project
17
+ * @param bucketId - The bucket ID
18
+ * @param options - Optional query parameters
19
+ * @returns All Webhook across all pages, with .meta.totalCount
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const result = await client.webhooks.list(123);
24
+ * ```
25
+ */
26
+ async list(bucketId, options) {
27
+ return this.requestPaginated({
28
+ service: "Webhooks",
29
+ operation: "ListWebhooks",
30
+ resourceType: "webhook",
31
+ isMutation: false,
32
+ resourceId: bucketId,
33
+ }, () => this.client.GET("/buckets/{bucketId}/webhooks.json", {
34
+ params: {
35
+ path: { bucketId },
36
+ },
37
+ }), options);
38
+ }
39
+ /**
40
+ * Create a new webhook for a project
41
+ * @param bucketId - The bucket ID
42
+ * @param req - Webhook creation parameters
43
+ * @returns The Webhook
44
+ * @throws {BasecampError} If required fields are missing or invalid
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const result = await client.webhooks.create(123, { payloadUrl: "example", types: [1234] });
49
+ * ```
50
+ */
51
+ async create(bucketId, req) {
52
+ if (!req.payloadUrl) {
53
+ throw Errors.validation("Payload url is required");
54
+ }
55
+ if (!req.types) {
56
+ throw Errors.validation("Types is required");
57
+ }
58
+ const response = await this.request({
59
+ service: "Webhooks",
60
+ operation: "CreateWebhook",
61
+ resourceType: "webhook",
62
+ isMutation: true,
63
+ resourceId: bucketId,
64
+ }, () => this.client.POST("/buckets/{bucketId}/webhooks.json", {
65
+ params: {
66
+ path: { bucketId },
67
+ },
68
+ body: {
69
+ payload_url: req.payloadUrl,
70
+ types: req.types,
71
+ active: req.active,
72
+ },
73
+ }));
74
+ return response;
75
+ }
76
+ /**
77
+ * Get a single webhook by id
78
+ * @param webhookId - The webhook ID
79
+ * @returns The Webhook
80
+ * @throws {BasecampError} If the resource is not found
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * const result = await client.webhooks.get(123);
85
+ * ```
86
+ */
87
+ async get(webhookId) {
88
+ const response = await this.request({
89
+ service: "Webhooks",
90
+ operation: "GetWebhook",
91
+ resourceType: "webhook",
92
+ isMutation: false,
93
+ resourceId: webhookId,
94
+ }, () => this.client.GET("/webhooks/{webhookId}", {
95
+ params: {
96
+ path: { webhookId },
97
+ },
98
+ }));
99
+ return response;
100
+ }
101
+ /**
102
+ * Update an existing webhook
103
+ * @param webhookId - The webhook ID
104
+ * @param req - Webhook update parameters
105
+ * @returns The Webhook
106
+ * @throws {BasecampError} If the resource is not found or fields are invalid
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * const result = await client.webhooks.update(123, { });
111
+ * ```
112
+ */
113
+ async update(webhookId, req) {
114
+ const response = await this.request({
115
+ service: "Webhooks",
116
+ operation: "UpdateWebhook",
117
+ resourceType: "webhook",
118
+ isMutation: true,
119
+ resourceId: webhookId,
120
+ }, () => this.client.PUT("/webhooks/{webhookId}", {
121
+ params: {
122
+ path: { webhookId },
123
+ },
124
+ body: {
125
+ payload_url: req.payloadUrl,
126
+ types: req.types,
127
+ active: req.active,
128
+ },
129
+ }));
130
+ return response;
131
+ }
132
+ /**
133
+ * Delete a webhook
134
+ * @param webhookId - The webhook ID
135
+ * @returns void
136
+ * @throws {BasecampError} If the request fails
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * await client.webhooks.delete(123);
141
+ * ```
142
+ */
143
+ async delete(webhookId) {
144
+ await this.request({
145
+ service: "Webhooks",
146
+ operation: "DeleteWebhook",
147
+ resourceType: "webhook",
148
+ isMutation: true,
149
+ resourceId: webhookId,
150
+ }, () => this.client.DELETE("/webhooks/{webhookId}", {
151
+ params: {
152
+ path: { webhookId },
153
+ },
154
+ }));
155
+ }
156
+ }
157
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/generated/services/webhooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Webhooks 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
+ /** Webhook entity from the Basecamp API. */
18
+ export type Webhook = components["schemas"]["Webhook"];
19
+
20
+ /**
21
+ * Options for list.
22
+ */
23
+ export interface ListWebhookOptions extends PaginationOptions {
24
+ }
25
+
26
+ /**
27
+ * Request parameters for create.
28
+ */
29
+ export interface CreateWebhookRequest {
30
+ /** Payload url */
31
+ payloadUrl: string;
32
+ /** Types */
33
+ types: string[];
34
+ /** Active */
35
+ active?: boolean;
36
+ }
37
+
38
+ /**
39
+ * Request parameters for update.
40
+ */
41
+ export interface UpdateWebhookRequest {
42
+ /** Payload url */
43
+ payloadUrl?: string;
44
+ /** Types */
45
+ types?: string[];
46
+ /** Active */
47
+ active?: boolean;
48
+ }
49
+
50
+
51
+ // =============================================================================
52
+ // Service
53
+ // =============================================================================
54
+
55
+ /**
56
+ * Service for Webhooks operations.
57
+ */
58
+ export class WebhooksService extends BaseService {
59
+
60
+ /**
61
+ * List all webhooks for a project
62
+ * @param bucketId - The bucket ID
63
+ * @param options - Optional query parameters
64
+ * @returns All Webhook across all pages, with .meta.totalCount
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * const result = await client.webhooks.list(123);
69
+ * ```
70
+ */
71
+ async list(bucketId: number, options?: ListWebhookOptions): Promise<ListResult<Webhook>> {
72
+ return this.requestPaginated(
73
+ {
74
+ service: "Webhooks",
75
+ operation: "ListWebhooks",
76
+ resourceType: "webhook",
77
+ isMutation: false,
78
+ resourceId: bucketId,
79
+ },
80
+ () =>
81
+ this.client.GET("/buckets/{bucketId}/webhooks.json", {
82
+ params: {
83
+ path: { bucketId },
84
+ },
85
+ })
86
+ , options
87
+ );
88
+ }
89
+
90
+ /**
91
+ * Create a new webhook for a project
92
+ * @param bucketId - The bucket ID
93
+ * @param req - Webhook creation parameters
94
+ * @returns The Webhook
95
+ * @throws {BasecampError} If required fields are missing or invalid
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * const result = await client.webhooks.create(123, { payloadUrl: "example", types: [1234] });
100
+ * ```
101
+ */
102
+ async create(bucketId: number, req: CreateWebhookRequest): Promise<Webhook> {
103
+ if (!req.payloadUrl) {
104
+ throw Errors.validation("Payload url is required");
105
+ }
106
+ if (!req.types) {
107
+ throw Errors.validation("Types is required");
108
+ }
109
+ const response = await this.request(
110
+ {
111
+ service: "Webhooks",
112
+ operation: "CreateWebhook",
113
+ resourceType: "webhook",
114
+ isMutation: true,
115
+ resourceId: bucketId,
116
+ },
117
+ () =>
118
+ this.client.POST("/buckets/{bucketId}/webhooks.json", {
119
+ params: {
120
+ path: { bucketId },
121
+ },
122
+ body: {
123
+ payload_url: req.payloadUrl,
124
+ types: req.types,
125
+ active: req.active,
126
+ },
127
+ })
128
+ );
129
+ return response;
130
+ }
131
+
132
+ /**
133
+ * Get a single webhook by id
134
+ * @param webhookId - The webhook ID
135
+ * @returns The Webhook
136
+ * @throws {BasecampError} If the resource is not found
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * const result = await client.webhooks.get(123);
141
+ * ```
142
+ */
143
+ async get(webhookId: number): Promise<Webhook> {
144
+ const response = await this.request(
145
+ {
146
+ service: "Webhooks",
147
+ operation: "GetWebhook",
148
+ resourceType: "webhook",
149
+ isMutation: false,
150
+ resourceId: webhookId,
151
+ },
152
+ () =>
153
+ this.client.GET("/webhooks/{webhookId}", {
154
+ params: {
155
+ path: { webhookId },
156
+ },
157
+ })
158
+ );
159
+ return response;
160
+ }
161
+
162
+ /**
163
+ * Update an existing webhook
164
+ * @param webhookId - The webhook ID
165
+ * @param req - Webhook update parameters
166
+ * @returns The Webhook
167
+ * @throws {BasecampError} If the resource is not found or fields are invalid
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * const result = await client.webhooks.update(123, { });
172
+ * ```
173
+ */
174
+ async update(webhookId: number, req: UpdateWebhookRequest): Promise<Webhook> {
175
+ const response = await this.request(
176
+ {
177
+ service: "Webhooks",
178
+ operation: "UpdateWebhook",
179
+ resourceType: "webhook",
180
+ isMutation: true,
181
+ resourceId: webhookId,
182
+ },
183
+ () =>
184
+ this.client.PUT("/webhooks/{webhookId}", {
185
+ params: {
186
+ path: { webhookId },
187
+ },
188
+ body: {
189
+ payload_url: req.payloadUrl,
190
+ types: req.types,
191
+ active: req.active,
192
+ },
193
+ })
194
+ );
195
+ return response;
196
+ }
197
+
198
+ /**
199
+ * Delete a webhook
200
+ * @param webhookId - The webhook ID
201
+ * @returns void
202
+ * @throws {BasecampError} If the request fails
203
+ *
204
+ * @example
205
+ * ```ts
206
+ * await client.webhooks.delete(123);
207
+ * ```
208
+ */
209
+ async delete(webhookId: number): Promise<void> {
210
+ await this.request(
211
+ {
212
+ service: "Webhooks",
213
+ operation: "DeleteWebhook",
214
+ resourceType: "webhook",
215
+ isMutation: true,
216
+ resourceId: webhookId,
217
+ },
218
+ () =>
219
+ this.client.DELETE("/webhooks/{webhookId}", {
220
+ params: {
221
+ path: { webhookId },
222
+ },
223
+ })
224
+ );
225
+ }
226
+ }