basecamp-sdk 0.8.0 → 0.10.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.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/basecamp/client.rb +10 -0
- data/lib/basecamp/generated/metadata.json +343 -12
- data/lib/basecamp/generated/services/automation_service.rb +1 -1
- data/lib/basecamp/generated/services/base_service.rb +13 -0
- data/lib/basecamp/generated/services/campfires_service.rb +2 -2
- data/lib/basecamp/generated/services/card_columns_service.rb +3 -3
- data/lib/basecamp/generated/services/cards_service.rb +2 -2
- data/lib/basecamp/generated/services/checkins_service.rb +5 -4
- data/lib/basecamp/generated/services/client_approvals_service.rb +1 -1
- data/lib/basecamp/generated/services/client_correspondences_service.rb +1 -1
- data/lib/basecamp/generated/services/documents_service.rb +3 -2
- data/lib/basecamp/generated/services/everything_service.rb +179 -0
- data/lib/basecamp/generated/services/forwards_service.rb +1 -1
- data/lib/basecamp/generated/services/gauges_service.rb +4 -4
- data/lib/basecamp/generated/services/message_types_service.rb +20 -15
- data/lib/basecamp/generated/services/messages_service.rb +4 -3
- data/lib/basecamp/generated/services/my_assignments_service.rb +3 -3
- data/lib/basecamp/generated/services/my_notifications_service.rb +16 -2
- data/lib/basecamp/generated/services/people_service.rb +3 -3
- data/lib/basecamp/generated/services/projects_service.rb +2 -2
- data/lib/basecamp/generated/services/recordings_service.rb +2 -2
- data/lib/basecamp/generated/services/reports_service.rb +2 -2
- data/lib/basecamp/generated/services/schedules_service.rb +14 -5
- data/lib/basecamp/generated/services/search_service.rb +14 -3
- data/lib/basecamp/generated/services/templates_service.rb +4 -5
- data/lib/basecamp/generated/services/timesheets_service.rb +4 -4
- data/lib/basecamp/generated/services/todolists_service.rb +15 -3
- data/lib/basecamp/generated/services/todos_service.rb +1 -1
- data/lib/basecamp/generated/services/tools_service.rb +4 -3
- data/lib/basecamp/generated/services/uploads_service.rb +3 -2
- data/lib/basecamp/generated/services/webhooks_service.rb +2 -2
- data/lib/basecamp/generated/services/wormholes_service.rb +44 -0
- data/lib/basecamp/generated/types.rb +656 -71
- data/lib/basecamp/http.rb +2 -1
- data/lib/basecamp/services/cards_extensions.rb +67 -0
- data/lib/basecamp/version.rb +2 -2
- data/lib/basecamp.rb +5 -0
- data/scripts/generate-services.rb +39 -10
- data/scripts/generate-types.rb +60 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 06b1a1a19b501f386b63739724bb50b0f1d778660d2765f04d2c6a0d2214ef14
|
|
4
|
+
data.tar.gz: 3c2b5c8409d5a334eabb01b668e430510ad79b93cefc5ead3c5475f4b8f5d661
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0d9134c7b9996490c035fccc0c949acd1c05faff5c52b40aa5f30ab913456c10701a8742b74df33aea35539d197dd8c4932df3a1305d73db3efe2ac3de7bfa34
|
|
7
|
+
data.tar.gz: 3a4c47cb7196bd642f1c0863d25ff02fcf8ec607e102a6ce16cafe54aa5a74ef6290561c1897e365ff848e77911bdf8d7b3d31d85395adc4ba0b0753ba21d641
|
data/README.md
CHANGED
|
@@ -179,7 +179,7 @@ aborts before an oversized body is buffered.
|
|
|
179
179
|
|
|
180
180
|
## Services
|
|
181
181
|
|
|
182
|
-
The SDK provides
|
|
182
|
+
The SDK provides 45 account-scoped services. The table below covers the common ones; see `lib/basecamp/generated/services/` for the authoritative, complete set:
|
|
183
183
|
|
|
184
184
|
| Service | Description |
|
|
185
185
|
|---------|-------------|
|
|
@@ -210,6 +210,7 @@ The SDK provides 37 services covering the complete Basecamp API:
|
|
|
210
210
|
| `card_tables` | Card tables (kanban) |
|
|
211
211
|
| `card_columns` | Card table columns |
|
|
212
212
|
| `card_steps` | Card workflow steps |
|
|
213
|
+
| `wormholes` | Card table wormholes (cross-project moves) |
|
|
213
214
|
| `lineup` | Card lineup view |
|
|
214
215
|
| `tools` | Project dock tools |
|
|
215
216
|
| `search` | Full-text search |
|
data/lib/basecamp/client.rb
CHANGED
|
@@ -431,6 +431,11 @@ module Basecamp
|
|
|
431
431
|
service(:card_steps) { Services::CardStepsService.new(self) }
|
|
432
432
|
end
|
|
433
433
|
|
|
434
|
+
# @return [Services::WormholesService]
|
|
435
|
+
def wormholes
|
|
436
|
+
service(:wormholes) { Services::WormholesService.new(self) }
|
|
437
|
+
end
|
|
438
|
+
|
|
434
439
|
# @return [Services::TemplatesService]
|
|
435
440
|
def templates
|
|
436
441
|
service(:templates) { Services::TemplatesService.new(self) }
|
|
@@ -496,6 +501,11 @@ module Basecamp
|
|
|
496
501
|
service(:timeline) { Services::TimelineService.new(self) }
|
|
497
502
|
end
|
|
498
503
|
|
|
504
|
+
# @return [Services::EverythingService]
|
|
505
|
+
def everything
|
|
506
|
+
service(:everything) { Services::EverythingService.new(self) }
|
|
507
|
+
end
|
|
508
|
+
|
|
499
509
|
# @return [Services::TimesheetsService]
|
|
500
510
|
def timesheets
|
|
501
511
|
service(:timesheets) { Services::TimesheetsService.new(self) }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://basecamp.com/schemas/sdk-metadata.json",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"generated": "2026-07-
|
|
4
|
+
"generated": "2026-07-28T21:34:14Z",
|
|
5
5
|
"operations": {
|
|
6
6
|
"GetAccount": {
|
|
7
7
|
"retry": {
|
|
@@ -67,6 +67,22 @@
|
|
|
67
67
|
]
|
|
68
68
|
}
|
|
69
69
|
},
|
|
70
|
+
"GetEverythingBoosts": {
|
|
71
|
+
"retry": {
|
|
72
|
+
"maxAttempts": 3,
|
|
73
|
+
"baseDelayMs": 1000,
|
|
74
|
+
"backoff": "exponential",
|
|
75
|
+
"retryOn": [
|
|
76
|
+
429,
|
|
77
|
+
503
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"pagination": {
|
|
81
|
+
"style": "link",
|
|
82
|
+
"totalCountHeader": "X-Total-Count",
|
|
83
|
+
"maxPageSize": 50
|
|
84
|
+
}
|
|
85
|
+
},
|
|
70
86
|
"GetBoost": {
|
|
71
87
|
"retry": {
|
|
72
88
|
"maxAttempts": 3,
|
|
@@ -131,6 +147,111 @@
|
|
|
131
147
|
"natural": true
|
|
132
148
|
}
|
|
133
149
|
},
|
|
150
|
+
"UpdateWormhole": {
|
|
151
|
+
"retry": {
|
|
152
|
+
"maxAttempts": 3,
|
|
153
|
+
"baseDelayMs": 1000,
|
|
154
|
+
"backoff": "exponential",
|
|
155
|
+
"retryOn": [
|
|
156
|
+
429,
|
|
157
|
+
503
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"idempotent": {
|
|
161
|
+
"natural": true
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"DeleteWormhole": {
|
|
165
|
+
"retry": {
|
|
166
|
+
"maxAttempts": 3,
|
|
167
|
+
"baseDelayMs": 1000,
|
|
168
|
+
"backoff": "exponential",
|
|
169
|
+
"retryOn": [
|
|
170
|
+
429,
|
|
171
|
+
503
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
"idempotent": {
|
|
175
|
+
"natural": true
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"CreateWormhole": {
|
|
179
|
+
"retry": {
|
|
180
|
+
"maxAttempts": 2,
|
|
181
|
+
"baseDelayMs": 1000,
|
|
182
|
+
"backoff": "exponential",
|
|
183
|
+
"retryOn": [
|
|
184
|
+
429,
|
|
185
|
+
503
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"ListMessageTypes": {
|
|
190
|
+
"retry": {
|
|
191
|
+
"maxAttempts": 3,
|
|
192
|
+
"baseDelayMs": 1000,
|
|
193
|
+
"backoff": "exponential",
|
|
194
|
+
"retryOn": [
|
|
195
|
+
429,
|
|
196
|
+
503
|
|
197
|
+
]
|
|
198
|
+
},
|
|
199
|
+
"pagination": {
|
|
200
|
+
"style": "link",
|
|
201
|
+
"totalCountHeader": "X-Total-Count",
|
|
202
|
+
"maxPageSize": 50
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"CreateMessageType": {
|
|
206
|
+
"retry": {
|
|
207
|
+
"maxAttempts": 2,
|
|
208
|
+
"baseDelayMs": 1000,
|
|
209
|
+
"backoff": "exponential",
|
|
210
|
+
"retryOn": [
|
|
211
|
+
429,
|
|
212
|
+
503
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"GetMessageType": {
|
|
217
|
+
"retry": {
|
|
218
|
+
"maxAttempts": 3,
|
|
219
|
+
"baseDelayMs": 1000,
|
|
220
|
+
"backoff": "exponential",
|
|
221
|
+
"retryOn": [
|
|
222
|
+
429,
|
|
223
|
+
503
|
|
224
|
+
]
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
"UpdateMessageType": {
|
|
228
|
+
"retry": {
|
|
229
|
+
"maxAttempts": 3,
|
|
230
|
+
"baseDelayMs": 1000,
|
|
231
|
+
"backoff": "exponential",
|
|
232
|
+
"retryOn": [
|
|
233
|
+
429,
|
|
234
|
+
503
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
"idempotent": {
|
|
238
|
+
"natural": true
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"DeleteMessageType": {
|
|
242
|
+
"retry": {
|
|
243
|
+
"maxAttempts": 3,
|
|
244
|
+
"baseDelayMs": 1000,
|
|
245
|
+
"backoff": "exponential",
|
|
246
|
+
"retryOn": [
|
|
247
|
+
429,
|
|
248
|
+
503
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
"idempotent": {
|
|
252
|
+
"natural": true
|
|
253
|
+
}
|
|
254
|
+
},
|
|
134
255
|
"CreateTool": {
|
|
135
256
|
"retry": {
|
|
136
257
|
"maxAttempts": 2,
|
|
@@ -379,7 +500,7 @@
|
|
|
379
500
|
]
|
|
380
501
|
}
|
|
381
502
|
},
|
|
382
|
-
"
|
|
503
|
+
"GetEverythingCompletedCards": {
|
|
383
504
|
"retry": {
|
|
384
505
|
"maxAttempts": 3,
|
|
385
506
|
"baseDelayMs": 1000,
|
|
@@ -392,21 +513,26 @@
|
|
|
392
513
|
"pagination": {
|
|
393
514
|
"style": "link",
|
|
394
515
|
"totalCountHeader": "X-Total-Count",
|
|
395
|
-
"maxPageSize":
|
|
516
|
+
"maxPageSize": 5
|
|
396
517
|
}
|
|
397
518
|
},
|
|
398
|
-
"
|
|
519
|
+
"GetEverythingNoDueDateCards": {
|
|
399
520
|
"retry": {
|
|
400
|
-
"maxAttempts":
|
|
521
|
+
"maxAttempts": 3,
|
|
401
522
|
"baseDelayMs": 1000,
|
|
402
523
|
"backoff": "exponential",
|
|
403
524
|
"retryOn": [
|
|
404
525
|
429,
|
|
405
526
|
503
|
|
406
527
|
]
|
|
528
|
+
},
|
|
529
|
+
"pagination": {
|
|
530
|
+
"style": "link",
|
|
531
|
+
"totalCountHeader": "X-Total-Count",
|
|
532
|
+
"maxPageSize": 5
|
|
407
533
|
}
|
|
408
534
|
},
|
|
409
|
-
"
|
|
535
|
+
"GetEverythingNotNowCards": {
|
|
410
536
|
"retry": {
|
|
411
537
|
"maxAttempts": 3,
|
|
412
538
|
"baseDelayMs": 1000,
|
|
@@ -415,9 +541,14 @@
|
|
|
415
541
|
429,
|
|
416
542
|
503
|
|
417
543
|
]
|
|
544
|
+
},
|
|
545
|
+
"pagination": {
|
|
546
|
+
"style": "link",
|
|
547
|
+
"totalCountHeader": "X-Total-Count",
|
|
548
|
+
"maxPageSize": 5
|
|
418
549
|
}
|
|
419
550
|
},
|
|
420
|
-
"
|
|
551
|
+
"GetEverythingOpenCards": {
|
|
421
552
|
"retry": {
|
|
422
553
|
"maxAttempts": 3,
|
|
423
554
|
"baseDelayMs": 1000,
|
|
@@ -427,11 +558,24 @@
|
|
|
427
558
|
503
|
|
428
559
|
]
|
|
429
560
|
},
|
|
430
|
-
"
|
|
431
|
-
"
|
|
561
|
+
"pagination": {
|
|
562
|
+
"style": "link",
|
|
563
|
+
"totalCountHeader": "X-Total-Count",
|
|
564
|
+
"maxPageSize": 5
|
|
432
565
|
}
|
|
433
566
|
},
|
|
434
|
-
"
|
|
567
|
+
"GetEverythingOverdueCards": {
|
|
568
|
+
"retry": {
|
|
569
|
+
"maxAttempts": 3,
|
|
570
|
+
"baseDelayMs": 1000,
|
|
571
|
+
"backoff": "exponential",
|
|
572
|
+
"retryOn": [
|
|
573
|
+
429,
|
|
574
|
+
503
|
|
575
|
+
]
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
"GetEverythingUnassignedCards": {
|
|
435
579
|
"retry": {
|
|
436
580
|
"maxAttempts": 3,
|
|
437
581
|
"baseDelayMs": 1000,
|
|
@@ -441,8 +585,10 @@
|
|
|
441
585
|
503
|
|
442
586
|
]
|
|
443
587
|
},
|
|
444
|
-
"
|
|
445
|
-
"
|
|
588
|
+
"pagination": {
|
|
589
|
+
"style": "link",
|
|
590
|
+
"totalCountHeader": "X-Total-Count",
|
|
591
|
+
"maxPageSize": 5
|
|
446
592
|
}
|
|
447
593
|
},
|
|
448
594
|
"ListCampfires": {
|
|
@@ -631,6 +777,22 @@
|
|
|
631
777
|
]
|
|
632
778
|
}
|
|
633
779
|
},
|
|
780
|
+
"GetEverythingCheckins": {
|
|
781
|
+
"retry": {
|
|
782
|
+
"maxAttempts": 3,
|
|
783
|
+
"baseDelayMs": 1000,
|
|
784
|
+
"backoff": "exponential",
|
|
785
|
+
"retryOn": [
|
|
786
|
+
429,
|
|
787
|
+
503
|
|
788
|
+
]
|
|
789
|
+
},
|
|
790
|
+
"pagination": {
|
|
791
|
+
"style": "link",
|
|
792
|
+
"totalCountHeader": "X-Total-Count",
|
|
793
|
+
"maxPageSize": 50
|
|
794
|
+
}
|
|
795
|
+
},
|
|
634
796
|
"ListPingablePeople": {
|
|
635
797
|
"retry": {
|
|
636
798
|
"maxAttempts": 3,
|
|
@@ -728,6 +890,22 @@
|
|
|
728
890
|
]
|
|
729
891
|
}
|
|
730
892
|
},
|
|
893
|
+
"GetEverythingComments": {
|
|
894
|
+
"retry": {
|
|
895
|
+
"maxAttempts": 3,
|
|
896
|
+
"baseDelayMs": 1000,
|
|
897
|
+
"backoff": "exponential",
|
|
898
|
+
"retryOn": [
|
|
899
|
+
429,
|
|
900
|
+
503
|
|
901
|
+
]
|
|
902
|
+
},
|
|
903
|
+
"pagination": {
|
|
904
|
+
"style": "link",
|
|
905
|
+
"totalCountHeader": "X-Total-Count",
|
|
906
|
+
"maxPageSize": 50
|
|
907
|
+
}
|
|
908
|
+
},
|
|
731
909
|
"GetComment": {
|
|
732
910
|
"retry": {
|
|
733
911
|
"maxAttempts": 3,
|
|
@@ -817,6 +995,38 @@
|
|
|
817
995
|
"natural": true
|
|
818
996
|
}
|
|
819
997
|
},
|
|
998
|
+
"GetEverythingFiles": {
|
|
999
|
+
"retry": {
|
|
1000
|
+
"maxAttempts": 3,
|
|
1001
|
+
"baseDelayMs": 1000,
|
|
1002
|
+
"backoff": "exponential",
|
|
1003
|
+
"retryOn": [
|
|
1004
|
+
429,
|
|
1005
|
+
503
|
|
1006
|
+
]
|
|
1007
|
+
},
|
|
1008
|
+
"pagination": {
|
|
1009
|
+
"style": "link",
|
|
1010
|
+
"totalCountHeader": "X-Total-Count",
|
|
1011
|
+
"maxPageSize": 50
|
|
1012
|
+
}
|
|
1013
|
+
},
|
|
1014
|
+
"GetEverythingForwards": {
|
|
1015
|
+
"retry": {
|
|
1016
|
+
"maxAttempts": 3,
|
|
1017
|
+
"baseDelayMs": 1000,
|
|
1018
|
+
"backoff": "exponential",
|
|
1019
|
+
"retryOn": [
|
|
1020
|
+
429,
|
|
1021
|
+
503
|
|
1022
|
+
]
|
|
1023
|
+
},
|
|
1024
|
+
"pagination": {
|
|
1025
|
+
"style": "link",
|
|
1026
|
+
"totalCountHeader": "X-Total-Count",
|
|
1027
|
+
"maxPageSize": 50
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
820
1030
|
"GetGaugeNeedle": {
|
|
821
1031
|
"retry": {
|
|
822
1032
|
"maxAttempts": 3,
|
|
@@ -1020,6 +1230,22 @@
|
|
|
1020
1230
|
]
|
|
1021
1231
|
}
|
|
1022
1232
|
},
|
|
1233
|
+
"GetEverythingMessages": {
|
|
1234
|
+
"retry": {
|
|
1235
|
+
"maxAttempts": 3,
|
|
1236
|
+
"baseDelayMs": 1000,
|
|
1237
|
+
"backoff": "exponential",
|
|
1238
|
+
"retryOn": [
|
|
1239
|
+
429,
|
|
1240
|
+
503
|
|
1241
|
+
]
|
|
1242
|
+
},
|
|
1243
|
+
"pagination": {
|
|
1244
|
+
"style": "link",
|
|
1245
|
+
"totalCountHeader": "X-Total-Count",
|
|
1246
|
+
"maxPageSize": 50
|
|
1247
|
+
}
|
|
1248
|
+
},
|
|
1023
1249
|
"GetMessage": {
|
|
1024
1250
|
"retry": {
|
|
1025
1251
|
"maxAttempts": 3,
|
|
@@ -1154,6 +1380,22 @@
|
|
|
1154
1380
|
]
|
|
1155
1381
|
}
|
|
1156
1382
|
},
|
|
1383
|
+
"GetBubbleUps": {
|
|
1384
|
+
"retry": {
|
|
1385
|
+
"maxAttempts": 3,
|
|
1386
|
+
"baseDelayMs": 1000,
|
|
1387
|
+
"backoff": "exponential",
|
|
1388
|
+
"retryOn": [
|
|
1389
|
+
429,
|
|
1390
|
+
503
|
|
1391
|
+
]
|
|
1392
|
+
},
|
|
1393
|
+
"pagination": {
|
|
1394
|
+
"style": "link",
|
|
1395
|
+
"totalCountHeader": "X-Total-Count",
|
|
1396
|
+
"maxPageSize": 50
|
|
1397
|
+
}
|
|
1398
|
+
},
|
|
1157
1399
|
"MarkAsRead": {
|
|
1158
1400
|
"retry": {
|
|
1159
1401
|
"maxAttempts": 2,
|
|
@@ -2332,6 +2574,81 @@
|
|
|
2332
2574
|
]
|
|
2333
2575
|
}
|
|
2334
2576
|
},
|
|
2577
|
+
"GetEverythingCompletedTodos": {
|
|
2578
|
+
"retry": {
|
|
2579
|
+
"maxAttempts": 3,
|
|
2580
|
+
"baseDelayMs": 1000,
|
|
2581
|
+
"backoff": "exponential",
|
|
2582
|
+
"retryOn": [
|
|
2583
|
+
429,
|
|
2584
|
+
503
|
|
2585
|
+
]
|
|
2586
|
+
},
|
|
2587
|
+
"pagination": {
|
|
2588
|
+
"style": "link",
|
|
2589
|
+
"totalCountHeader": "X-Total-Count",
|
|
2590
|
+
"maxPageSize": 5
|
|
2591
|
+
}
|
|
2592
|
+
},
|
|
2593
|
+
"GetEverythingNoDueDateTodos": {
|
|
2594
|
+
"retry": {
|
|
2595
|
+
"maxAttempts": 3,
|
|
2596
|
+
"baseDelayMs": 1000,
|
|
2597
|
+
"backoff": "exponential",
|
|
2598
|
+
"retryOn": [
|
|
2599
|
+
429,
|
|
2600
|
+
503
|
|
2601
|
+
]
|
|
2602
|
+
},
|
|
2603
|
+
"pagination": {
|
|
2604
|
+
"style": "link",
|
|
2605
|
+
"totalCountHeader": "X-Total-Count",
|
|
2606
|
+
"maxPageSize": 5
|
|
2607
|
+
}
|
|
2608
|
+
},
|
|
2609
|
+
"GetEverythingOpenTodos": {
|
|
2610
|
+
"retry": {
|
|
2611
|
+
"maxAttempts": 3,
|
|
2612
|
+
"baseDelayMs": 1000,
|
|
2613
|
+
"backoff": "exponential",
|
|
2614
|
+
"retryOn": [
|
|
2615
|
+
429,
|
|
2616
|
+
503
|
|
2617
|
+
]
|
|
2618
|
+
},
|
|
2619
|
+
"pagination": {
|
|
2620
|
+
"style": "link",
|
|
2621
|
+
"totalCountHeader": "X-Total-Count",
|
|
2622
|
+
"maxPageSize": 5
|
|
2623
|
+
}
|
|
2624
|
+
},
|
|
2625
|
+
"GetEverythingOverdueTodos": {
|
|
2626
|
+
"retry": {
|
|
2627
|
+
"maxAttempts": 3,
|
|
2628
|
+
"baseDelayMs": 1000,
|
|
2629
|
+
"backoff": "exponential",
|
|
2630
|
+
"retryOn": [
|
|
2631
|
+
429,
|
|
2632
|
+
503
|
|
2633
|
+
]
|
|
2634
|
+
}
|
|
2635
|
+
},
|
|
2636
|
+
"GetEverythingUnassignedTodos": {
|
|
2637
|
+
"retry": {
|
|
2638
|
+
"maxAttempts": 3,
|
|
2639
|
+
"baseDelayMs": 1000,
|
|
2640
|
+
"backoff": "exponential",
|
|
2641
|
+
"retryOn": [
|
|
2642
|
+
429,
|
|
2643
|
+
503
|
|
2644
|
+
]
|
|
2645
|
+
},
|
|
2646
|
+
"pagination": {
|
|
2647
|
+
"style": "link",
|
|
2648
|
+
"totalCountHeader": "X-Total-Count",
|
|
2649
|
+
"maxPageSize": 5
|
|
2650
|
+
}
|
|
2651
|
+
},
|
|
2335
2652
|
"GetTodo": {
|
|
2336
2653
|
"retry": {
|
|
2337
2654
|
"maxAttempts": 3,
|
|
@@ -2413,6 +2730,20 @@
|
|
|
2413
2730
|
"natural": true
|
|
2414
2731
|
}
|
|
2415
2732
|
},
|
|
2733
|
+
"RepositionTodolist": {
|
|
2734
|
+
"retry": {
|
|
2735
|
+
"maxAttempts": 3,
|
|
2736
|
+
"baseDelayMs": 1000,
|
|
2737
|
+
"backoff": "exponential",
|
|
2738
|
+
"retryOn": [
|
|
2739
|
+
429,
|
|
2740
|
+
503
|
|
2741
|
+
]
|
|
2742
|
+
},
|
|
2743
|
+
"idempotent": {
|
|
2744
|
+
"natural": true
|
|
2745
|
+
}
|
|
2746
|
+
},
|
|
2416
2747
|
"GetTodoset": {
|
|
2417
2748
|
"retry": {
|
|
2418
2749
|
"maxAttempts": 3,
|
|
@@ -8,7 +8,7 @@ module Basecamp
|
|
|
8
8
|
class AutomationService < BaseService
|
|
9
9
|
|
|
10
10
|
# List all lineup markers for the account
|
|
11
|
-
# @return [Hash] response data
|
|
11
|
+
# @return [Array<Hash>] response data
|
|
12
12
|
def list_lineup_markers()
|
|
13
13
|
with_operation(service: "automation", operation: "list_lineup_markers", is_mutation: false) do
|
|
14
14
|
http_get("/lineup/markers.json").json
|
|
@@ -141,6 +141,19 @@ module Basecamp
|
|
|
141
141
|
kwargs.compact
|
|
142
142
|
end
|
|
143
143
|
|
|
144
|
+
# Like compact_params, but also drops empty arrays. For query filters an
|
|
145
|
+
# empty array means "no filter" and must be omitted entirely: Faraday's
|
|
146
|
+
# nested encoder would otherwise emit a bare `bucket_ids[]`, which Rails
|
|
147
|
+
# normalizes into a bogus `[0]` filter instead of the unfiltered request
|
|
148
|
+
# the caller intended. Not used for request bodies, where an explicit
|
|
149
|
+
# empty array (e.g. clearing a list) can be meaningful.
|
|
150
|
+
#
|
|
151
|
+
# @param hash [Hash] the input hash
|
|
152
|
+
# @return [Hash] hash with nil values and empty arrays removed
|
|
153
|
+
def compact_query_params(**kwargs)
|
|
154
|
+
kwargs.reject { |_, value| value.nil? || value == [] }
|
|
155
|
+
end
|
|
156
|
+
|
|
144
157
|
# Build a bucket (project) path.
|
|
145
158
|
# @param project_id [Integer, String] the project/bucket ID
|
|
146
159
|
# @param path [String] the path suffix
|
|
@@ -86,7 +86,7 @@ module Basecamp
|
|
|
86
86
|
# @return [Enumerator<Hash>] paginated results
|
|
87
87
|
def list_lines(campfire_id:, sort: nil, direction: nil)
|
|
88
88
|
wrap_paginated(service: "campfires", operation: "list_lines", is_mutation: false, resource_id: campfire_id) do
|
|
89
|
-
params =
|
|
89
|
+
params = compact_query_params(sort: sort, direction: direction)
|
|
90
90
|
paginate("/chats/#{campfire_id}/lines.json", params: params)
|
|
91
91
|
end
|
|
92
92
|
end
|
|
@@ -142,7 +142,7 @@ module Basecamp
|
|
|
142
142
|
# @return [Enumerator<Hash>] paginated results
|
|
143
143
|
def list_uploads(campfire_id:, sort: nil, direction: nil)
|
|
144
144
|
wrap_paginated(service: "campfires", operation: "list_uploads", is_mutation: false, resource_id: campfire_id) do
|
|
145
|
-
params =
|
|
145
|
+
params = compact_query_params(sort: sort, direction: direction)
|
|
146
146
|
paginate("/chats/#{campfire_id}/uploads.json", params: params)
|
|
147
147
|
end
|
|
148
148
|
end
|
|
@@ -13,7 +13,7 @@ module Basecamp
|
|
|
13
13
|
# @param color [String] Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown
|
|
14
14
|
# @return [Hash] response data
|
|
15
15
|
def set_color(bucket_id:, column_id:, color:)
|
|
16
|
-
with_operation(service: "cardcolumns", operation: "set_color", is_mutation: true, resource_id: column_id) do
|
|
16
|
+
with_operation(service: "cardcolumns", operation: "set_color", is_mutation: true, project_id: bucket_id, resource_id: column_id) do
|
|
17
17
|
http_put("/buckets/#{bucket_id}/card_tables/columns/#{column_id}/color.json", body: compact_params(color: color)).json
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -23,7 +23,7 @@ module Basecamp
|
|
|
23
23
|
# @param column_id [Integer] column id ID
|
|
24
24
|
# @return [Hash] response data
|
|
25
25
|
def enable_on_hold(bucket_id:, column_id:)
|
|
26
|
-
with_operation(service: "cardcolumns", operation: "enable_on_hold", is_mutation: true, resource_id: column_id) do
|
|
26
|
+
with_operation(service: "cardcolumns", operation: "enable_on_hold", is_mutation: true, project_id: bucket_id, resource_id: column_id) do
|
|
27
27
|
http_post("/buckets/#{bucket_id}/card_tables/columns/#{column_id}/on_hold.json").json
|
|
28
28
|
end
|
|
29
29
|
end
|
|
@@ -33,7 +33,7 @@ module Basecamp
|
|
|
33
33
|
# @param column_id [Integer] column id ID
|
|
34
34
|
# @return [Hash] response data
|
|
35
35
|
def disable_on_hold(bucket_id:, column_id:)
|
|
36
|
-
with_operation(service: "cardcolumns", operation: "disable_on_hold", is_mutation: true, resource_id: column_id) do
|
|
36
|
+
with_operation(service: "cardcolumns", operation: "disable_on_hold", is_mutation: true, project_id: bucket_id, resource_id: column_id) do
|
|
37
37
|
http_delete("/buckets/#{bucket_id}/card_tables/columns/#{column_id}/on_hold.json").json
|
|
38
38
|
end
|
|
39
39
|
end
|
|
@@ -23,8 +23,8 @@ module Basecamp
|
|
|
23
23
|
# @param due_on [String, nil] due on (YYYY-MM-DD)
|
|
24
24
|
# @param assignee_ids [Array, nil] assignee ids
|
|
25
25
|
# @return [Hash] response data
|
|
26
|
-
def
|
|
27
|
-
with_operation(service: "cards", operation: "
|
|
26
|
+
def update_verbatim(card_id:, title: nil, content: nil, due_on: nil, assignee_ids: nil)
|
|
27
|
+
with_operation(service: "cards", operation: "update_verbatim", is_mutation: true, resource_id: card_id) do
|
|
28
28
|
http_put("/card_tables/cards/#{card_id}", body: compact_params(title: title, content: content, due_on: due_on, assignee_ids: assignee_ids)).json
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -57,11 +57,12 @@ module Basecamp
|
|
|
57
57
|
# Create a new question in a questionnaire
|
|
58
58
|
# @param questionnaire_id [Integer] questionnaire id ID
|
|
59
59
|
# @param title [String] title
|
|
60
|
-
# @param schedule [
|
|
60
|
+
# @param schedule [Hash] schedule
|
|
61
|
+
# @param visible_to_clients [Boolean, nil] visible to clients
|
|
61
62
|
# @return [Hash] response data
|
|
62
|
-
def create_question(questionnaire_id:, title:, schedule:)
|
|
63
|
+
def create_question(questionnaire_id:, title:, schedule:, visible_to_clients: nil)
|
|
63
64
|
with_operation(service: "checkins", operation: "create_question", is_mutation: true, resource_id: questionnaire_id) do
|
|
64
|
-
http_post("/questionnaires/#{questionnaire_id}/questions.json", body: compact_params(title: title, schedule: schedule)).json
|
|
65
|
+
http_post("/questionnaires/#{questionnaire_id}/questions.json", body: compact_params(title: title, schedule: schedule, visible_to_clients: visible_to_clients)).json
|
|
65
66
|
end
|
|
66
67
|
end
|
|
67
68
|
|
|
@@ -77,7 +78,7 @@ module Basecamp
|
|
|
77
78
|
# Update an existing question
|
|
78
79
|
# @param question_id [Integer] question id ID
|
|
79
80
|
# @param title [String, nil] title
|
|
80
|
-
# @param schedule [
|
|
81
|
+
# @param schedule [Hash, nil] schedule
|
|
81
82
|
# @param paused [Boolean, nil] paused
|
|
82
83
|
# @return [Hash] response data
|
|
83
84
|
def update_question(question_id:, title: nil, schedule: nil, paused: nil)
|
|
@@ -13,7 +13,7 @@ module Basecamp
|
|
|
13
13
|
# @return [Enumerator<Hash>] paginated results
|
|
14
14
|
def list(sort: nil, direction: nil)
|
|
15
15
|
wrap_paginated(service: "clientapprovals", operation: "list", is_mutation: false) do
|
|
16
|
-
params =
|
|
16
|
+
params = compact_query_params(sort: sort, direction: direction)
|
|
17
17
|
paginate("/client/approvals.json", params: params)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -13,7 +13,7 @@ module Basecamp
|
|
|
13
13
|
# @return [Enumerator<Hash>] paginated results
|
|
14
14
|
def list(sort: nil, direction: nil)
|
|
15
15
|
wrap_paginated(service: "clientcorrespondences", operation: "list", is_mutation: false) do
|
|
16
|
-
params =
|
|
16
|
+
params = compact_query_params(sort: sort, direction: direction)
|
|
17
17
|
paginate("/client/correspondences.json", params: params)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -42,10 +42,11 @@ module Basecamp
|
|
|
42
42
|
# @param content [String, nil] content
|
|
43
43
|
# @param status [String, nil] active|drafted
|
|
44
44
|
# @param subscriptions [Array, nil] subscriptions
|
|
45
|
+
# @param visible_to_clients [Boolean, nil] visible to clients
|
|
45
46
|
# @return [Hash] response data
|
|
46
|
-
def create(vault_id:, title:, content: nil, status: nil, subscriptions: nil)
|
|
47
|
+
def create(vault_id:, title:, content: nil, status: nil, subscriptions: nil, visible_to_clients: nil)
|
|
47
48
|
with_operation(service: "documents", operation: "create", is_mutation: true, resource_id: vault_id) do
|
|
48
|
-
http_post("/vaults/#{vault_id}/documents.json", body: compact_params(title: title, content: content, status: status, subscriptions: subscriptions)).json
|
|
49
|
+
http_post("/vaults/#{vault_id}/documents.json", body: compact_params(title: title, content: content, status: status, subscriptions: subscriptions, visible_to_clients: visible_to_clients)).json
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
end
|