@kairoaisec/cli 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 (96) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/LICENSE +21 -0
  3. package/README.md +161 -0
  4. package/dist/api/client.d.ts +128 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +153 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/index.d.ts +7 -0
  9. package/dist/api/index.d.ts.map +1 -0
  10. package/dist/api/index.js +42 -0
  11. package/dist/api/index.js.map +1 -0
  12. package/dist/cli.d.ts +5 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +72 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/commands/auth/index.d.ts +3 -0
  17. package/dist/commands/auth/index.d.ts.map +1 -0
  18. package/dist/commands/auth/index.js +13 -0
  19. package/dist/commands/auth/index.js.map +1 -0
  20. package/dist/commands/auth/login.d.ts +3 -0
  21. package/dist/commands/auth/login.d.ts.map +1 -0
  22. package/dist/commands/auth/login.js +174 -0
  23. package/dist/commands/auth/login.js.map +1 -0
  24. package/dist/commands/auth/logout.d.ts +3 -0
  25. package/dist/commands/auth/logout.d.ts.map +1 -0
  26. package/dist/commands/auth/logout.js +56 -0
  27. package/dist/commands/auth/logout.js.map +1 -0
  28. package/dist/commands/auth/whoami.d.ts +3 -0
  29. package/dist/commands/auth/whoami.d.ts.map +1 -0
  30. package/dist/commands/auth/whoami.js +110 -0
  31. package/dist/commands/auth/whoami.js.map +1 -0
  32. package/dist/commands/config.d.ts +3 -0
  33. package/dist/commands/config.d.ts.map +1 -0
  34. package/dist/commands/config.js +102 -0
  35. package/dist/commands/config.js.map +1 -0
  36. package/dist/commands/project/create.d.ts +3 -0
  37. package/dist/commands/project/create.d.ts.map +1 -0
  38. package/dist/commands/project/create.js +146 -0
  39. package/dist/commands/project/create.js.map +1 -0
  40. package/dist/commands/project/index.d.ts +3 -0
  41. package/dist/commands/project/index.d.ts.map +1 -0
  42. package/dist/commands/project/index.js +14 -0
  43. package/dist/commands/project/index.js.map +1 -0
  44. package/dist/commands/project/list.d.ts +3 -0
  45. package/dist/commands/project/list.d.ts.map +1 -0
  46. package/dist/commands/project/list.js +116 -0
  47. package/dist/commands/project/list.js.map +1 -0
  48. package/dist/commands/project/select.d.ts +3 -0
  49. package/dist/commands/project/select.d.ts.map +1 -0
  50. package/dist/commands/project/select.js +147 -0
  51. package/dist/commands/project/select.js.map +1 -0
  52. package/dist/commands/scan.d.ts +3 -0
  53. package/dist/commands/scan.d.ts.map +1 -0
  54. package/dist/commands/scan.js +401 -0
  55. package/dist/commands/scan.js.map +1 -0
  56. package/dist/config/index.d.ts +44 -0
  57. package/dist/config/index.d.ts.map +1 -0
  58. package/dist/config/index.js +237 -0
  59. package/dist/config/index.js.map +1 -0
  60. package/dist/index.d.ts +6 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +33 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/lib/file-discovery.d.ts +17 -0
  65. package/dist/lib/file-discovery.d.ts.map +1 -0
  66. package/dist/lib/file-discovery.js +218 -0
  67. package/dist/lib/file-discovery.js.map +1 -0
  68. package/dist/lib/patterns.d.ts +18 -0
  69. package/dist/lib/patterns.d.ts.map +1 -0
  70. package/dist/lib/patterns.js +187 -0
  71. package/dist/lib/patterns.js.map +1 -0
  72. package/dist/lib/sarif.d.ts +61 -0
  73. package/dist/lib/sarif.d.ts.map +1 -0
  74. package/dist/lib/sarif.js +169 -0
  75. package/dist/lib/sarif.js.map +1 -0
  76. package/dist/lib/scanner.d.ts +43 -0
  77. package/dist/lib/scanner.d.ts.map +1 -0
  78. package/dist/lib/scanner.js +163 -0
  79. package/dist/lib/scanner.js.map +1 -0
  80. package/dist/lib/slither.d.ts +112 -0
  81. package/dist/lib/slither.d.ts.map +1 -0
  82. package/dist/lib/slither.js +463 -0
  83. package/dist/lib/slither.js.map +1 -0
  84. package/dist/utils/logger.d.ts +14 -0
  85. package/dist/utils/logger.d.ts.map +1 -0
  86. package/dist/utils/logger.js +44 -0
  87. package/dist/utils/logger.js.map +1 -0
  88. package/dist/utils/spinner.d.ts +15 -0
  89. package/dist/utils/spinner.d.ts.map +1 -0
  90. package/dist/utils/spinner.js +55 -0
  91. package/dist/utils/spinner.js.map +1 -0
  92. package/dist/utils/validation.d.ts +12 -0
  93. package/dist/utils/validation.d.ts.map +1 -0
  94. package/dist/utils/validation.js +79 -0
  95. package/dist/utils/validation.js.map +1 -0
  96. package/package.json +62 -0
