founder-schema 0.5.0 → 0.7.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 +67 -0
- package/dist/access/permissions.d.ts +24 -2
- package/dist/access/permissions.d.ts.map +1 -1
- package/dist/access/permissions.js +9 -0
- package/dist/access/permissions.js.map +1 -1
- package/dist/core/common.d.ts +44 -0
- package/dist/core/common.d.ts.map +1 -1
- package/dist/core/common.js +76 -0
- package/dist/core/common.js.map +1 -1
- package/dist/core/errors.d.ts +29 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +52 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/limits.d.ts +53 -0
- package/dist/core/limits.d.ts.map +1 -1
- package/dist/core/limits.js +57 -0
- package/dist/core/limits.js.map +1 -1
- package/dist/core/responses.d.ts +43 -0
- package/dist/core/responses.d.ts.map +1 -1
- package/dist/core/responses.js +3 -1
- package/dist/core/responses.js.map +1 -1
- package/dist/core/validation.d.ts +14 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +14 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/domains/audit/audit.d.ts +4 -0
- package/dist/domains/audit/audit.d.ts.map +1 -1
- package/dist/domains/audit/audit.js +6 -3
- package/dist/domains/audit/audit.js.map +1 -1
- package/dist/domains/contributions/contributions.d.ts +165 -0
- package/dist/domains/contributions/contributions.d.ts.map +1 -0
- package/dist/domains/contributions/contributions.js +103 -0
- package/dist/domains/contributions/contributions.js.map +1 -0
- package/dist/domains/discover/discover.d.ts +5 -0
- package/dist/domains/discover/discover.d.ts.map +1 -1
- package/dist/domains/discover/discover.js +3 -13
- package/dist/domains/discover/discover.js.map +1 -1
- package/dist/domains/feed/feed.d.ts +231 -7
- package/dist/domains/feed/feed.d.ts.map +1 -1
- package/dist/domains/feed/feed.js +86 -18
- package/dist/domains/feed/feed.js.map +1 -1
- package/dist/domains/media/media.d.ts +30 -5
- package/dist/domains/media/media.d.ts.map +1 -1
- package/dist/domains/media/media.js +32 -6
- package/dist/domains/media/media.js.map +1 -1
- package/dist/domains/members/members.d.ts +5 -5
- package/dist/domains/moderation/moderation.d.ts +53 -3
- package/dist/domains/moderation/moderation.d.ts.map +1 -1
- package/dist/domains/moderation/moderation.js +47 -8
- package/dist/domains/moderation/moderation.js.map +1 -1
- package/dist/domains/notifications/notifications.d.ts +212 -0
- package/dist/domains/notifications/notifications.d.ts.map +1 -0
- package/dist/domains/notifications/notifications.js +148 -0
- package/dist/domains/notifications/notifications.js.map +1 -0
- package/dist/domains/onboarding/onboarding.d.ts +10 -13
- package/dist/domains/onboarding/onboarding.d.ts.map +1 -1
- package/dist/domains/onboarding/onboarding.js +6 -5
- package/dist/domains/onboarding/onboarding.js.map +1 -1
- package/dist/domains/products/products.d.ts +1464 -0
- package/dist/domains/products/products.d.ts.map +1 -0
- package/dist/domains/products/products.js +474 -0
- package/dist/domains/products/products.js.map +1 -0
- package/dist/domains/profile/founder-profile.d.ts +43 -0
- package/dist/domains/profile/founder-profile.d.ts.map +1 -1
- package/dist/domains/profile/founder-profile.js +48 -0
- package/dist/domains/profile/founder-profile.js.map +1 -1
- package/dist/domains/reviews/reviews.d.ts +184 -0
- package/dist/domains/reviews/reviews.d.ts.map +1 -0
- package/dist/domains/reviews/reviews.js +99 -0
- package/dist/domains/reviews/reviews.js.map +1 -0
- package/dist/domains/uploads/uploads.d.ts +2 -0
- package/dist/domains/uploads/uploads.d.ts.map +1 -1
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,1464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* founder-schema — Products: what founders build, and the help around it
|
|
3
|
+
*
|
|
4
|
+
* THE IDEA (the user, 2026-10-06): founders help each other with their
|
|
5
|
+
* products. A founder adds what they build; a post or poll can say which of
|
|
6
|
+
* their products it is about and what they want ("testers wanted"); every
|
|
7
|
+
* comment on it becomes that product's feedback; the community reviews and
|
|
8
|
+
* upvotes it; and the help a member gives is recognised in their contribution
|
|
9
|
+
* score.
|
|
10
|
+
*
|
|
11
|
+
* THE COMPANY STAYS THE PROFILE'S `venture` (one per founder). There are no
|
|
12
|
+
* company pages: co-founders join a PRODUCT's team, as Product Hunt lists a
|
|
13
|
+
* product's makers. Revisit only if one team running many products finds
|
|
14
|
+
* re-inviting each time tedious.
|
|
15
|
+
*
|
|
16
|
+
* VISIBILITY, two states (the user's ruling): `unlisted` by default, a page
|
|
17
|
+
* anyone signed in can open by its link and that shows on its team's profiles;
|
|
18
|
+
* `listed`, also in Discover. Listing needs a logo, a tagline and at least one
|
|
19
|
+
* screenshot (`PRODUCT_NOT_LISTABLE` names what is missing), so Discover never
|
|
20
|
+
* shows an empty card.
|
|
21
|
+
*
|
|
22
|
+
* THE TEAM: an owner, co-founders and team members, joined by invitation and
|
|
23
|
+
* acceptance (nobody is put on a team without saying yes), with no limit on
|
|
24
|
+
* its size (the user's ruling). Who may do what:
|
|
25
|
+
*
|
|
26
|
+
* owner co-founder team
|
|
27
|
+
* edit, images, list, invite ✓ ✓
|
|
28
|
+
* tag posts, reply to reviews, ✓ ✓ ✓
|
|
29
|
+
* mark feedback, confirm testers
|
|
30
|
+
* change roles, remove, hand over ✓
|
|
31
|
+
* archive, delete ✓
|
|
32
|
+
*
|
|
33
|
+
* A product's images belong to the product, not to whoever uploaded them.
|
|
34
|
+
* When the owner deletes their account the product passes to the longest-
|
|
35
|
+
* standing co-founder (else team member); with nobody left it is deleted.
|
|
36
|
+
*
|
|
37
|
+
* Routes (all signed in):
|
|
38
|
+
* GET /api/v1/products Discover: productDiscoverQuerySchema
|
|
39
|
+
* GET /api/v1/products/facets productFacetsSchema
|
|
40
|
+
* POST /api/v1/products createProductBodySchema -> IdResponse
|
|
41
|
+
* GET /api/v1/products/mine myProductsSchema
|
|
42
|
+
* GET /api/v1/products/invites productInvitesSchema
|
|
43
|
+
* PUT /api/v1/products/invites/:productId accept -> productSchema
|
|
44
|
+
* DELETE /api/v1/products/invites/:productId decline -> IdResponse
|
|
45
|
+
* GET /api/v1/products/by-member/:userId productCardPageSchema (their teams)
|
|
46
|
+
* GET /api/v1/products/:productId productSchema
|
|
47
|
+
* PATCH /api/v1/products/:productId updateProductBodySchema -> productSchema
|
|
48
|
+
* DELETE /api/v1/products/:productId -> IdResponse (owner)
|
|
49
|
+
* PUT /api/v1/products/:productId/logo setProductLogoBodySchema -> productSchema
|
|
50
|
+
* DELETE /api/v1/products/:productId/logo -> productSchema
|
|
51
|
+
* PUT /api/v1/products/:productId/screenshots setProductScreenshotsBodySchema -> productSchema
|
|
52
|
+
* PUT /api/v1/products/:productId/visibility setProductVisibilityBodySchema -> productSchema
|
|
53
|
+
* PUT /api/v1/products/:productId/status setProductStatusBodySchema -> productSchema
|
|
54
|
+
* GET /api/v1/products/:productId/team productTeamPageSchema
|
|
55
|
+
* GET /api/v1/products/:productId/invites productPendingInvitePageSchema (managers)
|
|
56
|
+
* POST /api/v1/products/:productId/invites inviteProductMemberBodySchema -> productPendingInviteSchema
|
|
57
|
+
* PUT /api/v1/products/:productId/team/:userId setProductMemberRoleBodySchema -> IdResponse
|
|
58
|
+
* (works on someone still invited too; refetch the team and the invites)
|
|
59
|
+
* DELETE /api/v1/products/:productId/team/:userId remove, cancel an invite, or leave -> IdResponse
|
|
60
|
+
* POST /api/v1/products/:productId/transfer transferProductBodySchema -> productSchema
|
|
61
|
+
* PUT /api/v1/products/:productId/upvote -> productUpvoteResponseSchema
|
|
62
|
+
* DELETE /api/v1/products/:productId/upvote -> productUpvoteResponseSchema
|
|
63
|
+
* GET /api/v1/products/:productId/posts FeedPage (posts and polls tagged with it)
|
|
64
|
+
* GET /api/v1/products/:productId/feedback productFeedbackQuerySchema -> productFeedbackPageSchema (feed)
|
|
65
|
+
* GET /api/v1/products/:productId/testers productTesterPageSchema
|
|
66
|
+
* PUT /api/v1/products/:productId/testers/:userId confirm -> productTesterSchema
|
|
67
|
+
* DELETE /api/v1/products/:productId/testers/:userId withdraw -> IdResponse
|
|
68
|
+
* POST /api/v1/products/:productId/report createReportBodySchema -> CreateReportResponse
|
|
69
|
+
* (reviews: `domains/reviews`)
|
|
70
|
+
*
|
|
71
|
+
* @module founder-schema/domains/products
|
|
72
|
+
*/
|
|
73
|
+
import { z } from 'zod';
|
|
74
|
+
/** Topics a product carries, as a post does: what interest matching reads. */
|
|
75
|
+
export declare const PRODUCT_TOPICS_MAX = 3;
|
|
76
|
+
/**
|
|
77
|
+
* Where the product is in its life. Its own list, deliberately not the
|
|
78
|
+
* venture's funding stage (`startupStageSchema`): "seed" says how a company is
|
|
79
|
+
* funded, "beta" says whether you can use the thing. Ordered earliest first.
|
|
80
|
+
*/
|
|
81
|
+
export declare const PRODUCT_STAGE_VALUES: readonly ["idea", "building", "beta", "live"];
|
|
82
|
+
export declare const productStageSchema: z.ZodEnum<{
|
|
83
|
+
idea: "idea";
|
|
84
|
+
building: "building";
|
|
85
|
+
beta: "beta";
|
|
86
|
+
live: "live";
|
|
87
|
+
}>;
|
|
88
|
+
export type ProductStage = z.infer<typeof productStageSchema>;
|
|
89
|
+
export declare const PRODUCT_PLATFORM_VALUES: readonly ["web", "ios", "android", "desktop", "browser_extension", "api", "hardware", "other"];
|
|
90
|
+
export declare const productPlatformSchema: z.ZodEnum<{
|
|
91
|
+
api: "api";
|
|
92
|
+
other: "other";
|
|
93
|
+
web: "web";
|
|
94
|
+
ios: "ios";
|
|
95
|
+
android: "android";
|
|
96
|
+
desktop: "desktop";
|
|
97
|
+
browser_extension: "browser_extension";
|
|
98
|
+
hardware: "hardware";
|
|
99
|
+
}>;
|
|
100
|
+
export type ProductPlatform = z.infer<typeof productPlatformSchema>;
|
|
101
|
+
/** `unlisted` (the default) or `listed` in Discover. See the module note. */
|
|
102
|
+
export declare const PRODUCT_VISIBILITY_VALUES: readonly ["unlisted", "listed"];
|
|
103
|
+
export declare const productVisibilitySchema: z.ZodEnum<{
|
|
104
|
+
unlisted: "unlisted";
|
|
105
|
+
listed: "listed";
|
|
106
|
+
}>;
|
|
107
|
+
export type ProductVisibility = z.infer<typeof productVisibilitySchema>;
|
|
108
|
+
/**
|
|
109
|
+
* `archived`: kept, readable and still on its team's profiles, but out of
|
|
110
|
+
* Discover and closed to new posts, reviews and upvotes. Restorable.
|
|
111
|
+
*/
|
|
112
|
+
export declare const PRODUCT_STATUS_VALUES: readonly ["active", "archived"];
|
|
113
|
+
export declare const productStatusSchema: z.ZodEnum<{
|
|
114
|
+
active: "active";
|
|
115
|
+
archived: "archived";
|
|
116
|
+
}>;
|
|
117
|
+
export type ProductStatus = z.infer<typeof productStatusSchema>;
|
|
118
|
+
/** One owner per product; see the module note for what each role may do. */
|
|
119
|
+
export declare const PRODUCT_TEAM_ROLE_VALUES: readonly ["owner", "cofounder", "team"];
|
|
120
|
+
export declare const productTeamRoleSchema: z.ZodEnum<{
|
|
121
|
+
team: "team";
|
|
122
|
+
owner: "owner";
|
|
123
|
+
cofounder: "cofounder";
|
|
124
|
+
}>;
|
|
125
|
+
export type ProductTeamRole = z.infer<typeof productTeamRoleSchema>;
|
|
126
|
+
/** The roles an invitation (or a role change) may give. Ownership is handed over, never invited. */
|
|
127
|
+
export declare const PRODUCT_INVITABLE_ROLE_VALUES: readonly ["cofounder", "team"];
|
|
128
|
+
export declare const productInvitableRoleSchema: z.ZodEnum<{
|
|
129
|
+
team: "team";
|
|
130
|
+
cofounder: "cofounder";
|
|
131
|
+
}>;
|
|
132
|
+
export type ProductInvitableRole = z.infer<typeof productInvitableRoleSchema>;
|
|
133
|
+
/**
|
|
134
|
+
* What a post or poll about a product ASKS of the community. Optional, and
|
|
135
|
+
* only with a product. Each ask keeps the product on that shelf of Discover
|
|
136
|
+
* for `PRODUCT_ASK_OPEN_DAYS`.
|
|
137
|
+
*
|
|
138
|
+
* feedback "tell me what you think"
|
|
139
|
+
* testers "try it": confirmed testers are recognised (`/testers`)
|
|
140
|
+
* launch "it is out"
|
|
141
|
+
* ideas "what should it do next"
|
|
142
|
+
*/
|
|
143
|
+
export declare const PRODUCT_ASK_VALUES: readonly ["feedback", "testers", "launch", "ideas"];
|
|
144
|
+
export declare const productAskSchema: z.ZodEnum<{
|
|
145
|
+
feedback: "feedback";
|
|
146
|
+
testers: "testers";
|
|
147
|
+
launch: "launch";
|
|
148
|
+
ideas: "ideas";
|
|
149
|
+
}>;
|
|
150
|
+
export type ProductAsk = z.infer<typeof productAskSchema>;
|
|
151
|
+
/**
|
|
152
|
+
* Discover's orders.
|
|
153
|
+
*
|
|
154
|
+
* trending recent upvotes, reviews and feedback, newer counting more
|
|
155
|
+
* (recomputed every 15 minutes). The default.
|
|
156
|
+
* new newest first by when it was FIRST listed (unlisting and
|
|
157
|
+
* listing again does not move it back to the top)
|
|
158
|
+
* top_rated best rated, pulled toward a neutral 3 stars by 5 imaginary
|
|
159
|
+
* reviews so a few perfect ratings cannot beat many excellent
|
|
160
|
+
* ones; only products with `REVIEW_AVERAGE_MIN_COUNT` reviews
|
|
161
|
+
*/
|
|
162
|
+
export declare const PRODUCT_SORT_VALUES: readonly ["trending", "new", "top_rated"];
|
|
163
|
+
export declare const productSortSchema: z.ZodEnum<{
|
|
164
|
+
trending: "trending";
|
|
165
|
+
new: "new";
|
|
166
|
+
top_rated: "top_rated";
|
|
167
|
+
}>;
|
|
168
|
+
export type ProductSort = z.infer<typeof productSortSchema>;
|
|
169
|
+
/**
|
|
170
|
+
* What listing needs (defined in core, beside the error details that carry it:
|
|
171
|
+
* `PRODUCT_NOT_LISTABLE` returns the missing ones in `details.missing`).
|
|
172
|
+
*/
|
|
173
|
+
export { PRODUCT_LISTING_REQUIREMENT_VALUES, type ProductListingRequirement, productListingRequirementSchema, } from '../../core/common.js';
|
|
174
|
+
/**
|
|
175
|
+
* Where to get it. Every link is member-typed, so every one is
|
|
176
|
+
* `httpUrlSchema`, and the store links must also be ON the store: the
|
|
177
|
+
* hostname is parsed and compared exactly (`httpUrlOnHosts`).
|
|
178
|
+
*/
|
|
179
|
+
export declare const productLinksSchema: z.ZodObject<{
|
|
180
|
+
website: z.ZodOptional<z.ZodURL>;
|
|
181
|
+
appStore: z.ZodOptional<z.ZodURL>;
|
|
182
|
+
playStore: z.ZodOptional<z.ZodURL>;
|
|
183
|
+
github: z.ZodOptional<z.ZodURL>;
|
|
184
|
+
}, z.core.$strip>;
|
|
185
|
+
export type ProductLinks = z.infer<typeof productLinksSchema>;
|
|
186
|
+
/**
|
|
187
|
+
* A demo video: a link to one YouTube VIDEO, played in the page (never
|
|
188
|
+
* uploaded). A channel or playlist link is refused: the page cannot embed it
|
|
189
|
+
* (`youtubeVideoId`, 0.7.0).
|
|
190
|
+
*/
|
|
191
|
+
export declare const productVideoUrlSchema: z.ZodURL;
|
|
192
|
+
/**
|
|
193
|
+
* A product named on something else: the chip on a post or poll, a
|
|
194
|
+
* notification, a points entry. `logoUrl` is the logo's smallest size.
|
|
195
|
+
*/
|
|
196
|
+
export declare const productChipSchema: z.ZodObject<{
|
|
197
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
198
|
+
slug: z.ZodString;
|
|
199
|
+
name: z.ZodString;
|
|
200
|
+
logoUrl: z.ZodOptional<z.ZodURL>;
|
|
201
|
+
}, z.core.$strip>;
|
|
202
|
+
export type ProductChip = z.infer<typeof productChipSchema>;
|
|
203
|
+
/**
|
|
204
|
+
* How it is rated. `average` (one decimal) is null until the product has
|
|
205
|
+
* `REVIEW_AVERAGE_MIN_COUNT` reviews: a client shows "Not enough reviews yet",
|
|
206
|
+
* never a lone 5.0 from one friend.
|
|
207
|
+
*/
|
|
208
|
+
export declare const productRatingSchema: z.ZodObject<{
|
|
209
|
+
count: z.ZodNumber;
|
|
210
|
+
average: z.ZodNullable<z.ZodNumber>;
|
|
211
|
+
}, z.core.$strip>;
|
|
212
|
+
export type ProductRating = z.infer<typeof productRatingSchema>;
|
|
213
|
+
/** One screenshot: a processed image (every size, ready for `srcset`) and its caption. */
|
|
214
|
+
export declare const productScreenshotSchema: z.ZodObject<{
|
|
215
|
+
id: z.ZodString;
|
|
216
|
+
url: z.ZodURL;
|
|
217
|
+
width: z.ZodNumber;
|
|
218
|
+
height: z.ZodNumber;
|
|
219
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
220
|
+
width: z.ZodNumber;
|
|
221
|
+
height: z.ZodNumber;
|
|
222
|
+
url: z.ZodURL;
|
|
223
|
+
}, z.core.$strip>>;
|
|
224
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
225
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
226
|
+
}, z.core.$strip>;
|
|
227
|
+
export type ProductScreenshot = z.infer<typeof productScreenshotSchema>;
|
|
228
|
+
/** What this viewer may do on a Discover card. */
|
|
229
|
+
export declare const productCardViewerSchema: z.ZodObject<{
|
|
230
|
+
upvoted: z.ZodBoolean;
|
|
231
|
+
canUpvote: z.ZodBoolean;
|
|
232
|
+
role: z.ZodNullable<z.ZodEnum<{
|
|
233
|
+
team: "team";
|
|
234
|
+
owner: "owner";
|
|
235
|
+
cofounder: "cofounder";
|
|
236
|
+
}>>;
|
|
237
|
+
canRepresent: z.ZodOptional<z.ZodBoolean>;
|
|
238
|
+
}, z.core.$strip>;
|
|
239
|
+
/**
|
|
240
|
+
* A product on Discover, on a profile, in "my products". `cover` is the first
|
|
241
|
+
* screenshot. `openAsks` are the asks whose window is open now, by the
|
|
242
|
+
* server's clock ("Testers wanted").
|
|
243
|
+
*/
|
|
244
|
+
export declare const productCardSchema: z.ZodObject<{
|
|
245
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
246
|
+
slug: z.ZodString;
|
|
247
|
+
name: z.ZodString;
|
|
248
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
249
|
+
logo: z.ZodOptional<z.ZodObject<{
|
|
250
|
+
id: z.ZodString;
|
|
251
|
+
url: z.ZodURL;
|
|
252
|
+
width: z.ZodNumber;
|
|
253
|
+
height: z.ZodNumber;
|
|
254
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
255
|
+
width: z.ZodNumber;
|
|
256
|
+
height: z.ZodNumber;
|
|
257
|
+
url: z.ZodURL;
|
|
258
|
+
}, z.core.$strip>>;
|
|
259
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
260
|
+
}, z.core.$strip>>;
|
|
261
|
+
cover: z.ZodOptional<z.ZodObject<{
|
|
262
|
+
id: z.ZodString;
|
|
263
|
+
url: z.ZodURL;
|
|
264
|
+
width: z.ZodNumber;
|
|
265
|
+
height: z.ZodNumber;
|
|
266
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
267
|
+
width: z.ZodNumber;
|
|
268
|
+
height: z.ZodNumber;
|
|
269
|
+
url: z.ZodURL;
|
|
270
|
+
}, z.core.$strip>>;
|
|
271
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
272
|
+
}, z.core.$strip>>;
|
|
273
|
+
industry: z.ZodEnum<{
|
|
274
|
+
agritech: "agritech";
|
|
275
|
+
ai_ml: "ai_ml";
|
|
276
|
+
b2b_saas: "b2b_saas";
|
|
277
|
+
consumer: "consumer";
|
|
278
|
+
climate: "climate";
|
|
279
|
+
d2c: "d2c";
|
|
280
|
+
deeptech: "deeptech";
|
|
281
|
+
edtech: "edtech";
|
|
282
|
+
fintech: "fintech";
|
|
283
|
+
gaming: "gaming";
|
|
284
|
+
healthtech: "healthtech";
|
|
285
|
+
logistics: "logistics";
|
|
286
|
+
manufacturing: "manufacturing";
|
|
287
|
+
marketplace: "marketplace";
|
|
288
|
+
media: "media";
|
|
289
|
+
mobility: "mobility";
|
|
290
|
+
proptech: "proptech";
|
|
291
|
+
robotics: "robotics";
|
|
292
|
+
services: "services";
|
|
293
|
+
space: "space";
|
|
294
|
+
other: "other";
|
|
295
|
+
}>;
|
|
296
|
+
stage: z.ZodEnum<{
|
|
297
|
+
idea: "idea";
|
|
298
|
+
building: "building";
|
|
299
|
+
beta: "beta";
|
|
300
|
+
live: "live";
|
|
301
|
+
}>;
|
|
302
|
+
platforms: z.ZodArray<z.ZodEnum<{
|
|
303
|
+
api: "api";
|
|
304
|
+
other: "other";
|
|
305
|
+
web: "web";
|
|
306
|
+
ios: "ios";
|
|
307
|
+
android: "android";
|
|
308
|
+
desktop: "desktop";
|
|
309
|
+
browser_extension: "browser_extension";
|
|
310
|
+
hardware: "hardware";
|
|
311
|
+
}>>;
|
|
312
|
+
visibility: z.ZodEnum<{
|
|
313
|
+
unlisted: "unlisted";
|
|
314
|
+
listed: "listed";
|
|
315
|
+
}>;
|
|
316
|
+
status: z.ZodEnum<{
|
|
317
|
+
active: "active";
|
|
318
|
+
archived: "archived";
|
|
319
|
+
}>;
|
|
320
|
+
rating: z.ZodObject<{
|
|
321
|
+
count: z.ZodNumber;
|
|
322
|
+
average: z.ZodNullable<z.ZodNumber>;
|
|
323
|
+
}, z.core.$strip>;
|
|
324
|
+
upvoteCount: z.ZodNumber;
|
|
325
|
+
openAsks: z.ZodArray<z.ZodEnum<{
|
|
326
|
+
feedback: "feedback";
|
|
327
|
+
testers: "testers";
|
|
328
|
+
launch: "launch";
|
|
329
|
+
ideas: "ideas";
|
|
330
|
+
}>>;
|
|
331
|
+
hiddenByStaff: z.ZodOptional<z.ZodBoolean>;
|
|
332
|
+
viewer: z.ZodOptional<z.ZodObject<{
|
|
333
|
+
upvoted: z.ZodBoolean;
|
|
334
|
+
canUpvote: z.ZodBoolean;
|
|
335
|
+
role: z.ZodNullable<z.ZodEnum<{
|
|
336
|
+
team: "team";
|
|
337
|
+
owner: "owner";
|
|
338
|
+
cofounder: "cofounder";
|
|
339
|
+
}>>;
|
|
340
|
+
canRepresent: z.ZodOptional<z.ZodBoolean>;
|
|
341
|
+
}, z.core.$strip>>;
|
|
342
|
+
}, z.core.$strip>;
|
|
343
|
+
export type ProductCard = z.infer<typeof productCardSchema>;
|
|
344
|
+
/** One person on a product's team, live-joined like every byline. */
|
|
345
|
+
export declare const productTeamMemberSchema: z.ZodObject<{
|
|
346
|
+
userId: z.ZodString;
|
|
347
|
+
username: z.ZodString;
|
|
348
|
+
displayName: z.ZodString;
|
|
349
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
350
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
351
|
+
role: z.ZodEnum<{
|
|
352
|
+
team: "team";
|
|
353
|
+
owner: "owner";
|
|
354
|
+
cofounder: "cofounder";
|
|
355
|
+
}>;
|
|
356
|
+
joinedAt: z.ZodISODateTime;
|
|
357
|
+
}, z.core.$strip>;
|
|
358
|
+
export type ProductTeamMember = z.infer<typeof productTeamMemberSchema>;
|
|
359
|
+
/**
|
|
360
|
+
* What THIS viewer may do on the product page, decided by the server and sent
|
|
361
|
+
* as plain answers (the same rule as `viewerStateSchema` on a post).
|
|
362
|
+
*/
|
|
363
|
+
export declare const productViewerSchema: z.ZodObject<{
|
|
364
|
+
upvoted: z.ZodBoolean;
|
|
365
|
+
canUpvote: z.ZodBoolean;
|
|
366
|
+
role: z.ZodNullable<z.ZodEnum<{
|
|
367
|
+
team: "team";
|
|
368
|
+
owner: "owner";
|
|
369
|
+
cofounder: "cofounder";
|
|
370
|
+
}>>;
|
|
371
|
+
invited: z.ZodBoolean;
|
|
372
|
+
reviewId: z.ZodNullable<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
373
|
+
tester: z.ZodBoolean;
|
|
374
|
+
canEdit: z.ZodBoolean;
|
|
375
|
+
canManageTeam: z.ZodBoolean;
|
|
376
|
+
canDelete: z.ZodBoolean;
|
|
377
|
+
canRepresent: z.ZodBoolean;
|
|
378
|
+
canReview: z.ZodBoolean;
|
|
379
|
+
canReport: z.ZodBoolean;
|
|
380
|
+
missingForListing: z.ZodArray<z.ZodEnum<{
|
|
381
|
+
logo: "logo";
|
|
382
|
+
tagline: "tagline";
|
|
383
|
+
screenshot: "screenshot";
|
|
384
|
+
}>>;
|
|
385
|
+
}, z.core.$strip>;
|
|
386
|
+
export type ProductViewer = z.infer<typeof productViewerSchema>;
|
|
387
|
+
/** The product page. */
|
|
388
|
+
export declare const productSchema: z.ZodObject<{
|
|
389
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
390
|
+
slug: z.ZodString;
|
|
391
|
+
name: z.ZodString;
|
|
392
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
393
|
+
logo: z.ZodOptional<z.ZodObject<{
|
|
394
|
+
id: z.ZodString;
|
|
395
|
+
url: z.ZodURL;
|
|
396
|
+
width: z.ZodNumber;
|
|
397
|
+
height: z.ZodNumber;
|
|
398
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
399
|
+
width: z.ZodNumber;
|
|
400
|
+
height: z.ZodNumber;
|
|
401
|
+
url: z.ZodURL;
|
|
402
|
+
}, z.core.$strip>>;
|
|
403
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
404
|
+
}, z.core.$strip>>;
|
|
405
|
+
cover: z.ZodOptional<z.ZodObject<{
|
|
406
|
+
id: z.ZodString;
|
|
407
|
+
url: z.ZodURL;
|
|
408
|
+
width: z.ZodNumber;
|
|
409
|
+
height: z.ZodNumber;
|
|
410
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
411
|
+
width: z.ZodNumber;
|
|
412
|
+
height: z.ZodNumber;
|
|
413
|
+
url: z.ZodURL;
|
|
414
|
+
}, z.core.$strip>>;
|
|
415
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
416
|
+
}, z.core.$strip>>;
|
|
417
|
+
industry: z.ZodEnum<{
|
|
418
|
+
agritech: "agritech";
|
|
419
|
+
ai_ml: "ai_ml";
|
|
420
|
+
b2b_saas: "b2b_saas";
|
|
421
|
+
consumer: "consumer";
|
|
422
|
+
climate: "climate";
|
|
423
|
+
d2c: "d2c";
|
|
424
|
+
deeptech: "deeptech";
|
|
425
|
+
edtech: "edtech";
|
|
426
|
+
fintech: "fintech";
|
|
427
|
+
gaming: "gaming";
|
|
428
|
+
healthtech: "healthtech";
|
|
429
|
+
logistics: "logistics";
|
|
430
|
+
manufacturing: "manufacturing";
|
|
431
|
+
marketplace: "marketplace";
|
|
432
|
+
media: "media";
|
|
433
|
+
mobility: "mobility";
|
|
434
|
+
proptech: "proptech";
|
|
435
|
+
robotics: "robotics";
|
|
436
|
+
services: "services";
|
|
437
|
+
space: "space";
|
|
438
|
+
other: "other";
|
|
439
|
+
}>;
|
|
440
|
+
stage: z.ZodEnum<{
|
|
441
|
+
idea: "idea";
|
|
442
|
+
building: "building";
|
|
443
|
+
beta: "beta";
|
|
444
|
+
live: "live";
|
|
445
|
+
}>;
|
|
446
|
+
platforms: z.ZodArray<z.ZodEnum<{
|
|
447
|
+
api: "api";
|
|
448
|
+
other: "other";
|
|
449
|
+
web: "web";
|
|
450
|
+
ios: "ios";
|
|
451
|
+
android: "android";
|
|
452
|
+
desktop: "desktop";
|
|
453
|
+
browser_extension: "browser_extension";
|
|
454
|
+
hardware: "hardware";
|
|
455
|
+
}>>;
|
|
456
|
+
visibility: z.ZodEnum<{
|
|
457
|
+
unlisted: "unlisted";
|
|
458
|
+
listed: "listed";
|
|
459
|
+
}>;
|
|
460
|
+
status: z.ZodEnum<{
|
|
461
|
+
active: "active";
|
|
462
|
+
archived: "archived";
|
|
463
|
+
}>;
|
|
464
|
+
rating: z.ZodObject<{
|
|
465
|
+
count: z.ZodNumber;
|
|
466
|
+
average: z.ZodNullable<z.ZodNumber>;
|
|
467
|
+
}, z.core.$strip>;
|
|
468
|
+
upvoteCount: z.ZodNumber;
|
|
469
|
+
openAsks: z.ZodArray<z.ZodEnum<{
|
|
470
|
+
feedback: "feedback";
|
|
471
|
+
testers: "testers";
|
|
472
|
+
launch: "launch";
|
|
473
|
+
ideas: "ideas";
|
|
474
|
+
}>>;
|
|
475
|
+
description: z.ZodOptional<z.ZodString>;
|
|
476
|
+
links: z.ZodObject<{
|
|
477
|
+
website: z.ZodOptional<z.ZodURL>;
|
|
478
|
+
appStore: z.ZodOptional<z.ZodURL>;
|
|
479
|
+
playStore: z.ZodOptional<z.ZodURL>;
|
|
480
|
+
github: z.ZodOptional<z.ZodURL>;
|
|
481
|
+
}, z.core.$strip>;
|
|
482
|
+
videoUrl: z.ZodOptional<z.ZodString>;
|
|
483
|
+
topics: z.ZodArray<z.ZodEnum<{
|
|
484
|
+
ai_ml: "ai_ml";
|
|
485
|
+
b2b_saas: "b2b_saas";
|
|
486
|
+
d2c: "d2c";
|
|
487
|
+
deeptech: "deeptech";
|
|
488
|
+
robotics: "robotics";
|
|
489
|
+
growth: "growth";
|
|
490
|
+
sales: "sales";
|
|
491
|
+
marketing: "marketing";
|
|
492
|
+
supply_chain: "supply_chain";
|
|
493
|
+
fundraising: "fundraising";
|
|
494
|
+
mentoring: "mentoring";
|
|
495
|
+
leadership: "leadership";
|
|
496
|
+
networking: "networking";
|
|
497
|
+
public_speaking: "public_speaking";
|
|
498
|
+
teaching: "teaching";
|
|
499
|
+
hiring_talent: "hiring_talent";
|
|
500
|
+
personal_branding: "personal_branding";
|
|
501
|
+
career_transition: "career_transition";
|
|
502
|
+
remote_work: "remote_work";
|
|
503
|
+
blockchain: "blockchain";
|
|
504
|
+
crypto_web3: "crypto_web3";
|
|
505
|
+
data_science: "data_science";
|
|
506
|
+
cybersecurity: "cybersecurity";
|
|
507
|
+
game_dev: "game_dev";
|
|
508
|
+
ux_design: "ux_design";
|
|
509
|
+
app_development: "app_development";
|
|
510
|
+
open_source: "open_source";
|
|
511
|
+
electronics: "electronics";
|
|
512
|
+
space_exploration: "space_exploration";
|
|
513
|
+
green_tech: "green_tech";
|
|
514
|
+
no_code: "no_code";
|
|
515
|
+
entrepreneurship: "entrepreneurship";
|
|
516
|
+
investing: "investing";
|
|
517
|
+
stock_trading: "stock_trading";
|
|
518
|
+
personal_finance: "personal_finance";
|
|
519
|
+
consulting: "consulting";
|
|
520
|
+
ecommerce: "ecommerce";
|
|
521
|
+
retail: "retail";
|
|
522
|
+
real_estate: "real_estate";
|
|
523
|
+
product_management: "product_management";
|
|
524
|
+
meditation: "meditation";
|
|
525
|
+
journaling: "journaling";
|
|
526
|
+
self_improvement: "self_improvement";
|
|
527
|
+
productivity: "productivity";
|
|
528
|
+
reading: "reading";
|
|
529
|
+
online_courses: "online_courses";
|
|
530
|
+
philosophy: "philosophy";
|
|
531
|
+
psychology: "psychology";
|
|
532
|
+
therapy: "therapy";
|
|
533
|
+
sleep_optimization: "sleep_optimization";
|
|
534
|
+
gym: "gym";
|
|
535
|
+
yoga: "yoga";
|
|
536
|
+
photography: "photography";
|
|
537
|
+
writing: "writing";
|
|
538
|
+
graphic_design: "graphic_design";
|
|
539
|
+
filmmaking: "filmmaking";
|
|
540
|
+
digital_art: "digital_art";
|
|
541
|
+
content_creation: "content_creation";
|
|
542
|
+
blogging: "blogging";
|
|
543
|
+
vlogging: "vlogging";
|
|
544
|
+
podcasts: "podcasts";
|
|
545
|
+
animation: "animation";
|
|
546
|
+
music_production: "music_production";
|
|
547
|
+
volunteering: "volunteering";
|
|
548
|
+
ngo_work: "ngo_work";
|
|
549
|
+
environmental: "environmental";
|
|
550
|
+
women_empowerment: "women_empowerment";
|
|
551
|
+
community_service: "community_service";
|
|
552
|
+
social_enterprise: "social_enterprise";
|
|
553
|
+
education_access: "education_access";
|
|
554
|
+
}>>;
|
|
555
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
556
|
+
id: z.ZodString;
|
|
557
|
+
url: z.ZodURL;
|
|
558
|
+
width: z.ZodNumber;
|
|
559
|
+
height: z.ZodNumber;
|
|
560
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
561
|
+
width: z.ZodNumber;
|
|
562
|
+
height: z.ZodNumber;
|
|
563
|
+
url: z.ZodURL;
|
|
564
|
+
}, z.core.$strip>>;
|
|
565
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
566
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
567
|
+
}, z.core.$strip>>;
|
|
568
|
+
team: z.ZodArray<z.ZodObject<{
|
|
569
|
+
userId: z.ZodString;
|
|
570
|
+
username: z.ZodString;
|
|
571
|
+
displayName: z.ZodString;
|
|
572
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
573
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
574
|
+
role: z.ZodEnum<{
|
|
575
|
+
team: "team";
|
|
576
|
+
owner: "owner";
|
|
577
|
+
cofounder: "cofounder";
|
|
578
|
+
}>;
|
|
579
|
+
joinedAt: z.ZodISODateTime;
|
|
580
|
+
}, z.core.$strip>>;
|
|
581
|
+
teamCount: z.ZodNumber;
|
|
582
|
+
counts: z.ZodObject<{
|
|
583
|
+
posts: z.ZodNumber;
|
|
584
|
+
feedback: z.ZodNumber;
|
|
585
|
+
testers: z.ZodNumber;
|
|
586
|
+
}, z.core.$strip>;
|
|
587
|
+
listedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
588
|
+
createdAt: z.ZodISODateTime;
|
|
589
|
+
updatedAt: z.ZodISODateTime;
|
|
590
|
+
hiddenByStaff: z.ZodOptional<z.ZodBoolean>;
|
|
591
|
+
viewer: z.ZodOptional<z.ZodObject<{
|
|
592
|
+
upvoted: z.ZodBoolean;
|
|
593
|
+
canUpvote: z.ZodBoolean;
|
|
594
|
+
role: z.ZodNullable<z.ZodEnum<{
|
|
595
|
+
team: "team";
|
|
596
|
+
owner: "owner";
|
|
597
|
+
cofounder: "cofounder";
|
|
598
|
+
}>>;
|
|
599
|
+
invited: z.ZodBoolean;
|
|
600
|
+
reviewId: z.ZodNullable<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
601
|
+
tester: z.ZodBoolean;
|
|
602
|
+
canEdit: z.ZodBoolean;
|
|
603
|
+
canManageTeam: z.ZodBoolean;
|
|
604
|
+
canDelete: z.ZodBoolean;
|
|
605
|
+
canRepresent: z.ZodBoolean;
|
|
606
|
+
canReview: z.ZodBoolean;
|
|
607
|
+
canReport: z.ZodBoolean;
|
|
608
|
+
missingForListing: z.ZodArray<z.ZodEnum<{
|
|
609
|
+
logo: "logo";
|
|
610
|
+
tagline: "tagline";
|
|
611
|
+
screenshot: "screenshot";
|
|
612
|
+
}>>;
|
|
613
|
+
}, z.core.$strip>>;
|
|
614
|
+
}, z.core.$strip>;
|
|
615
|
+
export type Product = z.infer<typeof productSchema>;
|
|
616
|
+
/**
|
|
617
|
+
* An invitation the team sent and nobody has answered yet, as its managers see
|
|
618
|
+
* it (`GET /products/:id/invites`): who, for what role, sent by whom. The owner
|
|
619
|
+
* may change its role (`PUT /team/:userId`) or cancel it (`DELETE /team/:userId`).
|
|
620
|
+
*/
|
|
621
|
+
export declare const productPendingInviteSchema: z.ZodObject<{
|
|
622
|
+
member: z.ZodObject<{
|
|
623
|
+
userId: z.ZodString;
|
|
624
|
+
username: z.ZodString;
|
|
625
|
+
displayName: z.ZodString;
|
|
626
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
627
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
628
|
+
}, z.core.$strip>;
|
|
629
|
+
role: z.ZodEnum<{
|
|
630
|
+
team: "team";
|
|
631
|
+
cofounder: "cofounder";
|
|
632
|
+
}>;
|
|
633
|
+
invitedBy: z.ZodNullable<z.ZodObject<{
|
|
634
|
+
userId: z.ZodString;
|
|
635
|
+
username: z.ZodString;
|
|
636
|
+
displayName: z.ZodString;
|
|
637
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
638
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
639
|
+
}, z.core.$strip>>;
|
|
640
|
+
invitedAt: z.ZodISODateTime;
|
|
641
|
+
}, z.core.$strip>;
|
|
642
|
+
export type ProductPendingInvite = z.infer<typeof productPendingInviteSchema>;
|
|
643
|
+
/** A team invitation waiting for the viewer's answer. */
|
|
644
|
+
export declare const productInviteSchema: z.ZodObject<{
|
|
645
|
+
product: z.ZodObject<{
|
|
646
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
647
|
+
slug: z.ZodString;
|
|
648
|
+
name: z.ZodString;
|
|
649
|
+
logoUrl: z.ZodOptional<z.ZodURL>;
|
|
650
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
651
|
+
}, z.core.$strip>;
|
|
652
|
+
role: z.ZodEnum<{
|
|
653
|
+
team: "team";
|
|
654
|
+
cofounder: "cofounder";
|
|
655
|
+
}>;
|
|
656
|
+
invitedBy: z.ZodNullable<z.ZodObject<{
|
|
657
|
+
userId: z.ZodString;
|
|
658
|
+
username: z.ZodString;
|
|
659
|
+
displayName: z.ZodString;
|
|
660
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
661
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
662
|
+
}, z.core.$strip>>;
|
|
663
|
+
invitedAt: z.ZodISODateTime;
|
|
664
|
+
}, z.core.$strip>;
|
|
665
|
+
export type ProductInvite = z.infer<typeof productInviteSchema>;
|
|
666
|
+
/** `GET /products/invites`. Never paged: invitations are few, and each needs an answer. */
|
|
667
|
+
export declare const productInvitesSchema: z.ZodObject<{
|
|
668
|
+
items: z.ZodArray<z.ZodObject<{
|
|
669
|
+
product: z.ZodObject<{
|
|
670
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
671
|
+
slug: z.ZodString;
|
|
672
|
+
name: z.ZodString;
|
|
673
|
+
logoUrl: z.ZodOptional<z.ZodURL>;
|
|
674
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
675
|
+
}, z.core.$strip>;
|
|
676
|
+
role: z.ZodEnum<{
|
|
677
|
+
team: "team";
|
|
678
|
+
cofounder: "cofounder";
|
|
679
|
+
}>;
|
|
680
|
+
invitedBy: z.ZodNullable<z.ZodObject<{
|
|
681
|
+
userId: z.ZodString;
|
|
682
|
+
username: z.ZodString;
|
|
683
|
+
displayName: z.ZodString;
|
|
684
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
685
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
686
|
+
}, z.core.$strip>>;
|
|
687
|
+
invitedAt: z.ZodISODateTime;
|
|
688
|
+
}, z.core.$strip>>;
|
|
689
|
+
}, z.core.$strip>;
|
|
690
|
+
export type ProductInvites = z.infer<typeof productInvitesSchema>;
|
|
691
|
+
/**
|
|
692
|
+
* `GET /products/mine`: every product the viewer is on the team of, archived
|
|
693
|
+
* included, owned first. Not paged: a founder owns at most `PRODUCTS_OWNED_MAX`,
|
|
694
|
+
* and joins teams by accepting invitations one at a time, so the list stays
|
|
695
|
+
* short in practice; there is no hard cap on teams joined.
|
|
696
|
+
*/
|
|
697
|
+
export declare const myProductsSchema: z.ZodObject<{
|
|
698
|
+
items: z.ZodArray<z.ZodObject<{
|
|
699
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
700
|
+
slug: z.ZodString;
|
|
701
|
+
name: z.ZodString;
|
|
702
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
703
|
+
logo: z.ZodOptional<z.ZodObject<{
|
|
704
|
+
id: z.ZodString;
|
|
705
|
+
url: z.ZodURL;
|
|
706
|
+
width: z.ZodNumber;
|
|
707
|
+
height: z.ZodNumber;
|
|
708
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
709
|
+
width: z.ZodNumber;
|
|
710
|
+
height: z.ZodNumber;
|
|
711
|
+
url: z.ZodURL;
|
|
712
|
+
}, z.core.$strip>>;
|
|
713
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
714
|
+
}, z.core.$strip>>;
|
|
715
|
+
cover: z.ZodOptional<z.ZodObject<{
|
|
716
|
+
id: z.ZodString;
|
|
717
|
+
url: z.ZodURL;
|
|
718
|
+
width: z.ZodNumber;
|
|
719
|
+
height: z.ZodNumber;
|
|
720
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
721
|
+
width: z.ZodNumber;
|
|
722
|
+
height: z.ZodNumber;
|
|
723
|
+
url: z.ZodURL;
|
|
724
|
+
}, z.core.$strip>>;
|
|
725
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
726
|
+
}, z.core.$strip>>;
|
|
727
|
+
industry: z.ZodEnum<{
|
|
728
|
+
agritech: "agritech";
|
|
729
|
+
ai_ml: "ai_ml";
|
|
730
|
+
b2b_saas: "b2b_saas";
|
|
731
|
+
consumer: "consumer";
|
|
732
|
+
climate: "climate";
|
|
733
|
+
d2c: "d2c";
|
|
734
|
+
deeptech: "deeptech";
|
|
735
|
+
edtech: "edtech";
|
|
736
|
+
fintech: "fintech";
|
|
737
|
+
gaming: "gaming";
|
|
738
|
+
healthtech: "healthtech";
|
|
739
|
+
logistics: "logistics";
|
|
740
|
+
manufacturing: "manufacturing";
|
|
741
|
+
marketplace: "marketplace";
|
|
742
|
+
media: "media";
|
|
743
|
+
mobility: "mobility";
|
|
744
|
+
proptech: "proptech";
|
|
745
|
+
robotics: "robotics";
|
|
746
|
+
services: "services";
|
|
747
|
+
space: "space";
|
|
748
|
+
other: "other";
|
|
749
|
+
}>;
|
|
750
|
+
stage: z.ZodEnum<{
|
|
751
|
+
idea: "idea";
|
|
752
|
+
building: "building";
|
|
753
|
+
beta: "beta";
|
|
754
|
+
live: "live";
|
|
755
|
+
}>;
|
|
756
|
+
platforms: z.ZodArray<z.ZodEnum<{
|
|
757
|
+
api: "api";
|
|
758
|
+
other: "other";
|
|
759
|
+
web: "web";
|
|
760
|
+
ios: "ios";
|
|
761
|
+
android: "android";
|
|
762
|
+
desktop: "desktop";
|
|
763
|
+
browser_extension: "browser_extension";
|
|
764
|
+
hardware: "hardware";
|
|
765
|
+
}>>;
|
|
766
|
+
visibility: z.ZodEnum<{
|
|
767
|
+
unlisted: "unlisted";
|
|
768
|
+
listed: "listed";
|
|
769
|
+
}>;
|
|
770
|
+
status: z.ZodEnum<{
|
|
771
|
+
active: "active";
|
|
772
|
+
archived: "archived";
|
|
773
|
+
}>;
|
|
774
|
+
rating: z.ZodObject<{
|
|
775
|
+
count: z.ZodNumber;
|
|
776
|
+
average: z.ZodNullable<z.ZodNumber>;
|
|
777
|
+
}, z.core.$strip>;
|
|
778
|
+
upvoteCount: z.ZodNumber;
|
|
779
|
+
openAsks: z.ZodArray<z.ZodEnum<{
|
|
780
|
+
feedback: "feedback";
|
|
781
|
+
testers: "testers";
|
|
782
|
+
launch: "launch";
|
|
783
|
+
ideas: "ideas";
|
|
784
|
+
}>>;
|
|
785
|
+
hiddenByStaff: z.ZodOptional<z.ZodBoolean>;
|
|
786
|
+
viewer: z.ZodOptional<z.ZodObject<{
|
|
787
|
+
upvoted: z.ZodBoolean;
|
|
788
|
+
canUpvote: z.ZodBoolean;
|
|
789
|
+
role: z.ZodNullable<z.ZodEnum<{
|
|
790
|
+
team: "team";
|
|
791
|
+
owner: "owner";
|
|
792
|
+
cofounder: "cofounder";
|
|
793
|
+
}>>;
|
|
794
|
+
canRepresent: z.ZodOptional<z.ZodBoolean>;
|
|
795
|
+
}, z.core.$strip>>;
|
|
796
|
+
}, z.core.$strip>>;
|
|
797
|
+
}, z.core.$strip>;
|
|
798
|
+
export type MyProducts = z.infer<typeof myProductsSchema>;
|
|
799
|
+
/** A member the team confirmed tested the product. */
|
|
800
|
+
export declare const productTesterSchema: z.ZodObject<{
|
|
801
|
+
member: z.ZodObject<{
|
|
802
|
+
userId: z.ZodString;
|
|
803
|
+
username: z.ZodString;
|
|
804
|
+
displayName: z.ZodString;
|
|
805
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
806
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
807
|
+
}, z.core.$strip>;
|
|
808
|
+
confirmedAt: z.ZodISODateTime;
|
|
809
|
+
}, z.core.$strip>;
|
|
810
|
+
export type ProductTester = z.infer<typeof productTesterSchema>;
|
|
811
|
+
export declare const productCardPageSchema: z.ZodObject<{
|
|
812
|
+
items: z.ZodArray<z.ZodObject<{
|
|
813
|
+
id: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
814
|
+
slug: z.ZodString;
|
|
815
|
+
name: z.ZodString;
|
|
816
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
817
|
+
logo: z.ZodOptional<z.ZodObject<{
|
|
818
|
+
id: z.ZodString;
|
|
819
|
+
url: z.ZodURL;
|
|
820
|
+
width: z.ZodNumber;
|
|
821
|
+
height: z.ZodNumber;
|
|
822
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
823
|
+
width: z.ZodNumber;
|
|
824
|
+
height: z.ZodNumber;
|
|
825
|
+
url: z.ZodURL;
|
|
826
|
+
}, z.core.$strip>>;
|
|
827
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
828
|
+
}, z.core.$strip>>;
|
|
829
|
+
cover: z.ZodOptional<z.ZodObject<{
|
|
830
|
+
id: z.ZodString;
|
|
831
|
+
url: z.ZodURL;
|
|
832
|
+
width: z.ZodNumber;
|
|
833
|
+
height: z.ZodNumber;
|
|
834
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
835
|
+
width: z.ZodNumber;
|
|
836
|
+
height: z.ZodNumber;
|
|
837
|
+
url: z.ZodURL;
|
|
838
|
+
}, z.core.$strip>>;
|
|
839
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
840
|
+
}, z.core.$strip>>;
|
|
841
|
+
industry: z.ZodEnum<{
|
|
842
|
+
agritech: "agritech";
|
|
843
|
+
ai_ml: "ai_ml";
|
|
844
|
+
b2b_saas: "b2b_saas";
|
|
845
|
+
consumer: "consumer";
|
|
846
|
+
climate: "climate";
|
|
847
|
+
d2c: "d2c";
|
|
848
|
+
deeptech: "deeptech";
|
|
849
|
+
edtech: "edtech";
|
|
850
|
+
fintech: "fintech";
|
|
851
|
+
gaming: "gaming";
|
|
852
|
+
healthtech: "healthtech";
|
|
853
|
+
logistics: "logistics";
|
|
854
|
+
manufacturing: "manufacturing";
|
|
855
|
+
marketplace: "marketplace";
|
|
856
|
+
media: "media";
|
|
857
|
+
mobility: "mobility";
|
|
858
|
+
proptech: "proptech";
|
|
859
|
+
robotics: "robotics";
|
|
860
|
+
services: "services";
|
|
861
|
+
space: "space";
|
|
862
|
+
other: "other";
|
|
863
|
+
}>;
|
|
864
|
+
stage: z.ZodEnum<{
|
|
865
|
+
idea: "idea";
|
|
866
|
+
building: "building";
|
|
867
|
+
beta: "beta";
|
|
868
|
+
live: "live";
|
|
869
|
+
}>;
|
|
870
|
+
platforms: z.ZodArray<z.ZodEnum<{
|
|
871
|
+
api: "api";
|
|
872
|
+
other: "other";
|
|
873
|
+
web: "web";
|
|
874
|
+
ios: "ios";
|
|
875
|
+
android: "android";
|
|
876
|
+
desktop: "desktop";
|
|
877
|
+
browser_extension: "browser_extension";
|
|
878
|
+
hardware: "hardware";
|
|
879
|
+
}>>;
|
|
880
|
+
visibility: z.ZodEnum<{
|
|
881
|
+
unlisted: "unlisted";
|
|
882
|
+
listed: "listed";
|
|
883
|
+
}>;
|
|
884
|
+
status: z.ZodEnum<{
|
|
885
|
+
active: "active";
|
|
886
|
+
archived: "archived";
|
|
887
|
+
}>;
|
|
888
|
+
rating: z.ZodObject<{
|
|
889
|
+
count: z.ZodNumber;
|
|
890
|
+
average: z.ZodNullable<z.ZodNumber>;
|
|
891
|
+
}, z.core.$strip>;
|
|
892
|
+
upvoteCount: z.ZodNumber;
|
|
893
|
+
openAsks: z.ZodArray<z.ZodEnum<{
|
|
894
|
+
feedback: "feedback";
|
|
895
|
+
testers: "testers";
|
|
896
|
+
launch: "launch";
|
|
897
|
+
ideas: "ideas";
|
|
898
|
+
}>>;
|
|
899
|
+
hiddenByStaff: z.ZodOptional<z.ZodBoolean>;
|
|
900
|
+
viewer: z.ZodOptional<z.ZodObject<{
|
|
901
|
+
upvoted: z.ZodBoolean;
|
|
902
|
+
canUpvote: z.ZodBoolean;
|
|
903
|
+
role: z.ZodNullable<z.ZodEnum<{
|
|
904
|
+
team: "team";
|
|
905
|
+
owner: "owner";
|
|
906
|
+
cofounder: "cofounder";
|
|
907
|
+
}>>;
|
|
908
|
+
canRepresent: z.ZodOptional<z.ZodBoolean>;
|
|
909
|
+
}, z.core.$strip>>;
|
|
910
|
+
}, z.core.$strip>>;
|
|
911
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
912
|
+
}, z.core.$strip>;
|
|
913
|
+
export type ProductCardPage = z.infer<typeof productCardPageSchema>;
|
|
914
|
+
export declare const productTeamPageSchema: z.ZodObject<{
|
|
915
|
+
items: z.ZodArray<z.ZodObject<{
|
|
916
|
+
userId: z.ZodString;
|
|
917
|
+
username: z.ZodString;
|
|
918
|
+
displayName: z.ZodString;
|
|
919
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
920
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
921
|
+
role: z.ZodEnum<{
|
|
922
|
+
team: "team";
|
|
923
|
+
owner: "owner";
|
|
924
|
+
cofounder: "cofounder";
|
|
925
|
+
}>;
|
|
926
|
+
joinedAt: z.ZodISODateTime;
|
|
927
|
+
}, z.core.$strip>>;
|
|
928
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
929
|
+
}, z.core.$strip>;
|
|
930
|
+
export type ProductTeamPage = z.infer<typeof productTeamPageSchema>;
|
|
931
|
+
export declare const productTesterPageSchema: z.ZodObject<{
|
|
932
|
+
items: z.ZodArray<z.ZodObject<{
|
|
933
|
+
member: z.ZodObject<{
|
|
934
|
+
userId: z.ZodString;
|
|
935
|
+
username: z.ZodString;
|
|
936
|
+
displayName: z.ZodString;
|
|
937
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
938
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
939
|
+
}, z.core.$strip>;
|
|
940
|
+
confirmedAt: z.ZodISODateTime;
|
|
941
|
+
}, z.core.$strip>>;
|
|
942
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
943
|
+
}, z.core.$strip>;
|
|
944
|
+
export type ProductTesterPage = z.infer<typeof productTesterPageSchema>;
|
|
945
|
+
/** Co-founder invitations first, then team; within each, the oldest invitation first. */
|
|
946
|
+
export declare const productPendingInvitePageSchema: z.ZodObject<{
|
|
947
|
+
items: z.ZodArray<z.ZodObject<{
|
|
948
|
+
member: z.ZodObject<{
|
|
949
|
+
userId: z.ZodString;
|
|
950
|
+
username: z.ZodString;
|
|
951
|
+
displayName: z.ZodString;
|
|
952
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
953
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
954
|
+
}, z.core.$strip>;
|
|
955
|
+
role: z.ZodEnum<{
|
|
956
|
+
team: "team";
|
|
957
|
+
cofounder: "cofounder";
|
|
958
|
+
}>;
|
|
959
|
+
invitedBy: z.ZodNullable<z.ZodObject<{
|
|
960
|
+
userId: z.ZodString;
|
|
961
|
+
username: z.ZodString;
|
|
962
|
+
displayName: z.ZodString;
|
|
963
|
+
avatarUrl: z.ZodOptional<z.ZodURL>;
|
|
964
|
+
headline: z.ZodOptional<z.ZodString>;
|
|
965
|
+
}, z.core.$strip>>;
|
|
966
|
+
invitedAt: z.ZodISODateTime;
|
|
967
|
+
}, z.core.$strip>>;
|
|
968
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
969
|
+
}, z.core.$strip>;
|
|
970
|
+
export type ProductPendingInvitePage = z.infer<typeof productPendingInvitePageSchema>;
|
|
971
|
+
/** `PUT|DELETE /products/:id/upvote`: the state it settled on and the fresh count. */
|
|
972
|
+
export declare const productUpvoteResponseSchema: z.ZodObject<{
|
|
973
|
+
productId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
974
|
+
upvoted: z.ZodBoolean;
|
|
975
|
+
upvoteCount: z.ZodNumber;
|
|
976
|
+
}, z.core.$strip>;
|
|
977
|
+
export type ProductUpvoteResponse = z.infer<typeof productUpvoteResponseSchema>;
|
|
978
|
+
export declare const productFacetsSchema: z.ZodObject<{
|
|
979
|
+
industries: z.ZodArray<z.ZodObject<{
|
|
980
|
+
value: z.ZodEnum<{
|
|
981
|
+
agritech: "agritech";
|
|
982
|
+
ai_ml: "ai_ml";
|
|
983
|
+
b2b_saas: "b2b_saas";
|
|
984
|
+
consumer: "consumer";
|
|
985
|
+
climate: "climate";
|
|
986
|
+
d2c: "d2c";
|
|
987
|
+
deeptech: "deeptech";
|
|
988
|
+
edtech: "edtech";
|
|
989
|
+
fintech: "fintech";
|
|
990
|
+
gaming: "gaming";
|
|
991
|
+
healthtech: "healthtech";
|
|
992
|
+
logistics: "logistics";
|
|
993
|
+
manufacturing: "manufacturing";
|
|
994
|
+
marketplace: "marketplace";
|
|
995
|
+
media: "media";
|
|
996
|
+
mobility: "mobility";
|
|
997
|
+
proptech: "proptech";
|
|
998
|
+
robotics: "robotics";
|
|
999
|
+
services: "services";
|
|
1000
|
+
space: "space";
|
|
1001
|
+
other: "other";
|
|
1002
|
+
}>;
|
|
1003
|
+
count: z.ZodNumber;
|
|
1004
|
+
}, z.core.$strip>>;
|
|
1005
|
+
stages: z.ZodArray<z.ZodObject<{
|
|
1006
|
+
value: z.ZodEnum<{
|
|
1007
|
+
idea: "idea";
|
|
1008
|
+
building: "building";
|
|
1009
|
+
beta: "beta";
|
|
1010
|
+
live: "live";
|
|
1011
|
+
}>;
|
|
1012
|
+
count: z.ZodNumber;
|
|
1013
|
+
}, z.core.$strip>>;
|
|
1014
|
+
platforms: z.ZodArray<z.ZodObject<{
|
|
1015
|
+
value: z.ZodEnum<{
|
|
1016
|
+
api: "api";
|
|
1017
|
+
other: "other";
|
|
1018
|
+
web: "web";
|
|
1019
|
+
ios: "ios";
|
|
1020
|
+
android: "android";
|
|
1021
|
+
desktop: "desktop";
|
|
1022
|
+
browser_extension: "browser_extension";
|
|
1023
|
+
hardware: "hardware";
|
|
1024
|
+
}>;
|
|
1025
|
+
count: z.ZodNumber;
|
|
1026
|
+
}, z.core.$strip>>;
|
|
1027
|
+
asks: z.ZodArray<z.ZodObject<{
|
|
1028
|
+
value: z.ZodEnum<{
|
|
1029
|
+
feedback: "feedback";
|
|
1030
|
+
testers: "testers";
|
|
1031
|
+
launch: "launch";
|
|
1032
|
+
ideas: "ideas";
|
|
1033
|
+
}>;
|
|
1034
|
+
count: z.ZodNumber;
|
|
1035
|
+
}, z.core.$strip>>;
|
|
1036
|
+
}, z.core.$strip>;
|
|
1037
|
+
export type ProductFacets = z.infer<typeof productFacetsSchema>;
|
|
1038
|
+
/**
|
|
1039
|
+
* `GET /api/v1/products`: LISTED products only. Filters of one kind mean "any
|
|
1040
|
+
* of", different kinds combine ("fintech AND beta"). `ask` keeps products
|
|
1041
|
+
* whose ask is open now. `q` matches the start of the name; an emptied box
|
|
1042
|
+
* (`?q=`) is no search, never a 400.
|
|
1043
|
+
*/
|
|
1044
|
+
export declare const productDiscoverQuerySchema: z.ZodObject<{
|
|
1045
|
+
limit: z.ZodPreprocess<z.ZodDefault<z.ZodCoercedNumber<unknown>>, unknown>;
|
|
1046
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
1047
|
+
sort: z.ZodPreprocess<z.ZodDefault<z.ZodEnum<{
|
|
1048
|
+
trending: "trending";
|
|
1049
|
+
new: "new";
|
|
1050
|
+
top_rated: "top_rated";
|
|
1051
|
+
}>>, unknown>;
|
|
1052
|
+
q: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
1053
|
+
industry: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1054
|
+
agritech: "agritech";
|
|
1055
|
+
ai_ml: "ai_ml";
|
|
1056
|
+
b2b_saas: "b2b_saas";
|
|
1057
|
+
consumer: "consumer";
|
|
1058
|
+
climate: "climate";
|
|
1059
|
+
d2c: "d2c";
|
|
1060
|
+
deeptech: "deeptech";
|
|
1061
|
+
edtech: "edtech";
|
|
1062
|
+
fintech: "fintech";
|
|
1063
|
+
gaming: "gaming";
|
|
1064
|
+
healthtech: "healthtech";
|
|
1065
|
+
logistics: "logistics";
|
|
1066
|
+
manufacturing: "manufacturing";
|
|
1067
|
+
marketplace: "marketplace";
|
|
1068
|
+
media: "media";
|
|
1069
|
+
mobility: "mobility";
|
|
1070
|
+
proptech: "proptech";
|
|
1071
|
+
robotics: "robotics";
|
|
1072
|
+
services: "services";
|
|
1073
|
+
space: "space";
|
|
1074
|
+
other: "other";
|
|
1075
|
+
}>>>, unknown>;
|
|
1076
|
+
stage: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1077
|
+
idea: "idea";
|
|
1078
|
+
building: "building";
|
|
1079
|
+
beta: "beta";
|
|
1080
|
+
live: "live";
|
|
1081
|
+
}>>>, unknown>;
|
|
1082
|
+
platform: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1083
|
+
api: "api";
|
|
1084
|
+
other: "other";
|
|
1085
|
+
web: "web";
|
|
1086
|
+
ios: "ios";
|
|
1087
|
+
android: "android";
|
|
1088
|
+
desktop: "desktop";
|
|
1089
|
+
browser_extension: "browser_extension";
|
|
1090
|
+
hardware: "hardware";
|
|
1091
|
+
}>>>, unknown>;
|
|
1092
|
+
ask: z.ZodPreprocess<z.ZodOptional<z.ZodEnum<{
|
|
1093
|
+
feedback: "feedback";
|
|
1094
|
+
testers: "testers";
|
|
1095
|
+
launch: "launch";
|
|
1096
|
+
ideas: "ideas";
|
|
1097
|
+
}>>, unknown>;
|
|
1098
|
+
}, z.core.$strip>;
|
|
1099
|
+
export type ProductDiscoverQuery = z.infer<typeof productDiscoverQuerySchema>;
|
|
1100
|
+
export type ProductDiscoverQueryInput = z.input<typeof productDiscoverQuerySchema>;
|
|
1101
|
+
/**
|
|
1102
|
+
* `GET /products/:id/feedback`: comments from outside its team on the posts
|
|
1103
|
+
* and polls tagged with it, newest first. `helpful=true` narrows to the ones
|
|
1104
|
+
* the team marked as having helped.
|
|
1105
|
+
*/
|
|
1106
|
+
export declare const productFeedbackQuerySchema: z.ZodObject<{
|
|
1107
|
+
limit: z.ZodPreprocess<z.ZodDefault<z.ZodCoercedNumber<unknown>>, unknown>;
|
|
1108
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
1109
|
+
helpful: z.ZodPreprocess<z.ZodDefault<z.ZodCodec<z.ZodString, z.ZodBoolean>>, unknown>;
|
|
1110
|
+
}, z.core.$strip>;
|
|
1111
|
+
export type ProductFeedbackQuery = z.infer<typeof productFeedbackQuerySchema>;
|
|
1112
|
+
export type ProductFeedbackQueryInput = z.input<typeof productFeedbackQuerySchema>;
|
|
1113
|
+
export declare const productParamsSchema: z.ZodObject<{
|
|
1114
|
+
productId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1115
|
+
}, z.core.$strip>;
|
|
1116
|
+
export type ProductParams = z.infer<typeof productParamsSchema>;
|
|
1117
|
+
/** `/products/:productId/team/:userId`, `/products/:productId/testers/:userId`. */
|
|
1118
|
+
export declare const productMemberParamsSchema: z.ZodObject<{
|
|
1119
|
+
productId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1120
|
+
userId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1121
|
+
}, z.core.$strip>;
|
|
1122
|
+
export type ProductMemberParams = z.infer<typeof productMemberParamsSchema>;
|
|
1123
|
+
/** `/products/by-member/:userId`. */
|
|
1124
|
+
export declare const productsByMemberParamsSchema: z.ZodObject<{
|
|
1125
|
+
userId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1126
|
+
}, z.core.$strip>;
|
|
1127
|
+
export type ProductsByMemberParams = z.infer<typeof productsByMemberParamsSchema>;
|
|
1128
|
+
/** A screenshot on the way in: an uploaded, processed image id, and its caption. */
|
|
1129
|
+
export declare const productScreenshotInputSchema: z.ZodObject<{
|
|
1130
|
+
mediaId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1131
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
1132
|
+
}, z.core.$strip>;
|
|
1133
|
+
export type ProductScreenshotInput = z.infer<typeof productScreenshotInputSchema>;
|
|
1134
|
+
/**
|
|
1135
|
+
* `POST /api/v1/products`. Starts `unlisted`, owned by the caller. The logo
|
|
1136
|
+
* and screenshots may come now or later (uploaded first, purpose
|
|
1137
|
+
* `product_logo` / `product_screenshot`, like a post's images).
|
|
1138
|
+
*/
|
|
1139
|
+
export declare const createProductBodySchema: z.ZodObject<{
|
|
1140
|
+
name: z.ZodString;
|
|
1141
|
+
tagline: z.ZodOptional<z.ZodString>;
|
|
1142
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1143
|
+
industry: z.ZodEnum<{
|
|
1144
|
+
agritech: "agritech";
|
|
1145
|
+
ai_ml: "ai_ml";
|
|
1146
|
+
b2b_saas: "b2b_saas";
|
|
1147
|
+
consumer: "consumer";
|
|
1148
|
+
climate: "climate";
|
|
1149
|
+
d2c: "d2c";
|
|
1150
|
+
deeptech: "deeptech";
|
|
1151
|
+
edtech: "edtech";
|
|
1152
|
+
fintech: "fintech";
|
|
1153
|
+
gaming: "gaming";
|
|
1154
|
+
healthtech: "healthtech";
|
|
1155
|
+
logistics: "logistics";
|
|
1156
|
+
manufacturing: "manufacturing";
|
|
1157
|
+
marketplace: "marketplace";
|
|
1158
|
+
media: "media";
|
|
1159
|
+
mobility: "mobility";
|
|
1160
|
+
proptech: "proptech";
|
|
1161
|
+
robotics: "robotics";
|
|
1162
|
+
services: "services";
|
|
1163
|
+
space: "space";
|
|
1164
|
+
other: "other";
|
|
1165
|
+
}>;
|
|
1166
|
+
stage: z.ZodEnum<{
|
|
1167
|
+
idea: "idea";
|
|
1168
|
+
building: "building";
|
|
1169
|
+
beta: "beta";
|
|
1170
|
+
live: "live";
|
|
1171
|
+
}>;
|
|
1172
|
+
platforms: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1173
|
+
api: "api";
|
|
1174
|
+
other: "other";
|
|
1175
|
+
web: "web";
|
|
1176
|
+
ios: "ios";
|
|
1177
|
+
android: "android";
|
|
1178
|
+
desktop: "desktop";
|
|
1179
|
+
browser_extension: "browser_extension";
|
|
1180
|
+
hardware: "hardware";
|
|
1181
|
+
}>>>;
|
|
1182
|
+
topics: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1183
|
+
ai_ml: "ai_ml";
|
|
1184
|
+
b2b_saas: "b2b_saas";
|
|
1185
|
+
d2c: "d2c";
|
|
1186
|
+
deeptech: "deeptech";
|
|
1187
|
+
robotics: "robotics";
|
|
1188
|
+
growth: "growth";
|
|
1189
|
+
sales: "sales";
|
|
1190
|
+
marketing: "marketing";
|
|
1191
|
+
supply_chain: "supply_chain";
|
|
1192
|
+
fundraising: "fundraising";
|
|
1193
|
+
mentoring: "mentoring";
|
|
1194
|
+
leadership: "leadership";
|
|
1195
|
+
networking: "networking";
|
|
1196
|
+
public_speaking: "public_speaking";
|
|
1197
|
+
teaching: "teaching";
|
|
1198
|
+
hiring_talent: "hiring_talent";
|
|
1199
|
+
personal_branding: "personal_branding";
|
|
1200
|
+
career_transition: "career_transition";
|
|
1201
|
+
remote_work: "remote_work";
|
|
1202
|
+
blockchain: "blockchain";
|
|
1203
|
+
crypto_web3: "crypto_web3";
|
|
1204
|
+
data_science: "data_science";
|
|
1205
|
+
cybersecurity: "cybersecurity";
|
|
1206
|
+
game_dev: "game_dev";
|
|
1207
|
+
ux_design: "ux_design";
|
|
1208
|
+
app_development: "app_development";
|
|
1209
|
+
open_source: "open_source";
|
|
1210
|
+
electronics: "electronics";
|
|
1211
|
+
space_exploration: "space_exploration";
|
|
1212
|
+
green_tech: "green_tech";
|
|
1213
|
+
no_code: "no_code";
|
|
1214
|
+
entrepreneurship: "entrepreneurship";
|
|
1215
|
+
investing: "investing";
|
|
1216
|
+
stock_trading: "stock_trading";
|
|
1217
|
+
personal_finance: "personal_finance";
|
|
1218
|
+
consulting: "consulting";
|
|
1219
|
+
ecommerce: "ecommerce";
|
|
1220
|
+
retail: "retail";
|
|
1221
|
+
real_estate: "real_estate";
|
|
1222
|
+
product_management: "product_management";
|
|
1223
|
+
meditation: "meditation";
|
|
1224
|
+
journaling: "journaling";
|
|
1225
|
+
self_improvement: "self_improvement";
|
|
1226
|
+
productivity: "productivity";
|
|
1227
|
+
reading: "reading";
|
|
1228
|
+
online_courses: "online_courses";
|
|
1229
|
+
philosophy: "philosophy";
|
|
1230
|
+
psychology: "psychology";
|
|
1231
|
+
therapy: "therapy";
|
|
1232
|
+
sleep_optimization: "sleep_optimization";
|
|
1233
|
+
gym: "gym";
|
|
1234
|
+
yoga: "yoga";
|
|
1235
|
+
photography: "photography";
|
|
1236
|
+
writing: "writing";
|
|
1237
|
+
graphic_design: "graphic_design";
|
|
1238
|
+
filmmaking: "filmmaking";
|
|
1239
|
+
digital_art: "digital_art";
|
|
1240
|
+
content_creation: "content_creation";
|
|
1241
|
+
blogging: "blogging";
|
|
1242
|
+
vlogging: "vlogging";
|
|
1243
|
+
podcasts: "podcasts";
|
|
1244
|
+
animation: "animation";
|
|
1245
|
+
music_production: "music_production";
|
|
1246
|
+
volunteering: "volunteering";
|
|
1247
|
+
ngo_work: "ngo_work";
|
|
1248
|
+
environmental: "environmental";
|
|
1249
|
+
women_empowerment: "women_empowerment";
|
|
1250
|
+
community_service: "community_service";
|
|
1251
|
+
social_enterprise: "social_enterprise";
|
|
1252
|
+
education_access: "education_access";
|
|
1253
|
+
}>>>;
|
|
1254
|
+
links: z.ZodOptional<z.ZodObject<{
|
|
1255
|
+
website: z.ZodOptional<z.ZodURL>;
|
|
1256
|
+
appStore: z.ZodOptional<z.ZodURL>;
|
|
1257
|
+
playStore: z.ZodOptional<z.ZodURL>;
|
|
1258
|
+
github: z.ZodOptional<z.ZodURL>;
|
|
1259
|
+
}, z.core.$strip>>;
|
|
1260
|
+
videoUrl: z.ZodOptional<z.ZodURL>;
|
|
1261
|
+
logoMediaId: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
1262
|
+
screenshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1263
|
+
mediaId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1264
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
1265
|
+
}, z.core.$strip>>>;
|
|
1266
|
+
}, z.core.$strip>;
|
|
1267
|
+
export type CreateProductBody = z.infer<typeof createProductBodySchema>;
|
|
1268
|
+
/**
|
|
1269
|
+
* `PATCH /api/v1/products/:id`: only the keys that changed. Images, listing
|
|
1270
|
+
* and status have their own routes. `links` is sent whole.
|
|
1271
|
+
*/
|
|
1272
|
+
export declare const updateProductBodySchema: z.ZodObject<{
|
|
1273
|
+
name: z.ZodOptional<z.ZodString>;
|
|
1274
|
+
tagline: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1275
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1276
|
+
industry: z.ZodOptional<z.ZodEnum<{
|
|
1277
|
+
agritech: "agritech";
|
|
1278
|
+
ai_ml: "ai_ml";
|
|
1279
|
+
b2b_saas: "b2b_saas";
|
|
1280
|
+
consumer: "consumer";
|
|
1281
|
+
climate: "climate";
|
|
1282
|
+
d2c: "d2c";
|
|
1283
|
+
deeptech: "deeptech";
|
|
1284
|
+
edtech: "edtech";
|
|
1285
|
+
fintech: "fintech";
|
|
1286
|
+
gaming: "gaming";
|
|
1287
|
+
healthtech: "healthtech";
|
|
1288
|
+
logistics: "logistics";
|
|
1289
|
+
manufacturing: "manufacturing";
|
|
1290
|
+
marketplace: "marketplace";
|
|
1291
|
+
media: "media";
|
|
1292
|
+
mobility: "mobility";
|
|
1293
|
+
proptech: "proptech";
|
|
1294
|
+
robotics: "robotics";
|
|
1295
|
+
services: "services";
|
|
1296
|
+
space: "space";
|
|
1297
|
+
other: "other";
|
|
1298
|
+
}>>;
|
|
1299
|
+
stage: z.ZodOptional<z.ZodEnum<{
|
|
1300
|
+
idea: "idea";
|
|
1301
|
+
building: "building";
|
|
1302
|
+
beta: "beta";
|
|
1303
|
+
live: "live";
|
|
1304
|
+
}>>;
|
|
1305
|
+
platforms: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1306
|
+
api: "api";
|
|
1307
|
+
other: "other";
|
|
1308
|
+
web: "web";
|
|
1309
|
+
ios: "ios";
|
|
1310
|
+
android: "android";
|
|
1311
|
+
desktop: "desktop";
|
|
1312
|
+
browser_extension: "browser_extension";
|
|
1313
|
+
hardware: "hardware";
|
|
1314
|
+
}>>>;
|
|
1315
|
+
topics: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1316
|
+
ai_ml: "ai_ml";
|
|
1317
|
+
b2b_saas: "b2b_saas";
|
|
1318
|
+
d2c: "d2c";
|
|
1319
|
+
deeptech: "deeptech";
|
|
1320
|
+
robotics: "robotics";
|
|
1321
|
+
growth: "growth";
|
|
1322
|
+
sales: "sales";
|
|
1323
|
+
marketing: "marketing";
|
|
1324
|
+
supply_chain: "supply_chain";
|
|
1325
|
+
fundraising: "fundraising";
|
|
1326
|
+
mentoring: "mentoring";
|
|
1327
|
+
leadership: "leadership";
|
|
1328
|
+
networking: "networking";
|
|
1329
|
+
public_speaking: "public_speaking";
|
|
1330
|
+
teaching: "teaching";
|
|
1331
|
+
hiring_talent: "hiring_talent";
|
|
1332
|
+
personal_branding: "personal_branding";
|
|
1333
|
+
career_transition: "career_transition";
|
|
1334
|
+
remote_work: "remote_work";
|
|
1335
|
+
blockchain: "blockchain";
|
|
1336
|
+
crypto_web3: "crypto_web3";
|
|
1337
|
+
data_science: "data_science";
|
|
1338
|
+
cybersecurity: "cybersecurity";
|
|
1339
|
+
game_dev: "game_dev";
|
|
1340
|
+
ux_design: "ux_design";
|
|
1341
|
+
app_development: "app_development";
|
|
1342
|
+
open_source: "open_source";
|
|
1343
|
+
electronics: "electronics";
|
|
1344
|
+
space_exploration: "space_exploration";
|
|
1345
|
+
green_tech: "green_tech";
|
|
1346
|
+
no_code: "no_code";
|
|
1347
|
+
entrepreneurship: "entrepreneurship";
|
|
1348
|
+
investing: "investing";
|
|
1349
|
+
stock_trading: "stock_trading";
|
|
1350
|
+
personal_finance: "personal_finance";
|
|
1351
|
+
consulting: "consulting";
|
|
1352
|
+
ecommerce: "ecommerce";
|
|
1353
|
+
retail: "retail";
|
|
1354
|
+
real_estate: "real_estate";
|
|
1355
|
+
product_management: "product_management";
|
|
1356
|
+
meditation: "meditation";
|
|
1357
|
+
journaling: "journaling";
|
|
1358
|
+
self_improvement: "self_improvement";
|
|
1359
|
+
productivity: "productivity";
|
|
1360
|
+
reading: "reading";
|
|
1361
|
+
online_courses: "online_courses";
|
|
1362
|
+
philosophy: "philosophy";
|
|
1363
|
+
psychology: "psychology";
|
|
1364
|
+
therapy: "therapy";
|
|
1365
|
+
sleep_optimization: "sleep_optimization";
|
|
1366
|
+
gym: "gym";
|
|
1367
|
+
yoga: "yoga";
|
|
1368
|
+
photography: "photography";
|
|
1369
|
+
writing: "writing";
|
|
1370
|
+
graphic_design: "graphic_design";
|
|
1371
|
+
filmmaking: "filmmaking";
|
|
1372
|
+
digital_art: "digital_art";
|
|
1373
|
+
content_creation: "content_creation";
|
|
1374
|
+
blogging: "blogging";
|
|
1375
|
+
vlogging: "vlogging";
|
|
1376
|
+
podcasts: "podcasts";
|
|
1377
|
+
animation: "animation";
|
|
1378
|
+
music_production: "music_production";
|
|
1379
|
+
volunteering: "volunteering";
|
|
1380
|
+
ngo_work: "ngo_work";
|
|
1381
|
+
environmental: "environmental";
|
|
1382
|
+
women_empowerment: "women_empowerment";
|
|
1383
|
+
community_service: "community_service";
|
|
1384
|
+
social_enterprise: "social_enterprise";
|
|
1385
|
+
education_access: "education_access";
|
|
1386
|
+
}>>>;
|
|
1387
|
+
links: z.ZodOptional<z.ZodObject<{
|
|
1388
|
+
website: z.ZodOptional<z.ZodURL>;
|
|
1389
|
+
appStore: z.ZodOptional<z.ZodURL>;
|
|
1390
|
+
playStore: z.ZodOptional<z.ZodURL>;
|
|
1391
|
+
github: z.ZodOptional<z.ZodURL>;
|
|
1392
|
+
}, z.core.$strip>>;
|
|
1393
|
+
videoUrl: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
|
|
1394
|
+
}, z.core.$strip>;
|
|
1395
|
+
export type UpdateProductBody = z.infer<typeof updateProductBodySchema>;
|
|
1396
|
+
/** `PUT /products/:id/logo`: a processed `product_logo` upload. The old logo's files are deleted. */
|
|
1397
|
+
export declare const setProductLogoBodySchema: z.ZodObject<{
|
|
1398
|
+
mediaId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1399
|
+
}, z.core.$strip>;
|
|
1400
|
+
export type SetProductLogoBody = z.infer<typeof setProductLogoBodySchema>;
|
|
1401
|
+
/**
|
|
1402
|
+
* `PUT /products/:id/screenshots`: the WHOLE gallery as it should now be, in
|
|
1403
|
+
* order. One call adds, removes, reorders and re-captions: screenshots already
|
|
1404
|
+
* on the product stay; new ids must be the caller's processed
|
|
1405
|
+
* `product_screenshot` uploads; any left out are deleted from storage.
|
|
1406
|
+
*/
|
|
1407
|
+
export declare const setProductScreenshotsBodySchema: z.ZodObject<{
|
|
1408
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
1409
|
+
mediaId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1410
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
1411
|
+
}, z.core.$strip>>;
|
|
1412
|
+
}, z.core.$strip>;
|
|
1413
|
+
export type SetProductScreenshotsBody = z.infer<typeof setProductScreenshotsBodySchema>;
|
|
1414
|
+
export declare const setProductVisibilityBodySchema: z.ZodObject<{
|
|
1415
|
+
visibility: z.ZodEnum<{
|
|
1416
|
+
unlisted: "unlisted";
|
|
1417
|
+
listed: "listed";
|
|
1418
|
+
}>;
|
|
1419
|
+
}, z.core.$strip>;
|
|
1420
|
+
export type SetProductVisibilityBody = z.infer<typeof setProductVisibilityBodySchema>;
|
|
1421
|
+
export declare const setProductStatusBodySchema: z.ZodObject<{
|
|
1422
|
+
status: z.ZodEnum<{
|
|
1423
|
+
active: "active";
|
|
1424
|
+
archived: "archived";
|
|
1425
|
+
}>;
|
|
1426
|
+
}, z.core.$strip>;
|
|
1427
|
+
export type SetProductStatusBody = z.infer<typeof setProductStatusBodySchema>;
|
|
1428
|
+
/**
|
|
1429
|
+
* Invite a member to the team; they must accept. `userId` is the member's id
|
|
1430
|
+
* as every card carries it (`founderCardSchema.userId`). Someone who cannot
|
|
1431
|
+
* join (has not finished onboarding, paused, suspended, deleted) is
|
|
1432
|
+
* `PRODUCT_MEMBER_NOT_INVITABLE`; someone already on it or invited,
|
|
1433
|
+
* `PRODUCT_ALREADY_MEMBER`.
|
|
1434
|
+
*/
|
|
1435
|
+
export declare const inviteProductMemberBodySchema: z.ZodObject<{
|
|
1436
|
+
userId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1437
|
+
role: z.ZodEnum<{
|
|
1438
|
+
team: "team";
|
|
1439
|
+
cofounder: "cofounder";
|
|
1440
|
+
}>;
|
|
1441
|
+
}, z.core.$strip>;
|
|
1442
|
+
export type InviteProductMemberBody = z.infer<typeof inviteProductMemberBodySchema>;
|
|
1443
|
+
/**
|
|
1444
|
+
* The owner changes someone's role (on the team or still invited). The
|
|
1445
|
+
* owner's own role changes only by handing over (`PRODUCT_OWNER_MUST_TRANSFER`);
|
|
1446
|
+
* someone not on the team or invited is `PRODUCT_NOT_ON_TEAM`.
|
|
1447
|
+
*/
|
|
1448
|
+
export declare const setProductMemberRoleBodySchema: z.ZodObject<{
|
|
1449
|
+
role: z.ZodEnum<{
|
|
1450
|
+
team: "team";
|
|
1451
|
+
cofounder: "cofounder";
|
|
1452
|
+
}>;
|
|
1453
|
+
}, z.core.$strip>;
|
|
1454
|
+
export type SetProductMemberRoleBody = z.infer<typeof setProductMemberRoleBodySchema>;
|
|
1455
|
+
/**
|
|
1456
|
+
* The owner hands the product to someone already on its team (not merely
|
|
1457
|
+
* invited: `PRODUCT_NOT_ON_TEAM`), who must have room under
|
|
1458
|
+
* `PRODUCTS_OWNED_MAX` (`PRODUCT_LIMIT_REACHED`). The old owner becomes a co-founder.
|
|
1459
|
+
*/
|
|
1460
|
+
export declare const transferProductBodySchema: z.ZodObject<{
|
|
1461
|
+
userId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
1462
|
+
}, z.core.$strip>;
|
|
1463
|
+
export type TransferProductBody = z.infer<typeof transferProductBodySchema>;
|
|
1464
|
+
//# sourceMappingURL=products.d.ts.map
|