@buildinternet/releases-api-types 0.58.3 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +14 -6
  2. package/dist/api-types.d.ts +1168 -0
  3. package/dist/api-types.d.ts.map +1 -0
  4. package/dist/api-types.js +134 -0
  5. package/dist/schemas/account-profile.d.ts +29 -0
  6. package/dist/schemas/account-profile.d.ts.map +1 -0
  7. package/dist/schemas/account-profile.js +24 -0
  8. package/dist/schemas/ai-models.d.ts +67 -0
  9. package/dist/schemas/ai-models.d.ts.map +1 -0
  10. package/{src/schemas/ai-models.ts → dist/schemas/ai-models.js} +25 -31
  11. package/dist/schemas/api-keys.d.ts +71 -0
  12. package/dist/schemas/api-keys.d.ts.map +1 -0
  13. package/dist/schemas/api-keys.js +32 -0
  14. package/dist/schemas/classifications.d.ts +134 -0
  15. package/dist/schemas/classifications.d.ts.map +1 -0
  16. package/dist/schemas/classifications.js +96 -0
  17. package/dist/schemas/collections.d.ts +605 -0
  18. package/dist/schemas/collections.d.ts.map +1 -0
  19. package/dist/schemas/collections.js +320 -0
  20. package/dist/schemas/datasets.d.ts +34 -0
  21. package/dist/schemas/datasets.d.ts.map +1 -0
  22. package/dist/schemas/datasets.js +11 -0
  23. package/dist/schemas/errors.d.ts +43 -0
  24. package/dist/schemas/errors.d.ts.map +1 -0
  25. package/dist/schemas/errors.js +61 -0
  26. package/dist/schemas/feedback.d.ts +134 -0
  27. package/dist/schemas/feedback.d.ts.map +1 -0
  28. package/dist/schemas/feedback.js +76 -0
  29. package/dist/schemas/follows.d.ts +154 -0
  30. package/dist/schemas/follows.d.ts.map +1 -0
  31. package/dist/schemas/follows.js +42 -0
  32. package/dist/schemas/listing.d.ts +374 -0
  33. package/dist/schemas/listing.d.ts.map +1 -0
  34. package/dist/schemas/listing.js +175 -0
  35. package/dist/schemas/lookups.d.ts +285 -0
  36. package/dist/schemas/lookups.d.ts.map +1 -0
  37. package/{src/schemas/lookups.ts → dist/schemas/lookups.js} +67 -80
  38. package/dist/schemas/marketing-classifier.d.ts +32 -0
  39. package/dist/schemas/marketing-classifier.d.ts.map +1 -0
  40. package/{src/schemas/marketing-classifier.ts → dist/schemas/marketing-classifier.js} +14 -18
  41. package/dist/schemas/orgs.d.ts +950 -0
  42. package/dist/schemas/orgs.d.ts.map +1 -0
  43. package/dist/schemas/orgs.js +473 -0
  44. package/dist/schemas/overviews.d.ts +205 -0
  45. package/dist/schemas/overviews.d.ts.map +1 -0
  46. package/{src/schemas/overviews.ts → dist/schemas/overviews.js} +41 -54
  47. package/dist/schemas/products.d.ts +595 -0
  48. package/dist/schemas/products.d.ts.map +1 -0
  49. package/{src/schemas/products.ts → dist/schemas/products.js} +113 -136
  50. package/dist/schemas/publish-tokens.d.ts +55 -0
  51. package/dist/schemas/publish-tokens.d.ts.map +1 -0
  52. package/{src/schemas/publish-tokens.ts → dist/schemas/publish-tokens.js} +18 -29
  53. package/dist/schemas/recommendations.d.ts +52 -0
  54. package/dist/schemas/recommendations.d.ts.map +1 -0
  55. package/dist/schemas/recommendations.js +58 -0
  56. package/dist/schemas/related.d.ts +331 -0
  57. package/dist/schemas/related.d.ts.map +1 -0
  58. package/dist/schemas/related.js +115 -0
  59. package/dist/schemas/releases.d.ts +623 -0
  60. package/dist/schemas/releases.d.ts.map +1 -0
  61. package/dist/schemas/releases.js +414 -0
  62. package/dist/schemas/resolve.d.ts +259 -0
  63. package/dist/schemas/resolve.d.ts.map +1 -0
  64. package/{src/schemas/resolve.ts → dist/schemas/resolve.js} +2 -5
  65. package/dist/schemas/search.d.ts +475 -0
  66. package/dist/schemas/search.d.ts.map +1 -0
  67. package/dist/schemas/search.js +258 -0
  68. package/dist/schemas/semantic-alert-summary.d.ts +54 -0
  69. package/dist/schemas/semantic-alert-summary.d.ts.map +1 -0
  70. package/dist/schemas/semantic-alert-summary.js +57 -0
  71. package/dist/schemas/semantic-alerts.d.ts +41 -0
  72. package/dist/schemas/semantic-alerts.d.ts.map +1 -0
  73. package/dist/schemas/semantic-alerts.js +42 -0
  74. package/dist/schemas/shared.d.ts +247 -0
  75. package/dist/schemas/shared.d.ts.map +1 -0
  76. package/dist/schemas/shared.js +248 -0
  77. package/dist/schemas/site-notice.d.ts +35 -0
  78. package/dist/schemas/site-notice.d.ts.map +1 -0
  79. package/{src/schemas/site-notice.ts → dist/schemas/site-notice.js} +14 -18
  80. package/dist/schemas/sitemap.d.ts +97 -0
  81. package/dist/schemas/sitemap.d.ts.map +1 -0
  82. package/dist/schemas/sitemap.js +107 -0
  83. package/dist/schemas/sources.d.ts +1145 -0
  84. package/dist/schemas/sources.d.ts.map +1 -0
  85. package/dist/schemas/sources.js +645 -0
  86. package/dist/schemas/stats.d.ts +82 -0
  87. package/dist/schemas/stats.d.ts.map +1 -0
  88. package/dist/schemas/stats.js +59 -0
  89. package/dist/schemas/taxonomy.d.ts +344 -0
  90. package/dist/schemas/taxonomy.d.ts.map +1 -0
  91. package/{src/schemas/taxonomy.ts → dist/schemas/taxonomy.js} +47 -58
  92. package/dist/schemas/webhooks.d.ts +618 -0
  93. package/dist/schemas/webhooks.d.ts.map +1 -0
  94. package/dist/schemas/webhooks.js +191 -0
  95. package/dist/schemas/well-known.d.ts +302 -0
  96. package/dist/schemas/well-known.d.ts.map +1 -0
  97. package/dist/schemas/well-known.js +192 -0
  98. package/dist/schemas/workspace-integrations.d.ts +27 -0
  99. package/dist/schemas/workspace-integrations.d.ts.map +1 -0
  100. package/dist/schemas/workspace-integrations.js +22 -0
  101. package/package.json +16 -4
  102. package/src/api-types.ts +0 -2223
  103. package/src/schemas/account-profile.ts +0 -28
  104. package/src/schemas/ai-models.test.ts +0 -29
  105. package/src/schemas/classifications.ts +0 -109
  106. package/src/schemas/collections.ts +0 -346
  107. package/src/schemas/errors.test.ts +0 -55
  108. package/src/schemas/errors.ts +0 -81
  109. package/src/schemas/feedback.ts +0 -56
  110. package/src/schemas/listing.ts +0 -226
  111. package/src/schemas/orgs.ts +0 -533
  112. package/src/schemas/recommendations.ts +0 -39
  113. package/src/schemas/related.ts +0 -126
  114. package/src/schemas/releases.ts +0 -436
  115. package/src/schemas/search.ts +0 -274
  116. package/src/schemas/semantic-alert-summary.ts +0 -65
  117. package/src/schemas/shared.notice.test.ts +0 -36
  118. package/src/schemas/shared.ts +0 -267
  119. package/src/schemas/site-notice.test.ts +0 -67
  120. package/src/schemas/sitemap.ts +0 -114
  121. package/src/schemas/sources.ts +0 -674
  122. package/src/schemas/stats.ts +0 -62
  123. package/src/schemas/well-known.test.ts +0 -264
  124. package/src/schemas/well-known.ts +0 -252
  125. package/src/schemas/workspace-integrations.ts +0 -26
