@37signals/basecamp 0.5.0 → 0.7.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 (137) hide show
  1. package/dist/client.d.ts +22 -1
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +37 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/download.d.ts +40 -0
  6. package/dist/download.d.ts.map +1 -0
  7. package/dist/download.js +182 -0
  8. package/dist/download.js.map +1 -0
  9. package/dist/generated/metadata.json +330 -1
  10. package/dist/generated/openapi-stripped.json +5261 -1905
  11. package/dist/generated/path-mapping.d.ts.map +1 -1
  12. package/dist/generated/path-mapping.js +28 -2
  13. package/dist/generated/path-mapping.js.map +1 -1
  14. package/dist/generated/path-mapping.ts +29 -3
  15. package/dist/generated/schema.d.ts +2578 -333
  16. package/dist/generated/services/account.d.ts +66 -0
  17. package/dist/generated/services/account.d.ts.map +1 -0
  18. package/dist/generated/services/account.js +101 -0
  19. package/dist/generated/services/account.js.map +1 -0
  20. package/dist/generated/services/account.ts +144 -0
  21. package/dist/generated/services/automation.d.ts +25 -0
  22. package/dist/generated/services/automation.d.ts.map +1 -0
  23. package/dist/generated/services/automation.js +33 -0
  24. package/dist/generated/services/automation.js.map +1 -0
  25. package/dist/generated/services/automation.ts +49 -0
  26. package/dist/generated/services/boosts.js +2 -2
  27. package/dist/generated/services/boosts.js.map +1 -1
  28. package/dist/generated/services/boosts.ts +2 -2
  29. package/dist/generated/services/campfires.d.ts +14 -0
  30. package/dist/generated/services/campfires.d.ts.map +1 -1
  31. package/dist/generated/services/campfires.js +13 -5
  32. package/dist/generated/services/campfires.js.map +1 -1
  33. package/dist/generated/services/campfires.ts +21 -5
  34. package/dist/generated/services/card-steps.d.ts +12 -0
  35. package/dist/generated/services/card-steps.d.ts.map +1 -1
  36. package/dist/generated/services/card-steps.js +25 -0
  37. package/dist/generated/services/card-steps.js.map +1 -1
  38. package/dist/generated/services/card-steps.ts +30 -0
  39. package/dist/generated/services/cards.d.ts +2 -0
  40. package/dist/generated/services/cards.d.ts.map +1 -1
  41. package/dist/generated/services/cards.js +1 -0
  42. package/dist/generated/services/cards.js.map +1 -1
  43. package/dist/generated/services/cards.ts +3 -0
  44. package/dist/generated/services/checkins.js +1 -1
  45. package/dist/generated/services/checkins.js.map +1 -1
  46. package/dist/generated/services/checkins.ts +1 -1
  47. package/dist/generated/services/client-approvals.d.ts +7 -0
  48. package/dist/generated/services/client-approvals.d.ts.map +1 -1
  49. package/dist/generated/services/client-approvals.js +8 -1
  50. package/dist/generated/services/client-approvals.js.map +1 -1
  51. package/dist/generated/services/client-approvals.ts +10 -0
  52. package/dist/generated/services/client-correspondences.d.ts +7 -0
  53. package/dist/generated/services/client-correspondences.d.ts.map +1 -1
  54. package/dist/generated/services/client-correspondences.js +8 -1
  55. package/dist/generated/services/client-correspondences.js.map +1 -1
  56. package/dist/generated/services/client-correspondences.ts +10 -0
  57. package/dist/generated/services/client-replies.js +1 -1
  58. package/dist/generated/services/client-replies.js.map +1 -1
  59. package/dist/generated/services/client-replies.ts +1 -1
  60. package/dist/generated/services/forwards.d.ts +7 -0
  61. package/dist/generated/services/forwards.d.ts.map +1 -1
  62. package/dist/generated/services/forwards.js +5 -1
  63. package/dist/generated/services/forwards.js.map +1 -1
  64. package/dist/generated/services/forwards.ts +9 -1
  65. package/dist/generated/services/gauges.d.ts +140 -0
  66. package/dist/generated/services/gauges.d.ts.map +1 -0
  67. package/dist/generated/services/gauges.js +207 -0
  68. package/dist/generated/services/gauges.js.map +1 -0
  69. package/dist/generated/services/gauges.ts +298 -0
  70. package/dist/generated/services/hill-charts.d.ts +47 -0
  71. package/dist/generated/services/hill-charts.d.ts.map +1 -0
  72. package/dist/generated/services/hill-charts.js +70 -0
  73. package/dist/generated/services/hill-charts.js.map +1 -0
  74. package/dist/generated/services/hill-charts.ts +99 -0
  75. package/dist/generated/services/index.d.ts +6 -0
  76. package/dist/generated/services/index.d.ts.map +1 -1
  77. package/dist/generated/services/index.js +6 -0
  78. package/dist/generated/services/index.js.map +1 -1
  79. package/dist/generated/services/index.ts +6 -0
  80. package/dist/generated/services/my-assignments.d.ts +52 -0
  81. package/dist/generated/services/my-assignments.d.ts.map +1 -0
  82. package/dist/generated/services/my-assignments.js +74 -0
  83. package/dist/generated/services/my-assignments.js.map +1 -0
  84. package/dist/generated/services/my-assignments.ts +109 -0
  85. package/dist/generated/services/my-notifications.d.ts +50 -0
  86. package/dist/generated/services/my-notifications.d.ts.map +1 -0
  87. package/dist/generated/services/my-notifications.js +65 -0
  88. package/dist/generated/services/my-notifications.js.map +1 -0
  89. package/dist/generated/services/my-notifications.ts +100 -0
  90. package/dist/generated/services/people.d.ts +105 -0
  91. package/dist/generated/services/people.d.ts.map +1 -1
  92. package/dist/generated/services/people.js +156 -0
  93. package/dist/generated/services/people.js.map +1 -1
  94. package/dist/generated/services/people.ts +225 -0
  95. package/dist/generated/services/search.d.ts +1 -1
  96. package/dist/generated/services/search.ts +1 -1
  97. package/dist/generated/services/templates.js +1 -1
  98. package/dist/generated/services/templates.js.map +1 -1
  99. package/dist/generated/services/templates.ts +1 -1
  100. package/dist/generated/services/tools.d.ts +2 -0
  101. package/dist/generated/services/tools.d.ts.map +1 -1
  102. package/dist/generated/services/tools.js +1 -0
  103. package/dist/generated/services/tools.js.map +1 -1
  104. package/dist/generated/services/tools.ts +3 -0
  105. package/dist/index.d.ts +7 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +13 -0
  108. package/dist/index.js.map +1 -1
  109. package/dist/services/base.d.ts +19 -1
  110. package/dist/services/base.d.ts.map +1 -1
  111. package/dist/services/base.js +110 -1
  112. package/dist/services/base.js.map +1 -1
  113. package/package.json +1 -1
  114. package/src/generated/metadata.json +330 -1
  115. package/src/generated/openapi-stripped.json +5261 -1905
  116. package/src/generated/path-mapping.ts +29 -3
  117. package/src/generated/schema.d.ts +2578 -333
  118. package/src/generated/services/account.ts +144 -0
  119. package/src/generated/services/automation.ts +49 -0
  120. package/src/generated/services/boosts.ts +2 -2
  121. package/src/generated/services/campfires.ts +21 -5
  122. package/src/generated/services/card-steps.ts +30 -0
  123. package/src/generated/services/cards.ts +3 -0
  124. package/src/generated/services/checkins.ts +1 -1
  125. package/src/generated/services/client-approvals.ts +10 -0
  126. package/src/generated/services/client-correspondences.ts +10 -0
  127. package/src/generated/services/client-replies.ts +1 -1
  128. package/src/generated/services/forwards.ts +9 -1
  129. package/src/generated/services/gauges.ts +298 -0
  130. package/src/generated/services/hill-charts.ts +99 -0
  131. package/src/generated/services/index.ts +6 -0
  132. package/src/generated/services/my-assignments.ts +109 -0
  133. package/src/generated/services/my-notifications.ts +100 -0
  134. package/src/generated/services/people.ts +225 -0
  135. package/src/generated/services/search.ts +1 -1
  136. package/src/generated/services/templates.ts +1 -1
  137. package/src/generated/services/tools.ts +3 -0
