archicore 0.3.1 → 0.3.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.
Files changed (42) hide show
  1. package/README.md +48 -4
  2. package/dist/cli/commands/interactive.js +83 -23
  3. package/dist/cli/commands/projects.js +3 -3
  4. package/dist/cli/ui/prompt.d.ts +4 -0
  5. package/dist/cli/ui/prompt.js +22 -0
  6. package/dist/cli/utils/config.js +2 -2
  7. package/dist/cli/utils/upload-utils.js +65 -18
  8. package/dist/code-index/ast-parser.d.ts +4 -0
  9. package/dist/code-index/ast-parser.js +42 -0
  10. package/dist/code-index/index.d.ts +21 -1
  11. package/dist/code-index/index.js +45 -1
  12. package/dist/code-index/source-map-extractor.d.ts +71 -0
  13. package/dist/code-index/source-map-extractor.js +194 -0
  14. package/dist/gitlab/gitlab-service.d.ts +162 -0
  15. package/dist/gitlab/gitlab-service.js +652 -0
  16. package/dist/gitlab/index.d.ts +8 -0
  17. package/dist/gitlab/index.js +8 -0
  18. package/dist/server/config/passport.d.ts +14 -0
  19. package/dist/server/config/passport.js +86 -0
  20. package/dist/server/index.js +52 -10
  21. package/dist/server/middleware/api-auth.d.ts +2 -2
  22. package/dist/server/middleware/api-auth.js +21 -2
  23. package/dist/server/middleware/csrf.d.ts +23 -0
  24. package/dist/server/middleware/csrf.js +96 -0
  25. package/dist/server/routes/auth.d.ts +2 -2
  26. package/dist/server/routes/auth.js +204 -5
  27. package/dist/server/routes/device-auth.js +2 -2
  28. package/dist/server/routes/gitlab.d.ts +12 -0
  29. package/dist/server/routes/gitlab.js +528 -0
  30. package/dist/server/routes/oauth.d.ts +6 -0
  31. package/dist/server/routes/oauth.js +198 -0
  32. package/dist/server/services/audit-service.d.ts +1 -1
  33. package/dist/server/services/auth-service.d.ts +13 -1
  34. package/dist/server/services/auth-service.js +108 -7
  35. package/dist/server/services/email-service.d.ts +63 -0
  36. package/dist/server/services/email-service.js +586 -0
  37. package/dist/server/utils/disposable-email-domains.d.ts +14 -0
  38. package/dist/server/utils/disposable-email-domains.js +192 -0
  39. package/dist/types/api.d.ts +98 -0
  40. package/dist/types/gitlab.d.ts +245 -0
  41. package/dist/types/gitlab.js +11 -0
  42. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ /**
2
+ * List of disposable/temporary email domains to block
3
+ * Updated regularly to prevent spam and fake registrations
4
+ */
5
+ export const DISPOSABLE_EMAIL_DOMAINS = new Set([
6
+ // Popular temporary email services
7
+ '10minutemail.com',
8
+ '10minutemail.net',
9
+ 'guerrillamail.com',
10
+ 'guerrillamail.net',
11
+ 'guerrillamailblock.com',
12
+ 'mailinator.com',
13
+ 'maildrop.cc',
14
+ 'temp-mail.org',
15
+ 'temp-mail.io',
16
+ 'tempmail.com',
17
+ 'throwaway.email',
18
+ 'trashmail.com',
19
+ 'yopmail.com',
20
+ 'getnada.com',
21
+ 'fakeinbox.com',
22
+ 'mailnesia.com',
23
+ 'sharklasers.com',
24
+ 'grr.la',
25
+ 'guerrillamail.biz',
26
+ 'guerrillamail.de',
27
+ 'spam4.me',
28
+ 'tmails.net',
29
+ 'emailondeck.com',
30
+ 'mintemail.com',
31
+ 'mytemp.email',
32
+ 'discard.email',
33
+ 'mohmal.com',
34
+ 'crazymailing.com',
35
+ 'mailcatch.com',
36
+ 'disposemail.com',
37
+ 'mailtemp.net',
38
+ 'mailforspam.com',
39
+ 'spambox.us',
40
+ 'filzmail.com',
41
+ 'throwam.com',
42
+ 'moakt.com',
43
+ 'receivemailonline.net',
44
+ 'fakemail.net',
45
+ 'tempinbox.com',
46
+ 'tempr.email',
47
+ 'getairmail.com',
48
+ 'mailpoof.com',
49
+ 'emailsensei.com',
50
+ 'mailmoat.com',
51
+ 'spamgourmet.com',
52
+ 'mytrashmail.com',
53
+ 'spamhole.com',
54
+ 'mailexpire.com',
55
+ 'rcpt.at',
56
+ 'trashmail.ws',
57
+ 'imgof.com',
58
+ 'wegwerfmail.de',
59
+ 'wegwerfemail.de',
60
+ 'jetable.org',
61
+ 'mailcatch.com',
62
+ 'tempsky.com',
63
+ 'temp-mail.de',
64
+ 'superrito.com',
65
+ 'mail-temporaire.fr',
66
+ 'spamfree24.org',
67
+ 'trillianpro.com',
68
+ 'armyspy.com',
69
+ 'cuvox.de',
70
+ 'dayrep.com',
71
+ 'einrot.com',
72
+ 'fleckens.hu',
73
+ 'gustr.com',
74
+ 'jourrapide.com',
75
+ 'rhyta.com',
76
+ 'teleworm.us',
77
+ '33mail.com',
78
+ 'anonbox.net',
79
+ 'boun.cr',
80
+ 'deadaddress.com',
81
+ 'mailexpire.com',
82
+ 'meltmail.com',
83
+ 'mt2014.com',
84
+ 'spambox.info',
85
+ 'trashmail.at',
86
+ 'trashmail.de',
87
+ 'trashmail.me',
88
+ 'wegwerfadresse.de',
89
+ 'zippymail.info',
90
+ 'e4ward.com',
91
+ 'spamcorptastic.com',
92
+ 'spamherelots.com',
93
+ 'spamhereplease.com',
94
+ 'spamthisplease.com',
95
+ 'sendspamhere.com',
96
+ 'beefmilk.com',
97
+ 'binkmail.com',
98
+ 'bobmail.info',
99
+ 'chammy.info',
100
+ 'devnullmail.com',
101
+ 'drdrb.net',
102
+ 'letthemeatspam.com',
103
+ 'mailinater.com',
104
+ 'soodonims.com',
105
+ 'spambog.com',
106
+ 'spamcannon.com',
107
+ 'spamcannon.net',
108
+ 'spamcon.org',
109
+ 'spamfree.eu',
110
+ 'spamgourmet.com',
111
+ 'spamgourmet.net',
112
+ 'spamgourmet.org',
113
+ 'spamhole.com',
114
+ 'spamify.com',
115
+ 'spammotel.com',
116
+ 'spamobox.com',
117
+ 'spamspot.com',
118
+ 'tempemail.net',
119
+ 'tempinbox.co.uk',
120
+ 'tempinbox.com',
121
+ 'tempomail.fr',
122
+ 'temporarily.de',
123
+ 'tempymail.com',
124
+ 'thankyou2010.com',
125
+ 'trash-mail.at',
126
+ 'trash-mail.com',
127
+ 'trash-mail.de',
128
+ 'trash2009.com',
129
+ 'trash2010.com',
130
+ 'trash2011.com',
131
+ 'trashmail.net',
132
+ 'trashmailer.com',
133
+ 'trashymail.com',
134
+ 'trashymail.net',
135
+ 'tyldd.com',
136
+ 'yopmail.fr',
137
+ 'yopmail.net',
138
+ 'zetmail.com',
139
+ 'zoaxe.com',
140
+ 'bugmenot.com',
141
+ 'devnullmail.com',
142
+ 'fastacura.com',
143
+ 'fastchevy.com',
144
+ 'fastchrysler.com',
145
+ 'fastkawasaki.com',
146
+ 'fastmazda.com',
147
+ 'fastmitsubishi.com',
148
+ 'fastnissan.com',
149
+ 'fastsubaru.com',
150
+ 'fastsuzuki.com',
151
+ 'fasttoyota.com',
152
+ 'fastyamaha.com',
153
+ 'haltospam.com',
154
+ 'kasmail.com',
155
+ 'mail-easy.fr',
156
+ 'mail.by',
157
+ 'maileater.com',
158
+ 'mailmetrash.com',
159
+ 'mailnull.com',
160
+ 'mt2009.com',
161
+ 'mytrashmail.compookmail.com',
162
+ 'shiftmail.com',
163
+ 'sneakemail.com',
164
+ 'spamex.com',
165
+ 'tradermail.info',
166
+ 'upliftnow.com',
167
+ 'viditag.com',
168
+ 'vubby.com',
169
+ 'vpn.st',
170
+ 'vsimcard.com',
171
+ ]);
172
+ /**
173
+ * Check if email domain is disposable/temporary
174
+ */
175
+ export function isDisposableEmail(email) {
176
+ if (!email || typeof email !== 'string') {
177
+ return false;
178
+ }
179
+ const emailLower = email.toLowerCase().trim();
180
+ const domain = emailLower.split('@')[1];
181
+ if (!domain) {
182
+ return false;
183
+ }
184
+ return DISPOSABLE_EMAIL_DOMAINS.has(domain);
185
+ }
186
+ /**
187
+ * Get user-friendly error message for disposable email
188
+ */
189
+ export function getDisposableEmailError() {
190
+ return 'Temporary/disposable email addresses are not allowed. Please use a permanent email address.';
191
+ }
192
+ //# sourceMappingURL=disposable-email-domains.js.map
@@ -37,6 +37,7 @@ export interface TokenUsage {
37
37
  metadata?: Record<string, unknown>;
38
38
  }
