basecamp-client 1.0.8 → 1.0.10

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/dist/index.mjs CHANGED
@@ -130,7 +130,7 @@ async function asyncPagedToArray(options) {
130
130
  import { initClient as tsRestInitClient } from "@ts-rest/core";
131
131
 
132
132
  // src/contract/index.ts
133
- import { z as z68 } from "zod";
133
+ import { z as z71 } from "zod";
134
134
 
135
135
  // src/contract/c.ts
136
136
  import { initContract } from "@ts-rest/core";
@@ -1189,28 +1189,54 @@ var clientVisibilityRouter = c.router({
1189
1189
  }
1190
1190
  });
1191
1191
 
1192
+ // src/contract/resources/blobs.ts
1193
+ import { z as z27 } from "zod";
1194
+ var blobsRouter = c.router({
1195
+ download: {
1196
+ summary: "Download a blob",
1197
+ description: "Download the raw file content of a blob. Blobs represent files embedded in documents and messages via bc-attachment tags.",
1198
+ metadata: {
1199
+ tag: "Blobs",
1200
+ operationId: "blobs.download",
1201
+ rawResponse: true
1202
+ },
1203
+ method: "GET",
1204
+ path: "/blobs/:blobId/download/:filename",
1205
+ pathParams: z27.object({
1206
+ blobId: z27.string().min(1),
1207
+ filename: z27.string().min(1)
1208
+ }),
1209
+ responses: {
1210
+ 200: c.otherResponse({
1211
+ contentType: "application/octet-stream",
1212
+ body: c.type()
1213
+ })
1214
+ }
1215
+ }
1216
+ });
1217
+
1192
1218
  // src/contract/resources/documents/documents.ts
1193
- import { z as z31 } from "zod";
1219
+ import { z as z32 } from "zod";
1194
1220
 
1195
1221
  // src/contract/schemas/documents/documents.ts
1196
- import { z as z27 } from "zod";
1222
+ import { z as z28 } from "zod";
1197
1223
  var DocumentCoreSchema = RecordingBaseSchema.extend({
1198
- type: z27.literal("Document")
1224
+ type: z28.literal("Document")
1199
1225
  });
1200
1226
  var DocumentSchema = DocumentCoreSchema.extend({
1201
1227
  content: HtmlStringSchema
1202
1228
  });