@@ -0,0 +1,82 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Per-source activity row in `GET /v1/stats`. `orgName` is nullable because
4
+ * the source-to-org JOIN is left-joined (legacy orphan sources still exist).
5
+ */
6
+ export declare const StatsSourceActivitySchema: z.ZodObject<{
7
+ sourceName: z.ZodString;
8
+ sourceSlug: z.ZodString;
9
+ sourceType: z.ZodString;
10
+ orgName: z.ZodNullable<z.ZodString>;
11
+ lastFetchedAt: z.ZodNullable<z.ZodString>;
12
+ totalReleases: z.ZodNumber;
13
+ recentReleases: z.ZodNumber;
14
+ }, z.core.$strip>;
15
+ /**
16
+ * Recent fetch-log row, joined with source + org for display. `durationMs`
17
+ * and `error` are nullable on the underlying table; `orgName` is nullable
18
+ * for the same orphan-source reason as above.
19
+ */
20
+ export declare const StatsRecentActivitySchema: z.ZodObject<{
21
+ sourceName: z.ZodString;
22
+ sourceSlug: z.ZodString;
23
+ orgName: z.ZodNullable<z.ZodString>;
24
+ releasesFound: z.ZodNumber;
25
+ releasesInserted: z.ZodNumber;
26
+ totalReleases: z.ZodNumber;
27
+ status: z.ZodString;
28
+ durationMs: z.ZodNullable<z.ZodNumber>;
29
+ error: z.ZodNullable<z.ZodString>;
30
+ createdAt: z.ZodString;
31
+ }, z.core.$strip>;
32
+ /**
33
+ * Response shape for `GET /v1/stats`. The handler returns a hybrid payload —
34
+ * the flat `Stats` counts (legacy `orgs/sources/releases/products` fields used
35
+ * by the web homepage banner) merged with the richer `StatsSummary` shape
36
+ * (period window + totals + sourceHealth + sourceActivity + recentActivity).
37
+ * Modelled with `z.object` over the union of both shapes; consumers may
38
+ * pick either subset.
39
+ */
40
+ export declare const StatsResponseSchema: z.ZodObject<{
41
+ orgs: z.ZodNumber;
42
+ sources: z.ZodNumber;
43
+ releases: z.ZodNumber;
44
+ products: z.ZodNumber;
45
+ period: z.ZodObject<{
46
+ days: z.ZodNumber;
47
+ cutoff: z.ZodString;
48
+ }, z.core.$strip>;
49
+ totals: z.ZodObject<{
50
+ organizations: z.ZodNumber;
51
+ sources: z.ZodNumber;
52
+ releases: z.ZodNumber;
53
+ releasesInPeriod: z.ZodNumber;
54
+ }, z.core.$strip>;
55
+ sourceHealth: z.ZodObject<{
56
+ upToDate: z.ZodNumber;
57
+ stale: z.ZodNumber;
58
+ neverFetched: z.ZodNumber;
59
+ }, z.core.$strip>;
60
+ sourceActivity: z.ZodArray<z.ZodObject<{
61
+ sourceName: z.ZodString;
62
+ sourceSlug: z.ZodString;
63
+ sourceType: z.ZodString;
64
+ orgName: z.ZodNullable<z.ZodString>;
65
+ lastFetchedAt: z.ZodNullable<z.ZodString>;
66
+ totalReleases: z.ZodNumber;
67
+ recentReleases: z.ZodNumber;
68
+ }, z.core.$strip>>;
69
+ recentActivity: z.ZodArray<z.ZodObject<{
70
+ sourceName: z.ZodString;
71
+ sourceSlug: z.ZodString;
72
+ orgName: z.ZodNullable<z.ZodString>;
73
+ releasesFound: z.ZodNumber;
74
+ releasesInserted: z.ZodNumber;
75
+ totalReleases: z.ZodNumber;
76
+ status: z.ZodString;
77
+ durationMs: z.ZodNullable<z.ZodNumber>;
78
+ error: z.ZodNullable<z.ZodString>;
79
+ createdAt: z.ZodString;
80
+ }, z.core.$strip>>;
81
+ }, z.core.$strip>;
82
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;iBAQpC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAWpC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB9B,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { StatsSchema } from "./shared.js";
3
+ /**
4
+ * Per-source activity row in `GET /v1/stats`. `orgName` is nullable because
5
+ * the source-to-org JOIN is left-joined (legacy orphan sources still exist).
6
+ */
7
+ export const StatsSourceActivitySchema = z.object({
8
+ sourceName: z.string(),
9
+ sourceSlug: z.string(),
10
+ sourceType: z.string(),
11
+ orgName: z.string().nullable(),
12
+ lastFetchedAt: z.string().nullable(),
13
+ totalReleases: z.number(),
14
+ recentReleases: z.number(),
15
+ });
16
+ /**
17
+ * Recent fetch-log row, joined with source + org for display. `durationMs`
18
+ * and `error` are nullable on the underlying table; `orgName` is nullable
19
+ * for the same orphan-source reason as above.
20
+ */
21
+ export const StatsRecentActivitySchema = z.object({
22
+ sourceName: z.string(),
23
+ sourceSlug: z.string(),
24
+ orgName: z.string().nullable(),
25
+ releasesFound: z.number(),
26
+ releasesInserted: z.number(),
27
+ totalReleases: z.number(),
28
+ status: z.string(),
29
+ durationMs: z.number().nullable(),
30
+ error: z.string().nullable(),
31
+ createdAt: z.string(),
32
+ });
33
+ /**
34
+ * Response shape for `GET /v1/stats`. The handler returns a hybrid payload —
35
+ * the flat `Stats` counts (legacy `orgs/sources/releases/products` fields used
36
+ * by the web homepage banner) merged with the richer `StatsSummary` shape
37
+ * (period window + totals + sourceHealth + sourceActivity + recentActivity).
38
+ * Modelled with `z.object` over the union of both shapes; consumers may
39
+ * pick either subset.
40
+ */
41
+ export const StatsResponseSchema = StatsSchema.extend({
42
+ period: z.object({
43
+ days: z.number().int().min(1),
44
+ cutoff: z.string(),
45
+ }),
46
+ totals: z.object({
47
+ organizations: z.number().int().min(0),
48
+ sources: z.number().int().min(0),
49
+ releases: z.number().int().min(0),
50
+ releasesInPeriod: z.number().int().min(0),
51
+ }),
52
+ sourceHealth: z.object({
53
+ upToDate: z.number().int().min(0),
54
+ stale: z.number().int().min(0),
55
+ neverFetched: z.number().int().min(0),
56
+ }),
57
+ sourceActivity: z.array(StatsSourceActivitySchema),
58
+ recentActivity: z.array(StatsRecentActivitySchema),
59
+ });
@@ -0,0 +1,344 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Org rollup row shared by category and tag detail responses. Slim by
4
+ * design — taxonomy pages link out to the full org detail page rather
5
+ * than embedding it.
6
+ */
7
+ export declare const TaxonomyOrgSchema: z.ZodObject<{
8
+ slug: z.ZodString;
9
+ name: z.ZodString;
10
+ domain: z.ZodNullable<z.ZodString>;
11
+ avatarUrl: z.ZodNullable<z.ZodString>;
12
+ }, z.core.$strip>;
13
+ /** Product rollup row, paired with `TaxonomyOrg`. */
14
+ export declare const TaxonomyProductSchema: z.ZodObject<{
15
+ slug: z.ZodString;
16
+ name: z.ZodString;
17
+ description: z.ZodNullable<z.ZodString>;
18
+ orgSlug: z.ZodString;
19
+ orgName: z.ZodString;
20
+ }, z.core.$strip>;
21
+ /**
22
+ * Per-category row on `GET /v1/categories`. Categories are a fixed
23
+ * taxonomy (`CATEGORIES` in `@buildinternet/releases-core/categories`),
24
+ * so the response always includes every slug, including ones with zero
25
+ * members. `name` / `description` / `aliases` come from the optional
26
+ * `categories` metadata overlay; `description` is null when no override
27
+ * has been set.
28
+ */
29
+ export declare const CategoryListItemSchema: z.ZodObject<{
30
+ slug: z.ZodEnum<{
31
+ ai: "ai";
32
+ cloud: "cloud";
33
+ commerce: "commerce";
34
+ crm: "crm";
35
+ database: "database";
36
+ design: "design";
37
+ "developer-tools": "developer-tools";
38
+ devops: "devops";
39
+ finance: "finance";
40
+ framework: "framework";
41
+ infrastructure: "infrastructure";
42
+ observability: "observability";
43
+ productivity: "productivity";
44
+ security: "security";
45
+ }>;
46
+ name: z.ZodString;
47
+ description: z.ZodNullable<z.ZodString>;
48
+ aliases: z.ZodArray<z.ZodString>;
49
+ orgCount: z.ZodNumber;
50
+ productCount: z.ZodNumber;
51
+ previewMembers: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
52
+ slug: z.ZodString;
53
+ name: z.ZodString;
54
+ domain: z.ZodNullable<z.ZodString>;
55
+ avatarUrl: z.ZodNullable<z.ZodString>;
56
+ githubHandle: z.ZodNullable<z.ZodString>;
57
+ description: z.ZodNullable<z.ZodString>;
58
+ kind: z.ZodLiteral<"org">;
59
+ }, z.core.$strip>, z.ZodObject<{
60
+ slug: z.ZodString;
61
+ name: z.ZodString;
62
+ description: z.ZodNullable<z.ZodString>;
63
+ org: z.ZodObject<{
64
+ slug: z.ZodString;
65
+ name: z.ZodString;
66
+ domain: z.ZodNullable<z.ZodString>;
67
+ avatarUrl: z.ZodNullable<z.ZodString>;
68
+ githubHandle: z.ZodNullable<z.ZodString>;
69
+ }, z.core.$strip>;
70
+ kind: z.ZodLiteral<"product">;
71
+ }, z.core.$strip>], "kind">>>;
72
+ }, z.core.$strip>;
73
+ export declare const CategoryListResponseSchema: z.ZodArray<z.ZodObject<{
74
+ slug: z.ZodEnum<{
75
+ ai: "ai";
76
+ cloud: "cloud";
77
+ commerce: "commerce";
78
+ crm: "crm";
79
+ database: "database";
80
+ design: "design";
81
+ "developer-tools": "developer-tools";
82
+ devops: "devops";
83
+ finance: "finance";
84
+ framework: "framework";
85
+ infrastructure: "infrastructure";
86
+ observability: "observability";
87
+ productivity: "productivity";
88
+ security: "security";
89
+ }>;
90
+ name: z.ZodString;
91
+ description: z.ZodNullable<z.ZodString>;
92
+ aliases: z.ZodArray<z.ZodString>;
93
+ orgCount: z.ZodNumber;
94
+ productCount: z.ZodNumber;
95
+ previewMembers: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
96
+ slug: z.ZodString;
97
+ name: z.ZodString;
98
+ domain: z.ZodNullable<z.ZodString>;
99
+ avatarUrl: z.ZodNullable<z.ZodString>;
100
+ githubHandle: z.ZodNullable<z.ZodString>;
101
+ description: z.ZodNullable<z.ZodString>;
102
+ kind: z.ZodLiteral<"org">;
103
+ }, z.core.$strip>, z.ZodObject<{
104
+ slug: z.ZodString;
105
+ name: z.ZodString;
106
+ description: z.ZodNullable<z.ZodString>;
107
+ org: z.ZodObject<{
108
+ slug: z.ZodString;
109
+ name: z.ZodString;
110
+ domain: z.ZodNullable<z.ZodString>;
111
+ avatarUrl: z.ZodNullable<z.ZodString>;
112
+ githubHandle: z.ZodNullable<z.ZodString>;
113
+ }, z.core.$strip>;
114
+ kind: z.ZodLiteral<"product">;
115
+ }, z.core.$strip>], "kind">>>;
116
+ }, z.core.$strip>>;
117
+ /** Returned by `GET /v1/categories/:slug` for the canonical slug. */
118
+ export declare const CategoryDetailSchema: z.ZodObject<{
119
+ slug: z.ZodEnum<{
120
+ ai: "ai";
121
+ cloud: "cloud";
122
+ commerce: "commerce";
123
+ crm: "crm";
124
+ database: "database";
125
+ design: "design";
126
+ "developer-tools": "developer-tools";
127
+ devops: "devops";
128
+ finance: "finance";
129
+ framework: "framework";
130
+ infrastructure: "infrastructure";
131
+ observability: "observability";
132
+ productivity: "productivity";
133
+ security: "security";
134
+ }>;
135
+ name: z.ZodString;
136
+ description: z.ZodNullable<z.ZodString>;
137
+ aliases: z.ZodArray<z.ZodString>;
138
+ orgs: z.ZodArray<z.ZodObject<{
139
+ slug: z.ZodString;
140
+ name: z.ZodString;
141
+ domain: z.ZodNullable<z.ZodString>;
142
+ avatarUrl: z.ZodNullable<z.ZodString>;
143
+ }, z.core.$strip>>;
144
+ products: z.ZodArray<z.ZodObject<{
145
+ slug: z.ZodString;
146
+ name: z.ZodString;
147
+ description: z.ZodNullable<z.ZodString>;
148
+ orgSlug: z.ZodString;
149
+ orgName: z.ZodString;
150
+ }, z.core.$strip>>;
151
+ }, z.core.$strip>;
152
+ /**
153
+ * Body accepted by `PATCH /v1/categories/:slug`. All fields are optional,
154
+ * but the body must set at least one of them — an empty body is rejected.
155
+ * `name` and `description` accept `null` to clear the overlay value;
156
+ * `aliases` replaces the full set (pass `[]` to clear). The row is
157
+ * upserted — categories that have never been customized have no row.
158
+ *
159
+ * `name` is bounded at 200 chars and `description` at 2000. Alias element
160
+ * shape (kebab-case, not a canonical slug, not claimed by another row) is
161
+ * enforced in the handler after the strings are trimmed + lowercased, since
162
+ * those checks depend on runtime state and case-folding.
163
+ */
164
+ export declare const UpdateCategoryRequestSchema: z.ZodObject<{
165
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
166
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
167
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
168
+ }, z.core.$strip>;
169
+ /** Response from `PATCH /v1/categories/:slug` — the resolved overlay values. */
170
+ export declare const UpdateCategoryResponseSchema: z.ZodObject<{
171
+ slug: z.ZodEnum<{
172
+ ai: "ai";
173
+ cloud: "cloud";
174
+ commerce: "commerce";
175
+ crm: "crm";
176
+ database: "database";
177
+ design: "design";
178
+ "developer-tools": "developer-tools";
179
+ devops: "devops";
180
+ finance: "finance";
181
+ framework: "framework";
182
+ infrastructure: "infrastructure";
183
+ observability: "observability";
184
+ productivity: "productivity";
185
+ security: "security";
186
+ }>;
187
+ name: z.ZodString;
188
+ description: z.ZodNullable<z.ZodString>;
189
+ aliases: z.ZodArray<z.ZodString>;
190
+ }, z.core.$strip>;
191
+ /**
192
+ * Aggregated release row on `GET /v1/categories/:slug/releases`. Same wire
193
+ * shape as `CollectionReleaseItem` — both surfaces aggregate across orgs and
194
+ * use `formatAggregateReleaseRow` in `apps/api/src/utils.ts` for the
195
+ * formatting. Re-exported here so the two endpoints describe one schema
196
+ * instead of two drifting copies.
197
+ */
198
+ export declare const CategoryReleaseItemSchema: z.ZodObject<{
199
+ version: z.ZodNullable<z.ZodString>;
200
+ title: z.ZodString;
201
+ summary: z.ZodString;
202
+ content: z.ZodOptional<z.ZodString>;
203
+ publishedAt: z.ZodNullable<z.ZodString>;
204
+ fetchedAt: z.ZodOptional<z.ZodString>;
205
+ url: z.ZodNullable<z.ZodString>;
206
+ media: z.ZodOptional<z.ZodArray<z.ZodObject<{
207
+ type: z.ZodEnum<{
208
+ gif: "gif";
209
+ image: "image";
210
+ video: "video";
211
+ }>;
212
+ url: z.ZodString;
213
+ alt: z.ZodOptional<z.ZodString>;
214
+ r2Key: z.ZodOptional<z.ZodString>;
215
+ r2Url: z.ZodOptional<z.ZodString>;
216
+ linkUrl: z.ZodOptional<z.ZodString>;
217
+ }, z.core.$strip>>>;
218
+ type: z.ZodOptional<z.ZodEnum<{
219
+ feature: "feature";
220
+ rollup: "rollup";
221
+ }>>;
222
+ prerelease: z.ZodOptional<z.ZodBoolean>;
223
+ titleGenerated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
224
+ titleShort: z.ZodOptional<z.ZodNullable<z.ZodString>>;
225
+ breaking: z.ZodOptional<z.ZodEnum<{
226
+ major: "major";
227
+ minor: "minor";
228
+ none: "none";
229
+ unknown: "unknown";
230
+ }>>;
231
+ importance: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
232
+ coverageCount: z.ZodOptional<z.ZodNumber>;
233
+ contentChars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
234
+ contentTokens: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
235
+ composition: z.ZodOptional<z.ZodNullable<z.ZodObject<{
236
+ bugs: z.ZodNumber;
237
+ features: z.ZodNumber;
238
+ enhancements: z.ZodNumber;
239
+ }, z.core.$strip>>>;
240
+ id: z.ZodString;
241
+ source: z.ZodObject<{
242
+ slug: z.ZodString;
243
+ name: z.ZodString;
244
+ type: z.ZodString;
245
+ }, z.core.$strip>;
246
+ org: z.ZodObject<{
247
+ slug: z.ZodString;
248
+ name: z.ZodString;
249
+ }, z.core.$strip>;
250
+ product: z.ZodOptional<z.ZodNullable<z.ZodObject<{
251
+ slug: z.ZodString;
252
+ name: z.ZodString;
253
+ }, z.core.$strip>>>;
254
+ groupSlug: z.ZodOptional<z.ZodString>;
255
+ groupName: z.ZodOptional<z.ZodString>;
256
+ }, z.core.$strip>;
257
+ export declare const CategoryFeedPaginationSchema: z.ZodObject<{
258
+ nextCursor: z.ZodNullable<z.ZodString>;
259
+ limit: z.ZodNumber;
260
+ }, z.core.$strip>;
261
+ export declare const CategoryReleasesResponseSchema: z.ZodObject<{
262
+ releases: z.ZodArray<z.ZodObject<{
263
+ version: z.ZodNullable<z.ZodString>;
264
+ title: z.ZodString;
265
+ summary: z.ZodString;
266
+ content: z.ZodOptional<z.ZodString>;
267
+ publishedAt: z.ZodNullable<z.ZodString>;
268
+ fetchedAt: z.ZodOptional<z.ZodString>;
269
+ url: z.ZodNullable<z.ZodString>;
270
+ media: z.ZodOptional<z.ZodArray<z.ZodObject<{
271
+ type: z.ZodEnum<{
272
+ gif: "gif";
273
+ image: "image";
274
+ video: "video";
275
+ }>;
276
+ url: z.ZodString;
277
+ alt: z.ZodOptional<z.ZodString>;
278
+ r2Key: z.ZodOptional<z.ZodString>;
279
+ r2Url: z.ZodOptional<z.ZodString>;
280
+ linkUrl: z.ZodOptional<z.ZodString>;
281
+ }, z.core.$strip>>>;
282
+ type: z.ZodOptional<z.ZodEnum<{
283
+ feature: "feature";
284
+ rollup: "rollup";
285
+ }>>;
286
+ prerelease: z.ZodOptional<z.ZodBoolean>;
287
+ titleGenerated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
288
+ titleShort: z.ZodOptional<z.ZodNullable<z.ZodString>>;
289
+ breaking: z.ZodOptional<z.ZodEnum<{
290
+ major: "major";
291
+ minor: "minor";
292
+ none: "none";
293
+ unknown: "unknown";
294
+ }>>;
295
+ importance: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
296
+ coverageCount: z.ZodOptional<z.ZodNumber>;
297
+ contentChars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
298
+ contentTokens: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
299
+ composition: z.ZodOptional<z.ZodNullable<z.ZodObject<{
300
+ bugs: z.ZodNumber;
301
+ features: z.ZodNumber;
302
+ enhancements: z.ZodNumber;
303
+ }, z.core.$strip>>>;
304
+ id: z.ZodString;
305
+ source: z.ZodObject<{
306
+ slug: z.ZodString;
307
+ name: z.ZodString;
308
+ type: z.ZodString;
309
+ }, z.core.$strip>;
310
+ org: z.ZodObject<{
311
+ slug: z.ZodString;
312
+ name: z.ZodString;
313
+ }, z.core.$strip>;
314
+ product: z.ZodOptional<z.ZodNullable<z.ZodObject<{
315
+ slug: z.ZodString;
316
+ name: z.ZodString;
317
+ }, z.core.$strip>>>;
318
+ groupSlug: z.ZodOptional<z.ZodString>;
319
+ groupName: z.ZodOptional<z.ZodString>;
320
+ }, z.core.$strip>>;
321
+ pagination: z.ZodObject<{
322
+ nextCursor: z.ZodNullable<z.ZodString>;
323
+ limit: z.ZodNumber;
324
+ }, z.core.$strip>;
325
+ }, z.core.$strip>;
326
+ /** Returned by `GET /v1/tags/:slug`. */
327
+ export declare const TagDetailSchema: z.ZodObject<{
328
+ slug: z.ZodString;
329
+ name: z.ZodString;
330
+ orgs: z.ZodArray<z.ZodObject<{
331
+ slug: z.ZodString;
332
+ name: z.ZodString;
333
+ domain: z.ZodNullable<z.ZodString>;
334
+ avatarUrl: z.ZodNullable<z.ZodString>;
335
+ }, z.core.$strip>>;
336
+ products: z.ZodArray<z.ZodObject<{
337
+ slug: z.ZodString;
338
+ name: z.ZodString;
339
+ description: z.ZodNullable<z.ZodString>;
340
+ orgSlug: z.ZodString;
341
+ orgName: z.ZodString;
342
+ }, z.core.$strip>>;
343
+ }, z.core.$strip>;
344
+ //# sourceMappingURL=taxonomy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/schemas/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AAEH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBjC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAkC,CAAC;AAE1E,qEAAqE;AACrE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO/B,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B;;;;iBAQpC,CAAC;AAEL,gFAAgF;AAChF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;iBAKvC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8B,CAAC;AAErE,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGzC,CAAC;AAEH,wCAAwC;AACxC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;iBAK1B,CAAC"}
@@ -1,28 +1,25 @@
1
1
  import { z } from "zod";
