@37signals/basecamp 0.21.0 → 0.22.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.
@@ -17308,6 +17308,106 @@
17308
17308
  }
17309
17309
  }
17310
17310
  },
17311
+ "/recordings/{recordingId}/filing.json": {
17312
+ "post": {
17313
+ "description": "Move a document, upload or vault into another vault in its project, or reorder it in its own vault.\n\nPassing the vault it is already in changes only its position. The\nrecording moves in place: its id, comments, bookmarks and history stay with\nit, and a vault takes everything inside it along. A destination in another\nproject is 404; moves to another project are not this operation. 404, 403 and\nsome 422s carry no body.\n\n403 when the caller may not move the recording (an account can restrict moves\nto admins and creators). 422 when position is not a positive whole number, the\ndestination is not a vault or is not active, the recording is not active, or a\nvault would move into one of its own vaults; only the position and vault-cycle\nrefusals carry an `error` message.",
17314
+ "operationId": "MoveRecordingToVault",
17315
+ "requestBody": {
17316
+ "content": {
17317
+ "application/json": {
17318
+ "schema": {
17319
+ "$ref": "#/components/schemas/MoveRecordingToVaultRequestContent"
17320
+ }
17321
+ }
17322
+ },
17323
+ "required": true
17324
+ },
17325
+ "parameters": [
17326
+ {
17327
+ "name": "recordingId",
17328
+ "in": "path",
17329
+ "schema": {
17330
+ "type": "integer",
17331
+ "format": "int64"
17332
+ },
17333
+ "required": true
17334
+ }
17335
+ ],
17336
+ "responses": {
17337
+ "204": {
17338
+ "description": "MoveRecordingToVault 204 response"
17339
+ },
17340
+ "400": {
17341
+ "description": "BadRequestError 400 response",
17342
+ "content": {
17343
+ "application/json": {
17344
+ "schema": {
17345
+ "$ref": "#/components/schemas/BadRequestErrorResponseContent"
17346
+ }
17347
+ }
17348
+ }
17349
+ },
17350
+ "401": {
17351
+ "description": "UnauthorizedError 401 response",
17352
+ "content": {
17353
+ "application/json": {
17354
+ "schema": {
17355
+ "$ref": "#/components/schemas/UnauthorizedErrorResponseContent"
17356
+ }
17357
+ }
17358
+ }
17359
+ },
17360
+ "403": {
17361
+ "description": "BareForbiddenError 403 response"
17362
+ },
17363
+ "404": {
17364
+ "description": "BareNotFoundError 404 response"
17365
+ },
17366
+ "422": {
17367
+ "description": "ValidationError 422 response",
17368
+ "content": {
17369
+ "application/json": {
17370
+ "schema": {
17371
+ "$ref": "#/components/schemas/ValidationErrorResponseContent"
17372
+ }
17373
+ }
17374
+ }
17375
+ },
17376
+ "429": {
17377
+ "description": "RateLimitError 429 response",
17378
+ "content": {
17379
+ "application/json": {
17380
+ "schema": {
17381
+ "$ref": "#/components/schemas/RateLimitErrorResponseContent"
17382
+ }
17383
+ }
17384
+ }
17385
+ },
17386
+ "500": {
17387
+ "description": "InternalServerError 500 response",
17388
+ "content": {
17389
+ "application/json": {
17390
+ "schema": {
17391
+ "$ref": "#/components/schemas/InternalServerErrorResponseContent"
17392
+ }
17393
+ }
17394
+ }
17395
+ }
17396
+ },
17397
+ "tags": [
17398
+ "Recordings"
17399
+ ],
17400
+ "x-basecamp-retry": {
17401
+ "maxAttempts": 2,
17402
+ "baseDelayMs": 1000,
17403
+ "backoff": "exponential",
17404
+ "retryOn": [
17405
+ 429,
17406
+ 503
17407
+ ]
17408
+ }
17409
+ }
17410
+ },
17311
17411
  "/recordings/{recordingId}/spotlight.json": {
17312
17412
  "delete": {
17313
17413
  "description": "Remove a recording from the spotlight area.\nIdempotent: removing an absent spotlight also returns 204.",
@@ -32045,6 +32145,24 @@
32045
32145
  "column_id"
32046
32146
  ]
32047
32147
  },