@@ -39,6 +39,10 @@ export interface CreateReplyForwardRequest {
39
39
  * Options for list.
40
40
  */
41
41
  export interface ListForwardOptions extends PaginationOptions {
42
+ /** Filter by sort */
43
+ sort?: "created_at" | "updated_at";
44
+ /** Filter by direction */
45
+ direction?: "asc" | "desc";
42
46
  }
43
47
 
44
48
 
@@ -167,7 +171,7 @@ export class ForwardsService extends BaseService {
167
171
  operation: "GetForwardReply",
168
172
  resourceType: "forward_reply",
169
173
  isMutation: false,
170
- resourceId: forwardId,
174
+ resourceId: replyId,
171
175
  },
172
176
  () =>
173
177
  this.client.GET("/inbox_forwards/{forwardId}/replies/{replyId}", {
@@ -218,6 +222,9 @@ export class ForwardsService extends BaseService {
218
222
  * @example
219
223
  * ```ts
220
224
  * const result = await client.forwards.list(123);
225
+ *
226
+ * // With options
227
+ * const filtered = await client.forwards.list(123, { sort: "created_at" });
221
228
  * ```
222
229
  */
223
230
  async list(inboxId: number, options?: ListForwardOptions): Promise<ListResult<Forward>> {
@@ -233,6 +240,7 @@ export class ForwardsService extends BaseService {
233
240
  this.client.GET("/inboxes/{inboxId}/forwards.json", {
234
241
  params: {
235
242
  path: { inboxId },
243
+ query: { sort: options?.sort, direction: options?.direction },
236
244
  },
237
245
  })
238
246
  , options
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Gauges 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 type { PaginationOptions } from "../../pagination.js";
9
+ /**
10
+ * Request parameters for updateGaugeNeedle.
11
+ */
12
+ export interface UpdateGaugeNeedleGaugeRequest {
13
+ /** Gauge needle */
14
+ gaugeNeedle?: components["schemas"]["GaugeNeedleUpdatePayload"];
15
+ }
16
+ /**
17
+ * Request parameters for toggleGauge.
18
+ */
19
+ export interface ToggleGaugeGaugeRequest {
20
+ /** Gauge */
21
+ gauge: components["schemas"]["GaugeTogglePayload"];
22
+ }
23
+ /**
24
+ * Options for listGaugeNeedles.
25
+ */
26
+ export interface ListGaugeNeedlesGaugeOptions extends PaginationOptions {
27
+ }
28
+ /**
29
+ * Request parameters for createGaugeNeedle.
30
+ */
31
+ export interface CreateGaugeNeedleGaugeRequest {
32
+ /** Gauge needle */
33
+ gaugeNeedle: components["schemas"]["GaugeNeedlePayload"];
34
+ /** Who to notify: "everyone", "working_on", "custom", or omit for nobody */
35
+ notify?: string;
36
+ /** Array of people IDs to notify (only used when notify is "custom") */
37
+ subscriptions?: number[];
38
+ }
39
+ /**
40
+ * Options for listGauges.
41
+ */
42
+ export interface ListGaugesGaugeOptions extends PaginationOptions {
43
+ /** Comma-separated list of project IDs. When provided, results are returned
44
+ in the order specified instead of by risk level. */
45
+ bucketIds?: string;
46
+ }
47
+ /**
48
+ * Service for Gauges operations.
49
+ */
50
+ export declare class GaugesService extends BaseService {
51
+ /**
52
+ * Get a gauge needle by ID
53
+ * @param needleId - The needle ID
54
+ * @returns The gauge_needle
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const result = await client.gauges.gaugeNeedle(123);
59
+ * ```
60
+ */
61
+ gaugeNeedle(needleId: number): Promise<components["schemas"]["GetGaugeNeedleResponseContent"]>;
62
+ /**
63
+ * Update a gauge needle's description. Position and color are immutable.
64
+ * @param needleId - The needle ID
65
+ * @param req - Gauge_needle update parameters
66
+ * @returns The gauge_needle
67
+ * @throws {BasecampError} If the resource is not found or fields are invalid
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * const result = await client.gauges.updateGaugeNeedle(123, { });
72
+ * ```
73
+ */
74
+ updateGaugeNeedle(needleId: number, req: UpdateGaugeNeedleGaugeRequest): Promise<components["schemas"]["UpdateGaugeNeedleResponseContent"]>;
75
+ /**
76
+ * Destroy a gauge needle
77
+ * @param needleId - The needle ID
78
+ * @returns void
79
+ * @throws {BasecampError} If the request fails
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * await client.gauges.destroyGaugeNeedle(123);
84
+ * ```
85
+ */
86
+ destroyGaugeNeedle(needleId: number): Promise<void>;
87
+ /**
88
+ * Enable or disable the gauge for a project. Only project admins can toggle gauges.
89
+ * @param projectId - The project ID
90
+ * @param req - Resource request parameters
91
+ * @returns void
92
+ * @throws {BasecampError} If the request fails
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * await client.gauges.toggleGauge(123, { gauge: "example" });
97
+ * ```
98
+ */
99
+ toggleGauge(projectId: number, req: ToggleGaugeGaugeRequest): Promise<void>;
100
+ /**
101
+ * List gauge needles for a project, ordered newest first.
102
+ * @param projectId - The project ID
103
+ * @param options - Optional query parameters
104
+ * @returns All results across all pages, with .meta.totalCount
105
+ *
106
+ * @example
107
+ * ```ts
108
+ * const result = await client.gauges.listGaugeNeedles(123);
109
+ * ```
110
+ */
111
+ listGaugeNeedles(projectId: number, options?: ListGaugeNeedlesGaugeOptions): Promise<components["schemas"]["ListGaugeNeedlesResponseContent"]>;
112
+ /**
113
+ * Create a gauge needle (progress update) for a project
114
+ * @param projectId - The project ID
115
+ * @param req - Gauge_needle creation parameters
116
+ * @returns The gauge_needle
117
+ * @throws {BasecampError} If required fields are missing or invalid
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const result = await client.gauges.createGaugeNeedle(123, { gaugeNeedle: "example" });
122
+ * ```
123
+ */
124
+ createGaugeNeedle(projectId: number, req: CreateGaugeNeedleGaugeRequest): Promise<components["schemas"]["CreateGaugeNeedleResponseContent"]>;
125
+ /**
126
+ * List gauges across all projects the authenticated user has access to.
127
+ * @param options - Optional query parameters
128
+ * @returns All results across all pages, with .meta.totalCount
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * const result = await client.gauges.listGauges();
133
+ *
134
+ * // With options
135
+ * const filtered = await client.gauges.listGauges({ bucketIds: "example" });
136
+ * ```
137
+ */
138
+ listGauges(options?: ListGaugesGaugeOptions): Promise<components["schemas"]["ListGaugesResponseContent"]>;
139
+ }
140
+ //# sourceMappingURL=gauges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauges.d.ts","sourceRoot":"","sources":["../../../src/generated/services/gauges.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQ7D;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB;IACnB,WAAW,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,0BAA0B,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY;IACZ,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,iBAAiB;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB;IACnB,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACzD,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D;qDACiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAE5C;;;;;;;;;OASG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAmBpG;;;;;;;;;;;OAWG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,6BAA6B,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAsBjJ;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBjF;;;;;;;;;;OAUG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,iCAAiC,CAAC,CAAC;IAmBpJ;;;;;;;;;;;OAWG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,6BAA6B,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,kCAAkC,CAAC,CAAC;IA2BlJ;;;;;;;;;;;;OAYG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,2BAA2B,CAAC,CAAC;CAiBhH"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Gauges 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 Gauges operations.
13
+ */
14
+ export class GaugesService extends BaseService {
15
+ /**
16
+ * Get a gauge needle by ID
17
+ * @param needleId - The needle ID
18
+ * @returns The gauge_needle
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const result = await client.gauges.gaugeNeedle(123);
23
+ * ```
24
+ */
25
+ async gaugeNeedle(needleId) {
26
+ const response = await this.request({
27
+ service: "Gauges",
28
+ operation: "GetGaugeNeedle",
29
+ resourceType: "gauge_needle",
30
+ isMutation: false,
31
+ resourceId: needleId,
32
+ }, () => this.client.GET("/gauge_needles/{needleId}", {
33
+ params: {
34
+ path: { needleId },
35
+ },
36
+ }));
37
+ return response;
38
+ }
39
+ /**
40
+ * Update a gauge needle's description. Position and color are immutable.
41
+ * @param needleId - The needle ID
42
+ * @param req - Gauge_needle update parameters
43
+ * @returns The gauge_needle
44
+ * @throws {BasecampError} If the resource is not found or fields are invalid
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const result = await client.gauges.updateGaugeNeedle(123, { });
49
+ * ```
50
+ */
51
+ async updateGaugeNeedle(needleId, req) {
52
+ const response = await this.request({
53
+ service: "Gauges",
54
+ operation: "UpdateGaugeNeedle",
55
+ resourceType: "gauge_needle",
56
+ isMutation: true,
57
+ resourceId: needleId,
58
+ }, () => this.client.PUT("/gauge_needles/{needleId}", {
59
+ params: {
60
+ path: { needleId },
61
+ },
62
+ body: {
63
+ gauge_needle: req.gaugeNeedle,
64
+ },
65
+ }));
66
+ return response;
67
+ }
68
+ /**
69
+ * Destroy a gauge needle
70
+ * @param needleId - The needle ID
71
+ * @returns void
72
+ * @throws {BasecampError} If the request fails
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * await client.gauges.destroyGaugeNeedle(123);
77
+ * ```
78
+ */
79
+ async destroyGaugeNeedle(needleId) {
80
+ await this.request({
81
+ service: "Gauges",
82
+ operation: "DestroyGaugeNeedle",
83
+ resourceType: "resource",
84
+ isMutation: true,
85
+ resourceId: needleId,
86
+ }, () => this.client.DELETE("/gauge_needles/{needleId}", {
87
+ params: {
88
+ path: { needleId },
89
+ },
90
+ }));
91
+ }
92
+ /**
93
+ * Enable or disable the gauge for a project. Only project admins can toggle gauges.
94
+ * @param projectId - The project ID
95
+ * @param req - Resource request parameters
96
+ * @returns void
97
+ * @throws {BasecampError} If the request fails
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * await client.gauges.toggleGauge(123, { gauge: "example" });
102
+ * ```
103
+ */
104
+ async toggleGauge(projectId, req) {
105
+ if (!req.gauge) {
106
+ throw Errors.validation("Gauge is required");
107
+ }
108
+ await this.request({
109
+ service: "Gauges",
110
+ operation: "ToggleGauge",
111
+ resourceType: "resource",
112
+ isMutation: true,
113
+ projectId,
114
+ }, () => this.client.PUT("/projects/{projectId}/gauge.json", {
115
+ params: {
116
+ path: { projectId },
117
+ },
118
+ body: {
119
+ gauge: req.gauge,
120
+ },
121
+ }));
122
+ }
123
+ /**
124
+ * List gauge needles for a project, ordered newest first.
125
+ * @param projectId - The project ID
126
+ * @param options - Optional query parameters
127
+ * @returns All results across all pages, with .meta.totalCount
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * const result = await client.gauges.listGaugeNeedles(123);
132
+ * ```
133
+ */
134
+ async listGaugeNeedles(projectId, options) {
135
+ return this.requestPaginated({
136
+ service: "Gauges",
137
+ operation: "ListGaugeNeedles",
138
+ resourceType: "gauge_needle",
139
+ isMutation: false,
140
+ projectId,
141
+ }, () => this.client.GET("/projects/{projectId}/gauge/needles.json", {
142
+ params: {
143
+ path: { projectId },
144
+ },
145
+ }), options);
146
+ }
147
+ /**
148
+ * Create a gauge needle (progress update) for a project
149
+ * @param projectId - The project ID
150
+ * @param req - Gauge_needle creation parameters
151
+ * @returns The gauge_needle
152
+ * @throws {BasecampError} If required fields are missing or invalid
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * const result = await client.gauges.createGaugeNeedle(123, { gaugeNeedle: "example" });
157
+ * ```
158
+ */
159
+ async createGaugeNeedle(projectId, req) {
160
+ if (!req.gaugeNeedle) {
161
+ throw Errors.validation("Gauge needle is required");
162
+ }
163
+ const response = await this.request({
164
+ service: "Gauges",
165
+ operation: "CreateGaugeNeedle",
166
+ resourceType: "gauge_needle",
167
+ isMutation: true,
168
+ projectId,
169
+ }, () => this.client.POST("/projects/{projectId}/gauge/needles.json", {
170
+ params: {
171
+ path: { projectId },
172
+ },
173
+ body: {
174
+ gauge_needle: req.gaugeNeedle,
175
+ notify: req.notify,
176
+ subscriptions: req.subscriptions,
177
+ },
178
+ }));
179
+ return response;
180
+ }
181
+ /**
182
+ * List gauges across all projects the authenticated user has access to.
183
+ * @param options - Optional query parameters
184
+ * @returns All results across all pages, with .meta.totalCount
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * const result = await client.gauges.listGauges();
189
+ *
190
+ * // With options
191
+ * const filtered = await client.gauges.listGauges({ bucketIds: "example" });
192
+ * ```
193
+ */
194
+ async listGauges(options) {
195
+ return this.requestPaginated({
196
+ service: "Gauges",
197
+ operation: "ListGauges",
198
+ resourceType: "gauge",
199
+ isMutation: false,
200
+ }, () => this.client.GET("/reports/gauges.json", {
201
+ params: {
202
+ query: { "bucket_ids": options?.bucketIds },
203
+ },
204
+ }), options);
205
+ }
206
+ }
207
+ //# sourceMappingURL=gauges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauges.js","sourceRoot":"","sources":["../../../src/generated/services/gauges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Gauges 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
+
18
+ /**
19
+ * Request parameters for updateGaugeNeedle.
20
+ */
21
+ export interface UpdateGaugeNeedleGaugeRequest {
22
+ /** Gauge needle */
23
+ gaugeNeedle?: components["schemas"]["GaugeNeedleUpdatePayload"];
24
+ }
25
+
26
+ /**
27
+ * Request parameters for toggleGauge.
28
+ */
29
+ export interface ToggleGaugeGaugeRequest {
30
+ /** Gauge */
31
+ gauge: components["schemas"]["GaugeTogglePayload"];
32
+ }
33
+
34
+ /**
35
+ * Options for listGaugeNeedles.
36
+ */
37
+ export interface ListGaugeNeedlesGaugeOptions extends PaginationOptions {
38
+ }
39
+
40
+ /**
41
+ * Request parameters for createGaugeNeedle.
42
+ */
43
+ export interface CreateGaugeNeedleGaugeRequest {
44
+ /** Gauge needle */
45
+ gaugeNeedle: components["schemas"]["GaugeNeedlePayload"];
46
+ /** Who to notify: "everyone", "working_on", "custom", or omit for nobody */
47
+ notify?: string;
48
+ /** Array of people IDs to notify (only used when notify is "custom") */
49
+ subscriptions?: number[];
50
+ }
51
+
52
+ /**
53
+ * Options for listGauges.
54
+ */
55
+ export interface ListGaugesGaugeOptions extends PaginationOptions {
56
+ /** Comma-separated list of project IDs. When provided, results are returned
57
+ in the order specified instead of by risk level. */
58
+ bucketIds?: string;
59
+ }
60
+
61
+
62
+ // =============================================================================
63
+ // Service
64
+ // =============================================================================
65
+
66
+ /**
67
+ * Service for Gauges operations.
68
+ */
69
+ export class GaugesService extends BaseService {
70
+
71
+ /**
72
+ * Get a gauge needle by ID
73
+ * @param needleId - The needle ID
74
+ * @returns The gauge_needle
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * const result = await client.gauges.gaugeNeedle(123);
79
+ * ```
80
+ */
81
+ async gaugeNeedle(needleId: number): Promise<components["schemas"]["GetGaugeNeedleResponseContent"]> {
82
+ const response = await this.request(
83
+ {
84
+ service: "Gauges",
85
+ operation: "GetGaugeNeedle",
86
+ resourceType: "gauge_needle",
87
+ isMutation: false,
88
+ resourceId: needleId,
89
+ },
90
+ () =>
91
+ this.client.GET("/gauge_needles/{needleId}", {
92
+ params: {
93
+ path: { needleId },
94
+ },
95
+ })
96
+ );
97
+ return response;
98
+ }
99
+
100
+ /**
101
+ * Update a gauge needle's description. Position and color are immutable.
102
+ * @param needleId - The needle ID
103
+ * @param req - Gauge_needle update parameters
104
+ * @returns The gauge_needle
105
+ * @throws {BasecampError} If the resource is not found or fields are invalid
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * const result = await client.gauges.updateGaugeNeedle(123, { });
110
+ * ```
111
+ */
112
+ async updateGaugeNeedle(needleId: number, req: UpdateGaugeNeedleGaugeRequest): Promise<components["schemas"]["UpdateGaugeNeedleResponseContent"]> {
113
+ const response = await this.request(
114
+ {
115
+ service: "Gauges",
116
+ operation: "UpdateGaugeNeedle",
117
+ resourceType: "gauge_needle",
118
+ isMutation: true,
119
+ resourceId: needleId,
120
+ },
121
+ () =>
122
+ this.client.PUT("/gauge_needles/{needleId}", {
123
+ params: {
124
+ path: { needleId },
125
+ },
126
+ body: {
127
+ gauge_needle: req.gaugeNeedle,
128
+ },
129
+ })
130
+ );
131
+ return response;
132
+ }
133
+
134
+ /**
135
+ * Destroy a gauge needle
136
+ * @param needleId - The needle ID
137
+ * @returns void
138
+ * @throws {BasecampError} If the request fails
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * await client.gauges.destroyGaugeNeedle(123);
143
+ * ```
144
+ */
145
+ async destroyGaugeNeedle(needleId: number): Promise<void> {
146
+ await this.request(
147
+ {
148
+ service: "Gauges",
149
+ operation: "DestroyGaugeNeedle",
150
+ resourceType: "resource",
151
+ isMutation: true,
152
+ resourceId: needleId,
153
+ },
154
+ () =>
155
+ this.client.DELETE("/gauge_needles/{needleId}", {
156
+ params: {
157
+ path: { needleId },
158
+ },
159
+ })
160
+ );
161
+ }
162
+
163
+ /**
164
+ * Enable or disable the gauge for a project. Only project admins can toggle gauges.
165
+ * @param projectId - The project ID
166
+ * @param req - Resource request parameters
167
+ * @returns void
168
+ * @throws {BasecampError} If the request fails
169
+ *
170
+ * @example
171
+ * ```ts
172
+ * await client.gauges.toggleGauge(123, { gauge: "example" });
173
+ * ```
174
+ */
175
+ async toggleGauge(projectId: number, req: ToggleGaugeGaugeRequest): Promise<void> {
176
+ if (!req.gauge) {
177
+ throw Errors.validation("Gauge is required");
178
+ }
179
+ await this.request(
180
+ {
181
+ service: "Gauges",
182
+ operation: "ToggleGauge",
183
+ resourceType: "resource",
184
+ isMutation: true,
185
+ projectId,
186
+ },
187
+ () =>
188
+ this.client.PUT("/projects/{projectId}/gauge.json", {
189
+ params: {
190
+ path: { projectId },
191
+ },
192
+ body: {
193
+ gauge: req.gauge,
194
+ },
195
+ })
196
+ );
197
+ }
198
+
199
+ /**
200
+ * List gauge needles for a project, ordered newest first.
201
+ * @param projectId - The project ID
202
+ * @param options - Optional query parameters
203
+ * @returns All results across all pages, with .meta.totalCount
204
+ *
205
+ * @example
206
+ * ```ts
207
+ * const result = await client.gauges.listGaugeNeedles(123);
208
+ * ```
209
+ */
210
+ async listGaugeNeedles(projectId: number, options?: ListGaugeNeedlesGaugeOptions): Promise<components["schemas"]["ListGaugeNeedlesResponseContent"]> {
211
+ return this.requestPaginated(
212
+ {
213
+ service: "Gauges",
214
+ operation: "ListGaugeNeedles",
215
+ resourceType: "gauge_needle",
216
+ isMutation: false,
217
+ projectId,
218
+ },
219
+ () =>
220
+ this.client.GET("/projects/{projectId}/gauge/needles.json", {
221
+ params: {
222
+ path: { projectId },
223
+ },
224
+ })
225
+ , options
226
+ );
227
+ }
228
+
229
+ /**
230
+ * Create a gauge needle (progress update) for a project
231
+ * @param projectId - The project ID
232
+ * @param req - Gauge_needle creation parameters
233
+ * @returns The gauge_needle
234
+ * @throws {BasecampError} If required fields are missing or invalid
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * const result = await client.gauges.createGaugeNeedle(123, { gaugeNeedle: "example" });
239
+ * ```
240
+ */
241
+ async createGaugeNeedle(projectId: number, req: CreateGaugeNeedleGaugeRequest): Promise<components["schemas"]["CreateGaugeNeedleResponseContent"]> {
242
+ if (!req.gaugeNeedle) {
243
+ throw Errors.validation("Gauge needle is required");
244
+ }
245
+ const response = await this.request(
246
+ {
247
+ service: "Gauges",
248
+ operation: "CreateGaugeNeedle",
249
+ resourceType: "gauge_needle",
250
+ isMutation: true,
251
+ projectId,
252
+ },
253
+ () =>
254
+ this.client.POST("/projects/{projectId}/gauge/needles.json", {
255
+ params: {
256
+ path: { projectId },
257
+ },
258
+ body: {
259
+ gauge_needle: req.gaugeNeedle,
260
+ notify: req.notify,
261
+ subscriptions: req.subscriptions,
262
+ },
263
+ })
264
+ );
265
+ return response;
266
+ }
267
+
268
+ /**
269
+ * List gauges across all projects the authenticated user has access to.
270
+ * @param options - Optional query parameters
271
+ * @returns All results across all pages, with .meta.totalCount
272
+ *
273
+ * @example
274
+ * ```ts
275
+ * const result = await client.gauges.listGauges();
276
+ *
277
+ * // With options
278
+ * const filtered = await client.gauges.listGauges({ bucketIds: "example" });
279
+ * ```
280
+ */
281
+ async listGauges(options?: ListGaugesGaugeOptions): Promise<components["schemas"]["ListGaugesResponseContent"]> {
282
+ return this.requestPaginated(
283
+ {
284
+ service: "Gauges",
285
+ operation: "ListGauges",
286
+ resourceType: "gauge",
287
+ isMutation: false,
288
+ },
289
+ () =>
290
+ this.client.GET("/reports/gauges.json", {
291
+ params: {
292
+ query: { "bucket_ids": options?.bucketIds },
293
+ },
294
+ })
295
+ , options
296
+ );
297
+ }
298
+ }