@@ -0,0 +1,15 @@
1
+ export declare class Spinner {
2
+ private spinner;
3
+ constructor(text: string);
4
+ start(): this;
5
+ stop(): this;
6
+ succeed(text?: string): this;
7
+ fail(text?: string): this;
8
+ warn(text?: string): this;
9
+ info(text?: string): this;
10
+ updateText(text: string): this;
11
+ setColor(color: 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'): this;
12
+ static create(text: string): Spinner;
13
+ }
14
+ export declare const createSpinner: (text: string) => Spinner;
15
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAGA,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAM;gBAET,IAAI,EAAE,MAAM;IAOxB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI;IAK5G,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGrC;AAED,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAA4B,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSpinner = exports.Spinner = void 0;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ class Spinner {
9
+ spinner;
10
+ constructor(text) {
11
+ this.spinner = (0, ora_1.default)({
12
+ text,
13
+ color: 'cyan'
14
+ });
15
+ }
16
+ start() {
17
+ this.spinner.start();
18
+ return this;
19
+ }
20
+ stop() {
21
+ this.spinner.stop();
22
+ return this;
23
+ }
24
+ succeed(text) {
25
+ this.spinner.succeed(text);
26
+ return this;
27
+ }
28
+ fail(text) {
29
+ this.spinner.fail(text);
30
+ return this;
31
+ }
32
+ warn(text) {
33
+ this.spinner.warn(text);
34
+ return this;
35
+ }
36
+ info(text) {
37
+ this.spinner.info(text);
38
+ return this;
39
+ }
40
+ updateText(text) {
41
+ this.spinner.text = text;
42
+ return this;
43
+ }
44
+ setColor(color) {
45
+ this.spinner.color = color;
46
+ return this;
47
+ }
48
+ static create(text) {
49
+ return new Spinner(text);
50
+ }
51
+ }
52
+ exports.Spinner = Spinner;
53
+ const createSpinner = (text) => new Spinner(text);
54
+ exports.createSpinner = createSpinner;
55
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;;;;AAAA,8CAA+B;AAG/B,MAAa,OAAO;IACV,OAAO,CAAM;IAErB,YAAY,IAAY;QACtB,IAAI,CAAC,OAAO,GAAG,IAAA,aAAG,EAAC;YACjB,IAAI;YACJ,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,KAA4F;QACnG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AArDD,0BAqDC;AAEM,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAA7D,QAAA,aAAa,iBAAgD"}
@@ -0,0 +1,12 @@
1
+ export declare class ValidationError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare const validateRequired: (value: any, fieldName: string) => void;
5
+ export declare const validateEmail: (email: string) => void;
6
+ export declare const validateUrl: (url: string) => void;
7
+ export declare const validateFilePath: (filePath: string) => void;
8
+ export declare const validateDirectoryPath: (dirPath: string) => void;
9
+ export declare const validateSolidityFile: (filePath: string) => void;
10
+ export declare const validateProjectName: (name: string) => void;
11
+ export declare const validateApiKey: (apiKey: string) => void;
12
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,gBAAgB,GAAI,OAAO,GAAG,EAAE,WAAW,MAAM,KAAG,IAIhE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,IAK7C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,IAMzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,IAInD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,KAAG,IAOvD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,KAAG,IAMvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,IAUlD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,IAI/C,CAAC"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateApiKey = exports.validateProjectName = exports.validateSolidityFile = exports.validateDirectoryPath = exports.validateFilePath = exports.validateUrl = exports.validateEmail = exports.validateRequired = exports.ValidationError = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ class ValidationError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = 'ValidationError';
13
+ }
14
+ }
15
+ exports.ValidationError = ValidationError;
16
+ const validateRequired = (value, fieldName) => {
17
+ if (!value || (typeof value === 'string' && value.trim() === '')) {
18
+ throw new ValidationError(`${fieldName} is required`);
19
+ }
20
+ };
21
+ exports.validateRequired = validateRequired;
22
+ const validateEmail = (email) => {
23
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
24
+ if (!emailRegex.test(email)) {
25
+ throw new ValidationError('Invalid email format');
26
+ }
27
+ };
28
+ exports.validateEmail = validateEmail;
29
+ const validateUrl = (url) => {
30
+ try {
31
+ new URL(url);
32
+ }
33
+ catch {
34
+ throw new ValidationError('Invalid URL format');
35
+ }
36
+ };
37
+ exports.validateUrl = validateUrl;
38
+ const validateFilePath = (filePath) => {
39
+ if (!(0, fs_1.existsSync)(filePath)) {
40
+ throw new ValidationError(`File does not exist: ${filePath}`);
41
+ }
42
+ };
43
+ exports.validateFilePath = validateFilePath;
44
+ const validateDirectoryPath = (dirPath) => {
45
+ if (!(0, fs_1.existsSync)(dirPath)) {
46
+ throw new ValidationError(`Directory does not exist: ${dirPath}`);
47
+ }
48
+ if (!(0, fs_1.lstatSync)(dirPath).isDirectory()) {
49
+ throw new ValidationError(`Path is not a directory: ${dirPath}`);
50
+ }
51
+ };
52
+ exports.validateDirectoryPath = validateDirectoryPath;
53
+ const validateSolidityFile = (filePath) => {
54
+ (0, exports.validateFilePath)(filePath);
55
+ const ext = path_1.default.extname(filePath);
56
+ if (ext !== '.sol') {
57
+ throw new ValidationError(`File must have .sol extension: ${filePath}`);
58
+ }
59
+ };
60
+ exports.validateSolidityFile = validateSolidityFile;
61
+ const validateProjectName = (name) => {
62
+ if (!/^[a-zA-Z0-9-_]+$/.test(name)) {
63
+ throw new ValidationError('Project name can only contain letters, numbers, hyphens, and underscores');
64
+ }
65
+ if (name.length < 3) {
66
+ throw new ValidationError('Project name must be at least 3 characters long');
67
+ }
68
+ if (name.length > 50) {
69
+ throw new ValidationError('Project name must be less than 50 characters');
70
+ }
71
+ };
72
+ exports.validateProjectName = validateProjectName;
73
+ const validateApiKey = (apiKey) => {
74
+ if (!/^k_[a-zA-Z0-9]{32,}$/.test(apiKey)) {
75
+ throw new ValidationError('Invalid API key format');
76
+ }
77
+ };
78
+ exports.validateApiKey = validateApiKey;
79
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@kairoaisec/cli",
3
+ "version": "0.1.0",
4
+ "description": "Kairo CLI for smart contract security scanning",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "kairo": "dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "start": "node dist/cli.js",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest",
15
+ "validate": "tsc --noEmit && npm test"
16
+ },
17
+ "keywords": [
18
+ "security",
19
+ "smart-contracts",
20
+ "solidity",
21
+ "cli",
22
+ "kairo"
23
+ ],
24
+ "author": "Kairo <security@kairoaisec.com> (https://kairoaisec.com)",
25
+ "license": "MIT",
26
+ "files": [
27
+ "dist",
28
+ "README.md",
29
+ "CHANGELOG.md",
30
+ "LICENSE"
31
+ ],
32
+ "publishConfig": {
33
+ "access": "public",
34
+ "registry": "https://registry.npmjs.org"
35
+ },
36
+ "dependencies": {
37
+ "axios": "^1.6.2",
38
+ "chalk": "^4.1.2",
39
+ "commander": "^11.1.0",
40
+ "inquirer": "^9.2.12",
41
+ "keytar": "^7.9.0",
42
+ "open": "^8.4.2",
43
+ "ora": "^5.4.1",
44
+ "prompts": "^2.4.2"
45
+ },
46
+ "devDependencies": {
47
+ "@types/inquirer": "^9.0.7",
48
+ "@types/prompts": "^2.4.9",
49
+ "@types/node": "^20.14.12",
50
+ "@vitest/coverage-v8": "^2.1.9",
51
+ "typescript": "^5.5.4",
52
+ "vitest": "^2.1.0"
53
+ },
54
+ "engines": {
55
+ "node": ">=18.0.0"
56
+ },
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "git+https://github.com/kairoaisec/kairo.git",
60
+ "directory": "packages/cli"
61
+ }
62
+ }