@buildinternet/releases-api-types 0.59.0 → 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.
- package/README.md +14 -6
- package/dist/api-types.d.ts +1168 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +134 -0
- package/dist/schemas/account-profile.d.ts +29 -0
- package/dist/schemas/account-profile.d.ts.map +1 -0
- package/dist/schemas/account-profile.js +24 -0
- package/dist/schemas/ai-models.d.ts +67 -0
- package/dist/schemas/ai-models.d.ts.map +1 -0
- package/{src/schemas/ai-models.ts → dist/schemas/ai-models.js} +25 -31
- package/dist/schemas/api-keys.d.ts +71 -0
- package/dist/schemas/api-keys.d.ts.map +1 -0
- package/dist/schemas/api-keys.js +32 -0
- package/dist/schemas/classifications.d.ts +134 -0
- package/dist/schemas/classifications.d.ts.map +1 -0
- package/dist/schemas/classifications.js +96 -0
- package/dist/schemas/collections.d.ts +605 -0
- package/dist/schemas/collections.d.ts.map +1 -0
- package/dist/schemas/collections.js +320 -0
- package/dist/schemas/datasets.d.ts +34 -0
- package/dist/schemas/datasets.d.ts.map +1 -0
- package/dist/schemas/datasets.js +11 -0
- package/dist/schemas/errors.d.ts +43 -0
- package/dist/schemas/errors.d.ts.map +1 -0
- package/dist/schemas/errors.js +61 -0
- package/dist/schemas/feedback.d.ts +134 -0
- package/dist/schemas/feedback.d.ts.map +1 -0
- package/dist/schemas/feedback.js +76 -0
- package/dist/schemas/follows.d.ts +154 -0
- package/dist/schemas/follows.d.ts.map +1 -0
- package/dist/schemas/follows.js +42 -0
- package/dist/schemas/listing.d.ts +374 -0
- package/dist/schemas/listing.d.ts.map +1 -0
- package/dist/schemas/listing.js +175 -0
- package/dist/schemas/lookups.d.ts +285 -0
- package/dist/schemas/lookups.d.ts.map +1 -0
- package/{src/schemas/lookups.ts → dist/schemas/lookups.js} +67 -80
- package/dist/schemas/marketing-classifier.d.ts +32 -0
- package/dist/schemas/marketing-classifier.d.ts.map +1 -0
- package/{src/schemas/marketing-classifier.ts → dist/schemas/marketing-classifier.js} +14 -18
- package/dist/schemas/orgs.d.ts +950 -0
- package/dist/schemas/orgs.d.ts.map +1 -0
- package/dist/schemas/orgs.js +473 -0
- package/dist/schemas/overviews.d.ts +205 -0
- package/dist/schemas/overviews.d.ts.map +1 -0
- package/{src/schemas/overviews.ts → dist/schemas/overviews.js} +41 -54
- package/dist/schemas/products.d.ts +595 -0
- package/dist/schemas/products.d.ts.map +1 -0
- package/{src/schemas/products.ts → dist/schemas/products.js} +113 -136
- package/dist/schemas/publish-tokens.d.ts +55 -0
- package/dist/schemas/publish-tokens.d.ts.map +1 -0
- package/{src/schemas/publish-tokens.ts → dist/schemas/publish-tokens.js} +18 -29
- package/dist/schemas/recommendations.d.ts +52 -0
- package/dist/schemas/recommendations.d.ts.map +1 -0
- package/dist/schemas/recommendations.js +58 -0
- package/dist/schemas/related.d.ts +331 -0
- package/dist/schemas/related.d.ts.map +1 -0
- package/dist/schemas/related.js +115 -0
- package/dist/schemas/releases.d.ts +623 -0
- package/dist/schemas/releases.d.ts.map +1 -0
- package/dist/schemas/releases.js +414 -0
- package/dist/schemas/resolve.d.ts +259 -0
- package/dist/schemas/resolve.d.ts.map +1 -0
- package/{src/schemas/resolve.ts → dist/schemas/resolve.js} +2 -5
- package/dist/schemas/search.d.ts +475 -0
- package/dist/schemas/search.d.ts.map +1 -0
- package/dist/schemas/search.js +258 -0
- package/dist/schemas/semantic-alert-summary.d.ts +54 -0
- package/dist/schemas/semantic-alert-summary.d.ts.map +1 -0
- package/dist/schemas/semantic-alert-summary.js +57 -0
- package/dist/schemas/semantic-alerts.d.ts +41 -0
- package/dist/schemas/semantic-alerts.d.ts.map +1 -0
- package/dist/schemas/semantic-alerts.js +42 -0
- package/dist/schemas/shared.d.ts +247 -0
- package/dist/schemas/shared.d.ts.map +1 -0
- package/dist/schemas/shared.js +248 -0
- package/dist/schemas/site-notice.d.ts +35 -0
- package/dist/schemas/site-notice.d.ts.map +1 -0
- package/{src/schemas/site-notice.ts → dist/schemas/site-notice.js} +14 -18
- package/dist/schemas/sitemap.d.ts +97 -0
- package/dist/schemas/sitemap.d.ts.map +1 -0
- package/dist/schemas/sitemap.js +107 -0
- package/dist/schemas/sources.d.ts +1145 -0
- package/dist/schemas/sources.d.ts.map +1 -0
- package/dist/schemas/sources.js +645 -0
- package/dist/schemas/stats.d.ts +82 -0
- package/dist/schemas/stats.d.ts.map +1 -0
- package/dist/schemas/stats.js +59 -0
- package/dist/schemas/taxonomy.d.ts +344 -0
- package/dist/schemas/taxonomy.d.ts.map +1 -0
- package/{src/schemas/taxonomy.ts → dist/schemas/taxonomy.js} +47 -58
- package/dist/schemas/webhooks.d.ts +618 -0
- package/dist/schemas/webhooks.d.ts.map +1 -0
- package/dist/schemas/webhooks.js +191 -0
- package/dist/schemas/well-known.d.ts +302 -0
- package/dist/schemas/well-known.d.ts.map +1 -0
- package/dist/schemas/well-known.js +192 -0
- package/dist/schemas/workspace-integrations.d.ts +27 -0
- package/dist/schemas/workspace-integrations.d.ts.map +1 -0
- package/dist/schemas/workspace-integrations.js +22 -0
- package/package.json +16 -5
- package/src/api-types.ts +0 -2229
- package/src/schemas/account-profile.ts +0 -28
- package/src/schemas/ai-models.test.ts +0 -29
- package/src/schemas/classifications.ts +0 -109
- package/src/schemas/collections.ts +0 -346
- package/src/schemas/datasets.ts +0 -31
- package/src/schemas/errors.test.ts +0 -55
- package/src/schemas/errors.ts +0 -81
- package/src/schemas/feedback.ts +0 -56
- package/src/schemas/listing.ts +0 -226
- package/src/schemas/orgs.ts +0 -533
- package/src/schemas/recommendations.ts +0 -39
- package/src/schemas/related.ts +0 -126
- package/src/schemas/releases.ts +0 -449
- package/src/schemas/search.ts +0 -274
- package/src/schemas/semantic-alert-summary.ts +0 -65
- package/src/schemas/shared.notice.test.ts +0 -36
- package/src/schemas/shared.ts +0 -267
- package/src/schemas/site-notice.test.ts +0 -67
- package/src/schemas/sitemap.ts +0 -117
- package/src/schemas/sources.ts +0 -674
- package/src/schemas/stats.ts +0 -62
- package/src/schemas/well-known.test.ts +0 -264
- package/src/schemas/well-known.ts +0 -252
- package/src/schemas/workspace-integrations.ts +0 -26
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ImportanceScoreSchema, ReleaseCompositionSchema, ReleaseItemSchema } from "./shared.js";
|
|
3
|
+
/**
|
|
4
|
+
* One org as it appears inside a collection's preview list or detail page.
|
|
5
|
+
* Joined through `organizations_public`, so soft-deleted / on_demand orgs
|
|
6
|
+
* never leak via a collection.
|
|
7
|
+
*/
|
|
8
|
+
export const CollectionMemberOrgSchema = z.object({
|
|
9
|
+
slug: z.string(),
|
|
10
|
+
name: z.string(),
|
|
11
|
+
domain: z.string().nullable(),
|
|
12
|
+
avatarUrl: z.string().nullable(),
|
|
13
|
+
/** GitHub handle from `org_accounts`; lets the avatar fall back to github.com/<handle>.png. */
|
|
14
|
+
githubHandle: z.string().nullable(),
|
|
15
|
+
description: z.string().nullable(),
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Org context attached to a product member so the chip can render the parent
|
|
19
|
+
* org's avatar / handle. Subset of `CollectionMemberOrg` — description is
|
|
20
|
+
* intentionally omitted because the byline comes from the product itself.
|
|
21
|
+
*/
|
|
22
|
+
export const ProductParentOrgSchema = z.object({
|
|
23
|
+
slug: z.string(),
|
|
24
|
+
name: z.string(),
|
|
25
|
+
domain: z.string().nullable(),
|
|
26
|
+
avatarUrl: z.string().nullable(),
|
|
27
|
+
githubHandle: z.string().nullable(),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* One product as it appears inside a collection. Carries the parent org block
|
|
31
|
+
* so the chip can render the org's avatar (products don't have their own).
|
|
32
|
+
*/
|
|
33
|
+
export const CollectionMemberProductSchema = z.object({
|
|
34
|
+
slug: z.string(),
|
|
35
|
+
name: z.string(),
|
|
36
|
+
description: z.string().nullable(),
|
|
37
|
+
org: ProductParentOrgSchema,
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Mixed-kind member entry. `kind` discriminates: `org` carries the org block at
|
|
41
|
+
* the top level; `product` carries the product fields plus a `org` parent block.
|
|
42
|
+
* Used by `GET /v1/collections/:slug` (`members` field) and the new
|
|
43
|
+
* `previewMembers` on `GET /v1/collections`.
|
|
44
|
+
*/
|
|
45
|
+
export const CollectionMemberSchema = z.discriminatedUnion("kind", [
|
|
46
|
+
CollectionMemberOrgSchema.extend({ kind: z.literal("org") }),
|
|
47
|
+
CollectionMemberProductSchema.extend({ kind: z.literal("product") }),
|
|
48
|
+
]);
|
|
49
|
+
/**
|
|
50
|
+
* Row on `GET /v1/collections`. `previewMembers` (the new mixed-kind preview)
|
|
51
|
+
* is the first few visible members so the list page can render inline avatars
|
|
52
|
+
* without a second round trip. `previewOrgs` is the legacy org-only preview,
|
|
53
|
+
* retained for back-compat — clients should migrate to `previewMembers`.
|
|
54
|
+
*/
|
|
55
|
+
export const CollectionListItemSchema = z.object({
|
|
56
|
+
slug: z.string(),
|
|
57
|
+
name: z.string(),
|
|
58
|
+
description: z.string().nullable(),
|
|
59
|
+
memberCount: z.number().int().min(0),
|
|
60
|
+
/** Whether the collection is promoted on the homepage. Filterable via `?featured=1`. */
|
|
61
|
+
isFeatured: z.boolean(),
|
|
62
|
+
/** Mixed-kind preview (org + product). Cap matches `previewOrgs`. */
|
|
63
|
+
previewMembers: z.array(CollectionMemberSchema).optional(),
|
|
64
|
+
/** Legacy org-only preview. Populated with the org-kind subset of `previewMembers`. */
|
|
65
|
+
previewOrgs: z.array(CollectionMemberOrgSchema).optional(),
|
|
66
|
+
});
|
|
67
|
+
export const CollectionListResponseSchema = z.array(CollectionListItemSchema);
|
|
68
|
+
/**
|
|
69
|
+
* Returned by `GET /v1/collections/:slug`.
|
|
70
|
+
*
|
|
71
|
+
* `members` is the mixed-kind canonical list. `orgs` is the legacy org-only
|
|
72
|
+
* field, populated with the org-kind subset of `members` for back-compat —
|
|
73
|
+
* new clients should consume `members`.
|
|
74
|
+
*/
|
|
75
|
+
export const CollectionDetailSchema = z.object({
|
|
76
|
+
slug: z.string(),
|
|
77
|
+
name: z.string(),
|
|
78
|
+
description: z.string().nullable(),
|
|
79
|
+
/** Whether the collection is promoted on the homepage. */
|
|
80
|
+
isFeatured: z.boolean(),
|
|
81
|
+
/** Per-collection enable toggle for the nightly daily-summary generation. */
|
|
82
|
+
dailySummaryEnabled: z.boolean(),
|
|
83
|
+
/** Whether the collection generates weekly digests (gates the email-subscribe toggle). */
|
|
84
|
+
weeklyDigestEnabled: z.boolean(),
|
|
85
|
+
members: z.array(CollectionMemberSchema),
|
|
86
|
+
/** @deprecated Use `members`. Org-only subset, kept for back-compat. */
|
|
87
|
+
orgs: z.array(CollectionMemberOrgSchema),
|
|
88
|
+
});
|
|
89
|
+
/**
|
|
90
|
+
* Cross-member release feed row on `GET /v1/collections/:slug/releases`. Same
|
|
91
|
+
* shape as `OrgReleaseItem` plus the origin `org` block (and optional
|
|
92
|
+
* `product`) so the web's release card can render it identically. `source.type`
|
|
93
|
+
* stays as `z.string()` because the SQL passes the column through unvalidated —
|
|
94
|
+
* tightening to the SourceType enum would break pass-through code.
|
|
95
|
+
*/
|
|
96
|
+
export const CollectionReleaseItemSchema = ReleaseItemSchema.extend({
|
|
97
|
+
id: z.string(),
|
|
98
|
+
source: z.object({ slug: z.string(), name: z.string(), type: z.string() }),
|
|
99
|
+
org: z.object({ slug: z.string(), name: z.string() }),
|
|
100
|
+
/**
|
|
101
|
+
* Product the release belongs to, if the source is bound to one. `null` for
|
|
102
|
+
* orgs without products or standalone sources. Optional on the wire so older
|
|
103
|
+
* workers mid-rollout (and hand-constructed test fixtures) don't trip the
|
|
104
|
+
* typecheck — clients should treat missing and `null` identically.
|
|
105
|
+
*/
|
|
106
|
+
product: z.object({ slug: z.string(), name: z.string() }).nullable().optional(),
|
|
107
|
+
/**
|
|
108
|
+
* Server-resolved grouping identity — `COALESCE(product.slug, source.slug)` /
|
|
109
|
+
* `COALESCE(product.name, source.name)`. The web release feeds key and label
|
|
110
|
+
* SDK/package-cluster rollups on these instead of reconstructing
|
|
111
|
+
* `product ?? source` client-side. Optional on the wire: older workers omit
|
|
112
|
+
* them, so clients must fall back to deriving from `product ?? source`. Never
|
|
113
|
+
* null when present (`source` is always set). #1234
|
|
114
|
+
*/
|
|
115
|
+
groupSlug: z.string().optional(),
|
|
116
|
+
groupName: z.string().optional(),
|
|
117
|
+
});
|
|
118
|
+
/** Cursor pagination shape matches `/v1/orgs/:slug/releases`. */
|
|
119
|
+
export const CollectionFeedPaginationSchema = z.object({
|
|
120
|
+
nextCursor: z.string().nullable(),
|
|
121
|
+
limit: z.number().int().min(1),
|
|
122
|
+
});
|
|
123
|
+
export const CollectionReleasesResponseSchema = z.object({
|
|
124
|
+
releases: z.array(CollectionReleaseItemSchema),
|
|
125
|
+
pagination: CollectionFeedPaginationSchema,
|
|
126
|
+
});
|
|
127
|
+
/**
|
|
128
|
+
* Bare row returned by `POST /v1/collections` and `PATCH /v1/collections/:slug`.
|
|
129
|
+
* Mirrors the `collections` table columns (no member rollup — that's a
|
|
130
|
+
* separate detail call).
|
|
131
|
+
*/
|
|
132
|
+
export const CollectionRowSchema = z.object({
|
|
133
|
+
id: z.string(),
|
|
134
|
+
slug: z.string(),
|
|
135
|
+
name: z.string(),
|
|
136
|
+
description: z.string().nullable(),
|
|
137
|
+
isFeatured: z.boolean(),
|
|
138
|
+
/** Per-collection enable toggle for the nightly daily-summary generation. */
|
|
139
|
+
dailySummaryEnabled: z.boolean(),
|
|
140
|
+
createdAt: z.string(),
|
|
141
|
+
updatedAt: z.string(),
|
|
142
|
+
});
|
|
143
|
+
/**
|
|
144
|
+
* Body for `POST /v1/collections`. `slug` derives from `name` via `toSlug()`
|
|
145
|
+
* when omitted. Slug shape is lowercased alnum + hyphens, alnum-start, 2–64
|
|
146
|
+
* chars — enforced server-side.
|
|
147
|
+
*/
|
|
148
|
+
export const CreateCollectionRequestSchema = z.object({
|
|
149
|
+
slug: z.string().optional(),
|
|
150
|
+
name: z.string().min(1).max(200),
|
|
151
|
+
description: z.string().max(2000).nullable().optional(),
|
|
152
|
+
});
|
|
153
|
+
/** Body for `PATCH /v1/collections/:slug`. All fields optional; slug rename allowed. */
|
|
154
|
+
export const UpdateCollectionRequestSchema = z.object({
|
|
155
|
+
slug: z.string().optional(),
|
|
156
|
+
name: z.string().min(1).max(200).optional(),
|
|
157
|
+
description: z.string().max(2000).nullable().optional(),
|
|
158
|
+
/** Promote / demote the collection on the homepage. */
|
|
159
|
+
isFeatured: z.boolean().optional(),
|
|
160
|
+
/** Enable or disable the nightly daily-summary generation for this collection. */
|
|
161
|
+
dailySummaryEnabled: z.boolean().optional(),
|
|
162
|
+
/** Enable or disable the nightly weekly-digest generation for this collection (on by default for new collections). */
|
|
163
|
+
weeklyDigestEnabled: z.boolean().optional(),
|
|
164
|
+
});
|
|
165
|
+
/**
|
|
166
|
+
* One member entry accepted by the member-write endpoints.
|
|
167
|
+
*
|
|
168
|
+
* Exactly one of `orgId` / `orgSlug` / `productId` / `productSlug` must be
|
|
169
|
+
* present. When both an id and a slug are supplied for the same kind, the id
|
|
170
|
+
* wins. Mixing kinds (e.g. `orgId` + `productSlug`) is rejected by the handler.
|
|
171
|
+
*
|
|
172
|
+
* Product slug is resolved within an org — supply either `productId`
|
|
173
|
+
* (`prod_…`, globally unique) or pair `productSlug` with `orgSlug`/`orgId`.
|
|
174
|
+
* `productSlug` alone is rejected.
|
|
175
|
+
*/
|
|
176
|
+
export const CollectionMemberInputSchema = z.object({
|
|
177
|
+
orgId: z.string().optional(),
|
|
178
|
+
orgSlug: z.string().optional(),
|
|
179
|
+
productId: z.string().optional(),
|
|
180
|
+
productSlug: z.string().optional(),
|
|
181
|
+
/** Authoring position (default 0). For PUT, omit to use the array index. */
|
|
182
|
+
position: z.number().int().optional(),
|
|
183
|
+
});
|
|
184
|
+
/** Body for `POST /v1/collections/:slug/members`. */
|
|
185
|
+
export const AddCollectionMemberRequestSchema = CollectionMemberInputSchema;
|
|
186
|
+
/**
|
|
187
|
+
* Body for `PUT /v1/collections/:slug/members`. Replaces the full membership
|
|
188
|
+
* atomically. The field is still named `orgs` for back-compat — it accepts
|
|
189
|
+
* any `CollectionMemberInput`, org or product.
|
|
190
|
+
*/
|
|
191
|
+
export const ReplaceCollectionMembersRequestSchema = z.object({
|
|
192
|
+
orgs: z.array(CollectionMemberInputSchema),
|
|
193
|
+
});
|
|
194
|
+
/**
|
|
195
|
+
* Resolved member returned by `PUT /v1/collections/:slug/members` and `POST
|
|
196
|
+
* /v1/collections/:slug/members`. `kind` discriminates which id field is
|
|
197
|
+
* populated. `orgId` is also set on legacy callers that only used org
|
|
198
|
+
* membership — for clean dispatch, dispatch on `kind`.
|
|
199
|
+
*/
|
|
200
|
+
export const ResolvedCollectionMemberSchema = z.object({
|
|
201
|
+
kind: z.enum(["org", "product"]),
|
|
202
|
+
orgId: z.string().optional(),
|
|
203
|
+
productId: z.string().optional(),
|
|
204
|
+
position: z.number().int(),
|
|
205
|
+
});
|
|
206
|
+
/** Response from `PUT /v1/collections/:slug/members`. */
|
|
207
|
+
export const ReplaceCollectionMembersResponseSchema = z.object({
|
|
208
|
+
collectionSlug: z.string(),
|
|
209
|
+
members: z.array(ResolvedCollectionMemberSchema),
|
|
210
|
+
});
|
|
211
|
+
/**
|
|
212
|
+
* Response from `POST /v1/collections/:slug/members`. `orgId` stays populated
|
|
213
|
+
* for org-kind members so existing CLI callers don't break; `kind` +
|
|
214
|
+
* `productId` are the canonical fields for new code.
|
|
215
|
+
*/
|
|
216
|
+
export const AddCollectionMemberResponseSchema = z.object({
|
|
217
|
+
collectionSlug: z.string(),
|
|
218
|
+
kind: z.enum(["org", "product"]),
|
|
219
|
+
orgId: z.string().optional(),
|
|
220
|
+
productId: z.string().optional(),
|
|
221
|
+
position: z.number().int(),
|
|
222
|
+
});
|
|
223
|
+
/** One daily summary row returned by `GET /v1/collections/:slug/daily-summaries`. */
|
|
224
|
+
export const CollectionDailySummarySchema = z.object({
|
|
225
|
+
/** Eastern calendar day, YYYY-MM-DD. */
|
|
226
|
+
date: z.string(),
|
|
227
|
+
title: z.string(),
|
|
228
|
+
summary: z.string(),
|
|
229
|
+
takeaways: z.array(z.string()),
|
|
230
|
+
releaseCount: z.number().int().nonnegative(),
|
|
231
|
+
});
|
|
232
|
+
/** Response envelope for `GET /v1/collections/:slug/daily-summaries`. */
|
|
233
|
+
export const CollectionDailySummariesResponseSchema = z.object({
|
|
234
|
+
summaries: z.array(CollectionDailySummarySchema),
|
|
235
|
+
});
|
|
236
|
+
// ── Weekly digests ────────────────────────────────────────────────
|
|
237
|
+
/** List row on `GET /v1/collections/:slug/digests` — newest-first, no body. */
|
|
238
|
+
export const CollectionWeeklyDigestListItemSchema = z.object({
|
|
239
|
+
id: z.string(),
|
|
240
|
+
/** ET Monday starting the covered week, YYYY-MM-DD. */
|
|
241
|
+
weekStart: z.string(),
|
|
242
|
+
title: z.string(),
|
|
243
|
+
intro: z.string(),
|
|
244
|
+
releaseCount: z.number().int().nonnegative(),
|
|
245
|
+
generatedAt: z.string(),
|
|
246
|
+
});
|
|
247
|
+
/** Cursor pagination shape matches the other paginated list surfaces. */
|
|
248
|
+
export const CollectionWeeklyDigestsResponseSchema = z.object({
|
|
249
|
+
digests: z.array(CollectionWeeklyDigestListItemSchema),
|
|
250
|
+
pagination: CollectionFeedPaginationSchema,
|
|
251
|
+
});
|
|
252
|
+
/** Minimal, server-resolved release info for a digest's "Releases covered" list. */
|
|
253
|
+
export const DigestCoveredReleaseSchema = z.object({
|
|
254
|
+
id: z.string(),
|
|
255
|
+
title: z.string(),
|
|
256
|
+
/** Internal `/release/*` path — fallback link only (see `url`). */
|
|
257
|
+
path: z.string(),
|
|
258
|
+
/** Upstream source URL. Primary link target when http(s); optional for older servers. */
|
|
259
|
+
url: z.string().nullable().optional(),
|
|
260
|
+
org: z.object({
|
|
261
|
+
slug: z.string(),
|
|
262
|
+
name: z.string(),
|
|
263
|
+
avatarUrl: z.string().nullable().optional(),
|
|
264
|
+
githubHandle: z.string().nullable().optional(),
|
|
265
|
+
}),
|
|
266
|
+
/** Product the release's source belongs to, when it has one. */
|
|
267
|
+
product: z.object({ slug: z.string(), name: z.string() }).nullable().optional(),
|
|
268
|
+
/**
|
|
269
|
+
* AI-scored importance 1–5. Null when unscored; optional for older
|
|
270
|
+
* servers. Cheap to project on the existing hydrate — powers the flame
|
|
271
|
+
* marker on the collapsed "Releases covered" list.
|
|
272
|
+
*/
|
|
273
|
+
importance: ImportanceScoreSchema,
|
|
274
|
+
/**
|
|
275
|
+
* Per-category item counts from the AI release-content pass. Null when the
|
|
276
|
+
* row hasn't been summarized; optional for older servers. Powers the
|
|
277
|
+
* digest page's week-at-a-glance treemap.
|
|
278
|
+
*/
|
|
279
|
+
composition: ReleaseCompositionSchema.nullable().optional(),
|
|
280
|
+
/**
|
|
281
|
+
* ISO publish timestamp, as stored. Null when the source gave none;
|
|
282
|
+
* optional for older servers. A date-only source is stored at exactly
|
|
283
|
+
* `T00:00:00.000Z`. Powers the digest week replay's day placement.
|
|
284
|
+
*/
|
|
285
|
+
publishedAt: z.string().nullable().optional(),
|
|
286
|
+
});
|
|
287
|
+
/** One `###` section of a digest body, parsed server-side. */
|
|
288
|
+
export const DigestSectionSchema = z.object({
|
|
289
|
+
heading: z.string(),
|
|
290
|
+
/** Slug the digest page renders as the heading's `id` — link target `#anchor`. */
|
|
291
|
+
anchor: z.string(),
|
|
292
|
+
/** First sentence of the section, plain text. */
|
|
293
|
+
lede: z.string(),
|
|
294
|
+
/** Cited release ids in first-seen order; resolve against the detail's `releases`. */
|
|
295
|
+
releaseIds: z.array(z.string()),
|
|
296
|
+
/**
|
|
297
|
+
* The section's cited releases, resolved server-side in `releaseIds` order.
|
|
298
|
+
* Ids that no longer resolve are dropped, so `releases.length` can be less
|
|
299
|
+
* than `releaseIds.length`. Optional for older servers.
|
|
300
|
+
*/
|
|
301
|
+
releases: z.array(DigestCoveredReleaseSchema).optional(),
|
|
302
|
+
});
|
|
303
|
+
/** Full row returned by `GET /v1/collections/:slug/digests/:weekStart` and
|
|
304
|
+
* `GET /v1/collections/:slug/digests/latest`. */
|
|
305
|
+
export const CollectionWeeklyDigestDetailSchema = z.object({
|
|
306
|
+
id: z.string(),
|
|
307
|
+
weekStart: z.string(),
|
|
308
|
+
title: z.string(),
|
|
309
|
+
intro: z.string(),
|
|
310
|
+
body: z.string(),
|
|
311
|
+
releaseIds: z.array(z.string()),
|
|
312
|
+
releaseCount: z.number().int().nonnegative(),
|
|
313
|
+
generatedAt: z.string(),
|
|
314
|
+
/** Server-resolved minimal release info for every id in `releaseIds` that
|
|
315
|
+
* still resolves — a release deleted/suppressed after generation is
|
|
316
|
+
* dropped rather than surfaced as a dead link. */
|
|
317
|
+
releases: z.array(DigestCoveredReleaseSchema),
|
|
318
|
+
/** Parsed `###` sections. Optional for older servers. */
|
|
319
|
+
sections: z.array(DigestSectionSchema).optional(),
|
|
320
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const DatasetDescriptionSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
description: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
/** Stored under source.metadata.dataset. Null removes the override. */
|
|
7
|
+
export declare const SourceDatasetSettingsSchema: z.ZodObject<{
|
|
8
|
+
name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
description: z.ZodOptional<z.ZodString>;
|
|
10
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
export type SourceDatasetSettings = z.infer<typeof SourceDatasetSettingsSchema>;
|
|
13
|
+
export type DatasetDescription = z.infer<typeof DatasetDescriptionSchema>;
|
|
14
|
+
export interface AdminDatasetSource {
|
|
15
|
+
id: string;
|
|
16
|
+
slug: string;
|
|
17
|
+
name: string;
|
|
18
|
+
orgSlug: string | null;
|
|
19
|
+
orgName: string | null;
|
|
20
|
+
defaultEnabled: boolean;
|
|
21
|
+
settings: SourceDatasetSettings | null;
|
|
22
|
+
effective: DatasetDescription | null;
|
|
23
|
+
blockedReasons: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface AdminDatasetsResponse {
|
|
26
|
+
sources: AdminDatasetSource[];
|
|
27
|
+
pagination: {
|
|
28
|
+
page: number;
|
|
29
|
+
limit: number;
|
|
30
|
+
hasMore: boolean;
|
|
31
|
+
};
|
|
32
|
+
query: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=datasets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../src/schemas/datasets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;iBAGnC,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,2BAA2B;;;;kBAI7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const DatasetDescriptionSchema = z.object({
|
|
3
|
+
name: z.string().trim().min(1).max(200),
|
|
4
|
+
description: z.string().trim().min(50).max(5000),
|
|
5
|
+
});
|
|
6
|
+
/** Stored under source.metadata.dataset. Null removes the override. */
|
|
7
|
+
export const SourceDatasetSettingsSchema = DatasetDescriptionSchema.partial()
|
|
8
|
+
.extend({
|
|
9
|
+
enabled: z.boolean().optional(),
|
|
10
|
+
})
|
|
11
|
+
.strict();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ErrorType, type ErrorCode } from "@buildinternet/releases-core/errors";
|
|
3
|
+
/**
|
|
4
|
+
* The one on-the-wire error shape. `type` is constrained (documents the
|
|
5
|
+
* contract, powers OpenAPI); `code` is an open string so a new server code an
|
|
6
|
+
* older client doesn't recognize still parses. The throwable hierarchy in
|
|
7
|
+
* `@releases/lib/releases-error` serializes to this via `toWire()`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const errorEnvelopeSchema: z.ZodObject<{
|
|
10
|
+
error: z.ZodObject<{
|
|
11
|
+
code: z.ZodString;
|
|
12
|
+
type: z.ZodEnum<{
|
|
13
|
+
conflict: "conflict";
|
|
14
|
+
forbidden: "forbidden";
|
|
15
|
+
insufficient_scope: "insufficient_scope";
|
|
16
|
+
internal: "internal";
|
|
17
|
+
not_found: "not_found";
|
|
18
|
+
rate_limited: "rate_limited";
|
|
19
|
+
too_large: "too_large";
|
|
20
|
+
unauthorized: "unauthorized";
|
|
21
|
+
unavailable: "unavailable";
|
|
22
|
+
upstream: "upstream";
|
|
23
|
+
validation: "validation";
|
|
24
|
+
}>;
|
|
25
|
+
message: z.ZodString;
|
|
26
|
+
details: z.ZodOptional<z.ZodUnknown>;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export type ErrorEnvelope = z.infer<typeof errorEnvelopeSchema>;
|
|
30
|
+
export interface DecodedApiError {
|
|
31
|
+
code: string;
|
|
32
|
+
type: ErrorType;
|
|
33
|
+
message: string;
|
|
34
|
+
details?: unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse an API error body into a typed, normalized shape. Forward-compatible: a
|
|
38
|
+
* malformed body or an unknown `type` degrades to `internal` and never throws.
|
|
39
|
+
*/
|
|
40
|
+
export declare function decodeApiError(body: unknown): DecodedApiError;
|
|
41
|
+
/** True if `body` is an API error envelope; if `code` is given, also matches it. */
|
|
42
|
+
export declare function isApiError(body: unknown, code?: ErrorCode): boolean;
|
|
43
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/schemas/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAElG;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;iBAwB7B,CAAC;AAEJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAehE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CAY7D;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAInE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ERROR_TYPES } from "@buildinternet/releases-core/errors";
|
|
3
|
+
/**
|
|
4
|
+
* The one on-the-wire error shape. `type` is constrained (documents the
|
|
5
|
+
* contract, powers OpenAPI); `code` is an open string so a new server code an
|
|
6
|
+
* older client doesn't recognize still parses. The throwable hierarchy in
|
|
7
|
+
* `@releases/lib/releases-error` serializes to this via `toWire()`.
|
|
8
|
+
*/
|
|
9
|
+
export const errorEnvelopeSchema = z
|
|
10
|
+
.object({
|
|
11
|
+
error: z.object({
|
|
12
|
+
code: z
|
|
13
|
+
.string()
|
|
14
|
+
.describe("Stable, specific machine code (e.g. `not_found`, `rate_limited`). Never reworded once shipped, but open-ended — branch defensively on codes you don't recognize."),
|
|
15
|
+
type: z
|
|
16
|
+
.enum(ERROR_TYPES)
|
|
17
|
+
.describe("Coarse category from a fixed set; determines the HTTP status. Safe to switch on."),
|
|
18
|
+
message: z.string().describe("Human-readable explanation. May change; do not parse."),
|
|
19
|
+
details: z
|
|
20
|
+
.unknown()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Optional structured context carried by select codes (e.g. `database_not_initialized`)."),
|
|
23
|
+
}),
|
|
24
|
+
})
|
|
25
|
+
.describe("Standardized error response — every non-2xx response uses this shape. Switch on `error.type` (fixed set → HTTP status) or match `error.code` (specific, stable). See https://releases.sh/docs/api/errors.");
|
|
26
|
+
/**
|
|
27
|
+
* Lenient variant used ONLY for decode: `type` is left open so an unknown
|
|
28
|
+
* category (older client, newer server) does not reject.
|
|
29
|
+
*/
|
|
30
|
+
const lenientEnvelopeSchema = z.object({
|
|
31
|
+
error: z.object({
|
|
32
|
+
code: z.string(),
|
|
33
|
+
type: z.string(),
|
|
34
|
+
message: z.string(),
|
|
35
|
+
details: z.unknown().optional(),
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Parse an API error body into a typed, normalized shape. Forward-compatible: a
|
|
40
|
+
* malformed body or an unknown `type` degrades to `internal` and never throws.
|
|
41
|
+
*/
|
|
42
|
+
export function decodeApiError(body) {
|
|
43
|
+
const parsed = lenientEnvelopeSchema.safeParse(body);
|
|
44
|
+
if (!parsed.success) {
|
|
45
|
+
return { code: "internal_error", type: "internal", message: "Unknown error" };
|
|
46
|
+
}
|
|
47
|
+
const { code, type, message, details } = parsed.data.error;
|
|
48
|
+
const normalizedType = ERROR_TYPES.includes(type)
|
|
49
|
+
? type
|
|
50
|
+
: "internal";
|
|
51
|
+
return details === undefined
|
|
52
|
+
? { code, type: normalizedType, message }
|
|
53
|
+
: { code, type: normalizedType, message, details };
|
|
54
|
+
}
|
|
55
|
+
/** True if `body` is an API error envelope; if `code` is given, also matches it. */
|
|
56
|
+
export function isApiError(body, code) {
|
|
57
|
+
const parsed = lenientEnvelopeSchema.safeParse(body);
|
|
58
|
+
if (!parsed.success)
|
|
59
|
+
return false;
|
|
60
|
+
return code === undefined || parsed.data.error.code === code;
|
|
61
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Feedback category — mirrors `FEEDBACK_TYPES` in `@buildinternet/releases-core/schema`. */
|
|
3
|
+
export declare const FeedbackTypeSchema: z.ZodEnum<{
|
|
4
|
+
bug: "bug";
|
|
5
|
+
general: "general";
|
|
6
|
+
idea: "idea";
|
|
7
|
+
other: "other";
|
|
8
|
+
}>;
|
|
9
|
+
/** Triage lifecycle — mirrors `FEEDBACK_STATUSES` in `@buildinternet/releases-core/schema`. */
|
|
10
|
+
export declare const FeedbackStatusSchema: z.ZodEnum<{
|
|
11
|
+
closed: "closed";
|
|
12
|
+
new: "new";
|
|
13
|
+
triaged: "triaged";
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* One submitted feedback row, as returned by `GET /v1/admin/feedback` and by
|
|
17
|
+
* the triage write-path (`PATCH /v1/feedback/:id` echoes the updated row).
|
|
18
|
+
* `archived` soft-removes the row from the default admin read view and is
|
|
19
|
+
* orthogonal to triage `status` — a row can be `closed` and visible, or `new`
|
|
20
|
+
* and archived. `createdAt` is epoch milliseconds.
|
|
21
|
+
*/
|
|
22
|
+
export declare const FeedbackItemSchema: z.ZodObject<{
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
createdAt: z.ZodNumber;
|
|
25
|
+
message: z.ZodString;
|
|
26
|
+
contact: z.ZodNullable<z.ZodString>;
|
|
27
|
+
type: z.ZodEnum<{
|
|
28
|
+
bug: "bug";
|
|
29
|
+
general: "general";
|
|
30
|
+
idea: "idea";
|
|
31
|
+
other: "other";
|
|
32
|
+
}>;
|
|
33
|
+
status: z.ZodEnum<{
|
|
34
|
+
closed: "closed";
|
|
35
|
+
new: "new";
|
|
36
|
+
triaged: "triaged";
|
|
37
|
+
}>;
|
|
38
|
+
archived: z.ZodBoolean;
|
|
39
|
+
cliVersion: z.ZodNullable<z.ZodString>;
|
|
40
|
+
clientKind: z.ZodString;
|
|
41
|
+
anonId: z.ZodNullable<z.ZodString>;
|
|
42
|
+
os: z.ZodNullable<z.ZodString>;
|
|
43
|
+
arch: z.ZodNullable<z.ZodString>;
|
|
44
|
+
runtime: z.ZodNullable<z.ZodString>;
|
|
45
|
+
surface: z.ZodString;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
/**
|
|
48
|
+
* `GET /v1/admin/feedback` — cursor-paginated, newest-first. Archived rows are
|
|
49
|
+
* hidden unless the request passes `?includeArchived=true`.
|
|
50
|
+
*/
|
|
51
|
+
export declare const FeedbackListResponseSchema: z.ZodObject<{
|
|
52
|
+
items: z.ZodArray<z.ZodObject<{
|
|
53
|
+
id: z.ZodString;
|
|
54
|
+
createdAt: z.ZodNumber;
|
|
55
|
+
message: z.ZodString;
|
|
56
|
+
contact: z.ZodNullable<z.ZodString>;
|
|
57
|
+
type: z.ZodEnum<{
|
|
58
|
+
bug: "bug";
|
|
59
|
+
general: "general";
|
|
60
|
+
idea: "idea";
|
|
61
|
+
other: "other";
|
|
62
|
+
}>;
|
|
63
|
+
status: z.ZodEnum<{
|
|
64
|
+
closed: "closed";
|
|
65
|
+
new: "new";
|
|
66
|
+
triaged: "triaged";
|
|
67
|
+
}>;
|
|
68
|
+
archived: z.ZodBoolean;
|
|
69
|
+
cliVersion: z.ZodNullable<z.ZodString>;
|
|
70
|
+
clientKind: z.ZodString;
|
|
71
|
+
anonId: z.ZodNullable<z.ZodString>;
|
|
72
|
+
os: z.ZodNullable<z.ZodString>;
|
|
73
|
+
arch: z.ZodNullable<z.ZodString>;
|
|
74
|
+
runtime: z.ZodNullable<z.ZodString>;
|
|
75
|
+
surface: z.ZodString;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
78
|
+
}, z.core.$strip>;
|
|
79
|
+
/**
|
|
80
|
+
* `PATCH /v1/feedback/:id` body — partial triage update. At least one field
|
|
81
|
+
* must be present; the response echoes the updated `FeedbackItem`.
|
|
82
|
+
*/
|
|
83
|
+
export declare const FeedbackUpdateBodySchema: z.ZodObject<{
|
|
84
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
85
|
+
closed: "closed";
|
|
86
|
+
new: "new";
|
|
87
|
+
triaged: "triaged";
|
|
88
|
+
}>>;
|
|
89
|
+
archived: z.ZodOptional<z.ZodBoolean>;
|
|
90
|
+
}, z.core.$strip>;
|
|
91
|
+
/** `DELETE /v1/feedback/:id` response — hard delete of a single row. */
|
|
92
|
+
export declare const FeedbackDeleteResponseSchema: z.ZodObject<{
|
|
93
|
+
deleted: z.ZodLiteral<true>;
|
|
94
|
+
id: z.ZodString;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
/** `POST /v1/feedback` field limits, shared with the handler's sanitizer. */
|
|
97
|
+
export declare const FEEDBACK_MESSAGE_MIN_CHARS = 5;
|
|
98
|
+
export declare const FEEDBACK_MESSAGE_MAX_CHARS = 4000;
|
|
99
|
+
export declare const FEEDBACK_CONTACT_MAX_CHARS = 200;
|
|
100
|
+
/**
|
|
101
|
+
* `POST /v1/feedback` body. Documentation shape: the handler sanitizes each
|
|
102
|
+
* field and coerces unknown `type` / `clientKind` values to their defaults
|
|
103
|
+
* rather than rejecting them; only a short or missing `message` is a 400.
|
|
104
|
+
*/
|
|
105
|
+
export declare const FeedbackSubmitBodySchema: z.ZodObject<{
|
|
106
|
+
message: z.ZodString;
|
|
107
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
108
|
+
bug: "bug";
|
|
109
|
+
general: "general";
|
|
110
|
+
idea: "idea";
|
|
111
|
+
other: "other";
|
|
112
|
+
}>>;
|
|
113
|
+
contact: z.ZodOptional<z.ZodString>;
|
|
114
|
+
clientKind: z.ZodOptional<z.ZodEnum<{
|
|
115
|
+
external: "external";
|
|
116
|
+
"internal-agent": "internal-agent";
|
|
117
|
+
"internal-ci": "internal-ci";
|
|
118
|
+
"internal-dev": "internal-dev";
|
|
119
|
+
"internal-sandbox": "internal-sandbox";
|
|
120
|
+
"mcp-stdio": "mcp-stdio";
|
|
121
|
+
}>>;
|
|
122
|
+
surface: z.ZodOptional<z.ZodString>;
|
|
123
|
+
cliVersion: z.ZodOptional<z.ZodString>;
|
|
124
|
+
anonId: z.ZodOptional<z.ZodString>;
|
|
125
|
+
os: z.ZodOptional<z.ZodString>;
|
|
126
|
+
arch: z.ZodOptional<z.ZodString>;
|
|
127
|
+
runtime: z.ZodOptional<z.ZodString>;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
/** `POST /v1/feedback` 202 response. */
|
|
130
|
+
export declare const FeedbackSubmitResponseSchema: z.ZodObject<{
|
|
131
|
+
ok: z.ZodLiteral<true>;
|
|
132
|
+
id: z.ZodString;
|
|
133
|
+
}, z.core.$strip>;
|
|
134
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/schemas/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB;;;;;EAAyB,CAAC;AAEzD,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB;;;;EAA4B,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;iBAe7B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;;;iBAGnC,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AAEH,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;iBAWnC,CAAC;AAEH,wCAAwC;AACxC,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC"}
|