@prave/shared 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +2 -0
  4. package/dist/schemas/ai-description.schema.d.ts +82 -0
  5. package/dist/schemas/ai-description.schema.d.ts.map +1 -0
  6. package/dist/schemas/ai-description.schema.js +36 -0
  7. package/dist/schemas/api-response.schema.d.ts +22 -0
  8. package/dist/schemas/api-response.schema.d.ts.map +1 -0
  9. package/dist/schemas/api-response.schema.js +8 -0
  10. package/dist/schemas/billing.schema.d.ts +58 -0
  11. package/dist/schemas/billing.schema.d.ts.map +1 -0
  12. package/dist/schemas/billing.schema.js +33 -0
  13. package/dist/schemas/cli.schema.d.ts +57 -0
  14. package/dist/schemas/cli.schema.d.ts.map +1 -0
  15. package/dist/schemas/cli.schema.js +21 -0
  16. package/dist/schemas/index.d.ts +13 -0
  17. package/dist/schemas/index.d.ts.map +1 -0
  18. package/dist/schemas/index.js +12 -0
  19. package/dist/schemas/install.schema.d.ts +115 -0
  20. package/dist/schemas/install.schema.d.ts.map +1 -0
  21. package/dist/schemas/install.schema.js +28 -0
  22. package/dist/schemas/marketplace.schema.d.ts +200 -0
  23. package/dist/schemas/marketplace.schema.d.ts.map +1 -0
  24. package/dist/schemas/marketplace.schema.js +51 -0
  25. package/dist/schemas/org.schema.d.ts +112 -0
  26. package/dist/schemas/org.schema.d.ts.map +1 -0
  27. package/dist/schemas/org.schema.js +34 -0
  28. package/dist/schemas/search.schema.d.ts +105 -0
  29. package/dist/schemas/search.schema.d.ts.map +1 -0
  30. package/dist/schemas/search.schema.js +20 -0
  31. package/dist/schemas/skill-dependency.schema.d.ts +137 -0
  32. package/dist/schemas/skill-dependency.schema.d.ts.map +1 -0
  33. package/dist/schemas/skill-dependency.schema.js +32 -0
  34. package/dist/schemas/skill-test.schema.d.ts +65 -0
  35. package/dist/schemas/skill-test.schema.d.ts.map +1 -0
  36. package/dist/schemas/skill-test.schema.js +30 -0
  37. package/dist/schemas/skill-version.schema.d.ts +69 -0
  38. package/dist/schemas/skill-version.schema.d.ts.map +1 -0
  39. package/dist/schemas/skill-version.schema.js +21 -0
  40. package/dist/schemas/skill.schema.d.ts +180 -0
  41. package/dist/schemas/skill.schema.d.ts.map +1 -0
  42. package/dist/schemas/skill.schema.js +69 -0
  43. package/dist/types/index.d.ts +19 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +1 -0
  46. package/package.json +43 -0
