@open-skills-hub/api 1.0.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 (112) hide show
  1. package/dist/controllers/audit.d.ts +33 -0
  2. package/dist/controllers/audit.d.ts.map +1 -0
  3. package/dist/controllers/audit.js +122 -0
  4. package/dist/controllers/audit.js.map +1 -0
  5. package/dist/controllers/cache.d.ts +42 -0
  6. package/dist/controllers/cache.d.ts.map +1 -0
  7. package/dist/controllers/cache.js +247 -0
  8. package/dist/controllers/cache.js.map +1 -0
  9. package/dist/controllers/feedback.d.ts +44 -0
  10. package/dist/controllers/feedback.d.ts.map +1 -0
  11. package/dist/controllers/feedback.js +216 -0
  12. package/dist/controllers/feedback.js.map +1 -0
  13. package/dist/controllers/index.d.ts +9 -0
  14. package/dist/controllers/index.d.ts.map +1 -0
  15. package/dist/controllers/index.js +9 -0
  16. package/dist/controllers/index.js.map +1 -0
  17. package/dist/controllers/skills.d.ts +66 -0
  18. package/dist/controllers/skills.d.ts.map +1 -0
  19. package/dist/controllers/skills.js +355 -0
  20. package/dist/controllers/skills.js.map +1 -0
  21. package/dist/controllers/versions.d.ts +43 -0
  22. package/dist/controllers/versions.d.ts.map +1 -0
  23. package/dist/controllers/versions.js +298 -0
  24. package/dist/controllers/versions.js.map +1 -0
  25. package/dist/index.d.ts +9 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +78 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/middleware/auth.d.ts +34 -0
  30. package/dist/middleware/auth.d.ts.map +1 -0
  31. package/dist/middleware/auth.js +148 -0
  32. package/dist/middleware/auth.js.map +1 -0
  33. package/dist/middleware/error.d.ts +26 -0
  34. package/dist/middleware/error.d.ts.map +1 -0
  35. package/dist/middleware/error.js +102 -0
  36. package/dist/middleware/error.js.map +1 -0
  37. package/dist/middleware/index.d.ts +8 -0
  38. package/dist/middleware/index.d.ts.map +1 -0
  39. package/dist/middleware/index.js +8 -0
  40. package/dist/middleware/index.js.map +1 -0
  41. package/dist/middleware/logger.d.ts +19 -0
  42. package/dist/middleware/logger.d.ts.map +1 -0
  43. package/dist/middleware/logger.js +54 -0
  44. package/dist/middleware/logger.js.map +1 -0
  45. package/dist/middleware/validation.d.ts +671 -0
  46. package/dist/middleware/validation.d.ts.map +1 -0
  47. package/dist/middleware/validation.js +225 -0
  48. package/dist/middleware/validation.js.map +1 -0
  49. package/dist/routes/audit.d.ts +6 -0
  50. package/dist/routes/audit.d.ts.map +1 -0
  51. package/dist/routes/audit.js +54 -0
  52. package/dist/routes/audit.js.map +1 -0
  53. package/dist/routes/cache.d.ts +6 -0
  54. package/dist/routes/cache.d.ts.map +1 -0
  55. package/dist/routes/cache.js +70 -0
  56. package/dist/routes/cache.js.map +1 -0
  57. package/dist/routes/feedback.d.ts +6 -0
  58. package/dist/routes/feedback.d.ts.map +1 -0
  59. package/dist/routes/feedback.js +68 -0
  60. package/dist/routes/feedback.js.map +1 -0
  61. package/dist/routes/health.d.ts +6 -0
  62. package/dist/routes/health.d.ts.map +1 -0
  63. package/dist/routes/health.js +122 -0
  64. package/dist/routes/health.js.map +1 -0
  65. package/dist/routes/index.d.ts +12 -0
  66. package/dist/routes/index.d.ts.map +1 -0
  67. package/dist/routes/index.js +12 -0
  68. package/dist/routes/index.js.map +1 -0
  69. package/dist/routes/scan.d.ts +8 -0
  70. package/dist/routes/scan.d.ts.map +1 -0
  71. package/dist/routes/scan.js +315 -0
  72. package/dist/routes/scan.js.map +1 -0
  73. package/dist/routes/search.d.ts +6 -0
  74. package/dist/routes/search.d.ts.map +1 -0
  75. package/dist/routes/search.js +44 -0
  76. package/dist/routes/search.js.map +1 -0
  77. package/dist/routes/skills.d.ts +6 -0
  78. package/dist/routes/skills.d.ts.map +1 -0
  79. package/dist/routes/skills.js +74 -0
  80. package/dist/routes/skills.js.map +1 -0
  81. package/dist/routes/versions.d.ts +6 -0
  82. package/dist/routes/versions.d.ts.map +1 -0
  83. package/dist/routes/versions.js +66 -0
  84. package/dist/routes/versions.js.map +1 -0
  85. package/dist/server.d.ts +26 -0
  86. package/dist/server.d.ts.map +1 -0
  87. package/dist/server.js +166 -0
  88. package/dist/server.js.map +1 -0
  89. package/package.json +42 -0
  90. package/src/controllers/audit.ts +175 -0
  91. package/src/controllers/cache.ts +344 -0
  92. package/src/controllers/feedback.ts +309 -0
  93. package/src/controllers/index.ts +9 -0
  94. package/src/controllers/skills.ts +489 -0
  95. package/src/controllers/versions.ts +427 -0
  96. package/src/index.ts +87 -0
  97. package/src/middleware/auth.ts +219 -0
  98. package/src/middleware/error.ts +180 -0
  99. package/src/middleware/index.ts +8 -0
  100. package/src/middleware/logger.ts +71 -0
  101. package/src/middleware/validation.ts +270 -0
  102. package/src/routes/audit.ts +74 -0
  103. package/src/routes/cache.ts +93 -0
  104. package/src/routes/feedback.ts +93 -0
  105. package/src/routes/health.ts +151 -0
  106. package/src/routes/index.ts +12 -0
  107. package/src/routes/scan.ts +428 -0
  108. package/src/routes/search.ts +51 -0
  109. package/src/routes/skills.ts +102 -0
  110. package/src/routes/versions.ts +91 -0
  111. package/src/server.ts +205 -0
  112. package/tsconfig.json +13 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Open Skills Hub - Request Validation Middleware