1203
- var DocumentListResponseSchema = z27.array(DocumentSchema);
1204
- var DocumentListQuerySchema = z27.object({
1205
- page: z27.coerce.number().int().positive().optional()
1229
+ var DocumentListResponseSchema = z28.array(DocumentSchema);
1230
+ var DocumentListQuerySchema = z28.object({
1231
+ page: z28.coerce.number().int().positive().optional()
1206
1232
  });
1207
- var DocumentCreateBodySchema = z27.object({
1208
- title: z27.string().min(1),
1233
+ var DocumentCreateBodySchema = z28.object({
1234
+ title: z28.string().min(1),
1209
1235
  content: HtmlStringSchema,
1210
- status: z27.enum(["active", "draft"]).or(z27.string()).optional()
1236
+ status: z28.enum(["active", "draft"]).or(z28.string()).optional()
1211
1237
  });
1212
- var DocumentUpdateBodySchema = z27.object({
1213
- title: z27.string().min(1).optional(),
1238
+ var DocumentUpdateBodySchema = z28.object({
1239
+ title: z28.string().min(1).optional(),
1214
1240
  content: HtmlStringSchema.optional()
1215
1241
  }).refine(
1216
1242
  (value) => Object.keys(value).length > 0,
@@ -1218,76 +1244,76 @@ var DocumentUpdateBodySchema = z27.object({
1218
1244
  );
1219
1245
 
1220
1246
  // src/contract/schemas/documents/vaults.ts
1221
- import { z as z28 } from "zod";
1247
+ import { z as z29 } from "zod";
1222
1248
  var VaultCoreSchema = RecordingBaseSchema.extend({
1223
- type: z28.literal("Vault")
1249
+ type: z29.literal("Vault")
1224
1250
  });
1225
1251
  var VaultSchema = VaultCoreSchema.extend({
1226
- documents_count: z28.number().int().nonnegative(),
1227
- documents_url: z28.string().url(),
1228
- uploads_count: z28.number().int().nonnegative(),
1229
- uploads_url: z28.string().url(),
1230
- vaults_count: z28.number().int().nonnegative(),
1231
- vaults_url: z28.string().url()
1232
- });
1233
- var VaultListResponseSchema = z28.array(VaultSchema);
1234
- var VaultListQuerySchema = z28.object({
1235
- page: z28.coerce.number().int().positive().optional()
1252
+ documents_count: z29.number().int().nonnegative(),
1253
+ documents_url: z29.string().url(),
1254
+ uploads_count: z29.number().int().nonnegative(),
1255
+ uploads_url: z29.string().url(),
1256
+ vaults_count: z29.number().int().nonnegative(),
1257
+ vaults_url: z29.string().url()
1258
+ });
1259
+ var VaultListResponseSchema = z29.array(VaultSchema);
1260
+ var VaultListQuerySchema = z29.object({
1261
+ page: z29.coerce.number().int().positive().optional()
1236
1262
  });
1237
- var VaultCreateBodySchema = z28.object({
1238
- title: z28.string().min(1)
1263
+ var VaultCreateBodySchema = z29.object({
1264
+ title: z29.string().min(1)
1239
1265
  });
1240
- var VaultUpdateBodySchema = z28.object({
1241
- title: z28.string().min(1)
1266
+ var VaultUpdateBodySchema = z29.object({
1267
+ title: z29.string().min(1)
1242
1268
  });
1243
1269
 
1244
1270
  // src/contract/schemas/documents/uploads.ts
1245
- import { z as z29 } from "zod";
1271
+ import { z as z30 } from "zod";
1246
1272
  var UploadCoreSchema = RecordingBaseSchema.extend({
1247
- type: z29.literal("Upload")
1273
+ type: z30.literal("Upload")
1248
1274
  });
1249
1275
  var UploadSchema = UploadCoreSchema.extend({
1250
1276
  description: HtmlStringSchema.optional(),
1251
- content_type: z29.string(),
1252
- byte_size: z29.number().int().nonnegative(),
1253
- filename: z29.string(),
1254
- download_url: z29.string().url(),
1255
- app_download_url: z29.string().url(),
1256
- width: z29.number().int().nonnegative().optional(),
1257
- height: z29.number().int().nonnegative().optional()
1258
- });
1259
- var UploadListResponseSchema = z29.array(UploadSchema);
1260
- var UploadListQuerySchema = z29.object({
1261
- page: z29.coerce.number().int().positive().optional()
1262
- });
1263
- var UploadCreateBodySchema = z29.object({
1264
- attachable_sgid: z29.string().min(1),
1277
+ content_type: z30.string(),
1278
+ byte_size: z30.number().int().nonnegative(),
1279
+ filename: z30.string(),
1280
+ download_url: z30.string().url(),
1281
+ app_download_url: z30.string().url(),
1282
+ width: z30.number().int().nonnegative().optional(),
1283
+ height: z30.number().int().nonnegative().optional()
1284
+ });
1285
+ var UploadListResponseSchema = z30.array(UploadSchema);
1286
+ var UploadListQuerySchema = z30.object({
1287
+ page: z30.coerce.number().int().positive().optional()
1288
+ });
1289
+ var UploadCreateBodySchema = z30.object({
1290
+ attachable_sgid: z30.string().min(1),
1265
1291
  description: HtmlStringSchema.optional(),
1266
- base_name: z29.string().optional()
1292
+ base_name: z30.string().optional()
1267
1293
  });
1268
- var UploadUpdateBodySchema = z29.object({
1294
+ var UploadUpdateBodySchema = z30.object({
1269
1295
  description: HtmlStringSchema.optional(),
1270
- base_name: z29.string().optional()
1296
+ base_name: z30.string().optional()
1271
1297
  }).refine(
1272
1298
  (value) => Object.keys(value).length > 0,
1273
1299
  "At least one field must be provided to update an upload."
1274
1300
  );
1275
1301
 
1276
1302
  // src/contract/schemas/documents/attachments.ts
1277
- import { z as z30 } from "zod";
1278
- var AttachmentResponseSchema = z30.object({
1279
- attachable_sgid: z30.string().min(1)
1303
+ import { z as z31 } from "zod";
1304
+ var AttachmentResponseSchema = z31.object({
1305
+ attachable_sgid: z31.string().min(1)
1280
1306
  });
1281
- var AttachmentCreateQuerySchema = z30.object({
1282
- name: z30.string().min(1)
1307
+ var AttachmentCreateQuerySchema = z31.object({
1308
+ name: z31.string().min(1)
1283
1309
  });
1284
1310
 
1285
1311
  // src/contract/resources/documents/documents.ts
1286
- var bucketAndVaultPathParams = z31.object({
1312
+ var bucketAndVaultPathParams = z32.object({
1287
1313
  bucketId: BasecampIdParamSchema,
1288
1314
  vaultId: BasecampIdParamSchema
1289
1315
  });
1290
- var bucketAndDocumentPathParams = z31.object({
1316
+ var bucketAndDocumentPathParams = z32.object({
1291
1317
  bucketId: BasecampIdParamSchema,
1292
1318
  documentId: BasecampIdParamSchema
1293
1319
  });
@@ -1374,12 +1400,12 @@ var documentsRouter = c.router({
1374
1400
  });
1375
1401
 
1376
1402
  // src/contract/resources/documents/vaults.ts
1377
- import { z as z32 } from "zod";
1378
- var bucketAndVaultPathParams2 = z32.object({
1403
+ import { z as z33 } from "zod";
1404
+ var bucketAndVaultPathParams2 = z33.object({
1379
1405
  bucketId: BasecampIdParamSchema,
1380
1406
  vaultId: BasecampIdParamSchema
1381
1407
  });
1382
- var bucketAndParentVaultPathParams = z32.object({
1408
+ var bucketAndParentVaultPathParams = z33.object({
1383
1409
  bucketId: BasecampIdParamSchema,
1384
1410
  parentVaultId: BasecampIdParamSchema
1385
1411
  });
@@ -1466,12 +1492,12 @@ var vaultsRouter = c.router({
1466
1492
  });
1467
1493
 
1468
1494
  // src/contract/resources/documents/uploads.ts
1469
- import { z as z33 } from "zod";
1470
- var bucketAndVaultPathParams3 = z33.object({
1495
+ import { z as z34 } from "zod";
1496
+ var bucketAndVaultPathParams3 = z34.object({
1471
1497
  bucketId: BasecampIdParamSchema,
1472
1498
  vaultId: BasecampIdParamSchema
1473
1499
  });
1474
- var bucketAndUploadPathParams = z33.object({
1500
+ var bucketAndUploadPathParams = z34.object({
1475
1501
  bucketId: BasecampIdParamSchema,
1476
1502
  uploadId: BasecampIdParamSchema
1477
1503
  });
@@ -1539,6 +1565,29 @@ var uploadsRouter = c.router({
1539
1565
  200: UploadSchema
1540
1566
  }
1541
1567
  },
1568
+ download: {
1569
+ summary: "Download an upload",
1570
+ description: "Download the raw file content of an upload.",
1571
+ metadata: {
1572
+ tag: "Uploads",
1573
+ operationId: "uploads.download",
1574
+ docsPath: "/docs/basecamp-api-specs/sections/uploads.md",
1575
+ rawResponse: true
1576
+ },
1577
+ method: "GET",
1578
+ path: "/buckets/:bucketId/uploads/:uploadId/download/:filename",
1579
+ pathParams: z34.object({
1580
+ bucketId: BasecampIdParamSchema,
1581
+ uploadId: BasecampIdParamSchema,
1582
+ filename: z34.string().min(1)
1583
+ }),
1584
+ responses: {
1585
+ 200: c.otherResponse({
1586
+ contentType: "application/octet-stream",
1587
+ body: c.type()
1588
+ })
1589
+ }
1590
+ },
1542
1591
  trash: {
1543
1592
  summary: "Trash an upload",
1544
1593
  description: "Move an upload recording to the trash. Trashed items can be restored via the UI.",
@@ -1578,26 +1627,26 @@ var attachmentsRouter = c.router({
1578
1627
  });
1579
1628
 
1580
1629
  // src/contract/resources/events.ts
1581
- import { z as z35 } from "zod";
1630
+ import { z as z36 } from "zod";
1582
1631
 
1583
1632
  // src/contract/schemas/events.ts
1584
- import { z as z34 } from "zod";
1585
- var EventDetailsSchema = z34.object({}).passthrough();
1586
- var RecordingEventSchema = z34.object({
1633
+ import { z as z35 } from "zod";
1634
+ var EventDetailsSchema = z35.object({}).passthrough();
1635
+ var RecordingEventSchema = z35.object({
1587
1636
  id: BasecampIdSchema,
1588
1637
  recording_id: BasecampIdSchema,
1589
- action: z34.string(),
1638
+ action: z35.string(),
1590
1639
  details: EventDetailsSchema,
1591
1640
  created_at: IsoDateTimeSchema,
1592
1641
  creator: PersonSummarySchema
1593
1642
  });
1594
- var RecordingEventListResponseSchema = z34.array(RecordingEventSchema);
1595
- var RecordingEventListQuerySchema = z34.object({
1596
- page: z34.coerce.number().int().positive().optional()
1643
+ var RecordingEventListResponseSchema = z35.array(RecordingEventSchema);
1644
+ var RecordingEventListQuerySchema = z35.object({
1645
+ page: z35.coerce.number().int().positive().optional()
1597
1646
  });
1598
1647
 
1599
1648
  // src/contract/resources/events.ts
1600
- var RecordingEventsPathParamsSchema = z35.object({
1649
+ var RecordingEventsPathParamsSchema = z36.object({
1601
1650
  bucketId: BasecampIdParamSchema,
1602
1651
  recordingId: BasecampIdParamSchema
1603
1652
  });
@@ -1621,23 +1670,23 @@ var eventsRouter = c.router({
1621
1670
  });
1622
1671
 
1623
1672
  // src/contract/resources/lineup-markers.ts
1624
- import { z as z37 } from "zod";
1673
+ import { z as z38 } from "zod";
1625
1674
 
1626
1675
  // src/contract/schemas/lineup-markers.ts
1627
- import { z as z36 } from "zod";
1628
- var LineupMarkerCreateBodySchema = z36.object({
1629
- name: z36.string().min(1),
1676
+ import { z as z37 } from "zod";
1677
+ var LineupMarkerCreateBodySchema = z37.object({
1678
+ name: z37.string().min(1),
1630
1679
  date: IsoDateSchema
1631
1680
  });
1632
- var LineupMarkerUpdateBodySchema = z36.object({
1633
- name: z36.string().min(1).optional(),
1681
+ var LineupMarkerUpdateBodySchema = z37.object({
1682
+ name: z37.string().min(1).optional(),
1634
1683
  date: IsoDateSchema.optional()
1635
1684
  }).refine((value) => value.name !== void 0 || value.date !== void 0, {
1636
1685
  message: "Either name or date must be provided."
1637
1686
  });
1638
1687
 
1639
1688
  // src/contract/resources/lineup-markers.ts
1640
- var LineupMarkerPathParamsSchema = z37.object({
1689
+ var LineupMarkerPathParamsSchema = z38.object({
1641
1690
  markerId: BasecampIdParamSchema
1642
1691
  });
1643
1692
  var lineupMarkersRouter = c.router({
@@ -1691,25 +1740,25 @@ var lineupMarkersRouter = c.router({
1691
1740
  });
1692
1741
 
1693
1742
  // src/contract/resources/people.ts
1694
- import { z as z39 } from "zod";
1743
+ import { z as z40 } from "zod";
1695
1744
 
1696
1745
  // src/contract/schemas/people.ts
1697
- import { z as z38 } from "zod";
1746
+ import { z as z39 } from "zod";
1698
1747
  var PersonSchema = PersonSummarySchema;
1699
- var PeopleListQuerySchema = z38.object({
1700
- page: z38.coerce.number().int().positive().optional()
1701
- });
1702
- var PeopleListResponseSchema = z38.array(PersonSchema);
1703
- var ProjectAccessCreateEntrySchema = z38.object({
1704
- name: z38.string().min(1),
1705
- email_address: z38.string().email(),
1706
- title: z38.string().optional(),
1707
- company_name: z38.string().optional()
1708
- });
1709
- var ProjectPeopleAccessBodySchema = z38.object({
1710
- grant: z38.array(BasecampIdSchema).min(1).optional(),
1711
- revoke: z38.array(BasecampIdSchema).min(1).optional(),
1712
- create: z38.array(ProjectAccessCreateEntrySchema).min(1).optional()
1748
+ var PeopleListQuerySchema = z39.object({
1749
+ page: z39.coerce.number().int().positive().optional()
1750
+ });
1751
+ var PeopleListResponseSchema = z39.array(PersonSchema);
1752
+ var ProjectAccessCreateEntrySchema = z39.object({
1753
+ name: z39.string().min(1),
1754
+ email_address: z39.string().email(),
1755
+ title: z39.string().optional(),
1756
+ company_name: z39.string().optional()
1757
+ });
1758
+ var ProjectPeopleAccessBodySchema = z39.object({
1759
+ grant: z39.array(BasecampIdSchema).min(1).optional(),
1760
+ revoke: z39.array(BasecampIdSchema).min(1).optional(),
1761
+ create: z39.array(ProjectAccessCreateEntrySchema).min(1).optional()
1713
1762
  }).refine(
1714
1763
  (value) => value.grant !== void 0 || value.revoke !== void 0 || value.create !== void 0,
1715
1764
  {
@@ -1717,16 +1766,16 @@ var ProjectPeopleAccessBodySchema = z38.object({
1717
1766
  path: ["grant"]
1718
1767
  }
1719
1768
  );
1720
- var ProjectPeopleAccessResponseSchema = z38.object({
1721
- granted: z38.array(PersonSchema),
1722
- revoked: z38.array(PersonSchema)
1769
+ var ProjectPeopleAccessResponseSchema = z39.object({
1770
+ granted: z39.array(PersonSchema),
1771
+ revoked: z39.array(PersonSchema)
1723
1772
  });
1724
1773
 
1725
1774
  // src/contract/resources/people.ts
1726
- var ProjectPathParamsSchema = z39.object({
1775
+ var ProjectPathParamsSchema = z40.object({
1727
1776
  projectId: BasecampIdParamSchema
1728
1777
  });
1729
- var PersonPathParamsSchema = z39.object({
1778
+ var PersonPathParamsSchema = z40.object({
1730
1779
  personId: BasecampIdParamSchema
1731
1780
  });
1732
1781
  var peopleRouter = c.router({
@@ -1822,59 +1871,59 @@ var peopleRouter = c.router({
1822
1871
  });
1823
1872
 
1824
1873
  // src/contract/resources/projects.ts
1825
- import { z as z41 } from "zod";
1874
+ import { z as z42 } from "zod";
1826
1875
 
1827
1876
  // src/contract/schemas/projects.ts
1828
- import { z as z40 } from "zod";
1829
- var ProjectDockEntrySchema = z40.object({
1877
+ import { z as z41 } from "zod";
1878
+ var ProjectDockEntrySchema = z41.object({
1830
1879
  id: BasecampIdSchema,
1831
- title: z40.string(),
1832
- name: z40.string(),
1833
- enabled: z40.boolean(),
1834
- position: z40.number().int().nullable(),
1835
- url: z40.string().url(),
1836
- app_url: z40.string().url()
1837
- });
1838
- var ProjectClientCompanySchema = z40.object({
1880
+ title: z41.string(),
1881
+ name: z41.string(),
1882
+ enabled: z41.boolean(),
1883
+ position: z41.number().int().nullable(),
1884
+ url: z41.string().url(),
1885
+ app_url: z41.string().url()
1886
+ });
1887
+ var ProjectClientCompanySchema = z41.object({
1839
1888
  id: BasecampIdSchema,
1840
- name: z40.string()
1889
+ name: z41.string()
1841
1890
  });
1842
- var ProjectClientsideSchema = z40.object({
1843
- url: z40.string().url(),
1844
- app_url: z40.string().url()
1891
+ var ProjectClientsideSchema = z41.object({
1892
+ url: z41.string().url(),
1893
+ app_url: z41.string().url()
1845
1894
  });
1846
- var ProjectStatusSchema = z40.enum(["active", "archived", "trashed"]).or(z40.string());
1847
- var ProjectCoreSchema = z40.object({
1895
+ var ProjectStatusSchema = z41.enum(["active", "archived", "trashed"]).or(z41.string());
1896
+ var ProjectCoreSchema = z41.object({
1848
1897
  id: BasecampIdSchema,
1849
1898
  status: ProjectStatusSchema,
1850
1899
  created_at: IsoDateTimeSchema,
1851
1900
  updated_at: IsoDateTimeSchema,
1852
- name: z40.string(),
1901
+ name: z41.string(),
1853
1902
  description: HtmlStringSchema.nullable().optional(),
1854
- purpose: z40.string(),
1855
- clients_enabled: z40.boolean(),
1856
- bookmark_url: z40.string().url(),
1857
- url: z40.string().url(),
1858
- app_url: z40.string().url(),
1859
- dock: z40.array(ProjectDockEntrySchema),
1903
+ purpose: z41.string(),
1904
+ clients_enabled: z41.boolean(),
1905
+ bookmark_url: z41.string().url(),
1906
+ url: z41.string().url(),
1907
+ app_url: z41.string().url(),
1908
+ dock: z41.array(ProjectDockEntrySchema),
1860
1909
  client_company: ProjectClientCompanySchema.optional(),
1861
1910
  clientside: ProjectClientsideSchema.optional()
1862
1911
  });
1863
1912
  var ProjectSchema = ProjectCoreSchema.extend({
1864
- bookmarked: z40.boolean().optional()
1913
+ bookmarked: z41.boolean().optional()
1865
1914
  });
1866
- var ProjectListResponseSchema = z40.array(ProjectSchema);
1867
- var ProjectListQuerySchema = z40.object({
1868
- status: z40.enum(["active", "archived", "trashed"]).or(z40.string()).optional(),
1869
- page: z40.coerce.number().int().positive().optional()
1915
+ var ProjectListResponseSchema = z41.array(ProjectSchema);
1916
+ var ProjectListQuerySchema = z41.object({
1917
+ status: z41.enum(["active", "archived", "trashed"]).or(z41.string()).optional(),
1918
+ page: z41.coerce.number().int().positive().optional()
1870
1919
  });
1871
- var ProjectCreateBodySchema = z40.object({
1872
- name: z40.string().min(1),
1920
+ var ProjectCreateBodySchema = z41.object({
1921
+ name: z41.string().min(1),
1873
1922
  description: HtmlStringSchema.nullable().optional()
1874
1923
  });
1875
- var ScheduleAttributesSchema = z40.object({
1876
- start_date: z40.string().date().optional(),
1877
- end_date: z40.string().date().optional()
1924
+ var ScheduleAttributesSchema = z41.object({
1925
+ start_date: z41.string().date().optional(),
1926
+ end_date: z41.string().date().optional()
1878
1927
  }).refine(
1879
1928
  (value) => value.start_date === void 0 && value.end_date === void 0 || value.start_date !== void 0 && value.end_date !== void 0,
1880
1929
  {
@@ -1882,15 +1931,15 @@ var ScheduleAttributesSchema = z40.object({
1882
1931
  path: ["end_date"]
1883
1932
  }
1884
1933
  );
1885
- var ProjectUpdateBodySchema = z40.object({
1886
- name: z40.string().min(1),
1934
+ var ProjectUpdateBodySchema = z41.object({
1935
+ name: z41.string().min(1),
1887
1936
  description: HtmlStringSchema.nullable().optional(),
1888
- admissions: z40.enum(["invite", "employee", "team"]).or(z40.string()).optional(),
1937
+ admissions: z41.enum(["invite", "employee", "team"]).or(z41.string()).optional(),
1889
1938
  schedule_attributes: ScheduleAttributesSchema.optional()
1890
1939
  });
1891
1940
 
1892
1941
  // src/contract/resources/projects.ts
1893
- var ProjectPathParamsSchema2 = z41.object({
1942
+ var ProjectPathParamsSchema2 = z42.object({
1894
1943
  projectId: BasecampIdParamSchema
1895
1944
  });
1896
1945
  var projectsRouter = c.router({
@@ -1937,8 +1986,8 @@ var projectsRouter = c.router({
1937
1986
  body: ProjectCreateBodySchema,
1938
1987
  responses: {
1939
1988
  201: ProjectSchema,
1940
- 507: z41.object({
1941
- error: z41.string()
1989
+ 507: z42.object({
1990
+ error: z42.string()
1942
1991
  })
1943
1992
  }
1944
1993
  },
@@ -1977,8 +2026,8 @@ var projectsRouter = c.router({
1977
2026
  });
1978
2027
 
1979
2028
  // src/contract/resources/recordings.ts
1980
- import { z as z42 } from "zod";
1981
- var BucketRecordingPathParamsSchema = z42.object({
2029
+ import { z as z43 } from "zod";
2030
+ var BucketRecordingPathParamsSchema = z43.object({
1982
2031
  bucketId: BasecampIdParamSchema,
1983
2032
  recordingId: BasecampIdParamSchema
1984
2033
  });
@@ -2049,14 +2098,14 @@ var recordingsRouter = c.router({
2049
2098
  });
2050
2099
 
2051
2100
  // src/contract/resources/kanban/card-tables.ts
2052
- import { z as z48 } from "zod";
2101
+ import { z as z49 } from "zod";
2053
2102
 
2054
2103
  // src/contract/schemas/kanban/card-tables.ts
2055
- import { z as z45 } from "zod";
2104
+ import { z as z46 } from "zod";
2056
2105
 
2057
2106
  // src/contract/schemas/kanban/common.ts
2058
- import { z as z43 } from "zod";
2059
- var KanbanColumnColorSchema = z43.enum([
2107
+ import { z as z44 } from "zod";
2108
+ var KanbanColumnColorSchema = z44.enum([
2060
2109
  "white",
2061
2110
  "red",
2062
2111
  "orange",
@@ -2068,22 +2117,22 @@ var KanbanColumnColorSchema = z43.enum([
2068
2117
  "gray",
2069
2118
  "pink",
2070
2119
  "brown"
2071
- ]).or(z43.string());
2120
+ ]).or(z44.string());
2072
2121
 
2073
2122
  // src/contract/schemas/kanban/columns.ts
2074
- import { z as z44 } from "zod";
2123
+ import { z as z45 } from "zod";
2075
2124
  var CardTableColumnSchema = RecordingBaseSchema.extend({
2076
- type: z44.enum(["Kanban::Column", "Kanban::Triage", "Kanban::NotNowColumn", "Kanban::DoneColumn"]),
2125
+ type: z45.enum(["Kanban::Column", "Kanban::Triage", "Kanban::NotNowColumn", "Kanban::DoneColumn"]),
2077
2126
  description: HtmlStringSchema.nullable().optional(),
2078
- subscribers: z44.array(PersonSummarySchema),
2127
+ subscribers: z45.array(PersonSummarySchema),
2079
2128
  color: KanbanColumnColorSchema.nullable().optional(),
2080
- cards_count: z44.number().int().nonnegative().optional(),
2081
- comment_count: z44.number().int().nonnegative().optional(),
2082
- cards_url: z44.string().url(),
2083
- on_hold: z44.unknown().optional()
2129
+ cards_count: z45.number().int().nonnegative().optional(),
2130
+ comment_count: z45.number().int().nonnegative().optional(),
2131
+ cards_url: z45.string().url(),
2132
+ on_hold: z45.unknown().optional()
2084
2133
  });
2085
- var CardTableColumnCreateBodySchema = z44.object({
2086
- title: z44.string().min(1),
2134
+ var CardTableColumnCreateBodySchema = z45.object({
2135
+ title: z45.string().min(1),
2087
2136
  description: HtmlStringSchema.nullable().optional()
2088
2137
  });
2089
2138
  var CardTableColumnUpdateBodySchema = CardTableColumnCreateBodySchema.partial().refine(
@@ -2092,41 +2141,41 @@ var CardTableColumnUpdateBodySchema = CardTableColumnCreateBodySchema.partial().
2092
2141
  message: "At least one field must be provided to update a column."
2093
2142
  }
2094
2143
  );
2095
- var CardTableColumnMoveBodySchema = z44.object({
2144
+ var CardTableColumnMoveBodySchema = z45.object({
2096
2145
  source_id: BasecampIdSchema,
2097
2146
  target_id: BasecampIdSchema,
2098
- position: z44.number().int().positive().optional()
2147
+ position: z45.number().int().positive().optional()
2099
2148
  });
2100
- var CardTableColumnColorBodySchema = z44.object({
2149
+ var CardTableColumnColorBodySchema = z45.object({
2101
2150
  color: KanbanColumnColorSchema
2102
2151
  });
2103
2152
 
2104
2153
  // src/contract/schemas/kanban/card-tables.ts
2105
2154
  var CardTableSchema = RecordingBaseSchema.extend({
2106
- type: z45.literal("Kanban::Board"),
2107
- subscribers: z45.array(PersonSummarySchema),
2108
- public_link_url: z45.string().url().optional(),
2109
- lists: z45.array(CardTableColumnSchema)
2155
+ type: z46.literal("Kanban::Board"),
2156
+ subscribers: z46.array(PersonSummarySchema),
2157
+ public_link_url: z46.string().url().optional(),
2158
+ lists: z46.array(CardTableColumnSchema)
2110
2159
  });
2111
2160
 
2112
2161
  // src/contract/schemas/kanban/cards.ts
2113
- import { z as z47 } from "zod";
2162
+ import { z as z48 } from "zod";
2114
2163
 
2115
2164
  // src/contract/schemas/kanban/steps.ts
2116
- import { z as z46 } from "zod";
2165
+ import { z as z47 } from "zod";
2117
2166
  var CardTableStepSchema = RecordingBaseSchema.extend({
2118
- type: z46.literal("Kanban::Step"),
2119
- completed: z46.boolean(),
2167
+ type: z47.literal("Kanban::Step"),
2168
+ completed: z47.boolean(),
2120
2169
  due_on: IsoDateSchema.nullable().optional(),
2121
- assignees: z46.array(PersonSummarySchema),
2122
- completion_url: z46.string().min(1),
2123
- completion_subscribers: z46.array(PersonSummarySchema).optional(),
2170
+ assignees: z47.array(PersonSummarySchema),
2171
+ completion_url: z47.string().min(1),
2172
+ completion_subscribers: z47.array(PersonSummarySchema).optional(),
2124
2173
  description: HtmlStringSchema.nullable().optional()
2125
2174
  });
2126
- var CardTableStepCreateBodySchema = z46.object({
2127
- title: z46.string().min(1),
2175
+ var CardTableStepCreateBodySchema = z47.object({
2176
+ title: z47.string().min(1),
2128
2177
  due_on: IsoDateSchema.optional(),
2129
- assignees: z46.string().optional()
2178
+ assignees: z47.string().optional()
2130
2179
  });
2131
2180
  var CardTableStepUpdateBodySchema = CardTableStepCreateBodySchema.partial().refine(
2132
2181
  (value) => value.title !== void 0 || value.due_on !== void 0 || value.assignees !== void 0,
@@ -2134,57 +2183,57 @@ var CardTableStepUpdateBodySchema = CardTableStepCreateBodySchema.partial().refi
2134
2183
  message: "At least one field must be provided to update a step."
2135
2184
  }
2136
2185
  );
2137
- var CardTableStepCompletionBodySchema = z46.object({
2138
- completion: z46.enum(["on", "off"])
2186
+ var CardTableStepCompletionBodySchema = z47.object({
2187
+ completion: z47.enum(["on", "off"])
2139
2188
  });
2140
- var CardTableStepRepositionBodySchema = z46.object({
2189
+ var CardTableStepRepositionBodySchema = z47.object({
2141
2190
  source_id: BasecampIdSchema,
2142
- position: z46.number().int().nonnegative()
2191
+ position: z47.number().int().nonnegative()
2143
2192
  });
2144
2193
 
2145
2194
  // src/contract/schemas/kanban/cards.ts
2146
2195
  var CardTableCardSchema = RecordingBaseSchema.extend({
2147
- type: z47.literal("Kanban::Card"),
2196
+ type: z48.literal("Kanban::Card"),
2148
2197
  description: HtmlStringSchema.nullable().optional(),
2149
- completed: z47.boolean(),
2198
+ completed: z48.boolean(),
2150
2199
  content: HtmlStringSchema.nullable().optional(),
2151
2200
  due_on: IsoDateSchema.nullable().optional(),
2152
- comment_count: z47.number().int().nonnegative().optional(),
2153
- assignees: z47.array(PersonSummarySchema),
2154
- completion_subscribers: z47.array(PersonSummarySchema),
2155
- completion_url: z47.string().min(1),
2156
- steps: z47.array(CardTableStepSchema).optional()
2157
- });
2158
- var CardTableCardListResponseSchema = z47.array(CardTableCardSchema);
2159
- var CardTableCardListQuerySchema = z47.object({
2160
- page: z47.coerce.number().int().positive().optional()
2161
- });
2162
- var CardTableCardCreateBodySchema = z47.object({
2163
- title: z47.string().min(1),
2201
+ comment_count: z48.number().int().nonnegative().optional(),
2202
+ assignees: z48.array(PersonSummarySchema),
2203
+ completion_subscribers: z48.array(PersonSummarySchema),
2204
+ completion_url: z48.string().min(1),
2205
+ steps: z48.array(CardTableStepSchema).optional()
2206
+ });
2207
+ var CardTableCardListResponseSchema = z48.array(CardTableCardSchema);
2208
+ var CardTableCardListQuerySchema = z48.object({
2209
+ page: z48.coerce.number().int().positive().optional()
2210
+ });
2211
+ var CardTableCardCreateBodySchema = z48.object({
2212
+ title: z48.string().min(1),
2164
2213
  content: HtmlStringSchema.nullable().optional(),
2165
2214
  due_on: IsoDateSchema.optional(),
2166
- notify: z47.boolean().optional(),
2167
- assignee_ids: z47.array(BasecampIdSchema).optional()
2215
+ notify: z48.boolean().optional(),
2216
+ assignee_ids: z48.array(BasecampIdSchema).optional()
2168
2217
  });
2169
- var CardTableCardUpdateBodySchema = z47.object({
2170
- title: z47.string().min(1).optional(),
2218
+ var CardTableCardUpdateBodySchema = z48.object({
2219
+ title: z48.string().min(1).optional(),
2171
2220
  content: HtmlStringSchema.nullable().optional(),
2172
2221
  due_on: IsoDateSchema.nullable().optional(),
2173
- assignee_ids: z47.array(BasecampIdSchema).optional(),
2174
- notify: z47.boolean().optional()
2222
+ assignee_ids: z48.array(BasecampIdSchema).optional(),
2223
+ notify: z48.boolean().optional()
2175
2224
  }).refine(
2176
2225
  (value) => value.title !== void 0 || value.content !== void 0 || value.due_on !== void 0 || value.assignee_ids !== void 0 || value.notify !== void 0,
2177
2226
  {
2178
2227
  message: "At least one field must be provided to update a card."
2179
2228
  }
2180
2229
  );
2181
- var CardTableCardMoveBodySchema = z47.object({
2230
+ var CardTableCardMoveBodySchema = z48.object({
2182
2231
  column_id: BasecampIdSchema,
2183
- position: z47.number().int().nonnegative().optional()
2232
+ position: z48.number().int().positive().optional()
2184
2233
  });
2185
2234
 
2186
2235
  // src/contract/resources/kanban/card-tables.ts
2187
- var cardTablePathParams = z48.object({
2236
+ var cardTablePathParams = z49.object({
2188
2237
  bucketId: BasecampIdParamSchema,
2189
2238
  cardTableId: BasecampIdParamSchema
2190
2239
  });
@@ -2207,8 +2256,8 @@ var cardTablesRouter = c.router({
2207
2256
  });
2208
2257
 
2209
2258
  // src/contract/resources/kanban/columns.ts
2210
- import { z as z49 } from "zod";
2211
- var bucketParams = z49.object({
2259
+ import { z as z50 } from "zod";
2260
+ var bucketParams = z50.object({
2212
2261
  bucketId: BasecampIdParamSchema
2213
2262
  });
2214
2263
  var bucketAndCardTableParams = bucketParams.extend({
@@ -2364,8 +2413,8 @@ var cardTableColumnsRouter = c.router({
2364
2413
  });
2365
2414
 
2366
2415
  // src/contract/resources/kanban/cards.ts
2367
- import { z as z50 } from "zod";
2368
- var bucketParams2 = z50.object({
2416
+ import { z as z51 } from "zod";
2417
+ var bucketParams2 = z51.object({
2369
2418
  bucketId: BasecampIdParamSchema
2370
2419
  });
2371
2420
  var bucketAndColumnParams2 = bucketParams2.extend({
@@ -2457,8 +2506,8 @@ var cardTableCardsRouter = c.router({
2457
2506
  });
2458
2507
 
2459
2508
  // src/contract/resources/kanban/steps.ts
2460
- import { z as z51 } from "zod";
2461
- var bucketParams3 = z51.object({
2509
+ import { z as z52 } from "zod";
2510
+ var bucketParams3 = z52.object({
2462
2511
  bucketId: BasecampIdParamSchema
2463
2512
  });
2464
2513
  var bucketAndCardParams2 = bucketParams3.extend({
@@ -2535,22 +2584,22 @@ var cardTableStepsRouter = c.router({
2535
2584
  });
2536
2585
 
2537
2586
  // src/contract/resources/scheduling/schedules.ts
2538
- import { z as z53 } from "zod";
2587
+ import { z as z54 } from "zod";
2539
2588
 
2540
2589
  // src/contract/schemas/scheduling/schedules.ts
2541
- import { z as z52 } from "zod";
2590
+ import { z as z53 } from "zod";
2542
2591
  var ScheduleSchema = RecordingBaseSchema.extend({
2543
- type: z52.literal("Schedule"),
2544
- include_due_assignments: z52.boolean(),
2545
- entries_count: z52.number().int(),
2546
- entries_url: z52.string().url()
2592
+ type: z53.literal("Schedule"),
2593
+ include_due_assignments: z53.boolean(),
2594
+ entries_count: z53.number().int(),
2595
+ entries_url: z53.string().url()
2547
2596
  });
2548
- var ScheduleUpdateBodySchema = z52.object({
2549
- include_due_assignments: z52.boolean()
2597
+ var ScheduleUpdateBodySchema = z53.object({
2598
+ include_due_assignments: z53.boolean()
2550
2599
  });
2551
2600
 
2552
2601
  // src/contract/resources/scheduling/schedules.ts
2553
- var bucketAndSchedulePathParams = z53.object({
2602
+ var bucketAndSchedulePathParams = z54.object({
2554
2603
  bucketId: BasecampIdParamSchema,
2555
2604
  scheduleId: BasecampIdParamSchema
2556
2605
  });
@@ -2589,68 +2638,68 @@ var schedulesRouter = c.router({
2589
2638
  });
2590
2639
 
2591
2640
  // src/contract/resources/scheduling/schedule-entries.ts
2592
- import { z as z55 } from "zod";
2641
+ import { z as z56 } from "zod";
2593
2642
 
2594
2643
  // src/contract/schemas/scheduling/schedule-entries.ts
2595
- import { z as z54 } from "zod";
2596
- var RecurrenceScheduleSchema = z54.object({
2597
- frequency: z54.string(),
2598
- days: z54.array(z54.number().int()),
2599
- hour: z54.number().int(),
2600
- minute: z54.number().int(),
2601
- week_instance: z54.number().int().nullable(),
2602
- week_interval: z54.number().int().nullable(),
2603
- month_interval: z54.number().int().nullable(),
2604
- start_date: z54.string(),
2605
- end_date: z54.string().nullable()
2644
+ import { z as z55 } from "zod";
2645
+ var RecurrenceScheduleSchema = z55.object({
2646
+ frequency: z55.string(),
2647
+ days: z55.array(z55.number().int()),
2648
+ hour: z55.number().int(),
2649
+ minute: z55.number().int(),
2650
+ week_instance: z55.number().int().nullable(),
2651
+ week_interval: z55.number().int().nullable(),
2652
+ month_interval: z55.number().int().nullable(),
2653
+ start_date: z55.string(),
2654
+ end_date: z55.string().nullable()
2606
2655
  });
2607
2656
  var ScheduleEntrySchema = RecordingBaseSchema.extend({
2608
- type: z54.literal("Schedule::Entry"),
2657
+ type: z55.literal("Schedule::Entry"),
2609
2658
  description: HtmlStringSchema,
2610
- summary: z54.string(),
2611
- all_day: z54.boolean(),
2612
- starts_at: z54.string(),
2613
- ends_at: z54.string(),
2614
- participants: z54.array(PersonSummarySchema),
2659
+ summary: z55.string(),
2660
+ all_day: z55.boolean(),
2661
+ starts_at: z55.string(),
2662
+ ends_at: z55.string(),
2663
+ participants: z55.array(PersonSummarySchema),
2615
2664
  recurrence_schedule: RecurrenceScheduleSchema.optional()
2616
2665
  });
2617
- var ScheduleEntryListResponseSchema = z54.array(ScheduleEntrySchema);
2618
- var ScheduleEntryListQuerySchema = z54.object({
2666
+ var ScheduleEntryListResponseSchema = z55.array(ScheduleEntrySchema);
2667
+ var ScheduleEntryListQuerySchema = z55.object({
2619
2668
  status: RecordingStatusSchema.optional(),
2620
- page: z54.coerce.number().int().positive().optional()
2669
+ page: z55.coerce.number().int().positive().optional()
2621
2670
  });
2622
- var ScheduleEntryCreateBodySchema = z54.object({
2623
- summary: z54.string(),
2624
- starts_at: z54.string(),
2625
- ends_at: z54.string(),
2671
+ var ScheduleEntryCreateBodySchema = z55.object({
2672
+ summary: z55.string(),
2673
+ starts_at: z55.string(),
2674
+ ends_at: z55.string(),
2626
2675
  description: HtmlStringSchema.optional(),
2627
- participant_ids: z54.array(BasecampIdSchema).optional(),
2628
- all_day: z54.boolean().optional(),
2629
- notify: z54.boolean().optional()
2630
- });
2631
- var ScheduleEntryUpdateBodySchema = z54.object({
2632
- summary: z54.string().optional(),
2633
- starts_at: z54.string().optional(),
2634
- ends_at: z54.string().optional(),
2676
+ participant_ids: z55.array(BasecampIdSchema).optional(),
2677
+ all_day: z55.boolean().optional(),
2678
+ notify: z55.boolean().optional()
2679
+ });
2680
+ var ScheduleEntryUpdateBodySchema = z55.object({
2681
+ summary: z55.string().optional(),
2682
+ starts_at: z55.string().optional(),
2683
+ ends_at: z55.string().optional(),
2635
2684
  description: HtmlStringSchema.optional(),
2636
- participant_ids: z54.array(BasecampIdSchema).optional(),
2637
- all_day: z54.boolean().optional(),
2638
- notify: z54.boolean().optional()
2685
+ participant_ids: z55.array(BasecampIdSchema).optional(),
2686
+ all_day: z55.boolean().optional(),
2687
+ notify: z55.boolean().optional()
2639
2688
  });
2640
2689
 
2641
2690
  // src/contract/resources/scheduling/schedule-entries.ts
2642
- var bucketAndSchedulePathParams2 = z55.object({
2691
+ var bucketAndSchedulePathParams2 = z56.object({
2643
2692
  bucketId: BasecampIdParamSchema,
2644
2693
  scheduleId: BasecampIdParamSchema
2645
2694
  });
2646
- var bucketAndEntryPathParams = z55.object({
2695
+ var bucketAndEntryPathParams = z56.object({
2647
2696
  bucketId: BasecampIdParamSchema,
2648
2697
  scheduleEntryId: BasecampIdParamSchema
2649
2698
  });
2650
- var bucketEntryOccurrencePathParams = z55.object({
2699
+ var bucketEntryOccurrencePathParams = z56.object({
2651
2700
  bucketId: BasecampIdParamSchema,
2652
2701
  scheduleEntryId: BasecampIdParamSchema,
2653
- occurrenceDate: z55.string()
2702
+ occurrenceDate: z56.string()
2654
2703
  });
2655
2704
  var scheduleEntriesRouter = c.router({
2656
2705
  list: {
@@ -2750,19 +2799,19 @@ var scheduleEntriesRouter = c.router({
2750
2799
  });
2751
2800
 
2752
2801
  // src/contract/resources/scheduling/questionnaires.ts
2753
- import { z as z57 } from "zod";
2802
+ import { z as z58 } from "zod";
2754
2803
 
2755
2804
  // src/contract/schemas/scheduling/questionnaires.ts
2756
- import { z as z56 } from "zod";
2805
+ import { z as z57 } from "zod";
2757
2806
  var QuestionnaireSchema = RecordingBaseSchema.extend({
2758
- type: z56.literal("Questionnaire"),
2759
- name: z56.string(),
2760
- questions_count: z56.number().int(),
2761
- questions_url: z56.string().url()
2807
+ type: z57.literal("Questionnaire"),
2808
+ name: z57.string(),
2809
+ questions_count: z57.number().int(),
2810
+ questions_url: z57.string().url()
2762
2811
  });
2763
2812
 
2764
2813
  // src/contract/resources/scheduling/questionnaires.ts
2765
- var bucketAndQuestionnairePathParams = z57.object({
2814
+ var bucketAndQuestionnairePathParams = z58.object({
2766
2815
  bucketId: BasecampIdParamSchema,
2767
2816
  questionnaireId: BasecampIdParamSchema
2768
2817
  });
@@ -2785,39 +2834,39 @@ var questionnairesRouter = c.router({
2785
2834
  });
2786
2835
 
2787
2836
  // src/contract/resources/scheduling/questions.ts
2788
- import { z as z59 } from "zod";
2837
+ import { z as z60 } from "zod";
2789
2838
 
2790
2839
  // src/contract/schemas/scheduling/questions.ts
2791
- import { z as z58 } from "zod";
2792
- var QuestionScheduleSchema = z58.object({
2793
- frequency: z58.string(),
2794
- days: z58.array(z58.number().int()),
2795
- hour: z58.number().int(),
2796
- minute: z58.number().int(),
2797
- week_instance: z58.number().int().nullable(),
2798
- week_interval: z58.number().int().nullable(),
2799
- month_interval: z58.number().int().nullable(),
2800
- start_date: z58.string(),
2801
- end_date: z58.string().nullable()
2840
+ import { z as z59 } from "zod";
2841
+ var QuestionScheduleSchema = z59.object({
2842
+ frequency: z59.string(),
2843
+ days: z59.array(z59.number().int()),
2844
+ hour: z59.number().int(),
2845
+ minute: z59.number().int(),
2846
+ week_instance: z59.number().int().nullable(),
2847
+ week_interval: z59.number().int().nullable(),
2848
+ month_interval: z59.number().int().nullable(),
2849
+ start_date: z59.string(),
2850
+ end_date: z59.string().nullable()
2802
2851
  });
2803
2852
  var QuestionSchema = RecordingBaseSchema.extend({
2804
- type: z58.literal("Question"),
2805
- paused: z58.boolean(),
2853
+ type: z59.literal("Question"),
2854
+ paused: z59.boolean(),
2806
2855
  schedule: QuestionScheduleSchema,
2807
- answers_count: z58.number().int(),
2808
- answers_url: z58.string().url()
2856
+ answers_count: z59.number().int(),
2857
+ answers_url: z59.string().url()
2809
2858
  });
2810
- var QuestionListResponseSchema = z58.array(QuestionSchema);
2811
- var QuestionListQuerySchema = z58.object({
2812
- page: z58.coerce.number().int().positive().optional()
2859
+ var QuestionListResponseSchema = z59.array(QuestionSchema);
2860
+ var QuestionListQuerySchema = z59.object({
2861
+ page: z59.coerce.number().int().positive().optional()
2813
2862
  });
2814
2863
 
2815
2864
  // src/contract/resources/scheduling/questions.ts
2816
- var bucketAndQuestionnairePathParams2 = z59.object({
2865
+ var bucketAndQuestionnairePathParams2 = z60.object({
2817
2866
  bucketId: BasecampIdParamSchema,
2818
2867
  questionnaireId: BasecampIdParamSchema
2819
2868
  });
2820
- var bucketAndQuestionPathParams = z59.object({
2869
+ var bucketAndQuestionPathParams = z60.object({
2821
2870
  bucketId: BasecampIdParamSchema,
2822
2871
  questionId: BasecampIdParamSchema
2823
2872
  });
@@ -2855,26 +2904,104 @@ var questionsRouter = c.router({
2855
2904
  }
2856
2905
  });
2857
2906
 
2858
- // src/contract/resources/tasks/todosets.ts
2907
+ // src/contract/resources/scheduling/question-answers.ts
2908
+ import { z as z62 } from "zod";
2909
+
2910
+ // src/contract/schemas/scheduling/question-answers.ts
2859
2911
  import { z as z61 } from "zod";
2912
+ var QuestionAnswerSchema = RecordingBaseSchema.extend({
2913
+ type: z61.literal("Question::Answer"),
2914
+ content: HtmlStringSchema,
2915
+ group_on: z61.string()
2916
+ });
2917
+ var QuestionAnswerListResponseSchema = z61.array(QuestionAnswerSchema);
2918
+ var QuestionAnswerListQuerySchema = z61.object({
2919
+ page: z61.coerce.number().int().positive().optional()
2920
+ });
2921
+ var QuestionAnswerCreateBodySchema = z61.object({
2922
+ content: HtmlStringSchema.min(1),
2923
+ group_on: z61.string()
2924
+ });
2925
+
2926
+ // src/contract/resources/scheduling/question-answers.ts
2927
+ var bucketAndQuestionPathParams2 = z62.object({
2928
+ bucketId: BasecampIdParamSchema,
2929
+ questionId: BasecampIdParamSchema
2930
+ });
2931
+ var bucketAndAnswerPathParams = z62.object({
2932
+ bucketId: BasecampIdParamSchema,
2933
+ answerId: BasecampIdParamSchema
2934
+ });
2935
+ var questionAnswersRouter = c.router({
2936
+ list: {
2937
+ summary: "List question answers",
2938
+ description: "Returns a paginated list of answers for a specific check-in question.",
2939
+ metadata: {
2940
+ tag: "Question Answers",
2941
+ operationId: "questionAnswers.list",
2942
+ docsPath: "/docs/basecamp-api-specs/sections/question_answers.md#get-question-answers"
2943
+ },
2944
+ method: "GET",
2945
+ path: "/buckets/:bucketId/questions/:questionId/answers",
2946
+ pathParams: bucketAndQuestionPathParams2,
2947
+ query: QuestionAnswerListQuerySchema,
2948
+ responses: {
2949
+ 200: QuestionAnswerListResponseSchema
2950
+ }
2951
+ },
2952
+ get: {
2953
+ summary: "Get a question answer",
2954
+ description: "Returns a single question answer by its ID.",
2955
+ metadata: {
2956
+ tag: "Question Answers",
2957
+ operationId: "questionAnswers.get",
2958
+ docsPath: "/docs/basecamp-api-specs/sections/question_answers.md#get-a-question-answer"
2959
+ },
2960
+ method: "GET",
2961
+ path: "/buckets/:bucketId/question_answers/:answerId",
2962
+ pathParams: bucketAndAnswerPathParams,
2963
+ responses: {
2964
+ 200: QuestionAnswerSchema
2965
+ }
2966
+ },
2967
+ create: {
2968
+ summary: "Create a question answer",
2969
+ description: "Create a new answer for a check-in question.",
2970
+ metadata: {
2971
+ tag: "Question Answers",
2972
+ operationId: "questionAnswers.create",
2973
+ docsPath: "/docs/basecamp-api-specs/sections/question_answers.md#get-question-answers"
2974
+ },
2975
+ method: "POST",
2976
+ path: "/buckets/:bucketId/questions/:questionId/answers",
2977
+ pathParams: bucketAndQuestionPathParams2,
2978
+ body: QuestionAnswerCreateBodySchema,
2979
+ responses: {
2980
+ 201: QuestionAnswerSchema
2981
+ }
2982
+ }
2983
+ });
2984
+
2985
+ // src/contract/resources/tasks/todosets.ts
2986
+ import { z as z64 } from "zod";
2860
2987
 
2861
2988
  // src/contract/schemas/tasks/todosets.ts
2862
- import { z as z60 } from "zod";
2989
+ import { z as z63 } from "zod";
2863
2990
  var TodoSetSchema = RecordingBaseSchema.omit({
2864
2991
  subscription_url: true,
2865
2992
  comments_count: true,
2866
2993
  comments_url: true
2867
2994
  }).extend({
2868
- completed: z60.boolean(),
2869
- completed_ratio: z60.string(),
2870
- name: z60.string(),
2871
- todolists_count: z60.number().int().nonnegative(),
2872
- todolists_url: z60.string().url(),
2873
- app_todoslists_url: z60.string().url()
2995
+ completed: z63.boolean(),
2996
+ completed_ratio: z63.string(),
2997
+ name: z63.string(),
2998
+ todolists_count: z63.number().int().nonnegative(),
2999
+ todolists_url: z63.string().url(),
3000
+ app_todoslists_url: z63.string().url()
2874
3001
  });
2875
3002
 
2876
3003
  // src/contract/resources/tasks/todosets.ts
2877
- var bucketPathParams2 = z61.object({
3004
+ var bucketPathParams2 = z64.object({
2878
3005
  bucketId: BasecampIdParamSchema
2879
3006
  });
2880
3007
  var bucketAndTodoSetPathParams = bucketPathParams2.extend({
@@ -2899,42 +3026,42 @@ var todoSetsRouter = c.router({
2899
3026
  });
2900
3027
 
2901
3028
  // src/contract/resources/tasks/todolists.ts
2902
- import { z as z63 } from "zod";
3029
+ import { z as z66 } from "zod";
2903
3030
 
2904
3031
  // src/contract/schemas/tasks/todolists.ts
2905
- import { z as z62 } from "zod";
3032
+ import { z as z65 } from "zod";
2906
3033
  var TodoListBaseSchema = RecordingBaseSchema.extend({
2907
- type: z62.literal("Todolist"),
3034
+ type: z65.literal("Todolist"),
2908
3035
  description: HtmlStringSchema.optional(),
2909
- completed: z62.boolean(),
2910
- completed_ratio: z62.string(),
2911
- name: z62.string(),
2912
- todos_url: z62.string().url(),
2913
- app_todos_url: z62.string().url()
3036
+ completed: z65.boolean(),
3037
+ completed_ratio: z65.string(),
3038
+ name: z65.string(),
3039
+ todos_url: z65.string().url(),
3040
+ app_todos_url: z65.string().url()
2914
3041
  });
2915
3042
  var TodoTopLevelListSchema = TodoListBaseSchema.extend({
2916
- groups_url: z62.string().url()
3043
+ groups_url: z65.string().url()
2917
3044
  });
2918
3045
  var TodoListGroupSchema = TodoListBaseSchema.extend({
2919
- group_position_url: z62.string().url()
3046
+ group_position_url: z65.string().url()
2920
3047
  });
2921
- var TodoListSchema = z62.union([TodoTopLevelListSchema, TodoListGroupSchema]);
2922
- var TodoListsResponseSchema = z62.array(TodoTopLevelListSchema);
2923
- var TodoListQuerySchema = z62.object({
2924
- status: z62.enum(["active", "archived", "trashed"]).or(z62.string()).optional(),
2925
- page: z62.coerce.number().int().positive().optional()
3048
+ var TodoListSchema = z65.union([TodoTopLevelListSchema, TodoListGroupSchema]);
3049
+ var TodoListsResponseSchema = z65.array(TodoTopLevelListSchema);
3050
+ var TodoListQuerySchema = z65.object({
3051
+ status: z65.enum(["active", "archived", "trashed"]).or(z65.string()).optional(),
3052
+ page: z65.coerce.number().int().positive().optional()
2926
3053
  });
2927
- var TodoListCreateBodySchema = z62.object({
2928
- name: z62.string().min(1),
3054
+ var TodoListCreateBodySchema = z65.object({
3055
+ name: z65.string().min(1),
2929
3056
  description: HtmlStringSchema.nullable().optional()
2930
3057
  });
2931
- var TodoListUpdateBodySchema = z62.object({
2932
- name: z62.string().min(1),
3058
+ var TodoListUpdateBodySchema = z65.object({
3059
+ name: z65.string().min(1),
2933
3060
  description: HtmlStringSchema.nullable().optional()
2934
3061
  });
2935
3062
 
2936
3063
  // src/contract/resources/tasks/todolists.ts
2937
- var bucketPathParams3 = z63.object({
3064
+ var bucketPathParams3 = z66.object({
2938
3065
  bucketId: BasecampIdParamSchema
2939
3066
  });
2940
3067
  var bucketAndTodoSetPathParams2 = bucketPathParams3.extend({
@@ -3026,31 +3153,31 @@ var todoListsRouter = c.router({
3026
3153
  });
3027
3154
 
3028
3155
  // src/contract/resources/tasks/todolist-groups.ts
3029
- import { z as z65 } from "zod";
3156
+ import { z as z68 } from "zod";
3030
3157
 
3031
3158
  // src/contract/schemas/tasks/todolist-groups.ts
3032
- import { z as z64 } from "zod";
3159
+ import { z as z67 } from "zod";
3033
3160
  var TodoListBaseSchema2 = RecordingBaseSchema.extend({
3034
- type: z64.literal("Todolist"),
3161
+ type: z67.literal("Todolist"),
3035
3162
  description: HtmlStringSchema.optional(),
3036
- completed: z64.boolean(),
3037
- completed_ratio: z64.string(),
3038
- name: z64.string(),
3039
- todos_url: z64.string().url(),
3040
- app_todos_url: z64.string().url()
3163
+ completed: z67.boolean(),
3164
+ completed_ratio: z67.string(),
3165
+ name: z67.string(),
3166
+ todos_url: z67.string().url(),
3167
+ app_todos_url: z67.string().url()
3041
3168
  });
3042
3169
  var TodoListGroupSchema2 = TodoListBaseSchema2.extend({
3043
- group_position_url: z64.string().url()
3170
+ group_position_url: z67.string().url()
3044
3171
  });
3045
3172
  var TodoListSchema2 = TodoListGroupSchema2;
3046
- var TodoListGroupsResponseSchema = z64.array(TodoListGroupSchema2);
3047
- var TodoListGroupQuerySchema = z64.object({
3048
- status: z64.enum(["active", "archived", "trashed"]).or(z64.string()).optional(),
3049
- page: z64.coerce.number().int().positive().optional()
3050
- });
3051
- var TodoListGroupCreateBodySchema = z64.object({
3052
- name: z64.string().min(1),
3053
- color: z64.enum([
3173
+ var TodoListGroupsResponseSchema = z67.array(TodoListGroupSchema2);
3174
+ var TodoListGroupQuerySchema = z67.object({
3175
+ status: z67.enum(["active", "archived", "trashed"]).or(z67.string()).optional(),
3176
+ page: z67.coerce.number().int().positive().optional()
3177
+ });
3178
+ var TodoListGroupCreateBodySchema = z67.object({
3179
+ name: z67.string().min(1),
3180
+ color: z67.enum([
3054
3181
  "white",
3055
3182
  "red",
3056
3183
  "orange",
@@ -3062,14 +3189,14 @@ var TodoListGroupCreateBodySchema = z64.object({
3062
3189
  "gray",
3063
3190
  "pink",
3064
3191
  "brown"
3065
- ]).or(z64.string()).optional()
3192
+ ]).or(z67.string()).optional()
3066
3193
  });
3067
- var TodoListGroupRepositionBodySchema = z64.object({
3068
- position: z64.number().int().gte(1)
3194
+ var TodoListGroupRepositionBodySchema = z67.object({
3195
+ position: z67.number().int().gte(1)
3069
3196
  });
3070
3197
 
3071
3198
  // src/contract/resources/tasks/todolist-groups.ts
3072
- var bucketPathParams4 = z65.object({
3199
+ var bucketPathParams4 = z68.object({
3073
3200
  bucketId: BasecampIdParamSchema
3074
3201
  });
3075
3202
  var bucketAndTodoListPathParams2 = bucketPathParams4.extend({
@@ -3130,56 +3257,56 @@ var todoListGroupsRouter = c.router({
3130
3257
  });
3131
3258
 
3132
3259
  // src/contract/resources/tasks/todos.ts
3133
- import { z as z67 } from "zod";
3260
+ import { z as z70 } from "zod";
3134
3261
 
3135
3262
  // src/contract/schemas/tasks/todos.ts
3136
- import { z as z66 } from "zod";
3137
- var TodoCompletionSchema = z66.object({
3263
+ import { z as z69 } from "zod";
3264
+ var TodoCompletionSchema = z69.object({
3138
3265
  created_at: IsoDateTimeSchema,
3139
3266
  creator: PersonSummarySchema
3140
3267
  });
3141
3268
  var TodoSchema = RecordingBaseSchema.extend({
3142
- type: z66.literal("Todo"),
3269
+ type: z69.literal("Todo"),
3143
3270
  description: HtmlStringSchema.optional(),
3144
- completed: z66.boolean(),
3271
+ completed: z69.boolean(),
3145
3272
  completion: TodoCompletionSchema.optional(),
3146
- content: z66.string(),
3147
- starts_on: z66.string().date().nullable().optional(),
3148
- due_on: z66.string().date().nullable().optional(),
3149
- assignees: z66.array(PersonSummarySchema),
3150
- completion_subscribers: z66.array(PersonSummarySchema),
3151
- completion_url: z66.string().url()
3152
- });
3153
- var TodoCollectionResponseSchema = z66.array(TodoSchema);
3154
- var TodoQuerySchema = z66.object({
3155
- status: z66.enum(["active", "archived", "trashed"]).or(z66.string()).optional(),
3156
- completed: z66.enum(["true"]).optional(),
3157
- page: z66.coerce.number().int().positive().optional()
3158
- });
3159
- var TodoCreateBodySchema = z66.object({
3160
- content: z66.string().min(1),
3273
+ content: z69.string(),
3274
+ starts_on: z69.string().date().nullable().optional(),
3275
+ due_on: z69.string().date().nullable().optional(),
3276
+ assignees: z69.array(PersonSummarySchema),
3277
+ completion_subscribers: z69.array(PersonSummarySchema),
3278
+ completion_url: z69.string().url()
3279
+ });
3280
+ var TodoCollectionResponseSchema = z69.array(TodoSchema);
3281
+ var TodoQuerySchema = z69.object({
3282
+ status: z69.enum(["active", "archived", "trashed"]).or(z69.string()).optional(),
3283
+ completed: z69.literal(true).optional(),
3284
+ page: z69.coerce.number().int().positive().optional()
3285
+ });
3286
+ var TodoCreateBodySchema = z69.object({
3287
+ content: z69.string().min(1),
3161
3288
  description: HtmlStringSchema.nullable().optional(),
3162
- assignee_ids: z66.array(BasecampIdSchema).optional(),
3163
- completion_subscriber_ids: z66.array(BasecampIdSchema).optional(),
3164
- notify: z66.boolean().optional(),
3165
- due_on: z66.string().date().nullable().optional(),
3166
- starts_on: z66.string().date().nullable().optional()
3167
- });
3168
- var TodoUpdateBodySchema = z66.object({
3169
- content: z66.string().min(1),
3289
+ assignee_ids: z69.array(BasecampIdSchema).optional(),
3290
+ completion_subscriber_ids: z69.array(BasecampIdSchema).optional(),
3291
+ notify: z69.boolean().optional(),
3292
+ due_on: z69.string().date().nullable().optional(),
3293
+ starts_on: z69.string().date().nullable().optional()
3294
+ });
3295
+ var TodoUpdateBodySchema = z69.object({
3296
+ content: z69.string().min(1),
3170
3297
  description: HtmlStringSchema.nullable().optional(),
3171
- assignee_ids: z66.array(BasecampIdSchema).optional(),
3172
- completion_subscriber_ids: z66.array(BasecampIdSchema).optional(),
3173
- notify: z66.boolean().optional(),
3174
- due_on: z66.string().date().nullable().optional(),
3175
- starts_on: z66.string().date().nullable().optional()
3298
+ assignee_ids: z69.array(BasecampIdSchema).optional(),
3299
+ completion_subscriber_ids: z69.array(BasecampIdSchema).optional(),
3300
+ notify: z69.boolean().optional(),
3301
+ due_on: z69.string().date().nullable().optional(),
3302
+ starts_on: z69.string().date().nullable().optional()
3176
3303
  });
3177
- var TodoRepositionBodySchema = z66.object({
3178
- position: z66.number().int().gte(1)
3304
+ var TodoRepositionBodySchema = z69.object({
3305
+ position: z69.number().int().gte(1)
3179
3306
  });
3180
3307
 
3181
3308
  // src/contract/resources/tasks/todos.ts
3182
- var bucketPathParams5 = z67.object({
3309
+ var bucketPathParams5 = z70.object({
3183
3310
  bucketId: BasecampIdParamSchema
3184
3311
  });
3185
3312
  var bucketAndTodoListPathParams3 = bucketPathParams5.extend({
@@ -3350,17 +3477,19 @@ var contract = c.router(
3350
3477
  scheduleEntries: scheduleEntriesRouter,
3351
3478
  questionnaires: questionnairesRouter,
3352
3479
  questions: questionsRouter,
3480
+ questionAnswers: questionAnswersRouter,
3353
3481
  documents: documentsRouter,
3354
3482
  vaults: vaultsRouter,
3355
3483
  uploads: uploadsRouter,
3356
- attachments: attachmentsRouter
3484
+ attachments: attachmentsRouter,
3485
+ blobs: blobsRouter
3357
3486
  },
3358
3487
  {
3359
3488
  strictStatusCodes: true,
3360
- baseHeaders: z68.object({
3361
- Authorization: z68.string().min(1),
3362
- "User-Agent": z68.string().min(1).optional(),
3363
- Accept: z68.literal("application/json").optional()
3489
+ baseHeaders: z71.object({
3490
+ Authorization: z71.string().min(1),
3491
+ "User-Agent": z71.string().min(1).optional(),
3492
+ Accept: z71.literal("application/json").optional()
3364
3493
  })
3365
3494
  }
3366
3495
  );
@@ -3397,15 +3526,35 @@ var computeBackoffDelay = (attempt, retryAfterMs) => {
3397
3526
  };
3398
3527
  async function fetcher(args) {
3399
3528
  const url = new URL(args.path);
3400
- if (!url.pathname.endsWith(".json")) {
3529
+ const isRaw = args.route.metadata?.rawResponse === true;
3530
+ if (!isRaw && !url.pathname.endsWith(".json")) {
3401
3531
  url.pathname = `${url.pathname}.json`;
3402
3532
  }
3533
+ const headers = { ...args.headers };
3534
+ if (isRaw) {
3535
+ delete headers.accept;
3536
+ delete headers.Accept;
3537
+ }
3403
3538
  const pathWithSuffix = url.toString();
3404
3539
  for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {
3405
- const response = await tsRestFetchApi({
3406
- ...args,
3407
- path: pathWithSuffix
3408
- });
3540
+ let response;
3541
+ if (isRaw) {
3542
+ const result = await fetch(pathWithSuffix, {
3543
+ method: args.method,
3544
+ headers
3545
+ });
3546
+ response = {
3547
+ status: result.status,
3548
+ body: await result.arrayBuffer(),
3549
+ headers: result.headers
3550
+ };
3551
+ } else {
3552
+ response = await tsRestFetchApi({
3553
+ ...args,
3554
+ path: pathWithSuffix,
3555
+ headers
3556
+ });
3557
+ }
3409
3558
  if (response.status !== 429) {
3410
3559
  return response;
3411
3560
  }