@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,237 @@
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.configManager = exports.ConfigManager = void 0;
7
+ const keytar_1 = __importDefault(require("keytar"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_1 = require("fs");
11
+ // Configuration defaults
12
+ const defaults = {
13
+ apiUrl: 'https://kairoaisec.com',
14
+ };
15
+ // Configuration store
16
+ let configData = { ...defaults };
17
+ // Keytar service name for secure token storage
18
+ const KEYTAR_SERVICE = 'kairo-cli';
19
+ const TOKEN_KEY = 'auth-token';
20
+ const API_KEY_KEY = 'api-key';
21
+ class ConfigManager {
22
+ static instance;
23
+ constructor() {
24
+ this.loadConfig();
25
+ }
26
+ static getInstance() {
27
+ if (!ConfigManager.instance) {
28
+ ConfigManager.instance = new ConfigManager();
29
+ }
30
+ return ConfigManager.instance;
31
+ }
32
+ // Configuration management
33
+ get(key) {
34
+ return configData[key];
35
+ }
36
+ set(key, value) {
37
+ configData[key] = value;
38
+ this.saveConfig();
39
+ }
40
+ getAll() {
41
+ return { ...configData };
42
+ }
43
+ clear() {
44
+ configData = { ...defaults };
45
+ this.saveConfig();
46
+ }
47
+ saveConfig() {
48
+ try {
49
+ const configPath = this.getConfigPath();
50
+ const configDir = path_1.default.dirname(configPath);
51
+ if (!(0, fs_1.existsSync)(configDir)) {
52
+ (0, fs_1.mkdirSync)(configDir, { recursive: true });
53
+ }
54
+ (0, fs_1.writeFileSync)(configPath, JSON.stringify(configData, null, 2));
55
+ }
56
+ catch (error) {
57
+ console.error('Failed to save config:', error);
58
+ }
59
+ }
60
+ loadConfig() {
61
+ try {
62
+ const configPath = this.getConfigPath();
63
+ if ((0, fs_1.existsSync)(configPath)) {
64
+ const data = (0, fs_1.readFileSync)(configPath, 'utf8');
65
+ configData = { ...defaults, ...JSON.parse(data) };
66
+ }
67
+ }
68
+ catch (error) {
69
+ console.error('Failed to load config:', error);
70
+ configData = { ...defaults };
71
+ }
72
+ }
73
+ // Secure token management with JSON fallback
74
+ async getAuthToken() {
75
+ try {
76
+ const username = this.get('email') || os_1.default.userInfo().username;
77
+ return await keytar_1.default.getPassword(KEYTAR_SERVICE, `${username}-${TOKEN_KEY}`);
78
+ }
79
+ catch (error) {
80
+ // Fall back to file storage in CI environments
81
+ return this.getTokenFromFile(TOKEN_KEY);
82
+ }
83
+ }
84
+ async setAuthToken(token) {
85
+ try {
86
+ const username = this.get('email') || os_1.default.userInfo().username;
87
+ await keytar_1.default.setPassword(KEYTAR_SERVICE, `${username}-${TOKEN_KEY}`, token);
88
+ return true;
89
+ }
90
+ catch (error) {
91
+ // Fall back to file storage in CI environments
92
+ return this.setTokenToFile(TOKEN_KEY, token);
93
+ }
94
+ }
95
+ async clearAuthToken() {
96
+ try {
97
+ const username = this.get('email') || os_1.default.userInfo().username;
98
+ const result = await keytar_1.default.deletePassword(KEYTAR_SERVICE, `${username}-${TOKEN_KEY}`);
99
+ // Also clear file fallback
100
+ this.clearTokenFromFile(TOKEN_KEY);
101
+ return result;
102
+ }
103
+ catch (error) {
104
+ // Fall back to file storage cleanup
105
+ return this.clearTokenFromFile(TOKEN_KEY);
106
+ }
107
+ }
108
+ // API Key management (for programmatic access)
109
+ async getApiKey() {
110
+ try {
111
+ const username = this.get('email') || os_1.default.userInfo().username;
112
+ return await keytar_1.default.getPassword(KEYTAR_SERVICE, `${username}-${API_KEY_KEY}`);
113
+ }
114
+ catch (error) {
115
+ // Fall back to file storage in CI environments
116
+ return this.getTokenFromFile(API_KEY_KEY);
117
+ }
118
+ }
119
+ async setApiKey(apiKey) {
120
+ try {
121
+ const username = this.get('email') || os_1.default.userInfo().username;
122
+ await keytar_1.default.setPassword(KEYTAR_SERVICE, `${username}-${API_KEY_KEY}`, apiKey);
123
+ return true;
124
+ }
125
+ catch (error) {
126
+ // Fall back to file storage in CI environments
127
+ return this.setTokenToFile(API_KEY_KEY, apiKey);
128
+ }
129
+ }
130
+ async clearApiKey() {
131
+ try {
132
+ const username = this.get('email') || os_1.default.userInfo().username;
133
+ const result = await keytar_1.default.deletePassword(KEYTAR_SERVICE, `${username}-${API_KEY_KEY}`);
134
+ // Also clear file fallback
135
+ this.clearTokenFromFile(API_KEY_KEY);
136
+ return result;
137
+ }
138
+ catch (error) {
139
+ // Fall back to file storage cleanup
140
+ return this.clearTokenFromFile(API_KEY_KEY);
141
+ }
142
+ }
143
+ // File-based fallback for CI environments
144
+ getTokenFromFile(key) {
145
+ try {
146
+ const tokensPath = this.getTokensPath();
147
+ if (!(0, fs_1.existsSync)(tokensPath))
148
+ return null;
149
+ const tokens = JSON.parse((0, fs_1.readFileSync)(tokensPath, 'utf8'));
150
+ return tokens[key] || null;
151
+ }
152
+ catch (error) {
153
+ return null;
154
+ }
155
+ }
156
+ setTokenToFile(key, value) {
157
+ try {
158
+ const tokensPath = this.getTokensPath();
159
+ const tokensDir = path_1.default.dirname(tokensPath);
160
+ if (!(0, fs_1.existsSync)(tokensDir)) {
161
+ (0, fs_1.mkdirSync)(tokensDir, { recursive: true });
162
+ }
163
+ let tokens = {};
164
+ if ((0, fs_1.existsSync)(tokensPath)) {
165
+ tokens = JSON.parse((0, fs_1.readFileSync)(tokensPath, 'utf8'));
166
+ }
167
+ tokens = { ...tokens, [key]: value };
168
+ (0, fs_1.writeFileSync)(tokensPath, JSON.stringify(tokens), { mode: 0o600 }); // Secure permissions
169
+ return true;
170
+ }
171
+ catch (error) {
172
+ console.error('Failed to store token to file:', error);
173
+ return false;
174
+ }
175
+ }
176
+ clearTokenFromFile(key) {
177
+ try {
178
+ const tokensPath = this.getTokensPath();
179
+ if (!(0, fs_1.existsSync)(tokensPath))
180
+ return true;
181
+ const tokens = JSON.parse((0, fs_1.readFileSync)(tokensPath, 'utf8'));
182
+ delete tokens[key];
183
+ if (Object.keys(tokens).length === 0) {
184
+ // Remove file if empty
185
+ require('fs').unlinkSync(tokensPath);
186
+ }
187
+ else {
188
+ (0, fs_1.writeFileSync)(tokensPath, JSON.stringify(tokens), { mode: 0o600 });
189
+ }
190
+ return true;
191
+ }
192
+ catch (error) {
193
+ console.error('Failed to clear token from file:', error);
194
+ return false;
195
+ }
196
+ }
197
+ getTokensPath() {
198
+ return path_1.default.join(os_1.default.homedir(), '.kairo', 'tokens.json');
199
+ }
200
+ // Project management
201
+ getProjects() {
202
+ return configData.projects || [];
203
+ }
204
+ setProjects(projects) {
205
+ configData.projects = projects;
206
+ this.saveConfig();
207
+ }
208
+ addProject(project) {
209
+ const projects = this.getProjects();
210
+ projects.push(project);
211
+ this.setProjects(projects);
212
+ }
213
+ removeProject(projectId) {
214
+ const projects = this.getProjects().filter((p) => p.id !== projectId);
215
+ this.setProjects(projects);
216
+ }
217
+ getCurrentProject() {
218
+ const currentProjectId = this.get('currentProject');
219
+ if (!currentProjectId)
220
+ return null;
221
+ const projects = this.getProjects();
222
+ return projects.find((p) => p.id === currentProjectId) || null;
223
+ }
224
+ setCurrentProject(projectId) {
225
+ this.set('currentProject', projectId);
226
+ }
227
+ // Helper methods
228
+ isAuthenticated() {
229
+ return this.getAuthToken().then((token) => !!token);
230
+ }
231
+ getConfigPath() {
232
+ return path_1.default.join(os_1.default.homedir(), '.kairo', 'config.json');
233
+ }
234
+ }
235
+ exports.ConfigManager = ConfigManager;
236
+ exports.configManager = ConfigManager.getInstance();
237
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AACxB,2BAAwE;AAiBxE,yBAAyB;AACzB,MAAM,QAAQ,GAAgB;IAC5B,MAAM,EAAE,wBAAwB;CACjC,CAAC;AAEF,sBAAsB;AACtB,IAAI,UAAU,GAA2C,EAAE,GAAG,QAAQ,EAAE,CAAC;AAEzE,+CAA+C;AAC/C,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B,MAAa,aAAa;IAChB,MAAM,CAAC,QAAQ,CAAgB;IAEvC;QACE,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,2BAA2B;IAC3B,GAAG,CAA8B,GAAM;QACrC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAA8B,GAAM,EAAE,KAAqB;QAC5D,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,UAAU,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3C,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC9C,UAAU,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,UAAU,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;YAC7D,OAAO,MAAM,gBAAM,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;YAC7D,MAAM,gBAAM,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,gBAAM,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;YACvF,2BAA2B;YAC3B,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oCAAoC;YACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;YAC7D,OAAO,MAAM,gBAAM,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;YAC7D,MAAM,gBAAM,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,QAAQ,IAAI,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,gBAAM,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;YACzF,2BAA2B;YAC3B,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oCAAoC;YACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,0CAA0C;IAClC,gBAAgB,CAAC,GAAW;QAClC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,GAAW,EAAE,KAAa;QAC/C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3C,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;YACrC,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACpC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YAEnB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,uBAAuB;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,qBAAqB;IACrB,WAAW;QACT,OAAO,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,QAAmB;QAC7B,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,UAAU,CAAC,OAAgB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,iBAAiB;QACf,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;IAED,iBAAiB,CAAC,SAAiB;QACjC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,iBAAiB;IACjB,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,aAAa;QACX,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;CACF;AAzOD,sCAyOC;AAEY,QAAA,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { ConfigManager, configManager, type KairoConfig, type Project } from './config';
2
+ export { getApiClient, createApiClient, resetApiClient, KairoApiClient, type ApiProject } from './api';
3
+ export { Logger } from './utils/logger';
4
+ export { Spinner, createSpinner } from './utils/spinner';
5
+ export * from './utils/validation';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createSpinner = exports.Spinner = exports.Logger = exports.KairoApiClient = exports.resetApiClient = exports.createApiClient = exports.getApiClient = exports.configManager = exports.ConfigManager = void 0;
18
+ // Main CLI exports
19
+ var config_1 = require("./config");
20
+ Object.defineProperty(exports, "ConfigManager", { enumerable: true, get: function () { return config_1.ConfigManager; } });
21
+ Object.defineProperty(exports, "configManager", { enumerable: true, get: function () { return config_1.configManager; } });
22
+ var api_1 = require("./api");
23
+ Object.defineProperty(exports, "getApiClient", { enumerable: true, get: function () { return api_1.getApiClient; } });
24
+ Object.defineProperty(exports, "createApiClient", { enumerable: true, get: function () { return api_1.createApiClient; } });
25
+ Object.defineProperty(exports, "resetApiClient", { enumerable: true, get: function () { return api_1.resetApiClient; } });
26
+ Object.defineProperty(exports, "KairoApiClient", { enumerable: true, get: function () { return api_1.KairoApiClient; } });
27
+ var logger_1 = require("./utils/logger");
28
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } });
29
+ var spinner_1 = require("./utils/spinner");
30
+ Object.defineProperty(exports, "Spinner", { enumerable: true, get: function () { return spinner_1.Spinner; } });
31
+ Object.defineProperty(exports, "createSpinner", { enumerable: true, get: function () { return spinner_1.createSpinner; } });
32
+ __exportStar(require("./utils/validation"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mBAAmB;AACnB,mCAAwF;AAA/E,uGAAA,aAAa,OAAA;AAAE,uGAAA,aAAa,OAAA;AACrC,6BAAuG;AAA9F,mGAAA,YAAY,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,qGAAA,cAAc,OAAA;AAAE,qGAAA,cAAc,OAAA;AACtE,yCAAwC;AAA/B,gGAAA,MAAM,OAAA;AACf,2CAAyD;AAAhD,kGAAA,OAAO,OAAA;AAAE,wGAAA,aAAa,OAAA;AAC/B,qDAAmC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Recursively find all Solidity files in a directory
3
+ */
4
+ export declare function findSolidityFiles(targetPath: string): Promise<string[]>;
5
+ /**
6
+ * Check if a path is a single Solidity file
7
+ */
8
+ export declare function isSolidityFile(filePath: string): Promise<boolean>;
9
+ /**
10
+ * Validate that the target path exists and is accessible
11
+ */
12
+ export declare function validatePath(targetPath: string): Promise<{
13
+ exists: boolean;
14
+ isDirectory: boolean;
15
+ isFile: boolean;
16
+ }>;
17
+ //# sourceMappingURL=file-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-discovery.d.ts","sourceRoot":"","sources":["../../src/lib/file-discovery.ts"],"names":[],"mappings":"AAyIA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAc7E;AAkDD;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAeD"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findSolidityFiles = findSolidityFiles;
4
+ exports.isSolidityFile = isSolidityFile;
5
+ exports.validatePath = validatePath;
6
+ const promises_1 = require("fs/promises");
7
+ const path_1 = require("path");
8
+ /**
9
+ * Directories to skip during file discovery
10
+ */
11
+ const SKIP_DIRECTORIES = new Set([
12
+ 'node_modules',
13
+ '.git',
14
+ 'dist',
15
+ 'build',
16
+ 'cache',
17
+ 'out',
18
+ '.next',
19
+ 'coverage',
20
+ 'lib',
21
+ '.github',
22
+ '.vscode',
23
+ 'artifacts',
24
+ 'typechain',
25
+ 'deployments',
26
+ 'forge-std',
27
+ 'test',
28
+ 'tests',
29
+ 'script',
30
+ 'scripts',
31
+ ]);
32
+ /**
33
+ * Default ignore patterns
34
+ */
35
+ const DEFAULT_IGNORE_PATTERNS = [
36
+ '**/.git/**',
37
+ '**/node_modules/**',
38
+ '**/dist/**',
39
+ '**/build/**',
40
+ '**/cache/**',
41
+ '**/out/**',
42
+ '**/.next/**',
43
+ '**/coverage/**',
44
+ '**/lib/**',
45
+ '**/artifacts/**',
46
+ '**/typechain/**',
47
+ '**/forge-std/**',
48
+ '**/*.test.sol',
49
+ '**/*.t.sol',
50
+ '**/test/**',
51
+ '**/tests/**',
52
+ '**/script/**',
53
+ '**/scripts/**',
54
+ ];
55
+ /**
56
+ * Parse gitignore patterns from a file
57
+ */
58
+ async function parseIgnoreFile(ignoreFilePath) {
59
+ try {
60
+ const content = await (0, promises_1.readFile)(ignoreFilePath, 'utf8');
61
+ return content
62
+ .split('\n')
63
+ .map((line) => line.trim())
64
+ .filter((line) => line && !line.startsWith('#'))
65
+ .map((pattern) => {
66
+ // Convert gitignore patterns to glob patterns
67
+ if (pattern.endsWith('/')) {
68
+ return pattern + '**';
69
+ }
70
+ if (!pattern.includes('/')) {
71
+ return '**/' + pattern;
72
+ }
73
+ if (!pattern.startsWith('/')) {
74
+ return '**/' + pattern;
75
+ }
76
+ return pattern.substring(1); // Remove leading slash
77
+ });
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ }
83
+ /**
84
+ * Load ignore patterns from gitignore and kairoignore files
85
+ */
86
+ async function loadIgnorePatterns(startPath) {
87
+ const patterns = [...DEFAULT_IGNORE_PATTERNS];
88
+ let currentPath = (0, path_1.resolve)(startPath);
89
+ // Walk up the directory tree looking for ignore files
90
+ while (currentPath !== (0, path_1.dirname)(currentPath)) {
91
+ const gitignorePath = (0, path_1.join)(currentPath, '.gitignore');
92
+ const kairoignorePath = (0, path_1.join)(currentPath, '.kairoignore');
93
+ // Parse .gitignore
94
+ const gitignorePatterns = await parseIgnoreFile(gitignorePath);
95
+ patterns.push(...gitignorePatterns);
96
+ // Parse .kairoignore (Kairo-specific ignores)
97
+ const kairoignorePatterns = await parseIgnoreFile(kairoignorePath);
98
+ patterns.push(...kairoignorePatterns);
99
+ // Move up one directory
100
+ currentPath = (0, path_1.dirname)(currentPath);
101
+ }
102
+ return patterns;
103
+ }
104
+ /**
105
+ * Check if a file path matches any ignore pattern
106
+ */
107
+ function isIgnored(filePath, basePath, patterns) {
108
+ const relativePath = (0, path_1.relative)(basePath, filePath);
109
+ for (const pattern of patterns) {
110
+ if (minimatch(relativePath, pattern) || minimatch(filePath, pattern)) {
111
+ return true;
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+ /**
117
+ * Simple glob matching implementation
118
+ */
119
+ function minimatch(filePath, pattern) {
120
+ // Convert glob pattern to regex
121
+ const regexPattern = pattern
122
+ .replace(/\./g, '\\.')
123
+ .replace(/\*\*/g, '.*')
124
+ .replace(/\*/g, '[^/]*')
125
+ .replace(/\?/g, '.');
126
+ const regex = new RegExp(`^${regexPattern}$`);
127
+ return regex.test(filePath) || regex.test(filePath.replace(/\\/g, '/'));
128
+ }
129
+ /**
130
+ * Recursively find all Solidity files in a directory
131
+ */
132
+ async function findSolidityFiles(targetPath) {
133
+ const files = [];
134
+ const basePath = (0, path_1.resolve)(targetPath);
135
+ try {
136
+ // Load ignore patterns
137
+ const ignorePatterns = await loadIgnorePatterns(basePath);
138
+ await discoverFiles(basePath, basePath, files, ignorePatterns);
139
+ return files.sort(); // Return sorted for consistent ordering
140
+ }
141
+ catch (error) {
142
+ console.error(`Error discovering files in ${targetPath}:`, error);
143
+ return [];
144
+ }
145
+ }
146
+ /**
147
+ * Recursively discover files, respecting ignore patterns
148
+ */
149
+ async function discoverFiles(currentPath, basePath, files, ignorePatterns) {
150
+ try {
151
+ const entries = await (0, promises_1.readdir)(currentPath);
152
+ for (const entry of entries) {
153
+ const fullPath = (0, path_1.join)(currentPath, entry);
154
+ // Skip if path matches ignore patterns
155
+ if (isIgnored(fullPath, basePath, ignorePatterns)) {
156
+ continue;
157
+ }
158
+ try {
159
+ const stats = await (0, promises_1.stat)(fullPath);
160
+ if (stats.isDirectory()) {
161
+ // Skip well-known ignored directories
162
+ if (SKIP_DIRECTORIES.has(entry)) {
163
+ continue;
164
+ }
165
+ // Recursively process subdirectory
166
+ await discoverFiles(fullPath, basePath, files, ignorePatterns);
167
+ }
168
+ else if (stats.isFile()) {
169
+ // Check if it's a Solidity file
170
+ if ((0, path_1.extname)(entry).toLowerCase() === '.sol') {
171
+ files.push(fullPath);
172
+ }
173
+ }
174
+ }
175
+ catch (statError) {
176
+ // Skip files/directories we can't stat
177
+ continue;
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ // Skip directories we can't read (permissions, etc.)
183
+ console.warn(`Warning: Cannot read directory ${currentPath}:`, error.message);
184
+ }
185
+ }
186
+ /**
187
+ * Check if a path is a single Solidity file
188
+ */
189
+ async function isSolidityFile(filePath) {
190
+ try {
191
+ const stats = await (0, promises_1.stat)(filePath);
192
+ return stats.isFile() && (0, path_1.extname)(filePath).toLowerCase() === '.sol';
193
+ }
194
+ catch {
195
+ return false;
196
+ }
197
+ }
198
+ /**
199
+ * Validate that the target path exists and is accessible
200
+ */
201
+ async function validatePath(targetPath) {
202
+ try {
203
+ const stats = await (0, promises_1.stat)(targetPath);
204
+ return {
205
+ exists: true,
206
+ isDirectory: stats.isDirectory(),
207
+ isFile: stats.isFile(),
208
+ };
209
+ }
210
+ catch {
211
+ return {
212
+ exists: false,
213
+ isDirectory: false,
214
+ isFile: false,
215
+ };
216
+ }
217
+ }
218
+ //# sourceMappingURL=file-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-discovery.js","sourceRoot":"","sources":["../../src/lib/file-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface VulnerabilityPattern {
2
+ id: string;
3
+ pattern: RegExp;
4
+ severity: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
5
+ title: string;
6
+ description: string;
7
+ recommendation: string;
8
+ category: string;
9
+ cwe?: string;
10
+ confidenceBase: number;
11
+ }
12
+ /**
13
+ * Comprehensive vulnerability patterns ported from lib/scan-utils.ts
14
+ * These patterns detect common smart contract security issues
15
+ * Exactly 16 patterns from the main app scanner
16
+ */
17
+ export declare const VULNERABILITY_PATTERNS: VulnerabilityPattern[];
18
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/lib/patterns.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,EA0LxD,CAAC"}