3
+ */
4
+ import { z, ZodError } from 'zod';
5
+ import { AppError, ErrorCodes } from '@open-skills-hub/core';
6
+ /**
7
+ * Validate request body with Zod schema
8
+ */
9
+ export function validateBody(schema) {
10
+ return async function (request, _reply) {
11
+ try {
12
+ request.body = schema.parse(request.body);
13
+ }
14
+ catch (error) {
15
+ if (error instanceof ZodError) {
16
+ throw error; // Will be handled by error middleware
17
+ }
18
+ throw new AppError(ErrorCodes.VALIDATION_FAILED, 'Invalid request body', 400);
19
+ }
20
+ };
21
+ }
22
+ /**
23
+ * Validate request query with Zod schema
24
+ */
25
+ export function validateQuery(schema) {
26
+ return async function (request, _reply) {
27
+ try {
28
+ request.query = schema.parse(request.query);
29
+ }
30
+ catch (error) {
31
+ if (error instanceof ZodError) {
32
+ throw error;
33
+ }
34
+ throw new AppError(ErrorCodes.VALIDATION_FAILED, 'Invalid query parameters', 400);
35
+ }
36
+ };
37
+ }
38
+ /**
39
+ * Validate request params with Zod schema
40
+ */
41
+ export function validateParams(schema) {
42
+ return async function (request, _reply) {
43
+ try {
44
+ request.params = schema.parse(request.params);
45
+ }
46
+ catch (error) {
47
+ if (error instanceof ZodError) {
48
+ throw error;
49
+ }
50
+ throw new AppError(ErrorCodes.VALIDATION_FAILED, 'Invalid path parameters', 400);
51
+ }
52
+ };
53
+ }
54
+ // ============================================================================
55
+ // Common Validation Schemas
56
+ // ============================================================================
57
+ /**
58
+ * Pagination query schema
59
+ */
60
+ export const PaginationQuerySchema = z.object({
61
+ cursor: z.string().optional(),
62
+ limit: z.coerce.number().int().min(1).max(100).default(20),
63
+ });
64
+ /**
65
+ * Skill name param schema
66
+ */
67
+ export const SkillNameParamSchema = z.object({
68
+ name: z.string().min(1).max(214),
69
+ });
70
+ /**
71
+ * Skill name with version param schema
72
+ */
73
+ export const SkillVersionParamSchema = z.object({
74
+ name: z.string().min(1).max(214),
75
+ version: z.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-.+)?$/),
76
+ });
77
+ /**
78
+ * ID param schema
79
+ */
80
+ export const IdParamSchema = z.object({
81
+ id: z.string().min(1),
82
+ });
83
+ /**
84
+ * Search query schema
85
+ */
86
+ export const SearchQuerySchema = z.object({
87
+ q: z.string().optional(),
88
+ category: z.string().optional(),
89
+ author: z.string().optional(),
90
+ sort: z.enum(['relevance', 'uses', 'updated', 'created', 'name']).default('relevance'),
91
+ order: z.enum(['asc', 'desc']).default('desc'),
92
+ cursor: z.string().optional(),
93
+ limit: z.coerce.number().int().min(1).max(100).default(20),
94
+ });
95
+ /**
96
+ * Create skill body schema
97
+ */
98
+ export const CreateSkillBodySchema = z.object({
99
+ name: z.string().regex(/^[a-z][a-z0-9-]*[a-z0-9]$|^[a-z]$/, 'Invalid skill name format'),
100
+ scope: z.string().optional(),
101
+ displayName: z.string().optional(),
102
+ description: z.string().min(1).max(10000),
103
+ category: z.string().optional(),
104
+ keywords: z.array(z.string()).max(20).default([]),
105
+ license: z.string().optional(),
106
+ repository: z.string().url().optional(),
107
+ homepage: z.string().url().optional(),
108
+ visibility: z.enum(['public', 'private', 'unlisted']).default('public'),
109
+ content: z.object({
110
+ frontmatter: z.object({
111
+ name: z.string(),
112
+ description: z.string().optional(),
113
+ author: z.string().optional(), // Author field for skill attribution
114
+ allowedTools: z.array(z.string()).optional(),
115
+ argumentHint: z.string().optional(),
116
+ disableModelInvocation: z.boolean().optional(),
117
+ userInvocable: z.boolean().optional(),
118
+ model: z.string().optional(),
119
+ context: z.literal('fork').optional(),
120
+ agent: z.string().optional(),
121
+ license: z.string().optional(),
122
+ compatibility: z.string().optional(),
123
+ derivedFrom: z.object({
124
+ name: z.string(),
125
+ version: z.string(),
126
+ author: z.string(),
127
+ }).optional(),
128
+ metadata: z.record(z.string()).optional(),
129
+ }),
130
+ markdown: z.string().min(1),
131
+ files: z.array(z.object({
132
+ path: z.string(),
133
+ content: z.string(),
134
+ size: z.number(),
135
+ })).optional(),
136
+ }),
137
+ version: z.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-.+)?$/).default('1.0.0'),
138
+ changelog: z.string().optional(),
139
+ });
140
+ /**
141
+ * Update skill body schema
142
+ */
143
+ export const UpdateSkillBodySchema = z.object({
144
+ displayName: z.string().optional(),
145
+ description: z.string().min(1).max(10000).optional(),
146
+ category: z.string().optional(),
147
+ keywords: z.array(z.string()).max(20).optional(),
148
+ repository: z.string().url().optional().nullable(),
149
+ homepage: z.string().url().optional().nullable(),
150
+ visibility: z.enum(['public', 'private', 'unlisted']).optional(),
151
+ });
152
+ /**
153
+ * Publish version body schema
154
+ */
155
+ export const PublishVersionBodySchema = z.object({
156
+ version: z.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-.+)?$/),
157
+ content: z.object({
158
+ frontmatter: z.object({
159
+ name: z.string(),
160
+ description: z.string().optional(),
161
+ allowedTools: z.array(z.string()).optional(),
162
+ argumentHint: z.string().optional(),
163
+ disableModelInvocation: z.boolean().optional(),
164
+ userInvocable: z.boolean().optional(),
165
+ model: z.string().optional(),
166
+ context: z.literal('fork').optional(),
167
+ agent: z.string().optional(),
168
+ license: z.string().optional(),
169
+ compatibility: z.string().optional(),
170
+ derivedFrom: z.object({
171
+ name: z.string(),
172
+ version: z.string(),
173
+ author: z.string(),
174
+ }).optional(),
175
+ metadata: z.record(z.string()).optional(),
176
+ }),
177
+ markdown: z.string().min(1),
178
+ files: z.array(z.object({
179
+ path: z.string(),
180
+ content: z.string(),
181
+ size: z.number(),
182
+ })).optional(),
183
+ }),
184
+ changelog: z.string().optional(),
185
+ tag: z.string().optional(),
186
+ });
187
+ /**
188
+ * Submit feedback body schema
189
+ */
190
+ export const SubmitFeedbackBodySchema = z.object({
191
+ skillName: z.string(),
192
+ skillVersion: z.string(),
193
+ feedbackType: z.enum(['success', 'failure', 'suggestion', 'bug']),
194
+ rating: z.number().min(1).max(5),
195
+ comment: z.string().max(5000).optional(),
196
+ context: z.object({
197
+ executionTime: z.number().optional(),
198
+ taskType: z.string().optional(),
199
+ errorMessage: z.string().optional(),
200
+ agentType: z.string().optional(),
201
+ agentVersion: z.string().optional(),
202
+ outcome: z.enum(['success', 'partial', 'failure']).optional(),
203
+ }).optional(),
204
+ });
205
+ /**
206
+ * Scan content body schema
207
+ */
208
+ export const ScanContentBodySchema = z.object({
209
+ content: z.string().min(1).max(1024 * 1024), // 1MB max
210
+ contentType: z.enum(['markdown', 'yaml', 'json']).default('markdown'),
211
+ });
212
+ /**
213
+ * Audit query schema
214
+ */
215
+ export const AuditQuerySchema = z.object({
216
+ eventType: z.string().optional(),
217
+ actor: z.string().optional(),
218
+ resourceType: z.string().optional(),
219
+ resourceName: z.string().optional(),
220
+ from: z.string().optional(),
221
+ to: z.string().optional(),
222
+ cursor: z.string().optional(),
223
+ limit: z.coerce.number().int().min(1).max(100).default(50),
224
+ });
225
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/middleware/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub - Audit Routes
3
+ */
4
+ import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
5
+ export declare function auditRoutes(server: FastifyInstance, _opts: FastifyPluginOptions): Promise<void>;
6
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/routes/audit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAsBrE,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Open Skills Hub - Audit Routes
3
+ */
4
+ import { z } from 'zod';
5
+ import { getAuditLogs, getSkillAuditLogs, getAuditLogById, getAuditStats, } from '../controllers/audit.js';
6
+ import { requireAuth, requirePermission } from '../middleware/auth.js';
7
+ import { validateParams, validateQuery, SkillNameParamSchema, IdParamSchema, AuditQuerySchema, } from '../middleware/validation.js';
8
+ // Stats query schema
9
+ const StatsQuerySchema = z.object({
10
+ days: z.coerce.number().int().min(1).max(365).default(30),
11
+ });
12
+ export async function auditRoutes(server, _opts) {
13
+ // Get audit logs (admin only)
14
+ // GET /v1/audit
15
+ server.get('/', {
16
+ preHandler: [
17
+ requireAuth,
18
+ requirePermission('admin'),
19
+ validateQuery(AuditQuerySchema),
20
+ ],
21
+ handler: getAuditLogs,
22
+ });
23
+ // Get audit statistics
24
+ // GET /v1/audit/stats
25
+ server.get('/stats', {
26
+ preHandler: [
27
+ requireAuth,
28
+ requirePermission('admin'),
29
+ validateQuery(StatsQuerySchema),
30
+ ],
31
+ handler: getAuditStats,
32
+ });
33
+ // Get audit logs for a specific skill
34
+ // GET /v1/audit/skill/:name
35
+ server.get('/skill/:name', {
36
+ preHandler: [
37
+ requireAuth,
38
+ validateParams(SkillNameParamSchema),
39
+ validateQuery(AuditQuerySchema),
40
+ ],
41
+ handler: getSkillAuditLogs,
42
+ });
43
+ // Get audit log by ID
44
+ // GET /v1/audit/:id
45
+ server.get('/:id', {
46
+ preHandler: [
47
+ requireAuth,
48
+ requirePermission('admin'),
49
+ validateParams(IdParamSchema),
50
+ ],
51
+ handler: getAuditLogById,
52
+ });
53
+ }
54
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/routes/audit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EACL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,qBAAqB;AACrB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAuB,EACvB,KAA2B;IAE3B,8BAA8B;IAC9B,gBAAgB;IAChB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;QACd,UAAU,EAAE;YACV,WAAW;YACX,iBAAiB,CAAC,OAAO,CAAC;YAC1B,aAAa,CAAC,gBAAgB,CAAC;SAChC;QACD,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IAEH,uBAAuB;IACvB,sBAAsB;IACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;QACnB,UAAU,EAAE;YACV,WAAW;YACX,iBAAiB,CAAC,OAAO,CAAC;YAC1B,aAAa,CAAC,gBAAgB,CAAC;SAChC;QACD,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,sCAAsC;IACtC,4BAA4B;IAC5B,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE;QACzB,UAAU,EAAE;YACV,WAAW;YACX,cAAc,CAAC,oBAAoB,CAAC;YACpC,aAAa,CAAC,gBAAgB,CAAC;SAChC;QACD,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,sBAAsB;IACtB,oBAAoB;IACpB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;QACjB,UAAU,EAAE;YACV,WAAW;YACX,iBAAiB,CAAC,OAAO,CAAC;YAC1B,cAAc,CAAC,aAAa,CAAC;SAC9B;QACD,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub - Cache Routes
3
+ */
4
+ import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
5
+ export declare function cacheRoutes(server: FastifyInstance, _opts: FastifyPluginOptions): Promise<void>;
6
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/routes/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAiBrE,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoEf"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Open Skills Hub - Cache Routes
3
+ */
4
+ import { getCachedSkills, getSkillCacheInfo, getVersionCacheInfo, invalidateSkillCache, invalidateVersionCache, cleanExpiredCache, getCacheStats, } from '../controllers/cache.js';
5
+ import { optionalAuth, requireAuth, requirePermission } from '../middleware/auth.js';
6
+ import { validateParams, SkillNameParamSchema, SkillVersionParamSchema, } from '../middleware/validation.js';
7
+ export async function cacheRoutes(server, _opts) {
8
+ // Get all cached skills
9
+ // GET /v1/cache
10
+ server.get('/', {
11
+ preHandler: [
12
+ requireAuth,
13
+ ],
14
+ handler: getCachedSkills,
15
+ });
16
+ // Get cache statistics
17
+ // GET /v1/cache/stats
18
+ server.get('/stats', {
19
+ preHandler: [
20
+ requireAuth,
21
+ ],
22
+ handler: getCacheStats,
23
+ });
24
+ // Clean expired cache entries
25
+ // POST /v1/cache/clean
26
+ server.post('/clean', {
27
+ preHandler: [
28
+ requireAuth,
29
+ requirePermission('admin'),
30
+ ],
31
+ handler: cleanExpiredCache,
32
+ });
33
+ // Get cache info for a skill
34
+ // GET /v1/cache/:name
35
+ server.get('/:name', {
36
+ preHandler: [
37
+ optionalAuth,
38
+ validateParams(SkillNameParamSchema),
39
+ ],
40
+ handler: getSkillCacheInfo,
41
+ });
42
+ // Invalidate cache for a skill
43
+ // DELETE /v1/cache/:name
44
+ server.delete('/:name', {
45
+ preHandler: [
46
+ requireAuth,
47
+ validateParams(SkillNameParamSchema),
48
+ ],
49
+ handler: invalidateSkillCache,
50
+ });
51
+ // Get cache info for a specific version
52
+ // GET /v1/cache/:name/:version
53
+ server.get('/:name/:version', {
54
+ preHandler: [
55
+ optionalAuth,
56
+ validateParams(SkillVersionParamSchema),
57
+ ],
58
+ handler: getVersionCacheInfo,
59
+ });
60
+ // Invalidate cache for a specific version
61
+ // DELETE /v1/cache/:name/:version
62
+ server.delete('/:name/:version', {
63
+ preHandler: [
64
+ requireAuth,
65
+ validateParams(SkillVersionParamSchema),
66
+ ],
67
+ handler: invalidateVersionCache,
68
+ });
69
+ }
70
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/routes/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAuB,EACvB,KAA2B;IAE3B,wBAAwB;IACxB,gBAAgB;IAChB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;QACd,UAAU,EAAE;YACV,WAAW;SACZ;QACD,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IAEH,uBAAuB;IACvB,sBAAsB;IACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;QACnB,UAAU,EAAE;YACV,WAAW;SACZ;QACD,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,8BAA8B;IAC9B,uBAAuB;IACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpB,UAAU,EAAE;YACV,WAAW;YACX,iBAAiB,CAAC,OAAO,CAAC;SAC3B;QACD,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,6BAA6B;IAC7B,sBAAsB;IACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;QACnB,UAAU,EAAE;YACV,YAAY;YACZ,cAAc,CAAC,oBAAoB,CAAC;SACrC;QACD,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,+BAA+B;IAC/B,yBAAyB;IACzB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;QACtB,UAAU,EAAE;YACV,WAAW;YACX,cAAc,CAAC,oBAAoB,CAAC;SACrC;QACD,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,wCAAwC;IACxC,+BAA+B;IAC/B,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE;QAC5B,UAAU,EAAE;YACV,YAAY;YACZ,cAAc,CAAC,uBAAuB,CAAC;SACxC;QACD,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,0CAA0C;IAC1C,kCAAkC;IAClC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAC/B,UAAU,EAAE;YACV,WAAW;YACX,cAAc,CAAC,uBAAuB,CAAC;SACxC;QACD,OAAO,EAAE,sBAAsB;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub - Feedback Routes
3
+ */
4
+ import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
5
+ export declare function feedbackRoutes(server: FastifyInstance, _opts: FastifyPluginOptions): Promise<void>;
6
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/routes/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAgCrE,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqDf"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Open Skills Hub - Feedback Routes
3
+ */
4
+ import { z } from 'zod';
5
+ import { submitFeedback, getSkillFeedbacks, getFeedbackById, reviewFeedback, getFeedbackStats, } from '../controllers/feedback.js';
6
+ import { optionalAuth, requireAuth, requirePermission } from '../middleware/auth.js';
7
+ import { validateBody, validateParams, validateQuery, SkillNameParamSchema, IdParamSchema, SubmitFeedbackBodySchema, PaginationQuerySchema, } from '../middleware/validation.js';
8
+ // Extended query schema for feedbacks
9
+ const FeedbackQuerySchema = PaginationQuerySchema.extend({
10
+ feedbackType: z.enum(['success', 'failure', 'suggestion', 'bug']).optional(),
11
+ status: z.enum(['pending', 'reviewed', 'accepted', 'rejected']).optional(),
12
+ });
13
+ // Review feedback body schema
14
+ const ReviewFeedbackBodySchema = z.object({
15
+ status: z.enum(['reviewed', 'accepted', 'rejected']),
16
+ notes: z.string().optional(),
17
+ });
18
+ export async function feedbackRoutes(server, _opts) {
19
+ // Submit feedback
20
+ // POST /v1/feedback
21
+ server.post('/', {
22
+ preHandler: [
23
+ optionalAuth,
24
+ validateBody(SubmitFeedbackBodySchema),
25
+ ],
26
+ handler: submitFeedback,
27
+ });
28
+ // Get feedbacks for a skill
29
+ // GET /v1/feedback/skill/:name
30
+ server.get('/skill/:name', {
31
+ preHandler: [
32
+ optionalAuth,
33
+ validateParams(SkillNameParamSchema),
34
+ validateQuery(FeedbackQuerySchema),
35
+ ],
36
+ handler: getSkillFeedbacks,
37
+ });
38
+ // Get feedback statistics for a skill
39
+ // GET /v1/feedback/skill/:name/stats
40
+ server.get('/skill/:name/stats', {
41
+ preHandler: [
42
+ optionalAuth,
43
+ validateParams(SkillNameParamSchema),
44
+ ],
45
+ handler: getFeedbackStats,
46
+ });
47
+ // Get feedback by ID
48
+ // GET /v1/feedback/:id
49
+ server.get('/:id', {
50
+ preHandler: [
51
+ optionalAuth,
52
+ validateParams(IdParamSchema),
53
+ ],
54
+ handler: getFeedbackById,
55
+ });
56
+ // Review feedback (admin only)
57
+ // POST /v1/feedback/:id/review
58
+ server.post('/:id/review', {
59
+ preHandler: [
60
+ requireAuth,
61
+ requirePermission('admin'),
62
+ validateParams(IdParamSchema),
63
+ validateBody(ReviewFeedbackBodySchema),
64
+ ],
65
+ handler: reviewFeedback,
66
+ });
67
+ }
68
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/routes/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,MAAM,CAAC;IACvD,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3E,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAuB,EACvB,KAA2B;IAE3B,kBAAkB;IAClB,oBAAoB;IACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,UAAU,EAAE;YACV,YAAY;YACZ,YAAY,CAAC,wBAAwB,CAAC;SACvC;QACD,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,4BAA4B;IAC5B,+BAA+B;IAC/B,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE;QACzB,UAAU,EAAE;YACV,YAAY;YACZ,cAAc,CAAC,oBAAoB,CAAC;YACpC,aAAa,CAAC,mBAAmB,CAAC;SACnC;QACD,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,sCAAsC;IACtC,qCAAqC;IACrC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE;QAC/B,UAAU,EAAE;YACV,YAAY;YACZ,cAAc,CAAC,oBAAoB,CAAC;SACrC;QACD,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IAEH,qBAAqB;IACrB,uBAAuB;IACvB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;QACjB,UAAU,EAAE;YACV,YAAY;YACZ,cAAc,CAAC,aAAa,CAAC;SAC9B;QACD,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IAEH,+BAA+B;IAC/B,+BAA+B;IAC/B,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;QACzB,UAAU,EAAE;YACV,WAAW;YACX,iBAAiB,CAAC,OAAO,CAAC;YAC1B,cAAc,CAAC,aAAa,CAAC;YAC7B,YAAY,CAAC,wBAAwB,CAAC;SACvC;QACD,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub - Health Check Routes
3
+ */
4
+ import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
5
+ export declare function healthRoutes(server: FastifyInstance, _opts: FastifyPluginOptions): Promise<void>;
6
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAgC,MAAM,SAAS,CAAC;AA+HnG,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Open Skills Hub - Health Check Routes
3
+ */
4
+ import { getStorage, getConfig } from '@open-skills-hub/core';
5
+ import { sendSuccess } from '../middleware/error.js';
6
+ /**
7
+ * Basic health check
8
+ */
9
+ async function healthCheck(request, reply) {
10
+ sendSuccess(request, reply, {
11
+ status: 'ok',
12
+ timestamp: new Date().toISOString(),
13
+ });
14
+ }
15
+ /**
16
+ * Readiness check (includes storage health)
17
+ */
18
+ async function readinessCheck(request, reply) {
19
+ const storage = await getStorage();
20
+ const config = getConfig().get();
21
+ const storageHealthy = await storage.healthCheck();
22
+ if (!storageHealthy) {
23
+ reply.status(503).send({
24
+ success: false,
25
+ error: {
26
+ code: 'SERVICE_UNAVAILABLE',
27
+ message: 'Storage is not available',
28
+ },
29
+ meta: {
30
+ requestId: request.id,
31
+ timestamp: new Date().toISOString(),
32
+ },
33
+ });
34
+ return;
35
+ }
36
+ sendSuccess(request, reply, {
37
+ status: 'ready',
38
+ timestamp: new Date().toISOString(),
39
+ checks: {
40
+ storage: storageHealthy ? 'healthy' : 'unhealthy',
41
+ },
42
+ config: {
43
+ mode: config.mode,
44
+ version: '1.0.0',
45
+ },
46
+ });
47
+ }
48
+ /**
49
+ * Detailed system info (admin only)
50
+ */
51
+ async function systemInfo(request, reply) {
52
+ const storage = await getStorage();
53
+ const config = getConfig();
54
+ const storageHealthy = await storage.healthCheck();
55
+ sendSuccess(request, reply, {
56
+ status: 'ok',
57
+ timestamp: new Date().toISOString(),
58
+ system: {
59
+ nodeVersion: process.version,
60
+ platform: process.platform,
61
+ arch: process.arch,
62
+ uptime: process.uptime(),
63
+ memoryUsage: process.memoryUsage(),
64
+ },
65
+ config: {
66
+ mode: config.get().mode,
67
+ storagePath: config.getStoragePath(),
68
+ serverPort: config.get().server.port,
69
+ authRequired: config.get().auth.requireAuth,
70
+ scannerEnabled: config.get().scanner.enabled,
71
+ rateLimitEnabled: config.get().rateLimit.enabled,
72
+ cacheTTL: config.get().cache.ttl,
73
+ },
74
+ checks: {
75
+ storage: storageHealthy ? 'healthy' : 'unhealthy',
76
+ },
77
+ });
78
+ }
79
+ /**
80
+ * Reload database from disk
81
+ * Useful when CLI or external processes have updated the database
82
+ */
83
+ async function reloadDatabase(request, reply) {
84
+ const storage = await getStorage();
85
+ try {
86
+ await storage.reload();
87
+ sendSuccess(request, reply, {
88
+ status: 'reloaded',
89
+ timestamp: new Date().toISOString(),
90
+ message: 'Database reloaded successfully from disk',
91
+ });
92
+ }
93
+ catch (error) {
94
+ reply.status(500).send({
95
+ success: false,
96
+ error: {
97
+ code: 'RELOAD_FAILED',
98
+ message: 'Failed to reload database',
99
+ details: error instanceof Error ? error.message : String(error),
100
+ },
101
+ meta: {
102
+ requestId: request.id,
103
+ timestamp: new Date().toISOString(),
104
+ },
105
+ });
106
+ }
107
+ }
108
+ export async function healthRoutes(server, _opts) {
109
+ // Basic health check
110
+ // GET /health
111
+ server.get('/health', healthCheck);
112
+ // Readiness check (for k8s)
113
+ // GET /ready
114
+ server.get('/ready', readinessCheck);
115
+ // System info (admin)
116
+ // GET /system
117
+ server.get('/system', systemInfo);
118
+ // Reload database from disk
119
+ // POST /reload
120
+ server.post('/reload', reloadDatabase);
121
+ }
122
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Open Skills Hub - Routes Exports
3
+ */
4
+ export * from './skills.js';
5
+ export * from './versions.js';
6
+ export * from './search.js';
7
+ export * from './scan.js';
8
+ export * from './feedback.js';
9
+ export * from './audit.js';
10
+ export * from './cache.js';
11
+ export * from './health.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Open Skills Hub - Routes Exports
3
+ */
4
+ export * from './skills.js';
5
+ export * from './versions.js';
6
+ export * from './search.js';
7
+ export * from './scan.js';
8
+ export * from './feedback.js';
9
+ export * from './audit.js';
10
+ export * from './cache.js';
11
+ export * from './health.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}