2
2
  import { CategorySchema } from "./shared.js";
3
3
  import { CollectionMemberSchema, CollectionReleaseItemSchema } from "./collections.js";
4
-
5
4
  /**
6
5
  * Org rollup row shared by category and tag detail responses. Slim by
7
6
  * design — taxonomy pages link out to the full org detail page rather
8
7
  * than embedding it.
9
8
  */
10
9
  export const TaxonomyOrgSchema = z.object({
11
- slug: z.string(),
12
- name: z.string(),
13
- domain: z.string().nullable(),
14
- avatarUrl: z.string().nullable(),
10
+ slug: z.string(),
11
+ name: z.string(),
12
+ domain: z.string().nullable(),
13
+ avatarUrl: z.string().nullable(),
15
14
  });
16
-
17
15
  /** Product rollup row, paired with `TaxonomyOrg`. */
18
16
  export const TaxonomyProductSchema = z.object({
19
- slug: z.string(),
20
- name: z.string(),
21
- description: z.string().nullable(),
22
- orgSlug: z.string(),
23
- orgName: z.string(),
17
+ slug: z.string(),
18
+ name: z.string(),
19
+ description: z.string().nullable(),
20
+ orgSlug: z.string(),
21
+ orgName: z.string(),
24
22
  });
25
-
26
23
  /**
27
24
  * Per-category row on `GET /v1/categories`. Categories are a fixed
28
25
  * taxonomy (`CATEGORIES` in `@buildinternet/releases-core/categories`),
@@ -32,36 +29,33 @@ export const TaxonomyProductSchema = z.object({
32
29
  * has been set.
33
30
  */
