@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.
- package/README.md +600 -0
- package/dist/auth-strategy.d.ts +36 -0
- package/dist/auth-strategy.d.ts.map +1 -0
- package/dist/auth-strategy.js +33 -0
- package/dist/auth-strategy.js.map +1 -0
- package/dist/client.d.ts +224 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +715 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +137 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +269 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/metadata.json +2281 -0
- package/dist/generated/openapi-stripped.json +21268 -0
- package/dist/generated/path-mapping.d.ts +8 -0
- package/dist/generated/path-mapping.d.ts.map +1 -0
- package/dist/generated/path-mapping.js +192 -0
- package/dist/generated/path-mapping.js.map +1 -0
- package/dist/generated/path-mapping.ts +199 -0
- package/dist/generated/schema.d.ts +14883 -0
- package/dist/generated/services/attachments.d.ts +27 -0
- package/dist/generated/services/attachments.d.ts.map +1 -0
- package/dist/generated/services/attachments.js +49 -0
- package/dist/generated/services/attachments.js.map +1 -0
- package/dist/generated/services/attachments.ts +59 -0
- package/dist/generated/services/boosts.d.ts +114 -0
- package/dist/generated/services/boosts.d.ts.map +1 -0
- package/dist/generated/services/boosts.js +179 -0
- package/dist/generated/services/boosts.js.map +1 -0
- package/dist/generated/services/boosts.ts +250 -0
- package/dist/generated/services/campfires.d.ts +202 -0
- package/dist/generated/services/campfires.d.ts.map +1 -0
- package/dist/generated/services/campfires.js +309 -0
- package/dist/generated/services/campfires.js.map +1 -0
- package/dist/generated/services/campfires.ts +433 -0
- package/dist/generated/services/card-columns.d.ts +163 -0
- package/dist/generated/services/card-columns.d.ts.map +1 -0
- package/dist/generated/services/card-columns.js +264 -0
- package/dist/generated/services/card-columns.js.map +1 -0
- package/dist/generated/services/card-columns.ts +360 -0
- package/dist/generated/services/card-steps.d.ts +105 -0
- package/dist/generated/services/card-steps.d.ts.map +1 -0
- package/dist/generated/services/card-steps.js +148 -0
- package/dist/generated/services/card-steps.js.map +1 -0
- package/dist/generated/services/card-steps.ts +221 -0
- package/dist/generated/services/card-tables.d.ts +27 -0
- package/dist/generated/services/card-tables.d.ts.map +1 -0
- package/dist/generated/services/card-tables.js +40 -0
- package/dist/generated/services/card-tables.js.map +1 -0
- package/dist/generated/services/card-tables.ts +55 -0
- package/dist/generated/services/cards.d.ts +118 -0
- package/dist/generated/services/cards.d.ts.map +1 -0
- package/dist/generated/services/cards.js +166 -0
- package/dist/generated/services/cards.js.map +1 -0
- package/dist/generated/services/cards.ts +247 -0
- package/dist/generated/services/checkins.d.ts +278 -0
- package/dist/generated/services/checkins.d.ts.map +1 -0
- package/dist/generated/services/checkins.js +420 -0
- package/dist/generated/services/checkins.js.map +1 -0
- package/dist/generated/services/checkins.ts +600 -0
- package/dist/generated/services/client-approvals.d.ts +45 -0
- package/dist/generated/services/client-approvals.d.ts.map +1 -0
- package/dist/generated/services/client-approvals.js +58 -0
- package/dist/generated/services/client-approvals.js.map +1 -0
- package/dist/generated/services/client-approvals.ts +89 -0
- package/dist/generated/services/client-correspondences.d.ts +45 -0
- package/dist/generated/services/client-correspondences.d.ts.map +1 -0
- package/dist/generated/services/client-correspondences.js +58 -0
- package/dist/generated/services/client-correspondences.js.map +1 -0
- package/dist/generated/services/client-correspondences.ts +89 -0
- package/dist/generated/services/client-replies.d.ts +47 -0
- package/dist/generated/services/client-replies.d.ts.map +1 -0
- package/dist/generated/services/client-replies.js +65 -0
- package/dist/generated/services/client-replies.js.map +1 -0
- package/dist/generated/services/client-replies.ts +95 -0
- package/dist/generated/services/client-visibility.d.ts +35 -0
- package/dist/generated/services/client-visibility.d.ts.map +1 -0
- package/dist/generated/services/client-visibility.js +44 -0
- package/dist/generated/services/client-visibility.js.map +1 -0
- package/dist/generated/services/client-visibility.ts +68 -0
- package/dist/generated/services/comments.d.ts +86 -0
- package/dist/generated/services/comments.d.ts.map +1 -0
- package/dist/generated/services/comments.js +129 -0
- package/dist/generated/services/comments.js.map +1 -0
- package/dist/generated/services/comments.ts +185 -0
- package/dist/generated/services/documents.d.ts +92 -0
- package/dist/generated/services/documents.d.ts.map +1 -0
- package/dist/generated/services/documents.js +129 -0
- package/dist/generated/services/documents.js.map +1 -0
- package/dist/generated/services/documents.ts +191 -0
- package/dist/generated/services/events.d.ts +34 -0
- package/dist/generated/services/events.d.ts.map +1 -0
- package/dist/generated/services/events.js +39 -0
- package/dist/generated/services/events.js.map +1 -0
- package/dist/generated/services/events.ts +64 -0
- package/dist/generated/services/forwards.d.ts +112 -0
- package/dist/generated/services/forwards.d.ts.map +1 -0
- package/dist/generated/services/forwards.js +172 -0
- package/dist/generated/services/forwards.js.map +1 -0
- package/dist/generated/services/forwards.ts +241 -0
- package/dist/generated/services/index.d.ts +39 -0
- package/dist/generated/services/index.d.ts.map +1 -0
- package/dist/generated/services/index.js +39 -0
- package/dist/generated/services/index.js.map +1 -0
- package/dist/generated/services/index.ts +38 -0
- package/dist/generated/services/lineup.d.ts +67 -0
- package/dist/generated/services/lineup.d.ts.map +1 -0
- package/dist/generated/services/lineup.js +99 -0
- package/dist/generated/services/lineup.js.map +1 -0
- package/dist/generated/services/lineup.ts +143 -0
- package/dist/generated/services/message-boards.d.ts +27 -0
- package/dist/generated/services/message-boards.d.ts.map +1 -0
- package/dist/generated/services/message-boards.js +40 -0
- package/dist/generated/services/message-boards.js.map +1 -0
- package/dist/generated/services/message-boards.ts +55 -0
- package/dist/generated/services/message-types.d.ts +100 -0
- package/dist/generated/services/message-types.d.ts.map +1 -0
- package/dist/generated/services/message-types.js +144 -0
- package/dist/generated/services/message-types.js.map +1 -0
- package/dist/generated/services/message-types.ts +210 -0
- package/dist/generated/services/messages.d.ts +122 -0
- package/dist/generated/services/messages.d.ts.map +1 -0
- package/dist/generated/services/messages.js +180 -0
- package/dist/generated/services/messages.js.map +1 -0
- package/dist/generated/services/messages.ts +258 -0
- package/dist/generated/services/people.d.ts +122 -0
- package/dist/generated/services/people.d.ts.map +1 -0
- package/dist/generated/services/people.js +167 -0
- package/dist/generated/services/people.js.map +1 -0
- package/dist/generated/services/people.ts +252 -0
- package/dist/generated/services/projects.d.ts +109 -0
- package/dist/generated/services/projects.d.ts.map +1 -0
- package/dist/generated/services/projects.js +153 -0
- package/dist/generated/services/projects.js.map +1 -0
- package/dist/generated/services/projects.ts +224 -0
- package/dist/generated/services/recordings.d.ts +93 -0
- package/dist/generated/services/recordings.d.ts.map +1 -0
- package/dist/generated/services/recordings.js +138 -0
- package/dist/generated/services/recordings.js.map +1 -0
- package/dist/generated/services/recordings.ts +191 -0
- package/dist/generated/services/reports.d.ts +90 -0
- package/dist/generated/services/reports.d.ts.map +1 -0
- package/dist/generated/services/reports.js +124 -0
- package/dist/generated/services/reports.js.map +1 -0
- package/dist/generated/services/reports.ts +187 -0
- package/dist/generated/services/schedules.d.ts +162 -0
- package/dist/generated/services/schedules.d.ts.map +1 -0
- package/dist/generated/services/schedules.js +228 -0
- package/dist/generated/services/schedules.js.map +1 -0
- package/dist/generated/services/schedules.ts +335 -0
- package/dist/generated/services/search.d.ts +45 -0
- package/dist/generated/services/search.d.ts.map +1 -0
- package/dist/generated/services/search.js +56 -0
- package/dist/generated/services/search.js.map +1 -0
- package/dist/generated/services/search.ts +89 -0
- package/dist/generated/services/subscriptions.d.ts +73 -0
- package/dist/generated/services/subscriptions.d.ts.map +1 -0
- package/dist/generated/services/subscriptions.js +119 -0
- package/dist/generated/services/subscriptions.js.map +1 -0
- package/dist/generated/services/subscriptions.ts +160 -0
- package/dist/generated/services/templates.d.ts +140 -0
- package/dist/generated/services/templates.d.ts.map +1 -0
- package/dist/generated/services/templates.js +207 -0
- package/dist/generated/services/templates.js.map +1 -0
- package/dist/generated/services/templates.ts +294 -0
- package/dist/generated/services/timeline.d.ts +31 -0
- package/dist/generated/services/timeline.d.ts.map +1 -0
- package/dist/generated/services/timeline.js +39 -0
- package/dist/generated/services/timeline.js.map +1 -0
- package/dist/generated/services/timeline.ts +62 -0
- package/dist/generated/services/timesheets.d.ts +145 -0
- package/dist/generated/services/timesheets.d.ts.map +1 -0
- package/dist/generated/services/timesheets.js +186 -0
- package/dist/generated/services/timesheets.js.map +1 -0
- package/dist/generated/services/timesheets.ts +289 -0
- package/dist/generated/services/todolist-groups.d.ts +74 -0
- package/dist/generated/services/todolist-groups.d.ts.map +1 -0
- package/dist/generated/services/todolist-groups.js +100 -0
- package/dist/generated/services/todolist-groups.js.map +1 -0
- package/dist/generated/services/todolist-groups.ts +151 -0
- package/dist/generated/services/todolists.d.ts +95 -0
- package/dist/generated/services/todolists.d.ts.map +1 -0
- package/dist/generated/services/todolists.js +130 -0
- package/dist/generated/services/todolists.js.map +1 -0
- package/dist/generated/services/todolists.ts +192 -0
- package/dist/generated/services/todos.d.ts +175 -0
- package/dist/generated/services/todos.d.ts.map +1 -0
- package/dist/generated/services/todos.js +255 -0
- package/dist/generated/services/todos.js.map +1 -0
- package/dist/generated/services/todos.ts +369 -0
- package/dist/generated/services/todosets.d.ts +27 -0
- package/dist/generated/services/todosets.d.ts.map +1 -0
- package/dist/generated/services/todosets.js +40 -0
- package/dist/generated/services/todosets.js.map +1 -0
- package/dist/generated/services/todosets.ts +55 -0
- package/dist/generated/services/tools.d.ts +122 -0
- package/dist/generated/services/tools.d.ts.map +1 -0
- package/dist/generated/services/tools.js +197 -0
- package/dist/generated/services/tools.js.map +1 -0
- package/dist/generated/services/tools.ts +267 -0
- package/dist/generated/services/uploads.d.ts +109 -0
- package/dist/generated/services/uploads.d.ts.map +1 -0
- package/dist/generated/services/uploads.js +153 -0
- package/dist/generated/services/uploads.js.map +1 -0
- package/dist/generated/services/uploads.ts +227 -0
- package/dist/generated/services/vaults.d.ts +86 -0
- package/dist/generated/services/vaults.d.ts.map +1 -0
- package/dist/generated/services/vaults.js +126 -0
- package/dist/generated/services/vaults.js.map +1 -0
- package/dist/generated/services/vaults.ts +182 -0
- package/dist/generated/services/webhooks.d.ts +106 -0
- package/dist/generated/services/webhooks.d.ts.map +1 -0
- package/dist/generated/services/webhooks.js +157 -0
- package/dist/generated/services/webhooks.js.map +1 -0
- package/dist/generated/services/webhooks.ts +226 -0
- package/dist/hooks/otel.d.ts +136 -0
- package/dist/hooks/otel.d.ts.map +1 -0
- package/dist/hooks/otel.js +240 -0
- package/dist/hooks/otel.js.map +1 -0
- package/dist/hooks.d.ts +171 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +196 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth/authorize.d.ts +48 -0
- package/dist/oauth/authorize.d.ts.map +1 -0
- package/dist/oauth/authorize.js +56 -0
- package/dist/oauth/authorize.js.map +1 -0
- package/dist/oauth/callback-server.d.ts +56 -0
- package/dist/oauth/callback-server.d.ts.map +1 -0
- package/dist/oauth/callback-server.js +150 -0
- package/dist/oauth/callback-server.js.map +1 -0
- package/dist/oauth/discovery.d.ts +54 -0
- package/dist/oauth/discovery.d.ts.map +1 -0
- package/dist/oauth/discovery.js +116 -0
- package/dist/oauth/discovery.js.map +1 -0
- package/dist/oauth/exchange.d.ts +96 -0
- package/dist/oauth/exchange.d.ts.map +1 -0
- package/dist/oauth/exchange.js +324 -0
- package/dist/oauth/exchange.js.map +1 -0
- package/dist/oauth/identity.d.ts +30 -0
- package/dist/oauth/identity.d.ts.map +1 -0
- package/dist/oauth/identity.js +82 -0
- package/dist/oauth/identity.js.map +1 -0
- package/dist/oauth/index.d.ts +50 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +58 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/interactive-login.d.ts +62 -0
- package/dist/oauth/interactive-login.d.ts.map +1 -0
- package/dist/oauth/interactive-login.js +106 -0
- package/dist/oauth/interactive-login.js.map +1 -0
- package/dist/oauth/pkce.d.ts +68 -0
- package/dist/oauth/pkce.d.ts.map +1 -0
- package/dist/oauth/pkce.js +80 -0
- package/dist/oauth/pkce.js.map +1 -0
- package/dist/oauth/token-manager.d.ts +92 -0
- package/dist/oauth/token-manager.d.ts.map +1 -0
- package/dist/oauth/token-manager.js +126 -0
- package/dist/oauth/token-manager.js.map +1 -0
- package/dist/oauth/token-store.d.ts +45 -0
- package/dist/oauth/token-store.d.ts.map +1 -0
- package/dist/oauth/token-store.js +105 -0
- package/dist/oauth/token-store.js.map +1 -0
- package/dist/oauth/types.d.ts +98 -0
- package/dist/oauth/types.d.ts.map +1 -0
- package/dist/oauth/types.js +8 -0
- package/dist/oauth/types.js.map +1 -0
- package/dist/pagination-utils.d.ts +27 -0
- package/dist/pagination-utils.d.ts.map +1 -0
- package/dist/pagination-utils.js +54 -0
- package/dist/pagination-utils.js.map +1 -0
- package/dist/pagination.d.ts +56 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +57 -0
- package/dist/pagination.js.map +1 -0
- package/dist/security.d.ts +68 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +107 -0
- package/dist/security.js.map +1 -0
- package/dist/services/authorization.d.ts +124 -0
- package/dist/services/authorization.d.ts.map +1 -0
- package/dist/services/authorization.js +117 -0
- package/dist/services/authorization.js.map +1 -0
- package/dist/services/base.d.ts +102 -0
- package/dist/services/base.d.ts.map +1 -0
- package/dist/services/base.js +230 -0
- package/dist/services/base.js.map +1 -0
- package/dist/webhooks/adapters/node-http.d.ts +14 -0
- package/dist/webhooks/adapters/node-http.d.ts.map +1 -0
- package/dist/webhooks/adapters/node-http.js +60 -0
- package/dist/webhooks/adapters/node-http.js.map +1 -0
- package/dist/webhooks/events.d.ts +52 -0
- package/dist/webhooks/events.d.ts.map +1 -0
- package/dist/webhooks/events.js +52 -0
- package/dist/webhooks/events.js.map +1 -0
- package/dist/webhooks/handler.d.ts +62 -0
- package/dist/webhooks/handler.d.ts.map +1 -0
- package/dist/webhooks/handler.js +226 -0
- package/dist/webhooks/handler.js.map +1 -0
- package/dist/webhooks/index.d.ts +5 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +5 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/verify.d.ts +11 -0
- package/dist/webhooks/verify.d.ts.map +1 -0
- package/dist/webhooks/verify.js +25 -0
- package/dist/webhooks/verify.js.map +1 -0
- package/package.json +70 -0
- package/src/generated/metadata.json +2281 -0
- package/src/generated/openapi-stripped.json +21268 -0
- package/src/generated/path-mapping.ts +199 -0
- package/src/generated/schema.d.ts +14883 -0
- package/src/generated/services/attachments.ts +59 -0
- package/src/generated/services/boosts.ts +250 -0
- package/src/generated/services/campfires.ts +433 -0
- package/src/generated/services/card-columns.ts +360 -0
- package/src/generated/services/card-steps.ts +221 -0
- package/src/generated/services/card-tables.ts +55 -0
- package/src/generated/services/cards.ts +247 -0
- package/src/generated/services/checkins.ts +600 -0
- package/src/generated/services/client-approvals.ts +89 -0
- package/src/generated/services/client-correspondences.ts +89 -0
- package/src/generated/services/client-replies.ts +95 -0
- package/src/generated/services/client-visibility.ts +68 -0
- package/src/generated/services/comments.ts +185 -0
- package/src/generated/services/documents.ts +191 -0
- package/src/generated/services/events.ts +64 -0
- package/src/generated/services/forwards.ts +241 -0
- package/src/generated/services/index.ts +38 -0
- package/src/generated/services/lineup.ts +143 -0
- package/src/generated/services/message-boards.ts +55 -0
- package/src/generated/services/message-types.ts +210 -0
- package/src/generated/services/messages.ts +258 -0
- package/src/generated/services/people.ts +252 -0
- package/src/generated/services/projects.ts +224 -0
- package/src/generated/services/recordings.ts +191 -0
- package/src/generated/services/reports.ts +187 -0
- package/src/generated/services/schedules.ts +335 -0
- package/src/generated/services/search.ts +89 -0
- package/src/generated/services/subscriptions.ts +160 -0
- package/src/generated/services/templates.ts +294 -0
- package/src/generated/services/timeline.ts +62 -0
- package/src/generated/services/timesheets.ts +289 -0
- package/src/generated/services/todolist-groups.ts +151 -0
- package/src/generated/services/todolists.ts +192 -0
- package/src/generated/services/todos.ts +369 -0
- package/src/generated/services/todosets.ts +55 -0
- package/src/generated/services/tools.ts +267 -0
- package/src/generated/services/uploads.ts +227 -0
- package/src/generated/services/vaults.ts +182 -0
- package/src/generated/services/webhooks.ts +226 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Templates 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
|
+
/** Template entity from the Basecamp API. */
|
|
18
|
+
export type Template = components["schemas"]["Template"];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Options for list.
|
|
22
|
+
*/
|
|
23
|
+
export interface ListTemplateOptions extends PaginationOptions {
|
|
24
|
+
/** Filter by status */
|
|
25
|
+
status?: "active" | "archived" | "trashed";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Request parameters for create.
|
|
30
|
+
*/
|
|
31
|
+
export interface CreateTemplateRequest {
|
|
32
|
+
/** Display name */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Rich text description (HTML) */
|
|
35
|
+
description?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Request parameters for update.
|
|
40
|
+
*/
|
|
41
|
+
export interface UpdateTemplateRequest {
|
|
42
|
+
/** Display name */
|
|
43
|
+
name?: string;
|
|
44
|
+
/** Rich text description (HTML) */
|
|
45
|
+
description?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Request parameters for createProject.
|
|
50
|
+
*/
|
|
51
|
+
export interface CreateProjectTemplateRequest {
|
|
52
|
+
/** Display name */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Rich text description (HTML) */
|
|
55
|
+
description?: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
// =============================================================================
|
|
60
|
+
// Service
|
|
61
|
+
// =============================================================================
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Service for Templates operations.
|
|
65
|
+
*/
|
|
66
|
+
export class TemplatesService extends BaseService {
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* List all templates visible to the current user
|
|
70
|
+
* @param options - Optional query parameters
|
|
71
|
+
* @returns All Template across all pages, with .meta.totalCount
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const result = await client.templates.list();
|
|
76
|
+
*
|
|
77
|
+
* // With options
|
|
78
|
+
* const filtered = await client.templates.list({ status: "active" });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
async list(options?: ListTemplateOptions): Promise<ListResult<Template>> {
|
|
82
|
+
return this.requestPaginated(
|
|
83
|
+
{
|
|
84
|
+
service: "Templates",
|
|
85
|
+
operation: "ListTemplates",
|
|
86
|
+
resourceType: "template",
|
|
87
|
+
isMutation: false,
|
|
88
|
+
},
|
|
89
|
+
() =>
|
|
90
|
+
this.client.GET("/templates.json", {
|
|
91
|
+
params: {
|
|
92
|
+
query: { status: options?.status },
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
, options
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Create a new template
|
|
101
|
+
* @param req - Template creation parameters
|
|
102
|
+
* @returns The Template
|
|
103
|
+
* @throws {BasecampError} If required fields are missing or invalid
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* const result = await client.templates.create({ name: "My example" });
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
async create(req: CreateTemplateRequest): Promise<Template> {
|
|
111
|
+
if (!req.name) {
|
|
112
|
+
throw Errors.validation("Name is required");
|
|
113
|
+
}
|
|
114
|
+
const response = await this.request(
|
|
115
|
+
{
|
|
116
|
+
service: "Templates",
|
|
117
|
+
operation: "CreateTemplate",
|
|
118
|
+
resourceType: "template",
|
|
119
|
+
isMutation: true,
|
|
120
|
+
},
|
|
121
|
+
() =>
|
|
122
|
+
this.client.POST("/templates.json", {
|
|
123
|
+
body: {
|
|
124
|
+
name: req.name,
|
|
125
|
+
description: req.description,
|
|
126
|
+
},
|
|
127
|
+
})
|
|
128
|
+
);
|
|
129
|
+
return response;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Get a single template by id
|
|
134
|
+
* @param templateId - The template ID
|
|
135
|
+
* @returns The Template
|
|
136
|
+
* @throws {BasecampError} If the resource is not found
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const result = await client.templates.get(123);
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
async get(templateId: number): Promise<Template> {
|
|
144
|
+
const response = await this.request(
|
|
145
|
+
{
|
|
146
|
+
service: "Templates",
|
|
147
|
+
operation: "GetTemplate",
|
|
148
|
+
resourceType: "template",
|
|
149
|
+
isMutation: false,
|
|
150
|
+
resourceId: templateId,
|
|
151
|
+
},
|
|
152
|
+
() =>
|
|
153
|
+
this.client.GET("/templates/{templateId}", {
|
|
154
|
+
params: {
|
|
155
|
+
path: { templateId },
|
|
156
|
+
},
|
|
157
|
+
})
|
|
158
|
+
);
|
|
159
|
+
return response;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Update an existing template
|
|
164
|
+
* @param templateId - The template ID
|
|
165
|
+
* @param req - Template update parameters
|
|
166
|
+
* @returns The Template
|
|
167
|
+
* @throws {BasecampError} If the resource is not found or fields are invalid
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```ts
|
|
171
|
+
* const result = await client.templates.update(123, { });
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
async update(templateId: number, req: UpdateTemplateRequest): Promise<Template> {
|
|
175
|
+
const response = await this.request(
|
|
176
|
+
{
|
|
177
|
+
service: "Templates",
|
|
178
|
+
operation: "UpdateTemplate",
|
|
179
|
+
resourceType: "template",
|
|
180
|
+
isMutation: true,
|
|
181
|
+
resourceId: templateId,
|
|
182
|
+
},
|
|
183
|
+
() =>
|
|
184
|
+
this.client.PUT("/templates/{templateId}", {
|
|
185
|
+
params: {
|
|
186
|
+
path: { templateId },
|
|
187
|
+
},
|
|
188
|
+
body: {
|
|
189
|
+
name: req.name,
|
|
190
|
+
description: req.description,
|
|
191
|
+
},
|
|
192
|
+
})
|
|
193
|
+
);
|
|
194
|
+
return response;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Delete a template (trash it)
|
|
199
|
+
* @param templateId - The template ID
|
|
200
|
+
* @returns void
|
|
201
|
+
* @throws {BasecampError} If the request fails
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```ts
|
|
205
|
+
* await client.templates.delete(123);
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
async delete(templateId: number): Promise<void> {
|
|
209
|
+
await this.request(
|
|
210
|
+
{
|
|
211
|
+
service: "Templates",
|
|
212
|
+
operation: "DeleteTemplate",
|
|
213
|
+
resourceType: "template",
|
|
214
|
+
isMutation: true,
|
|
215
|
+
resourceId: templateId,
|
|
216
|
+
},
|
|
217
|
+
() =>
|
|
218
|
+
this.client.DELETE("/templates/{templateId}", {
|
|
219
|
+
params: {
|
|
220
|
+
path: { templateId },
|
|
221
|
+
},
|
|
222
|
+
})
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Create a project from a template (asynchronous)
|
|
228
|
+
* @param templateId - The template ID
|
|
229
|
+
* @param req - Project_from_template creation parameters
|
|
230
|
+
* @returns The project_from_template
|
|
231
|
+
* @throws {BasecampError} If required fields are missing or invalid
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```ts
|
|
235
|
+
* const result = await client.templates.createProject(123, { name: "My example" });
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
async createProject(templateId: number, req: CreateProjectTemplateRequest): Promise<components["schemas"]["CreateProjectFromTemplateResponseContent"]> {
|
|
239
|
+
if (!req.name) {
|
|
240
|
+
throw Errors.validation("Name is required");
|
|
241
|
+
}
|
|
242
|
+
const response = await this.request(
|
|
243
|
+
{
|
|
244
|
+
service: "Templates",
|
|
245
|
+
operation: "CreateProjectFromTemplate",
|
|
246
|
+
resourceType: "project_from_template",
|
|
247
|
+
isMutation: true,
|
|
248
|
+
resourceId: templateId,
|
|
249
|
+
},
|
|
250
|
+
() =>
|
|
251
|
+
this.client.POST("/templates/{templateId}/project_constructions.json", {
|
|
252
|
+
params: {
|
|
253
|
+
path: { templateId },
|
|
254
|
+
},
|
|
255
|
+
body: {
|
|
256
|
+
name: req.name,
|
|
257
|
+
description: req.description,
|
|
258
|
+
},
|
|
259
|
+
})
|
|
260
|
+
);
|
|
261
|
+
return response;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Get the status of a project construction
|
|
266
|
+
* @param templateId - The template ID
|
|
267
|
+
* @param constructionId - The construction ID
|
|
268
|
+
* @returns The project_construction
|
|
269
|
+
* @throws {BasecampError} If the resource is not found
|
|
270
|
+
*
|
|
271
|
+
* @example
|
|
272
|
+
* ```ts
|
|
273
|
+
* const result = await client.templates.getConstruction(123, 123);
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
async getConstruction(templateId: number, constructionId: number): Promise<components["schemas"]["GetProjectConstructionResponseContent"]> {
|
|
277
|
+
const response = await this.request(
|
|
278
|
+
{
|
|
279
|
+
service: "Templates",
|
|
280
|
+
operation: "GetProjectConstruction",
|
|
281
|
+
resourceType: "project_construction",
|
|
282
|
+
isMutation: false,
|
|
283
|
+
resourceId: templateId,
|
|
284
|
+
},
|
|
285
|
+
() =>
|
|
286
|
+
this.client.GET("/templates/{templateId}/project_constructions/{constructionId}", {
|
|
287
|
+
params: {
|
|
288
|
+
path: { templateId, constructionId },
|
|
289
|
+
},
|
|
290
|
+
})
|
|
291
|
+
);
|
|
292
|
+
return response;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeline 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 projectTimeline.
|
|
19
|
+
*/
|
|
20
|
+
export interface ProjectTimelineTimelineOptions extends PaginationOptions {
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// Service
|
|
26
|
+
// =============================================================================
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Service for Timeline operations.
|
|
30
|
+
*/
|
|
31
|
+
export class TimelineService extends BaseService {
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Get project timeline
|
|
35
|
+
* @param projectId - The project ID
|
|
36
|
+
* @param options - Optional query parameters
|
|
37
|
+
* @returns All results across all pages, with .meta.totalCount
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const result = await client.timeline.projectTimeline(123);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
async projectTimeline(projectId: number, options?: ProjectTimelineTimelineOptions): Promise<components["schemas"]["GetProjectTimelineResponseContent"]> {
|
|
45
|
+
return this.requestPaginated(
|
|
46
|
+
{
|
|
47
|
+
service: "Timeline",
|
|
48
|
+
operation: "GetProjectTimeline",
|
|
49
|
+
resourceType: "project_timeline",
|
|
50
|
+
isMutation: false,
|
|
51
|
+
projectId,
|
|
52
|
+
},
|
|
53
|
+
() =>
|
|
54
|
+
this.client.GET("/projects/{projectId}/timeline.json", {
|
|
55
|
+
params: {
|
|
56
|
+
path: { projectId },
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
, options
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timesheets service for the Basecamp API.
|
|
3
|
+
*
|
|
4
|
+
* @generated from OpenAPI spec - do not edit directly
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { BaseService } from "../../services/base.js";
|
|
8
|
+
import type { components } from "../schema.js";
|
|
9
|
+
import { Errors } from "../../errors.js";
|
|
10
|
+
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Types
|
|
13
|
+
// =============================================================================
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Options for forProject.
|
|
18
|
+
*/
|
|
19
|
+
export interface ForProjectTimesheetOptions {
|
|
20
|
+
/** From */
|
|
21
|
+
from?: string;
|
|
22
|
+
/** To */
|
|
23
|
+
to?: string;
|
|
24
|
+
/** Person id */
|
|
25
|
+
personId?: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Options for forRecording.
|
|
30
|
+
*/
|
|
31
|
+
export interface ForRecordingTimesheetOptions {
|
|
32
|
+
/** From */
|
|
33
|
+
from?: string;
|
|
34
|
+
/** To */
|
|
35
|
+
to?: string;
|
|
36
|
+
/** Person id */
|
|
37
|
+
personId?: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Request parameters for create.
|
|
42
|
+
*/
|
|
43
|
+
export interface CreateTimesheetRequest {
|
|
44
|
+
/** Date */
|
|
45
|
+
date: string;
|
|
46
|
+
/** Hours */
|
|
47
|
+
hours: string;
|
|
48
|
+
/** Rich text description (HTML) */
|
|
49
|
+
description?: string;
|
|
50
|
+
/** Person id */
|
|
51
|
+
personId?: number;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Options for report.
|
|
56
|
+
*/
|
|
57
|
+
export interface ReportTimesheetOptions {
|
|
58
|
+
/** From */
|
|
59
|
+
from?: string;
|
|
60
|
+
/** To */
|
|
61
|
+
to?: string;
|
|
62
|
+
/** Person id */
|
|
63
|
+
personId?: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Request parameters for update.
|
|
68
|
+
*/
|
|
69
|
+
export interface UpdateTimesheetRequest {
|
|
70
|
+
/** Date */
|
|
71
|
+
date?: string;
|
|
72
|
+
/** Hours */
|
|
73
|
+
hours?: string;
|
|
74
|
+
/** Rich text description (HTML) */
|
|
75
|
+
description?: string;
|
|
76
|
+
/** Person id */
|
|
77
|
+
personId?: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
// =============================================================================
|
|
82
|
+
// Service
|
|
83
|
+
// =============================================================================
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Service for Timesheets operations.
|
|
87
|
+
*/
|
|
88
|
+
export class TimesheetsService extends BaseService {
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get timesheet for a specific project
|
|
92
|
+
* @param projectId - The project ID
|
|
93
|
+
* @param options - Optional query parameters
|
|
94
|
+
* @returns Array of results
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const result = await client.timesheets.forProject(123);
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
async forProject(projectId: number, options?: ForProjectTimesheetOptions): Promise<components["schemas"]["GetProjectTimesheetResponseContent"]> {
|
|
102
|
+
const response = await this.request(
|
|
103
|
+
{
|
|
104
|
+
service: "Timesheets",
|
|
105
|
+
operation: "GetProjectTimesheet",
|
|
106
|
+
resourceType: "project_timesheet",
|
|
107
|
+
isMutation: false,
|
|
108
|
+
projectId,
|
|
109
|
+
},
|
|
110
|
+
() =>
|
|
111
|
+
this.client.GET("/projects/{projectId}/timesheet.json", {
|
|
112
|
+
params: {
|
|
113
|
+
path: { projectId },
|
|
114
|
+
query: { from: options?.from, to: options?.to, "person_id": options?.personId },
|
|
115
|
+
},
|
|
116
|
+
})
|
|
117
|
+
);
|
|
118
|
+
return response ?? [];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Get timesheet for a specific recording
|
|
123
|
+
* @param recordingId - The recording ID
|
|
124
|
+
* @param options - Optional query parameters
|
|
125
|
+
* @returns Array of results
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts
|
|
129
|
+
* const result = await client.timesheets.forRecording(123);
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
async forRecording(recordingId: number, options?: ForRecordingTimesheetOptions): Promise<components["schemas"]["GetRecordingTimesheetResponseContent"]> {
|
|
133
|
+
const response = await this.request(
|
|
134
|
+
{
|
|
135
|
+
service: "Timesheets",
|
|
136
|
+
operation: "GetRecordingTimesheet",
|
|
137
|
+
resourceType: "recording_timesheet",
|
|
138
|
+
isMutation: false,
|
|
139
|
+
resourceId: recordingId,
|
|
140
|
+
},
|
|
141
|
+
() =>
|
|
142
|
+
this.client.GET("/recordings/{recordingId}/timesheet.json", {
|
|
143
|
+
params: {
|
|
144
|
+
path: { recordingId },
|
|
145
|
+
query: { from: options?.from, to: options?.to, "person_id": options?.personId },
|
|
146
|
+
},
|
|
147
|
+
})
|
|
148
|
+
);
|
|
149
|
+
return response ?? [];
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Create a timesheet entry on a recording
|
|
154
|
+
* @param recordingId - The recording ID
|
|
155
|
+
* @param req - Timesheet_entry creation parameters
|
|
156
|
+
* @returns The timesheet_entry
|
|
157
|
+
* @throws {BasecampError} If required fields are missing or invalid
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* const result = await client.timesheets.create(123, { date: "example", hours: "example" });
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
async create(recordingId: number, req: CreateTimesheetRequest): Promise<components["schemas"]["CreateTimesheetEntryResponseContent"]> {
|
|
165
|
+
if (!req.date) {
|
|
166
|
+
throw Errors.validation("Date is required");
|
|
167
|
+
}
|
|
168
|
+
if (!req.hours) {
|
|
169
|
+
throw Errors.validation("Hours is required");
|
|
170
|
+
}
|
|
171
|
+
const response = await this.request(
|
|
172
|
+
{
|
|
173
|
+
service: "Timesheets",
|
|
174
|
+
operation: "CreateTimesheetEntry",
|
|
175
|
+
resourceType: "timesheet_entry",
|
|
176
|
+
isMutation: true,
|
|
177
|
+
resourceId: recordingId,
|
|
178
|
+
},
|
|
179
|
+
() =>
|
|
180
|
+
this.client.POST("/recordings/{recordingId}/timesheet/entries.json", {
|
|
181
|
+
params: {
|
|
182
|
+
path: { recordingId },
|
|
183
|
+
},
|
|
184
|
+
body: {
|
|
185
|
+
date: req.date,
|
|
186
|
+
hours: req.hours,
|
|
187
|
+
description: req.description,
|
|
188
|
+
person_id: req.personId,
|
|
189
|
+
},
|
|
190
|
+
})
|
|
191
|
+
);
|
|
192
|
+
return response;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Get account-wide timesheet report
|
|
197
|
+
* @param options - Optional query parameters
|
|
198
|
+
* @returns Array of results
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```ts
|
|
202
|
+
* const result = await client.timesheets.report();
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
async report(options?: ReportTimesheetOptions): Promise<components["schemas"]["GetTimesheetReportResponseContent"]> {
|
|
206
|
+
const response = await this.request(
|
|
207
|
+
{
|
|
208
|
+
service: "Timesheets",
|
|
209
|
+
operation: "GetTimesheetReport",
|
|
210
|
+
resourceType: "timesheet_report",
|
|
211
|
+
isMutation: false,
|
|
212
|
+
},
|
|
213
|
+
() =>
|
|
214
|
+
this.client.GET("/reports/timesheet.json", {
|
|
215
|
+
params: {
|
|
216
|
+
query: { from: options?.from, to: options?.to, "person_id": options?.personId },
|
|
217
|
+
},
|
|
218
|
+
})
|
|
219
|
+
);
|
|
220
|
+
return response ?? [];
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Get a single timesheet entry
|
|
225
|
+
* @param entryId - The entry ID
|
|
226
|
+
* @returns The timesheet_entry
|
|
227
|
+
* @throws {BasecampError} If the resource is not found
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```ts
|
|
231
|
+
* const result = await client.timesheets.get(123);
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
async get(entryId: number): Promise<components["schemas"]["GetTimesheetEntryResponseContent"]> {
|
|
235
|
+
const response = await this.request(
|
|
236
|
+
{
|
|
237
|
+
service: "Timesheets",
|
|
238
|
+
operation: "GetTimesheetEntry",
|
|
239
|
+
resourceType: "timesheet_entry",
|
|
240
|
+
isMutation: false,
|
|
241
|
+
resourceId: entryId,
|
|
242
|
+
},
|
|
243
|
+
() =>
|
|
244
|
+
this.client.GET("/timesheet_entries/{entryId}", {
|
|
245
|
+
params: {
|
|
246
|
+
path: { entryId },
|
|
247
|
+
},
|
|
248
|
+
})
|
|
249
|
+
);
|
|
250
|
+
return response;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Update a timesheet entry
|
|
255
|
+
* @param entryId - The entry ID
|
|
256
|
+
* @param req - Timesheet_entry update parameters
|
|
257
|
+
* @returns The timesheet_entry
|
|
258
|
+
* @throws {BasecampError} If the resource is not found or fields are invalid
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* ```ts
|
|
262
|
+
* const result = await client.timesheets.update(123, { });
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
265
|
+
async update(entryId: number, req: UpdateTimesheetRequest): Promise<components["schemas"]["UpdateTimesheetEntryResponseContent"]> {
|
|
266
|
+
const response = await this.request(
|
|
267
|
+
{
|
|
268
|
+
service: "Timesheets",
|
|
269
|
+
operation: "UpdateTimesheetEntry",
|
|
270
|
+
resourceType: "timesheet_entry",
|
|
271
|
+
isMutation: true,
|
|
272
|
+
resourceId: entryId,
|
|
273
|
+
},
|
|
274
|
+
() =>
|
|
275
|
+
this.client.PUT("/timesheet_entries/{entryId}", {
|
|
276
|
+
params: {
|
|
277
|
+
path: { entryId },
|
|
278
|
+
},
|
|
279
|
+
body: {
|
|
280
|
+
date: req.date,
|
|
281
|
+
hours: req.hours,
|
|
282
|
+
description: req.description,
|
|
283
|
+
person_id: req.personId,
|
|
284
|
+
},
|
|
285
|
+
})
|
|
286
|
+
);
|
|
287
|
+
return response;
|
|
288
|
+
}
|
|
289
|
+
}
|