@driftless-sh/cli 0.1.1 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuGjD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA4FjD"}
@@ -3,96 +3,169 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initCommand = initCommand;
4
4
  const api_client_1 = require("../api-client");
5
5
  const git_1 = require("../git");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
6
8
  async function initCommand() {
7
9
  console.log('Driftless — context integrity for engineering teams\n');
8
10
  if (!(0, git_1.isGitRepo)()) {
9
- console.error('Error: not a git repository. Run this command from the root of your repo.');
11
+ console.error('Error: not a git repository.');
10
12
  process.exit(1);
11
13
  }
12
14
  const remote = (0, git_1.getGitRemote)();
13
15
  if (!remote) {
14
- console.error('Error: no git remote found. Add a remote first with: git remote add origin <url>');
16
+ console.error('Error: no git remote found.');
15
17
  process.exit(1);
16
18
  }
17
19
  console.log(`Repository: ${remote.org}/${remote.repo}`);
18
- // 1. Create workspace (or find existing)
20
+ // 1. Get workspace from API key (not from git remote!)
21
+ console.log('\nConnecting to Driftless Cloud...');
19
22
  let workspace;
20
23
  try {
21
- workspace = await api_client_1.api.get(`/workspaces/${remote.org}`);
22
- console.log(`Workspace: ${remote.org} (existing)`);
24
+ workspace = await api_client_1.api.get('/me');
25
+ if (!workspace?.workspace_id) {
26
+ console.error('Could not resolve workspace. Check your API key.');
27
+ process.exit(1);
28
+ }
29
+ console.log(` Workspace: ${workspace.slug} ✓`);
23
30
  }
24
- catch {
25
- workspace = await api_client_1.api.post('/workspaces', {
26
- name: remote.org,
27
- slug: remote.org,
28
- });
29
- console.log(`Workspace: ${remote.org} (created)`);
31
+ catch (err) {
32
+ console.error(` Failed: ${err?.message || 'unreachable'}`);
33
+ process.exit(1);
34
+ }
35
+ const workspaceSlug = workspace.slug;
36
+ // 2. Local scan
37
+ console.log('\nScanning codebase locally...');
38
+ const cwd = process.cwd();
39
+ const summary = scanLocal(cwd);
40
+ console.log(` Framework: ${summary.framework} | Endpoints: ${summary.endpoints} | Services: ${summary.services}`);
41
+ console.log(` Modules: ${summary.modules} | Guards: ${summary.guards}`);
42
+ if (summary.auth_patterns.length > 0) {
43
+ console.log(` Auth: ${summary.auth_patterns.join(', ')}`);
30
44
  }
31
- // 2. Connect repo (or find existing)
45
+ // 3. Connect repo
32
46
  let repo;
33
47
  try {
34
- const repos = (await api_client_1.api.get(`/workspaces/${remote.org}/repos`));
35
- repo = repos.find((r) => r.github_org === remote.org && r.github_repo === remote.repo);
36
- if (repo) {
37
- console.log(`Repo: ${remote.repo} (existing)`);
38
- }
48
+ const repos = (await api_client_1.api.get(`/workspaces/${workspaceSlug}/repos`));
49
+ repo = Array.isArray(repos)
50
+ ? repos.find((r) => r.github_org === remote.org && r.github_repo === remote.repo)
51
+ : null;
39
52
  }
40
- catch {
41
- // ignore
42
- }
43
- if (!repo) {
44
- repo = await api_client_1.api.post(`/workspaces/${remote.org}/repos`, {
45
- github_org: remote.org,
46
- github_repo: remote.repo,
47
- });
48
- console.log(`Repo: ${remote.repo} (connected)`);
49
- }
50
- // 3. Scan repo
51
- console.log('\nScanning codebase...');
52
- const scanResult = await api_client_1.api.post(`/workspaces/${remote.org}/repos/${repo.id}/scan`);
53
- if (scanResult.status === 'error') {
54
- console.error(`Scan failed: ${scanResult.error}`);
55
- if (scanResult.error?.includes('clone') || scanResult.error?.includes('Cloning')) {
56
- console.error('\nTip: Make sure the repo is public, or add a GitHub token.');
57
- console.error('The scan runs server-side — the API clones your repo for AST analysis.');
53
+ catch { /* will create */ }
54
+ if (repo) {
55
+ console.log(`\n Repo: ${remote.repo} ✓`);
56
+ }
57
+ else {
58
+ try {
59
+ repo = await api_client_1.api.post(`/workspaces/${workspaceSlug}/repos`, {
60
+ github_org: remote.org,
61
+ github_repo: remote.repo,
62
+ });
63
+ console.log(` Repo: ${remote.repo} (connected)`);
64
+ }
65
+ catch (err) {
66
+ console.error(` Failed to connect repo: ${err?.message || 'unknown'}`);
67
+ process.exit(1);
58
68
  }
59
- process.exit(1);
60
69
  }
61
- const summary = scanResult.summary;
62
- if (!summary) {
63
- console.error('Scan returned no summary. The API might be unable to clone this repo.');
64
- console.error(`Status: ${scanResult.status}`);
65
- process.exit(1);
70
+ // 4. Upload baseline
71
+ try {
72
+ await api_client_1.api.post(`/workspaces/${workspaceSlug}/repos/${repo.id}/scan`, summary);
73
+ console.log(' Baseline uploaded ✓');
74
+ }
75
+ catch (err) {
76
+ console.error(` Upload failed: ${err?.message || 'unknown'}`);
66
77
  }
67
- console.log(`\nResults:`);
68
- console.log(` Framework: ${summary.framework}`);
69
- console.log(` Type: ${summary.system_type}`);
70
- console.log(` Auth: ${summary.auth_patterns?.join(', ') || 'none'}`);
71
- console.log(` Endpoints: ${summary.endpoints}`);
72
- console.log(` Guards: ${summary.guards}`);
73
- console.log(` Services: ${summary.services}`);
74
- console.log(` Modules: ${summary.modules}`);
75
- // 4. Suggest rules
78
+ // 5. Rules
76
79
  console.log('\nSuggested rules:');
77
- const suggestions = [
78
- ...(summary.auth_patterns?.includes('apikey')
79
- ? ['Every B2B endpoint must use BusinessAccessGuard']
80
- : []),
81
- ...(summary.guards > 3 ? ['Services must not import controllers directly'] : []),
82
- ...(summary.endpoints > 50
83
- ? [`app.controller.ts should be split — over 50 endpoints detected`]
84
- : []),
85
- ];
86
- if (suggestions.length === 0) {
87
- console.log(' No automatic suggestions for this repo.');
80
+ const suggestions = [];
81
+ if (summary.auth_patterns.includes('apikey') || summary.guards > 0) {
82
+ suggestions.push('Every B2B endpoint must use BusinessAccessGuard');
88
83
  }
89
- else {
90
- for (const s of suggestions) {
91
- console.log(` • ${s}`);
84
+ if (summary.services > summary.modules) {
85
+ suggestions.push('Services must not import controllers directly');
86
+ }
87
+ if (summary.endpoints > 50) {
88
+ suggestions.push('Split large controllers — over 50 endpoints detected');
89
+ }
90
+ if (suggestions.length === 0)
91
+ console.log(' No suggestions.');
92
+ else
93
+ suggestions.forEach((s) => console.log(` • ${s}`));
94
+ console.log(`\nView: https://driftless.icu/ecosystem`);
95
+ }
96
+ function scanLocal(rootPath) {
97
+ const pkg = readJson((0, node_path_1.join)(rootPath, 'package.json'));
98
+ const deps = { ...pkg?.dependencies, ...pkg?.devDependencies };
99
+ let framework = 'other';
100
+ if (deps?.['@nestjs/core'] || deps?.['@nestjs/common'])
101
+ framework = 'nestjs';
102
+ else if (deps?.['next'])
103
+ framework = 'nextjs';
104
+ else if (deps?.['express'])
105
+ framework = 'express';
106
+ let systemType = framework === 'nestjs' ? 'api' : 'unknown';
107
+ if (framework === 'nextjs' && (0, node_fs_1.existsSync)((0, node_path_1.join)(rootPath, 'pages')))
108
+ systemType = 'app';
109
+ const allFiles = listFiles((0, node_path_1.join)(rootPath, 'src'));
110
+ let endpoints = 0, services = 0, modules = 0, guards = 0;
111
+ for (const file of allFiles) {
112
+ try {
113
+ const content = (0, node_fs_1.readFileSync)(file, 'utf8');
114
+ if (content.includes('@Controller')) {
115
+ const matches = content.match(/@(Get|Post|Put|Patch|Delete|All)\s*\(/g);
116
+ if (matches)
117
+ endpoints += matches.length;
118
+ }
119
+ if (content.includes('@Injectable'))
120
+ services++;
121
+ if (content.includes('@Module'))
122
+ modules++;
123
+ if (content.match(/class\s+\w*Guard/) && content.includes('CanActivate'))
124
+ guards++;
125
+ }
126
+ catch { /* skip */ }
127
+ }
128
+ const authSet = new Set();
129
+ for (const file of allFiles.slice(0, 200)) {
130
+ try {
131
+ const c = (0, node_fs_1.readFileSync)(file, 'utf8');
132
+ if (c.includes('@clerk/') || c.includes('Clerk'))
133
+ authSet.add('clerk');
134
+ if (c.includes('Cognito') || c.includes('cognito'))
135
+ authSet.add('cognito');
136
+ if (c.includes('@UseGuards') || c.includes('AuthGuard'))
137
+ authSet.add('jwt');
138
+ if (c.includes('x-api-key') || c.includes('ApiKeyGuard') || c.includes('BusinessAccessGuard'))
139
+ authSet.add('apikey');
140
+ }
141
+ catch { /* skip */ }
142
+ }
143
+ return { framework, system_type: systemType, endpoints, services, modules, guards, auth_patterns: [...authSet] };
144
+ }
145
+ function listFiles(dir) {
146
+ const result = [];
147
+ if (!(0, node_fs_1.existsSync)(dir))
148
+ return result;
149
+ try {
150
+ for (const entry of (0, node_fs_1.readdirSync)(dir, { withFileTypes: true })) {
151
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
152
+ continue;
153
+ const full = (0, node_path_1.join)(dir, entry.name);
154
+ if (entry.isDirectory())
155
+ result.push(...listFiles(full));
156
+ else if (entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts'))
157
+ result.push(full);
92
158
  }
93
- console.log('\nAccept these suggestions? Run:');
94
- console.log(` driftless rule accept --all`);
95
159
  }
96
- console.log(`\nDone! Run 'driftless scan --diff' before pushing to check for violations.`);
160
+ catch { /* skip */ }
161
+ return result;
162
+ }
163
+ function readJson(path) {
164
+ try {
165
+ return JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
166
+ }
167
+ catch {
168
+ return null;
169
+ }
97
170
  }
98
171
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@driftless-sh/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Driftless CLI — context integrity for AI engineering teams",
5
5
  "license": "MIT",
6
6
  "repository": {