34
31
  export const CategoryListItemSchema = z.object({
35
- slug: CategorySchema,
36
- name: z.string(),
37
- description: z.string().nullable(),
38
- aliases: z.array(z.string()),
39
- orgCount: z.number().int().min(0),
40
- productCount: z.number().int().min(0),
41
- /**
42
- * A small mixed-kind preview (capped at 3) of the orgs and products in this
43
- * category, so the list page can render an inline avatar facepile without a
44
- * second round trip — same shape and intent as a collection's
45
- * `previewMembers`. Org entries are surfaced first (they carry the avatar);
46
- * product entries fill any remaining slots and dedupe against orgs already
47
- * shown. The list page derives "+N more" from `orgCount + productCount`.
48
- * Optional on the wire so older workers mid-rollout don't trip the schema.
49
- */
50
- previewMembers: z.array(CollectionMemberSchema).optional(),
32
+ slug: CategorySchema,
33
+ name: z.string(),
34
+ description: z.string().nullable(),
35
+ aliases: z.array(z.string()),
36
+ orgCount: z.number().int().min(0),
37
+ productCount: z.number().int().min(0),
38
+ /**
39
+ * A small mixed-kind preview (capped at 3) of the orgs and products in this
40
+ * category, so the list page can render an inline avatar facepile without a
41
+ * second round trip — same shape and intent as a collection's
42
+ * `previewMembers`. Org entries are surfaced first (they carry the avatar);
43
+ * product entries fill any remaining slots and dedupe against orgs already
44
+ * shown. The list page derives "+N more" from `orgCount + productCount`.
45
+ * Optional on the wire so older workers mid-rollout don't trip the schema.
46
+ */
47
+ previewMembers: z.array(CollectionMemberSchema).optional(),
51
48
  });