32148
+ "MoveRecordingToVaultRequestContent": {
32149
+ "type": "object",
32150
+ "properties": {
32151
+ "parent_id": {
32152
+ "type": "integer",
32153
+ "description": "The destination vault. The recording's current vault keeps it where it is\nand changes only its position.",
32154
+ "format": "int64"
32155
+ },
32156
+ "position": {
32157
+ "type": "integer",
32158
+ "description": "1-indexed position within the destination vault. Defaults to 1 (first); a\nposition past the end places it last.",
32159
+ "format": "int32"
32160
+ }
32161
+ },
32162
+ "required": [
32163
+ "parent_id"
32164
+ ]
32165
+ },
32048
32166
  "MyAssignment": {
32049
32167
  "type": "object",
32050
32168
  "properties": {
@@ -36552,13 +36670,13 @@
36552
36670
  "UpdateQuestionNotificationSettingsRequestContent": {
36553
36671
  "type": "object",
36554
36672
  "properties": {
36555
- "notify_on_answer": {
36673
+ "responding": {
36556
36674
  "type": "boolean",
36557
- "description": "Notify when someone answers"
36675
+ "description": "Whether the authenticated user is asked this question. Omit to leave it unchanged.\nTurning it on also subscribes the user unless `subscribed: false` is sent with it."
36558
36676
  },
36559
- "digest_include_unanswered": {
36677
+ "subscribed": {
36560
36678
  "type": "boolean",
36561
- "description": "Include unanswered in digest"
36679
+ "description": "Whether the authenticated user is notified when someone answers. Omit to leave it unchanged."
36562
36680
  }
36563
36681
  }
36564
36682
  },
@@ -137,6 +137,7 @@ export const PATH_TO_OPERATION: Record<string, string> = {
137
137
  "PUT:/{accountId}/recordings/{recordingId}/client_visibility.json": "SetClientVisibility",
138
138
  "GET:/{accountId}/recordings/{recordingId}/comments.json": "ListComments",
139
139
  "POST:/{accountId}/recordings/{recordingId}/comments.json": "CreateComment",
140
+ "POST:/{accountId}/recordings/{recordingId}/filing.json": "MoveRecordingToVault",
140
141
  "DELETE:/{accountId}/recordings/{recordingId}/spotlight.json": "UnspotlightRecording",
141
142
  "POST:/{accountId}/recordings/{recordingId}/spotlight.json": "SpotlightRecording",
142
143
  "PUT:/{accountId}/recordings/{recordingId}/status/active.json": "UnarchiveRecording",
@@ -2660,6 +2660,37 @@ export interface paths {
2660
2660
  patch?: never;
2661
2661
  trace?: never;
2662
2662
  };
2663
+ "/recordings/{recordingId}/filing.json": {
2664
+ parameters: {
2665
+ query?: never;
2666
+ header?: never;
2667
+ path?: never;
2668
+ cookie?: never;
2669
+ };
2670
+ get?: never;
2671
+ put?: never;
2672
+ /**
2673
+ * @description Move a document, upload or vault into another vault in its project, or reorder it in its own vault.
2674
+ *
2675
+ * Passing the vault it is already in changes only its position. The
2676
+ * recording moves in place: its id, comments, bookmarks and history stay with
2677
+ * it, and a vault takes everything inside it along. A destination in another
2678
+ * project is 404; moves to another project are not this operation. 404, 403 and
2679
+ * some 422s carry no body.
2680
+ *
2681
+ * 403 when the caller may not move the recording (an account can restrict moves
2682
+ * to admins and creators). 422 when position is not a positive whole number, the
2683
+ * destination is not a vault or is not active, the recording is not active, or a
2684
+ * vault would move into one of its own vaults; only the position and vault-cycle
2685
+ * refusals carry an `error` message.
2686
+ */
2687
+ post: operations["MoveRecordingToVault"];
2688
+ delete?: never;
2689
+ options?: never;
2690
+ head?: never;
2691
+ patch?: never;
2692
+ trace?: never;
2693
+ };
2663
2694
  "/recordings/{recordingId}/spotlight.json": {
2664
2695
  parameters: {
2665
2696
  query?: never;
@@ -5840,6 +5871,20 @@ export interface components {
5840
5871
  */
5841
5872
  position?: number;
5842
5873
  };
5874
+ MoveRecordingToVaultRequestContent: {
5875
+ /**
5876
+ * Format: int64
5877
+ * @description The destination vault. The recording's current vault keeps it where it is
5878
+ * and changes only its position.
5879
+ */
5880
+ parent_id: number;
5881
+ /**
5882
+ * Format: int32
5883
+ * @description 1-indexed position within the destination vault. Defaults to 1 (first); a
5884
+ * position past the end places it last.
5885
+ */
5886
+ position?: number;
5887
+ };
5843
5888
  MyAssignment: {
5844
5889
  /** Format: int64 */
5845
5890
  id: number;
@@ -7951,10 +7996,13 @@ export interface components {
7951
7996
  };
7952
7997
  UpdateProjectResponseContent: components["schemas"]["Project"];
7953
7998
  UpdateQuestionNotificationSettingsRequestContent: {
7954
- /** @description Notify when someone answers */
7955
- notify_on_answer?: boolean;
7956
- /** @description Include unanswered in digest */
7957
- digest_include_unanswered?: boolean;
7999
+ /**
8000
+ * @description Whether the authenticated user is asked this question. Omit to leave it unchanged.
8001
+ * Turning it on also subscribes the user unless `subscribed: false` is sent with it.
8002
+ */
8003
+ responding?: boolean;
8004
+ /** @description Whether the authenticated user is notified when someone answers. Omit to leave it unchanged. */
8005
+ subscribed?: boolean;
7958
8006
  };
7959
8007
  UpdateQuestionNotificationSettingsResponseContent: {
7960
8008
  responding?: boolean;
@@ -20001,6 +20049,89 @@ export interface operations {
20001
20049
  };
20002
20050
  };
20003
20051
  };
20052
+ MoveRecordingToVault: {
20053
+ parameters: {
20054
+ query?: never;
20055
+ header?: never;
20056
+ path: {
20057
+ recordingId: number;
20058
+ };
20059
+ cookie?: never;
20060
+ };
20061
+ requestBody: {
20062
+ content: {
20063
+ "application/json": components["schemas"]["MoveRecordingToVaultRequestContent"];
20064
+ };
20065
+ };
20066
+ responses: {
20067
+ /** @description MoveRecordingToVault 204 response */
20068
+ 204: {
20069
+ headers: {
20070
+ [name: string]: unknown;
20071
+ };
20072
+ content?: never;
20073
+ };
20074
+ /** @description BadRequestError 400 response */
20075
+ 400: {
20076
+ headers: {
20077
+ [name: string]: unknown;
20078
+ };
20079
+ content: {
20080
+ "application/json": components["schemas"]["BadRequestErrorResponseContent"];
20081
+ };
20082
+ };
20083
+ /** @description UnauthorizedError 401 response */
20084
+ 401: {
20085
+ headers: {
20086
+ [name: string]: unknown;
20087
+ };
20088
+ content: {
20089
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
20090
+ };
20091
+ };
20092
+ /** @description BareForbiddenError 403 response */
20093
+ 403: {
20094
+ headers: {
20095
+ [name: string]: unknown;
20096
+ };
20097
+ content?: never;
20098
+ };
20099
+ /** @description BareNotFoundError 404 response */
20100
+ 404: {
20101
+ headers: {
20102
+ [name: string]: unknown;
20103
+ };
20104
+ content?: never;
20105
+ };
20106
+ /** @description ValidationError 422 response */
20107
+ 422: {
20108
+ headers: {
20109
+ [name: string]: unknown;
20110
+ };
20111
+ content: {
20112
+ "application/json": components["schemas"]["ValidationErrorResponseContent"];
20113
+ };
20114
+ };
20115
+ /** @description RateLimitError 429 response */
20116
+ 429: {
20117
+ headers: {
20118
+ [name: string]: unknown;
20119
+ };
20120
+ content: {
20121
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
20122
+ };
20123
+ };
20124
+ /** @description InternalServerError 500 response */
20125
+ 500: {
20126
+ headers: {
20127
+ [name: string]: unknown;
20128
+ };
20129
+ content: {
20130
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
20131
+ };
20132
+ };
20133
+ };
20134
+ };
20004
20135
  SpotlightRecording: {
20005
20136
  parameters: {
20006
20137
  query?: never;
@@ -109,10 +109,11 @@ export interface ByPersonCheckinOptions extends PaginationOptions {
109
109
  * Request parameters for updateNotificationSettings.
110
110
  */
111
111
  export interface UpdateNotificationSettingsCheckinRequest {
112
- /** Notify when someone answers */
113
- notifyOnAnswer?: boolean;
114
- /** Include unanswered in digest */
115
- digestIncludeUnanswered?: boolean;
112
+ /** Whether the authenticated user is asked this question. Omit to leave it unchanged.
113
+ Turning it on also subscribes the user unless `subscribed: false` is sent with it. */
114
+ responding?: boolean;
115
+ /** Whether the authenticated user is notified when someone answers. Omit to leave it unchanged. */
116
+ subscribed?: boolean;
116
117
  }
117
118
 
118
119
 
@@ -559,8 +560,8 @@ export class CheckinsService extends BaseService {
559
560
  path: { questionId },
560
561
  },
561
562
  body: {
562
- notify_on_answer: req.notifyOnAnswer,
563
- digest_include_unanswered: req.digestIncludeUnanswered,
563
+ responding: req.responding,
564
+ subscribed: req.subscribed,
564
565
  },
565
566
  })
566
567
  );
@@ -32,6 +32,18 @@ export interface ListRecordingOptions extends PaginationOptions {
32
32
  page?: number;
33
33
  }
34
34
 
35
+ /**
36
+ * Request parameters for moveToVault.
37
+ */
38
+ export interface MoveToVaultRecordingRequest {
39
+ /** The destination vault. The recording's current vault keeps it where it is
40
+ and changes only its position. */
41
+ parentId: number;
42
+ /** 1-indexed position within the destination vault. Defaults to 1 (first); a
43
+ position past the end places it last. */
44
+ position?: number;
45
+ }
46
+
35
47
 
36
48
  // =============================================================================
37
49
  // Service
@@ -74,6 +86,40 @@ export class RecordingsService extends BaseService {
74
86
  );
75
87
  }
76
88
 
89
+ /**
90
+ * Move a document, upload or vault into another vault in its project, or reorder it in its own vault.
91
+ * @param recordingId - The recording ID
92
+ * @param req - Recording request parameters
93
+ * @returns void
94
+ * @throws {BasecampError} If the request fails
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * await client.recordings.moveToVault(123, { parentId: 1 });
99
+ * ```
100
+ */
101
+ async moveToVault(recordingId: number, req: MoveToVaultRecordingRequest): Promise<void> {
102
+ await this.request(
103
+ {
104
+ service: "Recordings",
105
+ operation: "MoveRecordingToVault",
106
+ resourceType: "recording",
107
+ isMutation: true,
108
+ resourceId: recordingId,
109
+ },
110
+ () =>
111
+ this.client.POST("/recordings/{recordingId}/filing.json", {
112
+ params: {
113
+ path: { recordingId },
114
+ },
115
+ body: {
116
+ parent_id: req.parentId,
117
+ position: req.position,
118
+ },
119
+ })
120
+ );
121
+ }
122
+
77
123
  /**
78
124
  * Put a recording's card in the spotlight area on its project or template home page.
79
125
  * @param recordingId - The recording ID