@@ -0,0 +1,200 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Split percentage applied to every paid purchase. The creator receives
4
+ * `amount * (1 - PLATFORM_FEE)`, Prave keeps the rest (application_fee).
5
+ * Kept in shared so UI can render the take-home preview honestly.
6
+ */
7
+ export declare const PLATFORM_FEE_BPS = 1500;
8
+ export declare const PLATFORM_FEE_FRACTION = 0.15;
9
+ export declare const creatorAccountSchema: z.ZodObject<{
10
+ user_id: z.ZodString;
11
+ stripe_account_id: z.ZodString;
12
+ charges_enabled: z.ZodBoolean;
13
+ payouts_enabled: z.ZodBoolean;
14
+ default_currency: z.ZodNullable<z.ZodString>;
15
+ country: z.ZodNullable<z.ZodString>;
16
+ created_at: z.ZodString;
17
+ updated_at: z.ZodString;
18
+ }, "strip", z.ZodTypeAny, {
19
+ created_at: string;
20
+ updated_at: string;
21
+ user_id: string;
22
+ stripe_account_id: string;
23
+ charges_enabled: boolean;
24
+ payouts_enabled: boolean;
25
+ default_currency: string | null;
26
+ country: string | null;
27
+ }, {
28
+ created_at: string;
29
+ updated_at: string;
30
+ user_id: string;
31
+ stripe_account_id: string;
32
+ charges_enabled: boolean;
33
+ payouts_enabled: boolean;
34
+ default_currency: string | null;
35
+ country: string | null;
36
+ }>;
37
+ export type CreatorAccount = z.infer<typeof creatorAccountSchema>;
38
+ /** Response of GET /creator/account — `null` when the user hasn't onboarded. */
39
+ export type CreatorAccountResponse = CreatorAccount | null;
40
+ export declare const skillPurchaseSchema: z.ZodObject<{
41
+ id: z.ZodString;
42
+ user_id: z.ZodNullable<z.ZodString>;
43
+ skill_id: z.ZodString;
44
+ creator_id: z.ZodNullable<z.ZodString>;
45
+ amount_cents: z.ZodNumber;
46
+ currency: z.ZodString;
47
+ platform_fee_cents: z.ZodNumber;
48
+ creator_amount_cents: z.ZodNumber;
49
+ stripe_session_id: z.ZodNullable<z.ZodString>;
50
+ stripe_payment_intent_id: z.ZodNullable<z.ZodString>;
51
+ status: z.ZodEnum<["pending", "paid", "refunded", "failed"]>;
52
+ created_at: z.ZodString;
53
+ }, "strip", z.ZodTypeAny, {
54
+ status: "pending" | "paid" | "refunded" | "failed";
55
+ id: string;
56
+ currency: string;
57
+ created_at: string;
58
+ skill_id: string;
59
+ user_id: string | null;
60
+ creator_id: string | null;
61
+ amount_cents: number;
62
+ platform_fee_cents: number;
63
+ creator_amount_cents: number;
64
+ stripe_session_id: string | null;
65
+ stripe_payment_intent_id: string | null;
66
+ }, {
67
+ status: "pending" | "paid" | "refunded" | "failed";
68
+ id: string;
69
+ currency: string;
70
+ created_at: string;
71
+ skill_id: string;
72
+ user_id: string | null;
73
+ creator_id: string | null;
74
+ amount_cents: number;
75
+ platform_fee_cents: number;
76
+ creator_amount_cents: number;
77
+ stripe_session_id: string | null;
78
+ stripe_payment_intent_id: string | null;
79
+ }>;
80
+ export type SkillPurchase = z.infer<typeof skillPurchaseSchema>;
81
+ /** POST /creator/connect — returns a Stripe hosted onboarding URL. */
82
+ export declare const connectSessionResponseSchema: z.ZodObject<{
83
+ url: z.ZodString;
84
+ stripe_account_id: z.ZodString;
85
+ }, "strip", z.ZodTypeAny, {
86
+ stripe_account_id: string;
87
+ url: string;
88
+ }, {
89
+ stripe_account_id: string;
90
+ url: string;
91
+ }>;
92
+ export type ConnectSessionResponse = z.infer<typeof connectSessionResponseSchema>;
93
+ /** POST /skills/:slug/checkout — body is empty; response returns Checkout URL. */
94
+ export declare const checkoutSessionResponseSchema: z.ZodObject<{
95
+ url: z.ZodString;
96
+ session_id: z.ZodString;
97
+ }, "strip", z.ZodTypeAny, {
98
+ url: string;
99
+ session_id: string;
100
+ }, {
101
+ url: string;
102
+ session_id: string;
103
+ }>;
104
+ export type CheckoutSessionResponse = z.infer<typeof checkoutSessionResponseSchema>;
105
+ /** GET /creator/stats — aggregated for the Creator Studio dashboard. */
106
+ export declare const creatorStatsSchema: z.ZodObject<{
107
+ total_sales: z.ZodNumber;
108
+ total_revenue_cents: z.ZodNumber;
109
+ total_earnings_cents: z.ZodNumber;
110
+ total_platform_fee_cents: z.ZodNumber;
111
+ currency: z.ZodString;
112
+ recent_sales: z.ZodArray<z.ZodObject<{
113
+ id: z.ZodString;
114
+ user_id: z.ZodNullable<z.ZodString>;
115
+ skill_id: z.ZodString;
116
+ creator_id: z.ZodNullable<z.ZodString>;
117
+ amount_cents: z.ZodNumber;
118
+ currency: z.ZodString;
119
+ platform_fee_cents: z.ZodNumber;
120
+ creator_amount_cents: z.ZodNumber;
121
+ stripe_session_id: z.ZodNullable<z.ZodString>;
122
+ stripe_payment_intent_id: z.ZodNullable<z.ZodString>;
123
+ status: z.ZodEnum<["pending", "paid", "refunded", "failed"]>;
124
+ created_at: z.ZodString;
125
+ } & {
126
+ skill_name: z.ZodOptional<z.ZodString>;
127
+ }, "strip", z.ZodTypeAny, {
128
+ status: "pending" | "paid" | "refunded" | "failed";
129
+ id: string;
130
+ currency: string;
131
+ created_at: string;
132
+ skill_id: string;
133
+ user_id: string | null;
134
+ creator_id: string | null;
135
+ amount_cents: number;
136
+ platform_fee_cents: number;
137
+ creator_amount_cents: number;
138
+ stripe_session_id: string | null;
139
+ stripe_payment_intent_id: string | null;
140
+ skill_name?: string | undefined;
141
+ }, {
142
+ status: "pending" | "paid" | "refunded" | "failed";
143
+ id: string;
144
+ currency: string;
145
+ created_at: string;
146
+ skill_id: string;
147
+ user_id: string | null;
148
+ creator_id: string | null;
149
+ amount_cents: number;
150
+ platform_fee_cents: number;
151
+ creator_amount_cents: number;
152
+ stripe_session_id: string | null;
153
+ stripe_payment_intent_id: string | null;
154
+ skill_name?: string | undefined;
155
+ }>, "many">;
156
+ }, "strip", z.ZodTypeAny, {
157
+ currency: string;
158
+ total_sales: number;
159
+ total_revenue_cents: number;
160
+ total_earnings_cents: number;
161
+ total_platform_fee_cents: number;
162
+ recent_sales: {
163
+ status: "pending" | "paid" | "refunded" | "failed";
164
+ id: string;
165
+ currency: string;
166
+ created_at: string;
167
+ skill_id: string;
168
+ user_id: string | null;
169
+ creator_id: string | null;
170
+ amount_cents: number;
171
+ platform_fee_cents: number;
172
+ creator_amount_cents: number;
173
+ stripe_session_id: string | null;
174
+ stripe_payment_intent_id: string | null;
175
+ skill_name?: string | undefined;
176
+ }[];
177
+ }, {
178
+ currency: string;
179
+ total_sales: number;
180
+ total_revenue_cents: number;
181
+ total_earnings_cents: number;
182
+ total_platform_fee_cents: number;
183
+ recent_sales: {
184
+ status: "pending" | "paid" | "refunded" | "failed";
185
+ id: string;
186
+ currency: string;
187
+ created_at: string;
188
+ skill_id: string;
189
+ user_id: string | null;
190
+ creator_id: string | null;
191
+ amount_cents: number;
192
+ platform_fee_cents: number;
193
+ creator_amount_cents: number;
194
+ stripe_session_id: string | null;
195
+ stripe_payment_intent_id: string | null;
196
+ skill_name?: string | undefined;
197
+ }[];
198
+ }>;
199
+ export type CreatorStats = z.infer<typeof creatorStatsSchema>;
200
+ //# sourceMappingURL=marketplace.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/marketplace.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,qBAAqB,OAAO,CAAA;AAEzC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,gFAAgF;AAChF,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,IAAI,CAAA;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,sEAAsE;AACtE,eAAO,MAAM,4BAA4B;;;;;;;;;EAGvC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEjF,kFAAkF;AAClF,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEnF,wEAAwE;AACxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Split percentage applied to every paid purchase. The creator receives
4
+ * `amount * (1 - PLATFORM_FEE)`, Prave keeps the rest (application_fee).
5
+ * Kept in shared so UI can render the take-home preview honestly.
6
+ */
7
+ export const PLATFORM_FEE_BPS = 1500; // 15.00%
8
+ export const PLATFORM_FEE_FRACTION = 0.15;
9
+ export const creatorAccountSchema = z.object({
10
+ user_id: z.string().uuid(),
11
+ stripe_account_id: z.string(),
12
+ charges_enabled: z.boolean(),
13
+ payouts_enabled: z.boolean(),
14
+ default_currency: z.string().nullable(),
15
+ country: z.string().nullable(),
16
+ created_at: z.string().datetime(),
17
+ updated_at: z.string().datetime(),
18
+ });
19
+ export const skillPurchaseSchema = z.object({
20
+ id: z.string().uuid(),
21
+ user_id: z.string().uuid().nullable(),
22
+ skill_id: z.string().uuid(),
23
+ creator_id: z.string().uuid().nullable(),
24
+ amount_cents: z.number().int().nonnegative(),
25
+ currency: z.string(),
26
+ platform_fee_cents: z.number().int().nonnegative(),
27
+ creator_amount_cents: z.number().int().nonnegative(),
28
+ stripe_session_id: z.string().nullable(),
29
+ stripe_payment_intent_id: z.string().nullable(),
30
+ status: z.enum(['pending', 'paid', 'refunded', 'failed']),
31
+ created_at: z.string().datetime(),
32
+ });
33
+ /** POST /creator/connect — returns a Stripe hosted onboarding URL. */
34
+ export const connectSessionResponseSchema = z.object({
35
+ url: z.string().url(),
36
+ stripe_account_id: z.string(),
37
+ });
38
+ /** POST /skills/:slug/checkout — body is empty; response returns Checkout URL. */
39
+ export const checkoutSessionResponseSchema = z.object({
40
+ url: z.string().url(),
41
+ session_id: z.string(),
42
+ });
43
+ /** GET /creator/stats — aggregated for the Creator Studio dashboard. */
44
+ export const creatorStatsSchema = z.object({
45
+ total_sales: z.number().int().nonnegative(),
46
+ total_revenue_cents: z.number().int().nonnegative(),
47
+ total_earnings_cents: z.number().int().nonnegative(),
48
+ total_platform_fee_cents: z.number().int().nonnegative(),
49
+ currency: z.string(),
50
+ recent_sales: z.array(skillPurchaseSchema.extend({ skill_name: z.string().optional() })),
51
+ });
@@ -0,0 +1,112 @@
1
+ import { z } from 'zod';
2
+ export declare const orgRoleSchema: z.ZodEnum<["owner", "admin", "member"]>;
3
+ export type OrgRole = z.infer<typeof orgRoleSchema>;
4
+ export declare const orgSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ name: z.ZodString;
7
+ slug: z.ZodString;
8
+ owner_id: z.ZodString;
9
+ stripe_subscription_id: z.ZodNullable<z.ZodString>;
10
+ seats: z.ZodNumber;
11
+ created_at: z.ZodString;
12
+ updated_at: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string;
15
+ owner_id: string;
16
+ name: string;
17
+ slug: string;
18
+ created_at: string;
19
+ updated_at: string;
20
+ stripe_subscription_id: string | null;
21
+ seats: number;
22
+ }, {
23
+ id: string;
24
+ owner_id: string;
25
+ name: string;
26
+ slug: string;
27
+ created_at: string;
28
+ updated_at: string;
29
+ stripe_subscription_id: string | null;
30
+ seats: number;
31
+ }>;
32
+ export type Org = z.infer<typeof orgSchema>;
33
+ export declare const orgMemberSchema: z.ZodObject<{
34
+ org_id: z.ZodString;
35
+ user_id: z.ZodString;
36
+ role: z.ZodEnum<["owner", "admin", "member"]>;
37
+ invited_email: z.ZodNullable<z.ZodString>;
38
+ joined_at: z.ZodString;
39
+ }, "strip", z.ZodTypeAny, {
40
+ user_id: string;
41
+ org_id: string;
42
+ role: "owner" | "admin" | "member";
43
+ invited_email: string | null;
44
+ joined_at: string;
45
+ }, {
46
+ user_id: string;
47
+ org_id: string;
48
+ role: "owner" | "admin" | "member";
49
+ invited_email: string | null;
50
+ joined_at: string;
51
+ }>;
52
+ export type OrgMember = z.infer<typeof orgMemberSchema>;
53
+ /** Hydrated row used by the Teams panel — joins the auth user's email/name. */
54
+ export declare const orgMemberRowSchema: z.ZodObject<{
55
+ org_id: z.ZodString;
56
+ user_id: z.ZodString;
57
+ role: z.ZodEnum<["owner", "admin", "member"]>;
58
+ invited_email: z.ZodNullable<z.ZodString>;
59
+ joined_at: z.ZodString;
60
+ } & {
61
+ email: z.ZodNullable<z.ZodString>;
62
+ display_name: z.ZodNullable<z.ZodString>;
63
+ avatar_url: z.ZodNullable<z.ZodString>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ user_id: string;
66
+ email: string | null;
67
+ org_id: string;
68
+ role: "owner" | "admin" | "member";
69
+ invited_email: string | null;
70
+ joined_at: string;
71
+ display_name: string | null;
72
+ avatar_url: string | null;
73
+ }, {
74
+ user_id: string;
75
+ email: string | null;
76
+ org_id: string;
77
+ role: "owner" | "admin" | "member";
78
+ invited_email: string | null;
79
+ joined_at: string;
80
+ display_name: string | null;
81
+ avatar_url: string | null;
82
+ }>;
83
+ export type OrgMemberRow = z.infer<typeof orgMemberRowSchema>;
84
+ export declare const createOrgInputSchema: z.ZodObject<Pick<{
85
+ id: z.ZodString;
86
+ name: z.ZodString;
87
+ slug: z.ZodString;
88
+ owner_id: z.ZodString;
89
+ stripe_subscription_id: z.ZodNullable<z.ZodString>;
90
+ seats: z.ZodNumber;
91
+ created_at: z.ZodString;
92
+ updated_at: z.ZodString;
93
+ }, "name" | "slug">, "strip", z.ZodTypeAny, {
94
+ name: string;
95
+ slug: string;
96
+ }, {
97
+ name: string;
98
+ slug: string;
99
+ }>;
100
+ export type CreateOrgInput = z.infer<typeof createOrgInputSchema>;
101
+ export declare const addMemberInputSchema: z.ZodObject<{
102
+ email: z.ZodString;
103
+ role: z.ZodDefault<z.ZodEnum<["admin", "member"]>>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ email: string;
106
+ role: "admin" | "member";
107
+ }, {
108
+ email: string;
109
+ role?: "admin" | "member" | undefined;
110
+ }>;
111
+ export type AddMemberInput = z.infer<typeof addMemberInputSchema>;
112
+ //# sourceMappingURL=org.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/org.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,aAAa,yCAAuC,CAAA;AACjE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEnD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;EAapB,CAAA;AACF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAE3C,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAEvD,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAA6C,CAAA;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { z } from 'zod';
2
+ export const orgRoleSchema = z.enum(['owner', 'admin', 'member']);
3
+ export const orgSchema = z.object({
4
+ id: z.string().uuid(),
5
+ name: z.string().min(1).max(120),
6
+ slug: z
7
+ .string()
8
+ .min(1)
9
+ .max(80)
10
+ .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, 'slug must be kebab-case'),
11
+ owner_id: z.string().uuid(),
12
+ stripe_subscription_id: z.string().nullable(),
13
+ seats: z.number().int().positive(),
14
+ created_at: z.string().datetime(),
15
+ updated_at: z.string().datetime(),
16
+ });
17
+ export const orgMemberSchema = z.object({
18
+ org_id: z.string().uuid(),
19
+ user_id: z.string().uuid(),
20
+ role: orgRoleSchema,
21
+ invited_email: z.string().email().nullable(),
22
+ joined_at: z.string().datetime(),
23
+ });
24
+ /** Hydrated row used by the Teams panel — joins the auth user's email/name. */
25
+ export const orgMemberRowSchema = orgMemberSchema.extend({
26
+ email: z.string().email().nullable(),
27
+ display_name: z.string().nullable(),
28
+ avatar_url: z.string().nullable(),
29
+ });
30
+ export const createOrgInputSchema = orgSchema.pick({ name: true, slug: true });
31
+ export const addMemberInputSchema = z.object({
32
+ email: z.string().email(),
33
+ role: z.enum(['admin', 'member']).default('member'),
34
+ });
@@ -0,0 +1,105 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * ES search-result: the persisted Skill plus optional relevance score.
4
+ * Used by /api/v1/skills list responses.
5
+ */
6
+ export declare const skillSearchHitSchema: z.ZodObject<{
7
+ id: z.ZodString;
8
+ owner_id: z.ZodString;
9
+ name: z.ZodString;
10
+ slug: z.ZodString;
11
+ description: z.ZodNullable<z.ZodString>;
12
+ content: z.ZodNullable<z.ZodString>;
13
+ visibility: z.ZodDefault<z.ZodEnum<["public", "private", "org"]>>;
14
+ source_repo: z.ZodNullable<z.ZodString>;
15
+ license: z.ZodDefault<z.ZodString>;
16
+ category: z.ZodNullable<z.ZodString>;
17
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
18
+ install_count: z.ZodDefault<z.ZodNumber>;
19
+ bookmark_count: z.ZodDefault<z.ZodNumber>;
20
+ is_verified: z.ZodDefault<z.ZodBoolean>;
21
+ price_cents: z.ZodDefault<z.ZodNumber>;
22
+ currency: z.ZodDefault<z.ZodString>;
23
+ purchased: z.ZodOptional<z.ZodBoolean>;
24
+ is_owner: z.ZodOptional<z.ZodBoolean>;
25
+ bookmarked: z.ZodOptional<z.ZodBoolean>;
26
+ created_at: z.ZodString;
27
+ updated_at: z.ZodString;
28
+ } & {
29
+ score: z.ZodOptional<z.ZodNumber>;
30
+ highlight: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ id: string;
33
+ owner_id: string;
34
+ name: string;
35
+ slug: string;
36
+ description: string | null;
37
+ content: string | null;
38
+ visibility: "public" | "private" | "org";
39
+ source_repo: string | null;
40
+ license: string;
41
+ category: string | null;
42
+ tags: string[];
43
+ install_count: number;
44
+ bookmark_count: number;
45
+ is_verified: boolean;
46
+ price_cents: number;
47
+ currency: string;
48
+ created_at: string;
49
+ updated_at: string;
50
+ purchased?: boolean | undefined;
51
+ is_owner?: boolean | undefined;
52
+ bookmarked?: boolean | undefined;
53
+ score?: number | undefined;
54
+ highlight?: Record<string, string[]> | undefined;
55
+ }, {
56
+ id: string;
57
+ owner_id: string;
58
+ name: string;
59
+ slug: string;
60
+ description: string | null;
61
+ content: string | null;
62
+ source_repo: string | null;
63
+ category: string | null;
64
+ created_at: string;
65
+ updated_at: string;
66
+ visibility?: "public" | "private" | "org" | undefined;
67
+ license?: string | undefined;
68
+ tags?: string[] | undefined;
69
+ install_count?: number | undefined;
70
+ bookmark_count?: number | undefined;
71
+ is_verified?: boolean | undefined;
72
+ price_cents?: number | undefined;
73
+ currency?: string | undefined;
74
+ purchased?: boolean | undefined;
75
+ is_owner?: boolean | undefined;
76
+ bookmarked?: boolean | undefined;
77
+ score?: number | undefined;
78
+ highlight?: Record<string, string[]> | undefined;
79
+ }>;
80
+ export type SkillSearchHit = z.infer<typeof skillSearchHitSchema>;
81
+ /** Payload for the `index-skill` BullMQ job. */
82
+ export declare const indexSkillJobSchema: z.ZodObject<{
83
+ skill_id: z.ZodString;
84
+ op: z.ZodEnum<["upsert", "delete"]>;
85
+ }, "strip", z.ZodTypeAny, {
86
+ skill_id: string;
87
+ op: "upsert" | "delete";
88
+ }, {
89
+ skill_id: string;
90
+ op: "upsert" | "delete";
91
+ }>;
92
+ export type IndexSkillJob = z.infer<typeof indexSkillJobSchema>;
93
+ /** Payload for the `github-scan` BullMQ job. */
94
+ export declare const scanGithubJobSchema: z.ZodObject<{
95
+ repo_url: z.ZodString;
96
+ source: z.ZodDefault<z.ZodEnum<["seed", "manual", "cron"]>>;
97
+ }, "strip", z.ZodTypeAny, {
98
+ repo_url: string;
99
+ source: "seed" | "manual" | "cron";
100
+ }, {
101
+ repo_url: string;
102
+ source?: "seed" | "manual" | "cron" | undefined;
103
+ }>;
104
+ export type ScanGithubJob = z.infer<typeof scanGithubJobSchema>;
105
+ //# sourceMappingURL=search.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/search.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,gDAAgD;AAChD,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,gDAAgD;AAChD,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { skillSchema } from './skill.schema.js';
3
+ /**
4
+ * ES search-result: the persisted Skill plus optional relevance score.
5
+ * Used by /api/v1/skills list responses.
6
+ */
7
+ export const skillSearchHitSchema = skillSchema.extend({
8
+ score: z.number().optional(),
9
+ highlight: z.record(z.array(z.string())).optional(),
10
+ });
11
+ /** Payload for the `index-skill` BullMQ job. */
12
+ export const indexSkillJobSchema = z.object({
13
+ skill_id: z.string().uuid(),
14
+ op: z.enum(['upsert', 'delete']),
15
+ });
16
+ /** Payload for the `github-scan` BullMQ job. */
17
+ export const scanGithubJobSchema = z.object({
18
+ repo_url: z.string().url(),
19
+ source: z.enum(['seed', 'manual', 'cron']).default('manual'),
20
+ });
@@ -0,0 +1,137 @@
1
+ import { z } from 'zod';
2
+ /** A single `skill → depends_on` edge as stored in `skill_dependencies`. */
3
+ export declare const skillDependencySchema: z.ZodObject<{
4
+ skill_id: z.ZodString;
5
+ depends_on_skill_id: z.ZodString;
6
+ version_pin: z.ZodNullable<z.ZodNumber>;
7
+ sort_order: z.ZodDefault<z.ZodNumber>;
8
+ created_at: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ created_at: string;
11
+ skill_id: string;
12
+ depends_on_skill_id: string;
13
+ version_pin: number | null;
14
+ sort_order: number;
15
+ }, {
16
+ created_at: string;
17
+ skill_id: string;
18
+ depends_on_skill_id: string;
19
+ version_pin: number | null;
20
+ sort_order?: number | undefined;
21
+ }>;
22
+ export type SkillDependency = z.infer<typeof skillDependencySchema>;
23
+ /**
24
+ * Hydrated dependency row — same as SkillDependency, but with the
25
+ * target Skill joined in so the UI can render names + slugs without
26
+ * a second round-trip.
27
+ */
28
+ export declare const dependencyRowSchema: z.ZodObject<{
29
+ skill_id: z.ZodString;
30
+ depends_on_skill_id: z.ZodString;
31
+ version_pin: z.ZodNullable<z.ZodNumber>;
32
+ sort_order: z.ZodDefault<z.ZodNumber>;
33
+ created_at: z.ZodString;
34
+ } & {
35
+ target: z.ZodObject<Pick<{
36
+ id: z.ZodString;
37
+ owner_id: z.ZodString;
38
+ name: z.ZodString;
39
+ slug: z.ZodString;
40
+ description: z.ZodNullable<z.ZodString>;
41
+ content: z.ZodNullable<z.ZodString>;
42
+ visibility: z.ZodDefault<z.ZodEnum<["public", "private", "org"]>>;
43
+ source_repo: z.ZodNullable<z.ZodString>;
44
+ license: z.ZodDefault<z.ZodString>;
45
+ category: z.ZodNullable<z.ZodString>;
46
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
47
+ install_count: z.ZodDefault<z.ZodNumber>;
48
+ bookmark_count: z.ZodDefault<z.ZodNumber>;
49
+ is_verified: z.ZodDefault<z.ZodBoolean>;
50
+ price_cents: z.ZodDefault<z.ZodNumber>;
51
+ currency: z.ZodDefault<z.ZodString>;
52
+ purchased: z.ZodOptional<z.ZodBoolean>;
53
+ is_owner: z.ZodOptional<z.ZodBoolean>;
54
+ bookmarked: z.ZodOptional<z.ZodBoolean>;
55
+ created_at: z.ZodString;
56
+ updated_at: z.ZodString;
57
+ }, "id" | "name" | "slug" | "description" | "visibility">, "strip", z.ZodTypeAny, {
58
+ id: string;
59
+ name: string;
60
+ slug: string;
61
+ description: string | null;
62
+ visibility: "public" | "private" | "org";
63
+ }, {
64
+ id: string;
65
+ name: string;
66
+ slug: string;
67
+ description: string | null;
68
+ visibility?: "public" | "private" | "org" | undefined;
69
+ }>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ created_at: string;
72
+ skill_id: string;
73
+ depends_on_skill_id: string;
74
+ version_pin: number | null;
75
+ sort_order: number;
76
+ target: {
77
+ id: string;
78
+ name: string;
79
+ slug: string;
80
+ description: string | null;
81
+ visibility: "public" | "private" | "org";
82
+ };
83
+ }, {
84
+ created_at: string;
85
+ skill_id: string;
86
+ depends_on_skill_id: string;
87
+ version_pin: number | null;
88
+ target: {
89
+ id: string;
90
+ name: string;
91
+ slug: string;
92
+ description: string | null;
93
+ visibility?: "public" | "private" | "org" | undefined;
94
+ };
95
+ sort_order?: number | undefined;
96
+ }>;
97
+ export type DependencyRow = z.infer<typeof dependencyRowSchema>;
98
+ /** A node in the flattened dependency tree. */
99
+ export interface DependencyTreeNode {
100
+ skill_id: string;
101
+ slug: string;
102
+ name: string;
103
+ version_pin: number | null;
104
+ depth: number;
105
+ parents: string[];
106
+ missing?: boolean;
107
+ }
108
+ /** Result of tree resolution with any conflicts discovered. */
109
+ export interface DependencyTreeResult {
110
+ root_skill_id: string;
111
+ nodes: DependencyTreeNode[];
112
+ conflicts: DependencyConflict[];
113
+ }
114
+ /** Same skill is reachable via multiple paths with incompatible pins. */
115
+ export interface DependencyConflict {
116
+ skill_id: string;
117
+ slug: string;
118
+ pins: Array<{
119
+ version_pin: number | null;
120
+ via: string[];
121
+ }>;
122
+ }
123
+ export declare const addDependencyInputSchema: z.ZodObject<{
124
+ depends_on_slug: z.ZodString;
125
+ version_pin: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
126
+ sort_order: z.ZodOptional<z.ZodNumber>;
127
+ }, "strip", z.ZodTypeAny, {
128
+ depends_on_slug: string;
129
+ version_pin?: number | null | undefined;
130
+ sort_order?: number | undefined;
131
+ }, {
132
+ depends_on_slug: string;
133
+ version_pin?: number | null | undefined;
134
+ sort_order?: number | undefined;
135
+ }>;
136
+ export type AddDependencyInput = z.infer<typeof addDependencyInputSchema>;
137
+ //# sourceMappingURL=skill-dependency.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-dependency.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/skill-dependency.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;EAMhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,SAAS,EAAE,kBAAkB,EAAE,CAAA;CAChC;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;CAC3D;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAOnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}