52
-
53
49
  export const CategoryListResponseSchema = z.array(CategoryListItemSchema);
54
-
55
50
  /** Returned by `GET /v1/categories/:slug` for the canonical slug. */
56
51
  export const CategoryDetailSchema = z.object({
57
- slug: CategorySchema,
58
- name: z.string(),
59
- description: z.string().nullable(),
60
- aliases: z.array(z.string()),
61
- orgs: z.array(TaxonomyOrgSchema),
62
- products: z.array(TaxonomyProductSchema),
52
+ slug: CategorySchema,
53
+ name: z.string(),
54
+ description: z.string().nullable(),
55
+ aliases: z.array(z.string()),
56
+ orgs: z.array(TaxonomyOrgSchema),
57
+ products: z.array(TaxonomyProductSchema),
63
58
  });
64
-
65
59
  /**
66
60
  * Body accepted by `PATCH /v1/categories/:slug`. All fields are optional,
67
61
  * but the body must set at least one of them — an empty body is rejected.
@@ -75,23 +69,21 @@ export const CategoryDetailSchema = z.object({
75
69
  * those checks depend on runtime state and case-folding.
76
70
  */
77
71
  export const UpdateCategoryRequestSchema = z
78
- .object({
72
+ .object({
79
73
  name: z.string().max(200).nullable().optional(),
80
74
  description: z.string().max(2000).nullable().optional(),
81
75
  aliases: z.array(z.string()).optional(),
82
- })
83
- .refine((b) => b.name !== undefined || b.description !== undefined || b.aliases !== undefined, {
76
+ })
77
+ .refine((b) => b.name !== undefined || b.description !== undefined || b.aliases !== undefined, {
84
78
  message: "Body must set at least one of `name`, `description`, or `aliases`",
85
- });
86
-
79
+ });
87
80
  /** Response from `PATCH /v1/categories/:slug` — the resolved overlay values. */
