@prave/shared 0.1.0 → 0.3.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/lib/classify.d.ts +21 -0
- package/dist/lib/classify.d.ts.map +1 -0
- package/dist/lib/classify.js +121 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/schemas/api-keys.schema.d.ts +71 -0
- package/dist/schemas/api-keys.schema.d.ts.map +1 -0
- package/dist/schemas/api-keys.schema.js +29 -0
- package/dist/schemas/billing.schema.d.ts +7 -7
- package/dist/schemas/billing.schema.d.ts.map +1 -1
- package/dist/schemas/billing.schema.js +2 -2
- package/dist/schemas/credits.schema.d.ts +61 -0
- package/dist/schemas/credits.schema.d.ts.map +1 -0
- package/dist/schemas/credits.schema.js +44 -0
- package/dist/schemas/index.d.ts +4 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -1
- package/dist/schemas/install.schema.d.ts +27 -5
- package/dist/schemas/install.schema.d.ts.map +1 -1
- package/dist/schemas/intelligence.schema.d.ts +82 -0
- package/dist/schemas/intelligence.schema.d.ts.map +1 -0
- package/dist/schemas/intelligence.schema.js +31 -0
- package/dist/schemas/marketplace.schema.d.ts +2 -2
- package/dist/schemas/marketplace.schema.d.ts.map +1 -1
- package/dist/schemas/marketplace.schema.js +2 -2
- package/dist/schemas/org.schema.d.ts +3 -3
- package/dist/schemas/search.schema.d.ts +41 -3
- package/dist/schemas/search.schema.d.ts.map +1 -1
- package/dist/schemas/skill-dependency.schema.d.ts +27 -5
- package/dist/schemas/skill-dependency.schema.d.ts.map +1 -1
- package/dist/schemas/skill-pr.schema.d.ts +544 -0
- package/dist/schemas/skill-pr.schema.d.ts.map +1 -0
- package/dist/schemas/skill-pr.schema.js +87 -0
- package/dist/schemas/skill-test.schema.d.ts +4 -9
- package/dist/schemas/skill-test.schema.d.ts.map +1 -1
- package/dist/schemas/skill-test.schema.js +4 -9
- package/dist/schemas/skill.schema.d.ts +76 -10
- package/dist/schemas/skill.schema.d.ts.map +1 -1
- package/dist/schemas/skill.schema.js +16 -1
- package/dist/types/categories.d.ts +5 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +35 -0
- package/dist/types/index.d.ts +26 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -1
- package/dist/types/intelligence.d.ts +132 -0
- package/dist/types/intelligence.d.ts.map +1 -0
- package/dist/types/intelligence.js +52 -0
- package/dist/types/plan-limits.d.ts +62 -0
- package/dist/types/plan-limits.d.ts.map +1 -0
- package/dist/types/plan-limits.js +88 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const skillVisibilitySchema: z.ZodEnum<["public", "private"
|
|
2
|
+
export declare const skillVisibilitySchema: z.ZodEnum<["public", "private"]>;
|
|
3
3
|
export type SkillVisibility = z.infer<typeof skillVisibilitySchema>;
|
|
4
4
|
export declare const skillSchema: z.ZodObject<{
|
|
5
5
|
id: z.ZodString;
|
|
@@ -8,7 +8,7 @@ export declare const skillSchema: z.ZodObject<{
|
|
|
8
8
|
slug: z.ZodString;
|
|
9
9
|
description: z.ZodNullable<z.ZodString>;
|
|
10
10
|
content: z.ZodNullable<z.ZodString>;
|
|
11
|
-
visibility: z.ZodDefault<z.ZodEnum<["public", "private"
|
|
11
|
+
visibility: z.ZodDefault<z.ZodEnum<["public", "private"]>>;
|
|
12
12
|
source_repo: z.ZodNullable<z.ZodString>;
|
|
13
13
|
license: z.ZodDefault<z.ZodString>;
|
|
14
14
|
category: z.ZodNullable<z.ZodString>;
|
|
@@ -24,6 +24,29 @@ export declare const skillSchema: z.ZodObject<{
|
|
|
24
24
|
is_owner: z.ZodOptional<z.ZodBoolean>;
|
|
25
25
|
/** Attached by the API on GET: true if the caller has bookmarked the Skill. */
|
|
26
26
|
bookmarked: z.ZodOptional<z.ZodBoolean>;
|
|
27
|
+
/** Attached by the API: a public slice of the owner profile so cards can render attribution. */
|
|
28
|
+
owner: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
29
|
+
id: z.ZodString;
|
|
30
|
+
username: z.ZodNullable<z.ZodString>;
|
|
31
|
+
display_name: z.ZodNullable<z.ZodString>;
|
|
32
|
+
avatar_url: z.ZodNullable<z.ZodString>;
|
|
33
|
+
is_creator: z.ZodBoolean;
|
|
34
|
+
is_partner: z.ZodBoolean;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
id: string;
|
|
37
|
+
username: string | null;
|
|
38
|
+
display_name: string | null;
|
|
39
|
+
avatar_url: string | null;
|
|
40
|
+
is_creator: boolean;
|
|
41
|
+
is_partner: boolean;
|
|
42
|
+
}, {
|
|
43
|
+
id: string;
|
|
44
|
+
username: string | null;
|
|
45
|
+
display_name: string | null;
|
|
46
|
+
avatar_url: string | null;
|
|
47
|
+
is_creator: boolean;
|
|
48
|
+
is_partner: boolean;
|
|
49
|
+
}>>>;
|
|
27
50
|
created_at: z.ZodString;
|
|
28
51
|
updated_at: z.ZodString;
|
|
29
52
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -33,7 +56,7 @@ export declare const skillSchema: z.ZodObject<{
|
|
|
33
56
|
slug: string;
|
|
34
57
|
description: string | null;
|
|
35
58
|
content: string | null;
|
|
36
|
-
visibility: "public" | "private"
|
|
59
|
+
visibility: "public" | "private";
|
|
37
60
|
source_repo: string | null;
|
|
38
61
|
license: string;
|
|
39
62
|
category: string | null;
|
|
@@ -48,6 +71,14 @@ export declare const skillSchema: z.ZodObject<{
|
|
|
48
71
|
purchased?: boolean | undefined;
|
|
49
72
|
is_owner?: boolean | undefined;
|
|
50
73
|
bookmarked?: boolean | undefined;
|
|
74
|
+
owner?: {
|
|
75
|
+
id: string;
|
|
76
|
+
username: string | null;
|
|
77
|
+
display_name: string | null;
|
|
78
|
+
avatar_url: string | null;
|
|
79
|
+
is_creator: boolean;
|
|
80
|
+
is_partner: boolean;
|
|
81
|
+
} | null | undefined;
|
|
51
82
|
}, {
|
|
52
83
|
id: string;
|
|
53
84
|
owner_id: string;
|
|
@@ -59,7 +90,7 @@ export declare const skillSchema: z.ZodObject<{
|
|
|
59
90
|
category: string | null;
|
|
60
91
|
created_at: string;
|
|
61
92
|
updated_at: string;
|
|
62
|
-
visibility?: "public" | "private" |
|
|
93
|
+
visibility?: "public" | "private" | undefined;
|
|
63
94
|
license?: string | undefined;
|
|
64
95
|
tags?: string[] | undefined;
|
|
65
96
|
install_count?: number | undefined;
|
|
@@ -70,6 +101,14 @@ export declare const skillSchema: z.ZodObject<{
|
|
|
70
101
|
purchased?: boolean | undefined;
|
|
71
102
|
is_owner?: boolean | undefined;
|
|
72
103
|
bookmarked?: boolean | undefined;
|
|
104
|
+
owner?: {
|
|
105
|
+
id: string;
|
|
106
|
+
username: string | null;
|
|
107
|
+
display_name: string | null;
|
|
108
|
+
avatar_url: string | null;
|
|
109
|
+
is_creator: boolean;
|
|
110
|
+
is_partner: boolean;
|
|
111
|
+
} | null | undefined;
|
|
73
112
|
}>;
|
|
74
113
|
export type Skill = z.infer<typeof skillSchema>;
|
|
75
114
|
export declare const createSkillInputSchema: z.ZodObject<{
|
|
@@ -77,7 +116,7 @@ export declare const createSkillInputSchema: z.ZodObject<{
|
|
|
77
116
|
slug: z.ZodString;
|
|
78
117
|
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
79
118
|
content: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
80
|
-
visibility: z.ZodOptional<z.ZodDefault<z.ZodEnum<["public", "private"
|
|
119
|
+
visibility: z.ZodOptional<z.ZodDefault<z.ZodEnum<["public", "private"]>>>;
|
|
81
120
|
source_repo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
82
121
|
license: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
83
122
|
category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -89,7 +128,7 @@ export declare const createSkillInputSchema: z.ZodObject<{
|
|
|
89
128
|
slug: string;
|
|
90
129
|
description?: string | null | undefined;
|
|
91
130
|
content?: string | null | undefined;
|
|
92
|
-
visibility?: "public" | "private" |
|
|
131
|
+
visibility?: "public" | "private" | undefined;
|
|
93
132
|
source_repo?: string | null | undefined;
|
|
94
133
|
license?: string | undefined;
|
|
95
134
|
category?: string | null | undefined;
|
|
@@ -101,7 +140,7 @@ export declare const createSkillInputSchema: z.ZodObject<{
|
|
|
101
140
|
slug: string;
|
|
102
141
|
description?: string | null | undefined;
|
|
103
142
|
content?: string | null | undefined;
|
|
104
|
-
visibility?: "public" | "private" |
|
|
143
|
+
visibility?: "public" | "private" | undefined;
|
|
105
144
|
source_repo?: string | null | undefined;
|
|
106
145
|
license?: string | undefined;
|
|
107
146
|
category?: string | null | undefined;
|
|
@@ -115,7 +154,7 @@ export declare const updateSkillInputSchema: z.ZodObject<{
|
|
|
115
154
|
slug: z.ZodOptional<z.ZodString>;
|
|
116
155
|
description: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
117
156
|
content: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
118
|
-
visibility: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodEnum<["public", "private"
|
|
157
|
+
visibility: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodEnum<["public", "private"]>>>>;
|
|
119
158
|
source_repo: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
120
159
|
license: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodString>>>;
|
|
121
160
|
category: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
@@ -129,7 +168,7 @@ export declare const updateSkillInputSchema: z.ZodObject<{
|
|
|
129
168
|
slug?: string | undefined;
|
|
130
169
|
description?: string | null | undefined;
|
|
131
170
|
content?: string | null | undefined;
|
|
132
|
-
visibility?: "public" | "private" |
|
|
171
|
+
visibility?: "public" | "private" | undefined;
|
|
133
172
|
source_repo?: string | null | undefined;
|
|
134
173
|
license?: string | undefined;
|
|
135
174
|
category?: string | null | undefined;
|
|
@@ -142,7 +181,7 @@ export declare const updateSkillInputSchema: z.ZodObject<{
|
|
|
142
181
|
slug?: string | undefined;
|
|
143
182
|
description?: string | null | undefined;
|
|
144
183
|
content?: string | null | undefined;
|
|
145
|
-
visibility?: "public" | "private" |
|
|
184
|
+
visibility?: "public" | "private" | undefined;
|
|
146
185
|
source_repo?: string | null | undefined;
|
|
147
186
|
license?: string | undefined;
|
|
148
187
|
category?: string | null | undefined;
|
|
@@ -177,4 +216,31 @@ export declare const skillSearchQuerySchema: z.ZodObject<{
|
|
|
177
216
|
offset?: number | undefined;
|
|
178
217
|
}>;
|
|
179
218
|
export type SkillSearchQuery = z.infer<typeof skillSearchQuerySchema>;
|
|
219
|
+
export declare const mySkillsQuerySchema: z.ZodObject<{
|
|
220
|
+
q: z.ZodOptional<z.ZodString>;
|
|
221
|
+
category: z.ZodOptional<z.ZodString>;
|
|
222
|
+
tag: z.ZodOptional<z.ZodString>;
|
|
223
|
+
sort: z.ZodDefault<z.ZodEnum<["trending", "popular", "newest", "relevance"]>>;
|
|
224
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
225
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
226
|
+
} & {
|
|
227
|
+
visibility: z.ZodOptional<z.ZodEnum<["public", "private"]>>;
|
|
228
|
+
}, "strip", z.ZodTypeAny, {
|
|
229
|
+
sort: "trending" | "popular" | "newest" | "relevance";
|
|
230
|
+
limit: number;
|
|
231
|
+
offset: number;
|
|
232
|
+
visibility?: "public" | "private" | undefined;
|
|
233
|
+
category?: string | undefined;
|
|
234
|
+
q?: string | undefined;
|
|
235
|
+
tag?: string | undefined;
|
|
236
|
+
}, {
|
|
237
|
+
sort?: "trending" | "popular" | "newest" | "relevance" | undefined;
|
|
238
|
+
visibility?: "public" | "private" | undefined;
|
|
239
|
+
category?: string | undefined;
|
|
240
|
+
q?: string | undefined;
|
|
241
|
+
tag?: string | undefined;
|
|
242
|
+
limit?: number | undefined;
|
|
243
|
+
offset?: number | undefined;
|
|
244
|
+
}>;
|
|
245
|
+
export type MySkillsQuery = z.infer<typeof mySkillsQuerySchema>;
|
|
180
246
|
//# sourceMappingURL=skill.schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/skill.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"skill.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/skill.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,qBAAqB,kCAAgC,CAAA;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;IAqBtB,6EAA6E;;IAE7E,mEAAmE;;IAEnE,+EAA+E;;IAE/E,gGAAgG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAchG,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwB/B,CAAA;AACJ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,eAAe,2DAAyD,CAAA;AACrF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAEvD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;EAE9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export const skillVisibilitySchema = z.enum(['public', 'private'
|
|
2
|
+
export const skillVisibilitySchema = z.enum(['public', 'private']);
|
|
3
3
|
export const skillSchema = z.object({
|
|
4
4
|
id: z.string().uuid(),
|
|
5
5
|
owner_id: z.string().uuid(),
|
|
@@ -27,6 +27,18 @@ export const skillSchema = z.object({
|
|
|
27
27
|
is_owner: z.boolean().optional(),
|
|
28
28
|
/** Attached by the API on GET: true if the caller has bookmarked the Skill. */
|
|
29
29
|
bookmarked: z.boolean().optional(),
|
|
30
|
+
/** Attached by the API: a public slice of the owner profile so cards can render attribution. */
|
|
31
|
+
owner: z
|
|
32
|
+
.object({
|
|
33
|
+
id: z.string().uuid(),
|
|
34
|
+
username: z.string().nullable(),
|
|
35
|
+
display_name: z.string().nullable(),
|
|
36
|
+
avatar_url: z.string().nullable(),
|
|
37
|
+
is_creator: z.boolean(),
|
|
38
|
+
is_partner: z.boolean(),
|
|
39
|
+
})
|
|
40
|
+
.nullable()
|
|
41
|
+
.optional(),
|
|
30
42
|
created_at: z.string().datetime(),
|
|
31
43
|
updated_at: z.string().datetime(),
|
|
32
44
|
});
|
|
@@ -67,3 +79,6 @@ export const skillSearchQuerySchema = z.object({
|
|
|
67
79
|
limit: z.coerce.number().int().min(1).max(100).default(24),
|
|
68
80
|
offset: z.coerce.number().int().nonnegative().default(0),
|
|
69
81
|
});
|
|
82
|
+
export const mySkillsQuerySchema = skillSearchQuerySchema.extend({
|
|
83
|
+
visibility: z.enum(['public', 'private']).optional(),
|
|
84
|
+
});
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const SKILL_CATEGORIES: readonly ["engineering", "design", "marketing", "research", "writing", "analytics", "productivity", "devops", "data", "ai", "security", "product", "workflow-orchestration", "other"];
|
|
2
|
+
export type SkillCategory = (typeof SKILL_CATEGORIES)[number];
|
|
3
|
+
export declare const CATEGORY_LABELS: Record<SkillCategory, string>;
|
|
4
|
+
export declare function isSkillCategory(value: unknown): value is SkillCategory;
|
|
5
|
+
//# sourceMappingURL=categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/types/categories.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,uLAenB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAezD,CAAA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const SKILL_CATEGORIES = [
|
|
2
|
+
'engineering',
|
|
3
|
+
'design',
|
|
4
|
+
'marketing',
|
|
5
|
+
'research',
|
|
6
|
+
'writing',
|
|
7
|
+
'analytics',
|
|
8
|
+
'productivity',
|
|
9
|
+
'devops',
|
|
10
|
+
'data',
|
|
11
|
+
'ai',
|
|
12
|
+
'security',
|
|
13
|
+
'product',
|
|
14
|
+
'workflow-orchestration',
|
|
15
|
+
'other',
|
|
16
|
+
];
|
|
17
|
+
export const CATEGORY_LABELS = {
|
|
18
|
+
engineering: 'Engineering',
|
|
19
|
+
design: 'Design',
|
|
20
|
+
marketing: 'Marketing',
|
|
21
|
+
research: 'Research',
|
|
22
|
+
writing: 'Writing',
|
|
23
|
+
analytics: 'Analytics',
|
|
24
|
+
productivity: 'Productivity',
|
|
25
|
+
devops: 'DevOps',
|
|
26
|
+
data: 'Data',
|
|
27
|
+
ai: 'AI',
|
|
28
|
+
security: 'Security',
|
|
29
|
+
product: 'Product',
|
|
30
|
+
'workflow-orchestration': 'Workflow',
|
|
31
|
+
other: 'Other',
|
|
32
|
+
};
|
|
33
|
+
export function isSkillCategory(value) {
|
|
34
|
+
return typeof value === 'string' && SKILL_CATEGORIES.includes(value);
|
|
35
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from './categories.js';
|
|
2
|
+
export * from './plan-limits.js';
|
|
3
|
+
export * from './intelligence.js';
|
|
4
|
+
export type UserPlan = 'free' | 'explorer' | 'creator';
|
|
2
5
|
export type UserRole = 'user' | 'admin';
|
|
3
6
|
export interface Profile {
|
|
4
7
|
id: string;
|
|
@@ -6,12 +9,34 @@ export interface Profile {
|
|
|
6
9
|
display_name: string | null;
|
|
7
10
|
avatar_url: string | null;
|
|
8
11
|
github_username: string | null;
|
|
12
|
+
bio: string | null;
|
|
13
|
+
website_url: string | null;
|
|
14
|
+
is_creator: boolean;
|
|
15
|
+
is_partner: boolean;
|
|
9
16
|
role: UserRole;
|
|
10
17
|
plan: UserPlan;
|
|
11
18
|
stripe_customer_id: string | null;
|
|
12
19
|
created_at: string;
|
|
13
20
|
updated_at: string;
|
|
14
21
|
}
|
|
22
|
+
/** Public-safe profile slice — no plan, no stripe ids, no role. */
|
|
23
|
+
export interface PublicProfile {
|
|
24
|
+
id: string;
|
|
25
|
+
username: string | null;
|
|
26
|
+
display_name: string | null;
|
|
27
|
+
avatar_url: string | null;
|
|
28
|
+
github_username: string | null;
|
|
29
|
+
bio: string | null;
|
|
30
|
+
website_url: string | null;
|
|
31
|
+
is_creator: boolean;
|
|
32
|
+
is_partner: boolean;
|
|
33
|
+
created_at: string;
|
|
34
|
+
}
|
|
35
|
+
export interface PublicProfilePage {
|
|
36
|
+
profile: PublicProfile;
|
|
37
|
+
skills: import('../schemas/skill.schema.js').Skill[];
|
|
38
|
+
skill_count: number;
|
|
39
|
+
}
|
|
15
40
|
export interface AuthUser {
|
|
16
41
|
id: string;
|
|
17
42
|
email: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AAEjC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AACtD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,OAAO,4BAA4B,EAAE,KAAK,EAAE,CAAA;IACpD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd"}
|
package/dist/types/index.js
CHANGED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Intelligence — types shared across the API, web, CLI.
|
|
3
|
+
*
|
|
4
|
+
* Source-of-truth for the rows in `skill_metadata`, `skill_conflicts`,
|
|
5
|
+
* `skill_usage_stats`, and `user_agent_settings`. Every layer reads these.
|
|
6
|
+
*/
|
|
7
|
+
export declare const AGENT_TYPES: readonly ["claude", "codex", "cursor", "gemini", "cline", "amp"];
|
|
8
|
+
export type AgentType = (typeof AGENT_TYPES)[number];
|
|
9
|
+
export interface AgentMeta {
|
|
10
|
+
id: AgentType;
|
|
11
|
+
label: string;
|
|
12
|
+
description: string;
|
|
13
|
+
/** Default OS-specific skill paths used as a fallback in the UI. */
|
|
14
|
+
defaultPath: {
|
|
15
|
+
mac: string;
|
|
16
|
+
windows: string;
|
|
17
|
+
};
|
|
18
|
+
/** When true, the SKILL.md needs format conversion before deploy. */
|
|
19
|
+
conversionRequired: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const AGENT_REGISTRY: Record<AgentType, AgentMeta>;
|
|
22
|
+
export interface SkillMetadata {
|
|
23
|
+
id: string;
|
|
24
|
+
skill_id: string | null;
|
|
25
|
+
user_id: string;
|
|
26
|
+
name: string | null;
|
|
27
|
+
description: string | null;
|
|
28
|
+
triggers: string[];
|
|
29
|
+
slash_command: string | null;
|
|
30
|
+
disable_model_invocation: boolean;
|
|
31
|
+
user_invocable: boolean;
|
|
32
|
+
requires: string[];
|
|
33
|
+
estimated_tokens: number;
|
|
34
|
+
file_path: string;
|
|
35
|
+
agent_type: AgentType;
|
|
36
|
+
last_analyzed: string;
|
|
37
|
+
created_at: string;
|
|
38
|
+
updated_at: string;
|
|
39
|
+
}
|
|
40
|
+
export type ConflictType = 'trigger_overlap' | 'auto_invocation_collision' | 'dependency_conflict';
|
|
41
|
+
export interface SkillConflict {
|
|
42
|
+
id: string;
|
|
43
|
+
user_id: string;
|
|
44
|
+
skill_a_id: string;
|
|
45
|
+
skill_b_id: string;
|
|
46
|
+
conflict_type: ConflictType;
|
|
47
|
+
conflict_detail: string | null;
|
|
48
|
+
detected_at: string;
|
|
49
|
+
skill_a_name?: string | null;
|
|
50
|
+
skill_b_name?: string | null;
|
|
51
|
+
}
|
|
52
|
+
export interface SkillUsageStat {
|
|
53
|
+
id: string;
|
|
54
|
+
user_id: string;
|
|
55
|
+
skill_metadata_id: string;
|
|
56
|
+
trigger_phrase: string | null;
|
|
57
|
+
triggered_at: string;
|
|
58
|
+
}
|
|
59
|
+
export interface UserAgentSettings {
|
|
60
|
+
user_id: string;
|
|
61
|
+
enabled_agents: AgentType[];
|
|
62
|
+
skill_paths: Record<AgentType, {
|
|
63
|
+
mac: string;
|
|
64
|
+
windows: string;
|
|
65
|
+
}>;
|
|
66
|
+
detected_os: 'mac' | 'windows' | 'linux' | null;
|
|
67
|
+
updated_at: string;
|
|
68
|
+
}
|
|
69
|
+
export interface IntelligenceOverview {
|
|
70
|
+
total_skills: number;
|
|
71
|
+
auto_trigger_count: number;
|
|
72
|
+
user_invocable_count: number;
|
|
73
|
+
total_estimated_tokens: number;
|
|
74
|
+
conflict_count: number;
|
|
75
|
+
agents: {
|
|
76
|
+
agent: AgentType;
|
|
77
|
+
skill_count: number;
|
|
78
|
+
}[];
|
|
79
|
+
/** Top 5 token-heaviest skills, for the panel summary. */
|
|
80
|
+
heaviest: Array<Pick<SkillMetadata, 'id' | 'name' | 'slash_command' | 'estimated_tokens'>>;
|
|
81
|
+
}
|
|
82
|
+
export interface IntelligenceOptimization {
|
|
83
|
+
underused: SkillMetadata[];
|
|
84
|
+
merge_candidates: Array<{
|
|
85
|
+
a: SkillMetadata;
|
|
86
|
+
b: SkillMetadata;
|
|
87
|
+
reason: string;
|
|
88
|
+
}>;
|
|
89
|
+
heavy: SkillMetadata[];
|
|
90
|
+
total_savings_estimate_tokens: number;
|
|
91
|
+
}
|
|
92
|
+
export interface IntelligenceSearchResult {
|
|
93
|
+
source: 'local' | 'marketplace';
|
|
94
|
+
id: string;
|
|
95
|
+
slug: string;
|
|
96
|
+
name: string;
|
|
97
|
+
description: string | null;
|
|
98
|
+
slash_command: string | null;
|
|
99
|
+
estimated_tokens: number;
|
|
100
|
+
install_count?: number | null;
|
|
101
|
+
rating?: number | null;
|
|
102
|
+
is_installed: boolean;
|
|
103
|
+
}
|
|
104
|
+
export interface LlmSearchResult {
|
|
105
|
+
task: string;
|
|
106
|
+
keywords: string[];
|
|
107
|
+
scope: 'local' | 'marketplace' | 'both';
|
|
108
|
+
suggested_triggers: string[];
|
|
109
|
+
results: IntelligenceSearchResult[];
|
|
110
|
+
}
|
|
111
|
+
/** Shape returned to `prave whatdoes` and the Intelligence detail panel. */
|
|
112
|
+
export interface SkillWhatDoes {
|
|
113
|
+
found: boolean;
|
|
114
|
+
source: 'local' | 'marketplace' | null;
|
|
115
|
+
metadata: SkillMetadata | null;
|
|
116
|
+
marketplace?: {
|
|
117
|
+
slug: string;
|
|
118
|
+
name: string;
|
|
119
|
+
description: string | null;
|
|
120
|
+
install_count: number;
|
|
121
|
+
rating: number | null;
|
|
122
|
+
} | null;
|
|
123
|
+
conflicts: SkillConflict[];
|
|
124
|
+
similar?: Array<{
|
|
125
|
+
slug: string;
|
|
126
|
+
name: string;
|
|
127
|
+
}>;
|
|
128
|
+
}
|
|
129
|
+
/** Token-tier classification used by the CLI + UI badges. */
|
|
130
|
+
export type TokenTier = 'lean' | 'medium' | 'heavy';
|
|
131
|
+
export declare const tokenTier: (n: number) => TokenTier;
|
|
132
|
+
//# sourceMappingURL=intelligence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../src/types/intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Intelligence — types shared across the API, web, CLI.
|
|
3
|
+
*
|
|
4
|
+
* Source-of-truth for the rows in `skill_metadata`, `skill_conflicts`,
|
|
5
|
+
* `skill_usage_stats`, and `user_agent_settings`. Every layer reads these.
|
|
6
|
+
*/
|
|
7
|
+
export const AGENT_TYPES = ['claude', 'codex', 'cursor', 'gemini', 'cline', 'amp'];
|
|
8
|
+
export const AGENT_REGISTRY = {
|
|
9
|
+
claude: {
|
|
10
|
+
id: 'claude',
|
|
11
|
+
label: 'Claude Code',
|
|
12
|
+
description: "Anthropic's terminal-based coding agent",
|
|
13
|
+
defaultPath: { mac: '~/.claude/skills/', windows: '%APPDATA%\\Claude\\skills\\' },
|
|
14
|
+
conversionRequired: false,
|
|
15
|
+
},
|
|
16
|
+
codex: {
|
|
17
|
+
id: 'codex',
|
|
18
|
+
label: 'OpenAI Codex',
|
|
19
|
+
description: "OpenAI's CLI coding agent",
|
|
20
|
+
defaultPath: { mac: '~/.codex/skills/', windows: '%APPDATA%\\Codex\\skills\\' },
|
|
21
|
+
conversionRequired: false,
|
|
22
|
+
},
|
|
23
|
+
cursor: {
|
|
24
|
+
id: 'cursor',
|
|
25
|
+
label: 'Cursor',
|
|
26
|
+
description: 'AI-first code editor',
|
|
27
|
+
defaultPath: { mac: '.cursor/rules/', windows: '.cursor\\rules\\' },
|
|
28
|
+
conversionRequired: true,
|
|
29
|
+
},
|
|
30
|
+
gemini: {
|
|
31
|
+
id: 'gemini',
|
|
32
|
+
label: 'Gemini CLI',
|
|
33
|
+
description: "Google's terminal agent",
|
|
34
|
+
defaultPath: { mac: '~/.gemini/skills/', windows: '%APPDATA%\\Gemini\\skills\\' },
|
|
35
|
+
conversionRequired: false,
|
|
36
|
+
},
|
|
37
|
+
cline: {
|
|
38
|
+
id: 'cline',
|
|
39
|
+
label: 'Cline',
|
|
40
|
+
description: 'Open-source VS Code agent',
|
|
41
|
+
defaultPath: { mac: '~/.cline/skills/', windows: '%APPDATA%\\Cline\\skills\\' },
|
|
42
|
+
conversionRequired: false,
|
|
43
|
+
},
|
|
44
|
+
amp: {
|
|
45
|
+
id: 'amp',
|
|
46
|
+
label: 'Amp',
|
|
47
|
+
description: 'Ampcode terminal agent',
|
|
48
|
+
defaultPath: { mac: '~/.amp/skills/', windows: '%APPDATA%\\Amp\\skills\\' },
|
|
49
|
+
conversionRequired: false,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
export const tokenTier = (n) => n < 500 ? 'lean' : n < 2000 ? 'medium' : 'heavy';
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Plan } from '../schemas/billing.schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* PLAN_LIMITS — single source of truth for every gate, quota and copy
|
|
4
|
+
* choice across the app. Backend uses the numeric/boolean fields to
|
|
5
|
+
* enforce rules; frontend reads the same object to render disabled
|
|
6
|
+
* states + upgrade CTAs; CLI calls /me/plan and resolves limits here so
|
|
7
|
+
* one config drives all three surfaces.
|
|
8
|
+
*
|
|
9
|
+
* `null` numeric limits = unlimited.
|
|
10
|
+
*/
|
|
11
|
+
export interface PlanLimits {
|
|
12
|
+
/** Display label used in pricing cards / Settings */
|
|
13
|
+
label: string;
|
|
14
|
+
/** Monthly price in EUR (display only — Stripe is the source of truth) */
|
|
15
|
+
price_eur_monthly: number;
|
|
16
|
+
/** Marketing tagline for the plan card */
|
|
17
|
+
tagline: string;
|
|
18
|
+
/** Marketplace creator share (0–1). Free can't sell. */
|
|
19
|
+
creator_revenue_share: number | null;
|
|
20
|
+
/** Max public skills the user can publish. null = unlimited. */
|
|
21
|
+
max_public_skills: number | null;
|
|
22
|
+
/** Can the user create private skills? */
|
|
23
|
+
can_private_skills: boolean;
|
|
24
|
+
/** Max private skills if allowed. null = unlimited. */
|
|
25
|
+
max_private_skills: number | null;
|
|
26
|
+
/** History tab + revert. */
|
|
27
|
+
can_versioning: boolean;
|
|
28
|
+
/** Max paid skills listed simultaneously. 0 = no marketplace. null = unlimited. */
|
|
29
|
+
max_marketplace_listings: number | null;
|
|
30
|
+
/** Monthly BYOK tester runs. 0 = blocked. null = unlimited. */
|
|
31
|
+
tester_credits_monthly: number | null;
|
|
32
|
+
/** Max bookmarks. null = unlimited. */
|
|
33
|
+
max_bookmarks: number | null;
|
|
34
|
+
/** Total skills the user may import via CLI. null = unlimited. */
|
|
35
|
+
cli_max_imports: number | null;
|
|
36
|
+
/** Monthly export quota via CLI. 0 = blocked. null = unlimited. */
|
|
37
|
+
cli_exports_monthly: number | null;
|
|
38
|
+
/** `prave sync` enabled. */
|
|
39
|
+
can_cli_sync: boolean;
|
|
40
|
+
/** Auto-update on `prave sync` rather than diff-only. */
|
|
41
|
+
can_cli_auto_update: boolean;
|
|
42
|
+
/** `prave install --bulk`, `prave export --bulk`. */
|
|
43
|
+
can_cli_bulk: boolean;
|
|
44
|
+
/** Drag-and-drop block builder UI. */
|
|
45
|
+
can_block_builder: boolean;
|
|
46
|
+
/** CI-style skill pipelines + automated tests. */
|
|
47
|
+
can_pipelines: boolean;
|
|
48
|
+
/** Per-skill analytics page. */
|
|
49
|
+
can_analytics: boolean;
|
|
50
|
+
/** Verified Creator badge on public profile. */
|
|
51
|
+
has_creator_badge: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare const PLAN_LIMITS: Record<Plan, PlanLimits>;
|
|
54
|
+
export declare const PLAN_RANK: Record<Plan, number>;
|
|
55
|
+
/** True when `actual` includes everything `required` does. */
|
|
56
|
+
export declare const planMeets: (actual: Plan, required: Plan) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Smallest plan that satisfies a feature flag. Used by the UI to render
|
|
59
|
+
* accurate "Upgrade to X" CTAs without hard-coding plan names.
|
|
60
|
+
*/
|
|
61
|
+
export declare const minPlanFor: (feature: keyof PlanLimits) => Plan | null;
|
|
62
|
+
//# sourceMappingURL=plan-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-limits.d.ts","sourceRoot":"","sources":["../../src/types/plan-limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AAExD;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,iBAAiB,EAAE,MAAM,CAAA;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;IAGpC,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,0CAA0C;IAC1C,kBAAkB,EAAE,OAAO,CAAA;IAC3B,uDAAuD;IACvD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,4BAA4B;IAC5B,cAAc,EAAE,OAAO,CAAA;IAGvB,mFAAmF;IACnF,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IAGvC,+DAA+D;IAC/D,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAA;IAGrC,uCAAuC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAG5B,kEAAkE;IAClE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,mEAAmE;IACnE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,yDAAyD;IACzD,mBAAmB,EAAE,OAAO,CAAA;IAC5B,qDAAqD;IACrD,YAAY,EAAE,OAAO,CAAA;IAGrB,sCAAsC;IACtC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAA;IACtB,gCAAgC;IAChC,aAAa,EAAE,OAAO,CAAA;IACtB,gDAAgD;IAChD,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CA+EhD,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAI1C,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,SAAS,GAAI,QAAQ,IAAI,EAAE,UAAU,IAAI,KAAG,OACf,CAAA;AAE1C;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,UAAU,KAAG,IAAI,GAAG,IAO7D,CAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export const PLAN_LIMITS = {
|
|
2
|
+
free: {
|
|
3
|
+
label: 'Starter',
|
|
4
|
+
price_eur_monthly: 0,
|
|
5
|
+
tagline: 'Discover, install and try Prave Skills.',
|
|
6
|
+
creator_revenue_share: null,
|
|
7
|
+
max_public_skills: 3,
|
|
8
|
+
can_private_skills: false,
|
|
9
|
+
max_private_skills: 0,
|
|
10
|
+
can_versioning: false,
|
|
11
|
+
max_marketplace_listings: 0,
|
|
12
|
+
tester_credits_monthly: 10,
|
|
13
|
+
max_bookmarks: 5,
|
|
14
|
+
cli_max_imports: 10,
|
|
15
|
+
cli_exports_monthly: 0,
|
|
16
|
+
can_cli_sync: false,
|
|
17
|
+
can_cli_auto_update: false,
|
|
18
|
+
can_cli_bulk: false,
|
|
19
|
+
can_block_builder: false,
|
|
20
|
+
can_pipelines: false,
|
|
21
|
+
can_analytics: false,
|
|
22
|
+
has_creator_badge: false,
|
|
23
|
+
},
|
|
24
|
+
explorer: {
|
|
25
|
+
label: 'Explorer',
|
|
26
|
+
price_eur_monthly: 4,
|
|
27
|
+
tagline: 'For developers building and shipping Skills.',
|
|
28
|
+
creator_revenue_share: null,
|
|
29
|
+
max_public_skills: 20,
|
|
30
|
+
can_private_skills: true,
|
|
31
|
+
max_private_skills: 20,
|
|
32
|
+
can_versioning: true,
|
|
33
|
+
max_marketplace_listings: 0,
|
|
34
|
+
tester_credits_monthly: 80,
|
|
35
|
+
max_bookmarks: null,
|
|
36
|
+
cli_max_imports: null,
|
|
37
|
+
cli_exports_monthly: 50,
|
|
38
|
+
can_cli_sync: true,
|
|
39
|
+
can_cli_auto_update: false,
|
|
40
|
+
can_cli_bulk: false,
|
|
41
|
+
can_block_builder: false,
|
|
42
|
+
can_pipelines: false,
|
|
43
|
+
can_analytics: false,
|
|
44
|
+
has_creator_badge: false,
|
|
45
|
+
},
|
|
46
|
+
creator: {
|
|
47
|
+
label: 'Creator',
|
|
48
|
+
price_eur_monthly: 10,
|
|
49
|
+
tagline: 'For power users shipping and selling Skills daily.',
|
|
50
|
+
creator_revenue_share: 0.7,
|
|
51
|
+
max_public_skills: null,
|
|
52
|
+
can_private_skills: true,
|
|
53
|
+
max_private_skills: null,
|
|
54
|
+
can_versioning: true,
|
|
55
|
+
max_marketplace_listings: null,
|
|
56
|
+
tester_credits_monthly: 250,
|
|
57
|
+
max_bookmarks: null,
|
|
58
|
+
cli_max_imports: null,
|
|
59
|
+
cli_exports_monthly: null,
|
|
60
|
+
can_cli_sync: true,
|
|
61
|
+
can_cli_auto_update: true,
|
|
62
|
+
can_cli_bulk: true,
|
|
63
|
+
can_block_builder: true,
|
|
64
|
+
can_pipelines: true,
|
|
65
|
+
can_analytics: true,
|
|
66
|
+
has_creator_badge: true,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
export const PLAN_RANK = {
|
|
70
|
+
free: 0,
|
|
71
|
+
explorer: 1,
|
|
72
|
+
creator: 2,
|
|
73
|
+
};
|
|
74
|
+
/** True when `actual` includes everything `required` does. */
|
|
75
|
+
export const planMeets = (actual, required) => PLAN_RANK[actual] >= PLAN_RANK[required];
|
|
76
|
+
/**
|
|
77
|
+
* Smallest plan that satisfies a feature flag. Used by the UI to render
|
|
78
|
+
* accurate "Upgrade to X" CTAs without hard-coding plan names.
|
|
79
|
+
*/
|
|
80
|
+
export const minPlanFor = (feature) => {
|
|
81
|
+
const order = ['free', 'explorer', 'creator'];
|
|
82
|
+
for (const plan of order) {
|
|
83
|
+
const v = PLAN_LIMITS[plan][feature];
|
|
84
|
+
if (typeof v === 'boolean' ? v : v !== 0)
|
|
85
|
+
return plan;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
};
|