@skillsmith/mcp-server 0.3.3 → 0.3.4

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 (130) hide show
  1. package/README.md +5 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/__tests__/context.test.d.ts +10 -0
  4. package/dist/src/__tests__/context.test.d.ts.map +1 -0
  5. package/dist/src/__tests__/context.test.js +345 -0
  6. package/dist/src/__tests__/context.test.js.map +1 -0
  7. package/dist/src/__tests__/get-skill.test.d.ts +1 -0
  8. package/dist/src/__tests__/get-skill.test.d.ts.map +1 -1
  9. package/dist/src/__tests__/get-skill.test.js +84 -0
  10. package/dist/src/__tests__/get-skill.test.js.map +1 -1
  11. package/dist/src/__tests__/middleware/license.test.js +180 -78
  12. package/dist/src/__tests__/middleware/license.test.js.map +1 -1
  13. package/dist/src/__tests__/search.test.js +2 -1
  14. package/dist/src/__tests__/search.test.js.map +1 -1
  15. package/dist/src/__tests__/utils/validation.test.d.ts +7 -0
  16. package/dist/src/__tests__/utils/validation.test.d.ts.map +1 -0
  17. package/dist/src/__tests__/utils/validation.test.js +82 -0
  18. package/dist/src/__tests__/utils/validation.test.js.map +1 -0
  19. package/dist/src/context.d.ts +16 -0
  20. package/dist/src/context.d.ts.map +1 -1
  21. package/dist/src/context.js +57 -9
  22. package/dist/src/context.js.map +1 -1
  23. package/dist/src/index.js +1 -1
  24. package/dist/src/index.js.map +1 -1
  25. package/dist/src/llm/failover.d.ts +200 -0
  26. package/dist/src/llm/failover.d.ts.map +1 -0
  27. package/dist/src/llm/failover.js +329 -0
  28. package/dist/src/llm/failover.js.map +1 -0
  29. package/dist/src/middleware/license.d.ts +5 -0
  30. package/dist/src/middleware/license.d.ts.map +1 -1
  31. package/dist/src/middleware/license.js +2 -1
  32. package/dist/src/middleware/license.js.map +1 -1
  33. package/dist/src/tools/compare.d.ts +3 -102
  34. package/dist/src/tools/compare.d.ts.map +1 -1
  35. package/dist/src/tools/compare.helpers.d.ts +36 -0
  36. package/dist/src/tools/compare.helpers.d.ts.map +1 -0
  37. package/dist/src/tools/compare.helpers.js +252 -0
  38. package/dist/src/tools/compare.helpers.js.map +1 -0
  39. package/dist/src/tools/compare.js +6 -288
  40. package/dist/src/tools/compare.js.map +1 -1
  41. package/dist/src/tools/compare.types.d.ts +133 -0
  42. package/dist/src/tools/compare.types.d.ts.map +1 -0
  43. package/dist/src/tools/compare.types.js +45 -0
  44. package/dist/src/tools/compare.types.js.map +1 -0
  45. package/dist/src/tools/get-skill.d.ts.map +1 -1
  46. package/dist/src/tools/get-skill.js +35 -2
  47. package/dist/src/tools/get-skill.js.map +1 -1
  48. package/dist/src/tools/install.d.ts +6 -60
  49. package/dist/src/tools/install.d.ts.map +1 -1
  50. package/dist/src/tools/install.helpers.d.ts +82 -0
  51. package/dist/src/tools/install.helpers.d.ts.map +1 -0
  52. package/dist/src/tools/install.helpers.js +324 -0
  53. package/dist/src/tools/install.helpers.js.map +1 -0
  54. package/dist/src/tools/install.js +117 -252
  55. package/dist/src/tools/install.js.map +1 -1
  56. package/dist/src/tools/install.types.d.ts +114 -0
  57. package/dist/src/tools/install.types.d.ts.map +1 -0
  58. package/dist/src/tools/install.types.js +91 -0
  59. package/dist/src/tools/install.types.js.map +1 -0
  60. package/dist/src/tools/recommend.d.ts +2 -148
  61. package/dist/src/tools/recommend.d.ts.map +1 -1
  62. package/dist/src/tools/recommend.helpers.d.ts +42 -0
  63. package/dist/src/tools/recommend.helpers.d.ts.map +1 -0
  64. package/dist/src/tools/recommend.helpers.js +155 -0
  65. package/dist/src/tools/recommend.helpers.js.map +1 -0
  66. package/dist/src/tools/recommend.js +75 -140
  67. package/dist/src/tools/recommend.js.map +1 -1
  68. package/dist/src/tools/recommend.types.d.ts +164 -0
  69. package/dist/src/tools/recommend.types.d.ts.map +1 -0
  70. package/dist/src/tools/recommend.types.js +87 -0
  71. package/dist/src/tools/recommend.types.js.map +1 -0
  72. package/dist/src/tools/search.d.ts +18 -4
  73. package/dist/src/tools/search.d.ts.map +1 -1
  74. package/dist/src/tools/search.js +60 -12
  75. package/dist/src/tools/search.js.map +1 -1
  76. package/dist/src/tools/validate.d.ts +3 -70
  77. package/dist/src/tools/validate.d.ts.map +1 -1
  78. package/dist/src/tools/validate.helpers.d.ts +22 -0
  79. package/dist/src/tools/validate.helpers.d.ts.map +1 -0
  80. package/dist/src/tools/validate.helpers.js +276 -0
  81. package/dist/src/tools/validate.helpers.js.map +1 -0
  82. package/dist/src/tools/validate.js +4 -337
  83. package/dist/src/tools/validate.js.map +1 -1
  84. package/dist/src/tools/validate.types.d.ts +96 -0
  85. package/dist/src/tools/validate.types.d.ts.map +1 -0
  86. package/dist/src/tools/validate.types.js +71 -0
  87. package/dist/src/tools/validate.types.js.map +1 -0
  88. package/dist/src/webhooks/index.d.ts +1 -0
  89. package/dist/src/webhooks/index.d.ts.map +1 -1
  90. package/dist/src/webhooks/index.js +2 -0
  91. package/dist/src/webhooks/index.js.map +1 -1
  92. package/dist/src/webhooks/stripe-webhook-endpoint.d.ts +68 -0
  93. package/dist/src/webhooks/stripe-webhook-endpoint.d.ts.map +1 -0
  94. package/dist/src/webhooks/stripe-webhook-endpoint.js +213 -0
  95. package/dist/src/webhooks/stripe-webhook-endpoint.js.map +1 -0
  96. package/dist/tests/integration/install.integration.test.js +148 -1
  97. package/dist/tests/integration/install.integration.test.js.map +1 -1
  98. package/dist/tests/integration/recommend.integration.test.js +2 -1
  99. package/dist/tests/integration/recommend.integration.test.js.map +1 -1
  100. package/dist/tests/llm/failover.test.d.ts +13 -0
  101. package/dist/tests/llm/failover.test.d.ts.map +1 -0
  102. package/dist/tests/llm/failover.test.js +250 -0
  103. package/dist/tests/llm/failover.test.js.map +1 -0
  104. package/dist/tests/recommend.test.js +133 -1
  105. package/dist/tests/recommend.test.js.map +1 -1
  106. package/dist/tests/tools.test.d.ts +1 -0
  107. package/dist/tests/tools.test.d.ts.map +1 -1
  108. package/dist/tests/tools.test.js +59 -1
  109. package/dist/tests/tools.test.js.map +1 -1
  110. package/dist/tests/unit/compare-helpers.test.d.ts +8 -0
  111. package/dist/tests/unit/compare-helpers.test.d.ts.map +1 -0
  112. package/dist/tests/unit/compare-helpers.test.js +224 -0
  113. package/dist/tests/unit/compare-helpers.test.js.map +1 -0
  114. package/dist/tests/unit/install-helpers.test.d.ts +8 -0
  115. package/dist/tests/unit/install-helpers.test.d.ts.map +1 -0
  116. package/dist/tests/unit/install-helpers.test.js +460 -0
  117. package/dist/tests/unit/install-helpers.test.js.map +1 -0
  118. package/dist/tests/unit/recommend-helpers.test.d.ts +8 -0
  119. package/dist/tests/unit/recommend-helpers.test.d.ts.map +1 -0
  120. package/dist/tests/unit/recommend-helpers.test.js +117 -0
  121. package/dist/tests/unit/recommend-helpers.test.js.map +1 -0
  122. package/dist/tests/unit/validate-helpers.test.d.ts +8 -0
  123. package/dist/tests/unit/validate-helpers.test.d.ts.map +1 -0
  124. package/dist/tests/unit/validate-helpers.test.js +243 -0
  125. package/dist/tests/unit/validate-helpers.test.js.map +1 -0
  126. package/package.json +1 -1
  127. package/src/assets/docs/USER_GUIDE.md +0 -220
  128. package/src/assets/skills/skillsmith/docs/QUOTAS.md +0 -182
  129. package/src/assets/skills/skillsmith/docs/SECURITY.md +0 -174
  130. package/src/assets/skills/skillsmith/docs/TRUST_TIERS.md +0 -142