88
81
  export const UpdateCategoryResponseSchema = z.object({
89
- slug: CategorySchema,
90
- name: z.string(),
91
- description: z.string().nullable(),
92
- aliases: z.array(z.string()),
82
+ slug: CategorySchema,
83
+ name: z.string(),
84
+ description: z.string().nullable(),
85
+ aliases: z.array(z.string()),
93
86
  });
94
-
95
87
  /**
96
88
  * Aggregated release row on `GET /v1/categories/:slug/releases`. Same wire
97
89
  * shape as `CollectionReleaseItem` — both surfaces aggregate across orgs and
@@ -100,21 +92,18 @@ export const UpdateCategoryResponseSchema = z.object({
100
92
  * instead of two drifting copies.
101
93
  */
102
94
  export const CategoryReleaseItemSchema = CollectionReleaseItemSchema;
103
-
104
95
  export const CategoryFeedPaginationSchema = z.object({
105
- nextCursor: z.string().nullable(),
106
- limit: z.number().int().min(1),
96
+ nextCursor: z.string().nullable(),
97
+ limit: z.number().int().min(1),
107
98
  });
108
-
109
99
  export const CategoryReleasesResponseSchema = z.object({
110
- releases: z.array(CategoryReleaseItemSchema),
111
- pagination: CategoryFeedPaginationSchema,
100
+ releases: z.array(CategoryReleaseItemSchema),
101
+ pagination: CategoryFeedPaginationSchema,
112
102
  });
113
-
114
103
  /** Returned by `GET /v1/tags/:slug`. */
115
104
  export const TagDetailSchema = z.object({
116
- slug: z.string(),
117
- name: z.string(),
118
- orgs: z.array(TaxonomyOrgSchema),
119
- products: z.array(TaxonomyProductSchema),
105
+ slug: z.string(),
106
+ name: z.string(),
107
+ orgs: z.array(TaxonomyOrgSchema),
108
+ products: z.array(TaxonomyProductSchema),
120
109
  });