39
39
  export type ApiOperation = 'index' | 'analyze_impact' | 'analyze_security' | 'analyze_full' | 'search_semantic' | 'ask_architect' | 'export' | 'refactoring' | 'metrics' | 'rules_check' | 'dead_code' | 'duplication';
40
+ export type OperationCategory = 'index' | 'analyze' | 'search' | 'ask' | 'export' | 'refactoring' | 'metrics' | 'rules' | 'dead_code' | 'duplication';
40
41
  export interface PricingTier {
41
42
  name: string;
42
43
  pricePerMillionTokens: number;
@@ -184,5 +185,102 @@ export interface ApiRequestContext {
184
185
  rateLimitState: RateLimitState;
185
186
  billingAccount: BillingAccount;
186
187
  }
188
+ export interface ApiResponse<T = unknown> {
189
+ success: boolean;
190
+ data?: T;
191
+ error?: string;
192
+ message?: string;
193
+ }
194
+ export interface LoginResponse {
195
+ success: boolean;
196
+ token?: string;
197
+ user?: {
198
+ id: string;
199
+ email: string;
200
+ username: string;
201
+ tier: string;
202
+ provider: string;
203
+ avatar?: string;
204
+ };
205
+ error?: string;
206
+ }
207
+ export interface RegisterResponse extends LoginResponse {
208
+ }
209
+ export interface ProjectResponse {
210
+ success: boolean;
211
+ project?: {
212
+ id: string;
213
+ name: string;
214
+ path: string;
215
+ status: string;
216
+ createdAt: string;
217
+ updatedAt: string;
218
+ };
219
+ error?: string;
220
+ }
221
+ export interface ProjectListResponse {
222
+ success: boolean;
223
+ projects?: Array<{
224
+ id: string;
225
+ name: string;
226
+ path: string;
227
+ status: string;
228
+ createdAt: string;
229
+ }>;
230
+ error?: string;
231
+ }
232
+ export interface AnalysisResponse {
233
+ success: boolean;
234
+ analysis?: {
235
+ metrics?: Record<string, unknown>;
236
+ security?: Record<string, unknown>;
237
+ deadCode?: Record<string, unknown>;
238
+ duplication?: Record<string, unknown>;
239
+ refactoring?: Record<string, unknown>;
240
+ };
241
+ error?: string;
242
+ }
243
+ export interface GraphResponse {
244
+ success: boolean;
245
+ nodes?: Array<{
246
+ id: string;
247
+ label: string;
248
+ type?: string;
249
+ filePath?: string;
250
+ group?: string;
251
+ }>;
252
+ edges?: Array<{
253
+ from: string;
254
+ to: string;
255
+ }>;
256
+ error?: string;
257
+ }
258
+ export interface SearchResponse {
259
+ success: boolean;
260
+ results?: Array<{
261
+ file: string;
262
+ symbol?: string;
263
+ line?: number;
264
+ score?: number;
265
+ }>;
266
+ error?: string;
267
+ }
268
+ export interface UserProfileResponse {
269
+ success: boolean;
270
+ user?: {
271
+ id: string;
272
+ email: string;
273
+ username: string;
274
+ tier: string;
275
+ provider: string;
276
+ avatar?: string;
277
+ createdAt: string;
278
+ usage?: {
279
+ requestsToday: number;
280
+ requestsThisMonth: number;
281
+ };
282
+ };
283
+ error?: string;
284
+ }
187
285
  export declare const DEFAULT_RATE_LIMITS: Record<string, RateLimitConfig>;
188
286
  //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1,245 @@
1
+ /**
2
+ * GitLab Integration Types
3
+ *
4
+ * Types for GitLab API integration with support for:
5
+ * - Multiple GitLab instances (self-hosted + gitlab.com)
6
+ * - Personal Access Token authentication
7
+ * - Private repositories
8
+ * - Branch selection
9
+ */
10
+ /**
11
+ * GitLab instance configuration
12
+ * Supports both gitlab.com and self-hosted instances
13
+ */
14
+ export interface GitLabInstance {
15
+ id: string;
16
+ name: string;
17
+ instanceUrl: string;
18
+ userId: string;
19
+ gitlabUserId: number;
20
+ gitlabUsername: string;
21
+ accessToken: string;
22
+ tokenScopes: string[];
23
+ rejectUnauthorizedSSL: boolean;
24
+ createdAt: Date;
25
+ lastUsedAt?: Date;
26
+ }
27
+ /**
28
+ * GitLab project (repository)
29
+ */
30
+ export interface GitLabProject {
31
+ id: number;
32
+ name: string;
33
+ path: string;
34
+ path_with_namespace: string;
35
+ description: string | null;
36
+ visibility: 'private' | 'internal' | 'public';
37
+ default_branch: string;
38
+ web_url: string;
39
+ ssh_url_to_repo: string;
40
+ http_url_to_repo: string;
41
+ star_count: number;
42
+ forks_count: number;
43
+ last_activity_at: string;
44
+ namespace: {
45
+ id: number;
46
+ name: string;
47
+ path: string;
48
+ kind: 'user' | 'group';
49
+ };
50
+ owner?: {
51
+ id: number;
52
+ username: string;
53
+ name: string;
54
+ };
55
+ archived: boolean;
56
+ empty_repo: boolean;
57
+ }
58
+ /**
59
+ * GitLab branch
60
+ */
61
+ export interface GitLabBranch {
62
+ name: string;
63
+ commit: {
64
+ id: string;
65
+ short_id: string;
66
+ title: string;
67
+ created_at: string;
68
+ author_name: string;
69
+ };
70
+ merged: boolean;
71
+ protected: boolean;
72
+ default: boolean;
73
+ web_url: string;
74
+ }
75
+ /**
76
+ * GitLab user info
77
+ */
78
+ export interface GitLabUser {
79
+ id: number;
80
+ username: string;
81
+ name: string;
82
+ email?: string;
83
+ avatar_url: string;
84
+ web_url: string;
85
+ state: 'active' | 'blocked' | 'deactivated';
86
+ is_admin?: boolean;
87
+ }
88
+ /**
89
+ * Connected GitLab repository in ArchiCore
90
+ */
91
+ export interface ConnectedGitLabRepository {
92
+ id: string;
93
+ instanceId: string;
94
+ gitlabProjectId: number;
95
+ fullPath: string;
96
+ name: string;
97
+ owner: string;
98
+ visibility: 'private' | 'internal' | 'public';
99
+ defaultBranch: string;
100
+ projectId?: string;
101
+ autoAnalyze: boolean;
102
+ analyzeMRs: boolean;
103
+ webhookId?: number;
104
+ webhookSecret?: string;
105
+ status: 'pending' | 'active' | 'syncing' | 'error';
106
+ lastError?: string;
107
+ lastAnalyzedAt?: Date;
108
+ createdAt: Date;
109
+ updatedAt: Date;
110
+ }
111
+ /**
112
+ * GitLab merge request
113
+ */
114
+ export interface GitLabMergeRequest {
115
+ id: number;
116
+ iid: number;
117
+ title: string;
118
+ description: string | null;
119
+ state: 'opened' | 'closed' | 'merged' | 'locked';
120
+ source_branch: string;
121
+ target_branch: string;
122
+ author: {
123
+ id: number;
124
+ username: string;
125
+ name: string;
126
+ };
127
+ web_url: string;
128
+ created_at: string;
129
+ updated_at: string;
130
+ merged_at?: string;
131
+ merged_by?: {
132
+ id: number;
133
+ username: string;
134
+ };
135
+ draft: boolean;
136
+ work_in_progress: boolean;
137
+ labels: string[];
138
+ milestone?: {
139
+ id: number;
140
+ title: string;
141
+ };
142
+ diff_refs?: {
143
+ base_sha: string;
144
+ head_sha: string;
145
+ start_sha: string;
146
+ };
147
+ }
148
+ /**
149
+ * GitLab merge request changes (files)
150
+ */
151
+ export interface GitLabMRChange {
152
+ old_path: string;
153
+ new_path: string;
154
+ a_mode: string;
155
+ b_mode: string;
156
+ new_file: boolean;
157
+ renamed_file: boolean;
158
+ deleted_file: boolean;
159
+ diff: string;
160
+ }
161
+ /**
162
+ * GitLab webhook event payload
163
+ */
164
+ export interface GitLabWebhookPayload {
165
+ object_kind: 'push' | 'merge_request' | 'note' | 'tag_push' | 'pipeline';
166
+ event_name?: string;
167
+ project: {
168
+ id: number;
169
+ name: string;
170
+ path_with_namespace: string;
171
+ web_url: string;
172
+ default_branch: string;
173
+ };
174
+ user?: {
175
+ id: number;
176
+ username: string;
177
+ name: string;
178
+ };
179
+ ref?: string;
180
+ checkout_sha?: string;
181
+ commits?: Array<{
182
+ id: string;
183
+ message: string;
184
+ author: {
185
+ name: string;
186
+ email: string;
187
+ };
188
+ added: string[];
189
+ modified: string[];
190
+ removed: string[];
191
+ }>;
192
+ object_attributes?: {
193
+ id: number;
194
+ iid: number;
195
+ title: string;
196
+ state: string;
197
+ action?: string;
198
+ source_branch: string;
199
+ target_branch: string;
200
+ };
201
+ }
202
+ /**
203
+ * GitLab file content response
204
+ */
205
+ export interface GitLabFile {
206
+ file_name: string;
207
+ file_path: string;
208
+ size: number;
209
+ encoding: 'base64' | 'text';
210
+ content: string;
211
+ content_sha256: string;
212
+ ref: string;
213
+ blob_id: string;
214
+ commit_id: string;
215
+ last_commit_id: string;
216
+ }
217
+ /**
218
+ * GitLab API error response
219
+ */
220
+ export interface GitLabAPIError {
221
+ message: string | {
222
+ [key: string]: string[];
223
+ };
224
+ error?: string;
225
+ error_description?: string;
226
+ }
227
+ /**
228
+ * Options for connecting a GitLab repository
229
+ */
230
+ export interface ConnectGitLabRepositoryOptions {
231
+ autoAnalyze?: boolean;
232
+ analyzeMRs?: boolean;
233
+ createProject?: boolean;
234
+ projectName?: string;
235
+ branch?: string;
236
+ forceReconnect?: boolean;
237
+ }
238
+ /**
239
+ * GitLab service configuration
240
+ */
241
+ export interface GitLabServiceConfig {
242
+ dataDir?: string;
243
+ encryptionKey?: string;
244
+ }
245
+ //# sourceMappingURL=gitlab.d.ts.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * GitLab Integration Types
3
+ *
4
+ * Types for GitLab API integration with support for:
5
+ * - Multiple GitLab instances (self-hosted + gitlab.com)
6
+ * - Personal Access Token authentication
7
+ * - Private repositories
8
+ * - Branch selection
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=gitlab.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archicore",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "AI Software Architect - code analysis, impact prediction, semantic search",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",