@@ -22,344 +22,13 @@
22
22
  * strict: true
23
23
  * });
24
24
  */
25
- import { z } from 'zod';
26
25
  import { promises as fs } from 'fs';
27
26
  import { join } from 'path';
28
27
  import { SkillsmithError, ErrorCodes } from '@skillsmith/core';
29
- /**
30
- * Zod schema for validate tool input
31
- */
32
- export const validateInputSchema = z.object({
33
- /** Path to SKILL.md file or skill directory */
34
- skill_path: z.string().min(1, 'skill_path is required'),
35
- /** Enable strict validation (default false) */
36
- strict: z.boolean().default(false),
37
- });
38
- /**
39
- * MCP tool schema definition for skill_validate
40
- */
41
- export const validateToolSchema = {
42
- name: 'skill_validate',
43
- description: 'Validate a SKILL.md file or skill directory against Skillsmith specification. Checks structure, required fields, and security patterns.',
44
- inputSchema: {
45
- type: 'object',
46
- properties: {
47
- skill_path: {
48
- type: 'string',
49
- description: 'Path to SKILL.md file or skill directory containing SKILL.md',
50
- },
51
- strict: {
52
- type: 'boolean',
53
- description: 'Enable strict validation mode (default false). Strict mode treats warnings as errors.',
54
- default: false,
55
- },
56
- },
57
- required: ['skill_path'],
58
- },
59
- };
60
- /**
61
- * Maximum field lengths for validation
62
- */
63
- const FIELD_LIMITS = {
64
- name: 64,
65
- description: 1024,
66
- author: 128,
67
- version: 32,
68
- category: 64,
69
- license: 64,
70
- tagLength: 32,
71
- maxTags: 20,
72
- };
73
- /**
74
- * Dangerous URL patterns for SSRF prevention
75
- */
76
- const SSRF_PATTERNS = [
77
- /^file:\/\//i,
78
- /^gopher:\/\//i,
79
- /^dict:\/\//i,
80
- /^ldap:\/\//i,
81
- /localhost/i,
82
- /127\.0\.0\.\d+/,
83
- /0\.0\.0\.0/,
84
- /\[::1\]/,
85
- /10\.\d+\.\d+\.\d+/,
86
- /172\.(1[6-9]|2\d|3[01])\.\d+\.\d+/,
87
- /192\.168\.\d+\.\d+/,
88
- ];
89
- /**
90
- * Path traversal patterns
91
- */
92
- const PATH_TRAVERSAL_PATTERNS = [/\.\./, /\.\.%2[fF]/, /%2[eE]%2[eE]/, /\\\.\\./];
93
- /**
94
- * Parse YAML frontmatter from markdown content
95
- */
96
- function parseYamlFrontmatter(content) {
97
- const trimmed = content.trim();
98
- if (!trimmed.startsWith('---')) {
99
- return null;
100
- }
101
- const endIndex = trimmed.indexOf('---', 3);
102
- if (endIndex === -1) {
103
- return null;
104
- }
105
- const yamlContent = trimmed.slice(3, endIndex).trim();
106
- const result = {};
107
- const lines = yamlContent.split('\n');
108
- let currentKey = null;
109
- let arrayBuffer = [];
110
- let inArray = false;
111
- for (const line of lines) {
112
- const trimmedLine = line.trim();
113
- if (!trimmedLine || trimmedLine.startsWith('#')) {
114
- continue;
115
- }
116
- if (trimmedLine.startsWith('- ')) {
117
- if (currentKey && inArray) {
118
- const value = trimmedLine
119
- .slice(2)
120
- .trim()
121
- .replace(/^["']|["']$/g, '');
122
- arrayBuffer.push(value);
123
- }
124
- continue;
125
- }
126
- const colonIndex = trimmedLine.indexOf(':');
127
- if (colonIndex > 0) {
128
- if (currentKey && inArray && arrayBuffer.length > 0) {
129
- result[currentKey] = arrayBuffer;
130
- arrayBuffer = [];
131
- }
132
- const key = trimmedLine.slice(0, colonIndex).trim();
133
- const value = trimmedLine.slice(colonIndex + 1).trim();
134
- if (value === '' || value === '|' || value === '>') {
135
- currentKey = key;
136
- inArray = true;
137
- arrayBuffer = [];
138
- }
139
- else {
140
- currentKey = null;
141
- inArray = false;
142
- let parsedValue = value;
143
- if ((value.startsWith('"') && value.endsWith('"')) ||
144
- (value.startsWith("'") && value.endsWith("'"))) {
145
- parsedValue = value.slice(1, -1);
146
- }
147
- else if (value === 'true') {
148
- parsedValue = true;
149
- }
150
- else if (value === 'false') {
151
- parsedValue = false;
152
- }
153
- else if (/^-?\d+(\.\d+)?$/.test(value)) {
154
- parsedValue = parseFloat(value);
155
- }
156
- else if (value.startsWith('[') && value.endsWith(']')) {
157
- parsedValue = value
158
- .slice(1, -1)
159
- .split(',')
160
- .map((item) => item.trim().replace(/^["']|["']$/g, ''))
161
- .filter((item) => item.length > 0);
162
- }
163
- result[key] = parsedValue;
164
- }
165
- }
166
- }
167
- if (currentKey && inArray && arrayBuffer.length > 0) {
168
- result[currentKey] = arrayBuffer;
169
- }
170
- return result;
171
- }
172
- /**
173
- * Check for SSRF patterns in a URL
174
- */
175
- function hasSsrfPattern(url) {
176
- return SSRF_PATTERNS.some((pattern) => pattern.test(url));
177
- }
178
- /**
179
- * Check for path traversal patterns
180
- */
181
- function hasPathTraversal(path) {
182
- return PATH_TRAVERSAL_PATTERNS.some((pattern) => pattern.test(path));
183
- }
184
- /**
185
- * Validate skill metadata
186
- */
187
- function validateMetadata(metadata, strict) {
188
- const errors = [];
189
- // Required fields
190
- if (!metadata.name) {
191
- errors.push({
192
- field: 'name',
193
- message: 'Required field "name" is missing',
194
- severity: 'error',
195
- });
196
- }
197
- else if (typeof metadata.name !== 'string') {
198
- errors.push({
199
- field: 'name',
200
- message: 'Field "name" must be a string',
201
- severity: 'error',
202
- });
203
- }
204
- else if (metadata.name.length > FIELD_LIMITS.name) {
205
- errors.push({
206
- field: 'name',
207
- message: `Field "name" exceeds maximum length of ${FIELD_LIMITS.name} characters`,
208
- severity: 'error',
209
- });
210
- }
211
- // Description validation
212
- if (!metadata.description) {
213
- errors.push({
214
- field: 'description',
215
- message: 'Required field "description" is missing',
216
- severity: strict ? 'error' : 'warning',
217
- });
218
- }
219
- else if (typeof metadata.description !== 'string') {
220
- errors.push({
221
- field: 'description',
222
- message: 'Field "description" must be a string',
223
- severity: 'error',
224
- });
225
- }
226
- else if (metadata.description.length > FIELD_LIMITS.description) {
227
- errors.push({
228
- field: 'description',
229
- message: `Field "description" exceeds maximum length of ${FIELD_LIMITS.description} characters`,
230
- severity: 'error',
231
- });
232
- }
233
- // Author validation
234
- if (metadata.author !== undefined) {
235
- if (typeof metadata.author !== 'string') {
236
- errors.push({
237
- field: 'author',
238
- message: 'Field "author" must be a string',
239
- severity: 'error',
240
- });
241
- }
242
- else if (metadata.author.length > FIELD_LIMITS.author) {
243
- errors.push({
244
- field: 'author',
245
- message: `Field "author" exceeds maximum length of ${FIELD_LIMITS.author} characters`,
246
- severity: 'error',
247
- });
248
- }
249
- }
250
- // Version validation
251
- if (metadata.version !== undefined) {
252
- if (typeof metadata.version !== 'string') {
253
- errors.push({
254
- field: 'version',
255
- message: 'Field "version" must be a string',
256
- severity: 'error',
257
- });
258
- }
259
- else if (metadata.version.length > FIELD_LIMITS.version) {
260
- errors.push({
261
- field: 'version',
262
- message: `Field "version" exceeds maximum length of ${FIELD_LIMITS.version} characters`,
263
- severity: 'error',
264
- });
265
- }
266
- }
267
- else if (strict) {
268
- errors.push({
269
- field: 'version',
270
- message: 'Field "version" is recommended',
271
- severity: 'warning',
272
- });
273
- }
274
- // Tags validation
275
- if (metadata.tags !== undefined) {
276
- if (!Array.isArray(metadata.tags)) {
277
- errors.push({
278
- field: 'tags',
279
- message: 'Field "tags" must be an array',
280
- severity: 'error',
281
- });
282
- }
283
- else {
284
- if (metadata.tags.length > FIELD_LIMITS.maxTags) {
285
- errors.push({
286
- field: 'tags',
287
- message: `Field "tags" exceeds maximum count of ${FIELD_LIMITS.maxTags}`,
288
- severity: 'error',
289
- });
290
- }
291
- for (let i = 0; i < metadata.tags.length; i++) {
292
- const tag = metadata.tags[i];
293
- if (typeof tag !== 'string') {
294
- errors.push({
295
- field: `tags[${i}]`,
296
- message: 'Tag must be a string',
297
- severity: 'error',
298
- });
299
- }
300
- else if (tag.length > FIELD_LIMITS.tagLength) {
301
- errors.push({
302
- field: `tags[${i}]`,
303
- message: `Tag exceeds maximum length of ${FIELD_LIMITS.tagLength} characters`,
304
- severity: 'error',
305
- });
306
- }
307
- }
308
- }
309
- }
310
- else if (strict) {
311
- errors.push({
312
- field: 'tags',
313
- message: 'Field "tags" is recommended for discoverability',
314
- severity: 'warning',
315
- });
316
- }
317
- // Security: Check repository URL for SSRF
318
- if (metadata.repository !== undefined) {
319
- if (typeof metadata.repository !== 'string') {
320
- errors.push({
321
- field: 'repository',
322
- message: 'Field "repository" must be a string',
323
- severity: 'error',
324
- });
325
- }
326
- else if (hasSsrfPattern(metadata.repository)) {
327
- errors.push({
328
- field: 'repository',
329
- message: 'Field "repository" contains potentially dangerous URL pattern',
330
- severity: 'error',
331
- });
332
- }
333
- }
334
- // Security: Check homepage URL for SSRF
335
- if (metadata.homepage !== undefined) {
336
- if (typeof metadata.homepage !== 'string') {
337
- errors.push({
338
- field: 'homepage',
339
- message: 'Field "homepage" must be a string',
340
- severity: 'error',
341
- });
342
- }
343
- else if (hasSsrfPattern(metadata.homepage)) {
344
- errors.push({
345
- field: 'homepage',
346
- message: 'Field "homepage" contains potentially dangerous URL pattern',
347
- severity: 'error',
348
- });
349
- }
350
- }
351
- // Security: Check for path traversal in any string fields
352
- for (const [key, value] of Object.entries(metadata)) {
353
- if (typeof value === 'string' && hasPathTraversal(value)) {
354
- errors.push({
355
- field: key,
356
- message: `Field "${key}" contains path traversal pattern`,
357
- severity: 'error',
358
- });
359
- }
360
- }
361
- return errors;
362
- }
28
+ import { validateInputSchema } from './validate.types.js';
29
+ // Import helpers
30
+ import { parseYamlFrontmatter, hasPathTraversal, validateMetadata } from './validate.helpers.js';
31
+ export { validateInputSchema, validateToolSchema } from './validate.types.js';
363
32
  /**
364
33
  * Execute skill validation.
365
34
  *
@@ -401,7 +70,6 @@ export async function executeValidate(input, _context) {
401
70
  }
402
71
  }
403
72
  catch {
404
- // Path doesn't exist or is inaccessible
405
73
  throw new SkillsmithError(ErrorCodes.SKILL_NOT_FOUND, `Path not found: ${skill_path}`, {
406
74
  details: { path: skill_path },
407
75
  });
@@ -427,7 +95,6 @@ export async function executeValidate(input, _context) {
427
95
  });
428
96
  }
429
97
  else {
430
- // Validate metadata
431
98
  errors.push(...validateMetadata(metadata, strict));
432
99
  }
433
100
  // Determine validity
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/tools/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/tools/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Validate Tool Types and Schemas
3
+ * @module @skillsmith/mcp-server/tools/validate.types
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Zod schema for validate tool input
8
+ */
9
+ export declare const validateInputSchema: z.ZodObject<{
10
+ /** Path to SKILL.md file or skill directory */
11
+ skill_path: z.ZodString;
12
+ /** Enable strict validation (default false) */
13
+ strict: z.ZodDefault<z.ZodBoolean>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ skill_path: string;
16
+ strict: boolean;
17
+ }, {
18
+ skill_path: string;
19
+ strict?: boolean | undefined;
20
+ }>;
21
+ /**
22
+ * Input type (before parsing, allows optional fields)
23
+ */
24
+ export type ValidateInput = z.input<typeof validateInputSchema>;
25
+ /**
26
+ * Validation error with severity
27
+ */
28
+ export interface ValidationError {
29
+ /** Field that has the error */
30
+ field: string;
31
+ /** Error message */
32
+ message: string;
33
+ /** Severity level */
34
+ severity: 'error' | 'warning';
35
+ }
36
+ /**
37
+ * Validation response
38
+ */
39
+ export interface ValidateResponse {
40
+ /** Whether the skill is valid */
41
+ valid: boolean;
42
+ /** List of validation errors/warnings */
43
+ errors: ValidationError[];
44
+ /** Parsed metadata if valid */
45
+ metadata: Record<string, unknown> | null;
46
+ /** File path validated */
47
+ path: string;
48
+ /** Performance timing */
49
+ timing: {
50
+ totalMs: number;
51
+ };
52
+ }
53
+ /**
54
+ * MCP tool schema definition for skill_validate
55
+ */
56
+ export declare const validateToolSchema: {
57
+ name: string;
58
+ description: string;
59
+ inputSchema: {
60
+ type: "object";
61
+ properties: {
62
+ skill_path: {
63
+ type: string;
64
+ description: string;
65
+ };
66
+ strict: {
67
+ type: string;
68
+ description: string;
69
+ default: boolean;
70
+ };
71
+ };
72
+ required: string[];
73
+ };
74
+ };
75
+ /**
76
+ * Maximum field lengths for validation
77
+ */
78
+ export declare const FIELD_LIMITS: {
79
+ name: number;
80
+ description: number;
81
+ author: number;
82
+ version: number;
83
+ category: number;
84
+ license: number;
85
+ tagLength: number;
86
+ maxTags: number;
87
+ };
88
+ /**
89
+ * Dangerous URL patterns for SSRF prevention
90
+ */
91
+ export declare const SSRF_PATTERNS: RegExp[];
92
+ /**
93
+ * Path traversal patterns
94
+ */
95
+ export declare const PATH_TRAVERSAL_PATTERNS: RegExp[];
96
+ //# sourceMappingURL=validate.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.types.d.ts","sourceRoot":"","sources":["../../../src/tools/validate.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,+CAA+C;;IAE/C,+CAA+C;;;;;;;;EAE/C,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,qBAAqB;IACrB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,KAAK,EAAE,OAAO,CAAA;IACd,yCAAyC;IACzC,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACxC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,yBAAyB;IACzB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;CAoB9B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;CASxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,UAazB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAAoD,CAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Validate Tool Types and Schemas
3
+ * @module @skillsmith/mcp-server/tools/validate.types
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Zod schema for validate tool input
8
+ */
9
+ export const validateInputSchema = z.object({
10
+ /** Path to SKILL.md file or skill directory */
11
+ skill_path: z.string().min(1, 'skill_path is required'),
12
+ /** Enable strict validation (default false) */
13
+ strict: z.boolean().default(false),
14
+ });
15
+ /**
16
+ * MCP tool schema definition for skill_validate
17
+ */
18
+ export const validateToolSchema = {
19
+ name: 'skill_validate',
20
+ description: 'Validate a SKILL.md file or skill directory against Skillsmith specification. Checks structure, required fields, and security patterns.',
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ skill_path: {
25
+ type: 'string',
26
+ description: 'Path to SKILL.md file or skill directory containing SKILL.md',
27
+ },
28
+ strict: {
29
+ type: 'boolean',
30
+ description: 'Enable strict validation mode (default false). Strict mode treats warnings as errors.',
31
+ default: false,
32
+ },
33
+ },
34
+ required: ['skill_path'],
35
+ },
36
+ };
37
+ /**
38
+ * Maximum field lengths for validation
39
+ */
40
+ export const FIELD_LIMITS = {
41
+ name: 64,
42
+ description: 1024,
43
+ author: 128,
44
+ version: 32,
45
+ category: 64,
46
+ license: 64,
47
+ tagLength: 32,
48
+ maxTags: 20,
49
+ };
50
+ /**
51
+ * Dangerous URL patterns for SSRF prevention
52
+ */
53
+ export const SSRF_PATTERNS = [
54
+ /^file:\/\//i,
55
+ /^gopher:\/\//i,
56
+ /^dict:\/\//i,
57
+ /^ldap:\/\//i,
58
+ /localhost/i,
59
+ /127\.0\.0\.\d+/,
60
+ /0\.0\.0\.0/,
61
+ /\[::1\]/,
62
+ /10\.\d+\.\d+\.\d+/,
63
+ /172\.(1[6-9]|2\d|3[01])\.\d+\.\d+/,
64
+ /192\.168\.\d+\.\d+/,
65
+ /169\.254\.\d+\.\d+/, // SMI-1723: Cloud metadata service (AWS, Azure, GCP)
66
+ ];
67
+ /**
68
+ * Path traversal patterns
69
+ */
70
+ export const PATH_TRAVERSAL_PATTERNS = [/\.\./, /\.\.%2[fF]/, /%2[eE]%2[eE]/, /\\\.\\./];
71
+ //# sourceMappingURL=validate.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.types.js","sourceRoot":"","sources":["../../../src/tools/validate.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,+CAA+C;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;IACvD,+CAA+C;IAC/C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnC,CAAC,CAAA;AAqCF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,yIAAyI;IAC3I,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,uFAAuF;gBACzF,OAAO,EAAE,KAAK;aACf;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,CAAC;KACzB;CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;CACZ,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa;IACb,eAAe;IACf,aAAa;IACb,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,SAAS;IACT,mBAAmB;IACnB,mCAAmC;IACnC,oBAAoB;IACpB,oBAAoB,EAAE,qDAAqD;CAC5E,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA"}
@@ -5,4 +5,5 @@
5
5
  */
6
6
  export { createWebhookServer, startWebhookServer, stopWebhookServer, type WebhookServerOptions, type ServerStartOptions, type WebhookServer, } from './webhook-endpoint.js';
7
7
  export { WebhookHandler, WebhookQueue, isSkillFile, extractSkillChanges, parseWebhookPayload, type WebhookEventType, type SkillFileChange, type WebhookHandleResult, type WebhookQueueItem, type QueueStats, } from '@skillsmith/core';
8
+ export { createStripeWebhookServer, startStripeWebhookServer, type StripeWebhookServerConfig, type StripeWebhookServerOptions, type StripeWebhookServer, } from './stripe-webhook-endpoint.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAA"}
@@ -6,4 +6,6 @@
6
6
  export { createWebhookServer, startWebhookServer, stopWebhookServer, } from './webhook-endpoint.js';
7
7
  // Re-export core webhook types for convenience
8
8
  export { WebhookHandler, WebhookQueue, isSkillFile, extractSkillChanges, parseWebhookPayload, } from '@skillsmith/core';
9
+ // SMI-1070: Stripe webhook endpoint
10
+ export { createStripeWebhookServer, startStripeWebhookServer, } from './stripe-webhook-endpoint.js';
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAIlB,MAAM,uBAAuB,CAAA;AAE9B,+CAA+C;AAC/C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,GAMpB,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAIlB,MAAM,uBAAuB,CAAA;AAE9B,+CAA+C;AAC/C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,GAMpB,MAAM,kBAAkB,CAAA;AAEzB,oCAAoC;AACpC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GAIzB,MAAM,8BAA8B,CAAA"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * SMI-1070: Stripe Webhook Endpoint
3
+ *
4
+ * HTTP endpoint for receiving Stripe webhooks.
5
+ * Integrates with the existing webhook server infrastructure.
6
+ *
7
+ * Features:
8
+ * - Signature verification
9
+ * - Rate limiting (STRIPE_WEBHOOK preset)
10
+ * - Idempotent event processing
11
+ * - Health check endpoint
12
+ */
13
+ import { Server } from 'http';
14
+ import type { RateLimiterState } from './webhook-endpoint.js';
15
+ import type { StripeWebhookHandler } from '@skillsmith/core/billing';
16
+ export interface StripeWebhookServerConfig {
17
+ /**
18
+ * Stripe webhook signing secret
19
+ */
20
+ webhookSecret: string;
21
+ /**
22
+ * Whether to trust proxy headers
23
+ */
24
+ trustProxy?: boolean;
25
+ /**
26
+ * Trusted proxy IPs
27
+ */
28
+ trustedProxies?: string[];
29
+ /**
30
+ * Maximum request body size (default: 64KB)
31
+ */
32
+ maxBodySize?: number;
33
+ /**
34
+ * Rate limit: max requests per minute (default: 100)
35
+ */
36
+ rateLimit?: number;
37
+ }
38
+ export interface StripeWebhookServerOptions extends StripeWebhookServerConfig {
39
+ /**
40
+ * Webhook handler instance
41
+ */
42
+ webhookHandler: StripeWebhookHandler;
43
+ /**
44
+ * Logging callback
45
+ */
46
+ onLog?: (level: 'info' | 'warn' | 'error', message: string, data?: unknown) => void;
47
+ }
48
+ export interface StripeWebhookServer {
49
+ server: Server;
50
+ rateLimiter: RateLimiterState;
51
+ stop: () => Promise<void>;
52
+ }
53
+ /**
54
+ * Create a Stripe webhook server
55
+ */
56
+ export declare function createStripeWebhookServer(options: StripeWebhookServerOptions): StripeWebhookServer;
57
+ /**
58
+ * Start the Stripe webhook server
59
+ */
60
+ export declare function startStripeWebhookServer(webhookServer: StripeWebhookServer, options?: {
61
+ port?: number;
62
+ host?: string;
63
+ }): Promise<void>;
64
+ /**
65
+ * Standalone entry point for Stripe webhook server
66
+ */
67
+ export declare function main(): Promise<void>;
68
+ //# sourceMappingURL=stripe-webhook-endpoint.d.ts.map