supasec 1.0.4 → 1.0.5

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 (97) hide show
  1. package/Feature-List.md +233 -0
  2. package/README.md +53 -12
  3. package/dist/cli.js +2 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +1 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/scan.d.ts.map +1 -1
  10. package/dist/commands/scan.js +74 -18
  11. package/dist/commands/scan.js.map +1 -1
  12. package/dist/commands/snapshot.d.ts +32 -0
  13. package/dist/commands/snapshot.d.ts.map +1 -0
  14. package/dist/commands/snapshot.js +282 -0
  15. package/dist/commands/snapshot.js.map +1 -0
  16. package/dist/reporters/html.d.ts +3 -2
  17. package/dist/reporters/html.d.ts.map +1 -1
  18. package/dist/reporters/html.js +844 -538
  19. package/dist/reporters/html.js.map +1 -1
  20. package/dist/reporters/terminal.d.ts +38 -2
  21. package/dist/reporters/terminal.d.ts.map +1 -1
  22. package/dist/reporters/terminal.js +292 -131
  23. package/dist/reporters/terminal.js.map +1 -1
  24. package/dist/scanners/auth/analyzer.d.ts +40 -0
  25. package/dist/scanners/auth/analyzer.d.ts.map +1 -0
  26. package/dist/scanners/auth/analyzer.js +673 -0
  27. package/dist/scanners/auth/analyzer.js.map +1 -0
  28. package/dist/scanners/auth/index.d.ts +6 -0
  29. package/dist/scanners/auth/index.d.ts.map +1 -0
  30. package/dist/scanners/auth/index.js +22 -0
  31. package/dist/scanners/auth/index.js.map +1 -0
  32. package/dist/scanners/edge/analyzer.d.ts +35 -0
  33. package/dist/scanners/edge/analyzer.d.ts.map +1 -0
  34. package/dist/scanners/edge/analyzer.js +614 -0
  35. package/dist/scanners/edge/analyzer.js.map +1 -0
  36. package/dist/scanners/edge/index.d.ts +6 -0
  37. package/dist/scanners/edge/index.d.ts.map +1 -0
  38. package/dist/scanners/edge/index.js +22 -0
  39. package/dist/scanners/edge/index.js.map +1 -0
  40. package/dist/scanners/functions/analyzer.d.ts +41 -0
  41. package/dist/scanners/functions/analyzer.d.ts.map +1 -0
  42. package/dist/scanners/functions/analyzer.js +378 -0
  43. package/dist/scanners/functions/analyzer.js.map +1 -0
  44. package/dist/scanners/functions/index.d.ts +6 -0
  45. package/dist/scanners/functions/index.d.ts.map +1 -0
  46. package/dist/scanners/functions/index.js +22 -0
  47. package/dist/scanners/functions/index.js.map +1 -0
  48. package/dist/scanners/git/index.d.ts +6 -0
  49. package/dist/scanners/git/index.d.ts.map +1 -0
  50. package/dist/scanners/git/index.js +22 -0
  51. package/dist/scanners/git/index.js.map +1 -0
  52. package/dist/scanners/git/scanner.d.ts +22 -0
  53. package/dist/scanners/git/scanner.d.ts.map +1 -0
  54. package/dist/scanners/git/scanner.js +531 -0
  55. package/dist/scanners/git/scanner.js.map +1 -0
  56. package/dist/scanners/https/analyzer.d.ts +42 -0
  57. package/dist/scanners/https/analyzer.d.ts.map +1 -0
  58. package/dist/scanners/https/analyzer.js +470 -0
  59. package/dist/scanners/https/analyzer.js.map +1 -0
  60. package/dist/scanners/https/index.d.ts +8 -0
  61. package/dist/scanners/https/index.d.ts.map +1 -0
  62. package/dist/scanners/https/index.js +17 -0
  63. package/dist/scanners/https/index.js.map +1 -0
  64. package/dist/scanners/index.d.ts +6 -0
  65. package/dist/scanners/index.d.ts.map +1 -1
  66. package/dist/scanners/index.js +6 -0
  67. package/dist/scanners/index.js.map +1 -1
  68. package/dist/scanners/rls/fuzzer.d.ts +40 -0
  69. package/dist/scanners/rls/fuzzer.d.ts.map +1 -0
  70. package/dist/scanners/rls/fuzzer.js +360 -0
  71. package/dist/scanners/rls/fuzzer.js.map +1 -0
  72. package/dist/scanners/rls/index.d.ts +1 -0
  73. package/dist/scanners/rls/index.d.ts.map +1 -1
  74. package/dist/scanners/rls/index.js +1 -0
  75. package/dist/scanners/rls/index.js.map +1 -1
  76. package/dist/scanners/secrets/detector.d.ts.map +1 -1
  77. package/dist/scanners/secrets/detector.js +44 -12
  78. package/dist/scanners/secrets/detector.js.map +1 -1
  79. package/dist/scanners/secrets/index.d.ts +1 -0
  80. package/dist/scanners/secrets/index.d.ts.map +1 -1
  81. package/dist/scanners/secrets/index.js +4 -0
  82. package/dist/scanners/secrets/index.js.map +1 -1
  83. package/dist/scanners/secrets/patterns.d.ts +25 -0
  84. package/dist/scanners/secrets/patterns.d.ts.map +1 -1
  85. package/dist/scanners/secrets/patterns.js +138 -27
  86. package/dist/scanners/secrets/patterns.js.map +1 -1
  87. package/dist/scanners/storage/analyzer.d.ts +49 -0
  88. package/dist/scanners/storage/analyzer.d.ts.map +1 -0
  89. package/dist/scanners/storage/analyzer.js +438 -0
  90. package/dist/scanners/storage/analyzer.js.map +1 -0
  91. package/dist/scanners/storage/index.d.ts +6 -0
  92. package/dist/scanners/storage/index.d.ts.map +1 -0
  93. package/dist/scanners/storage/index.js +22 -0
  94. package/dist/scanners/storage/index.js.map +1 -0
  95. package/package.json +1 -1
  96. package/reports/supasec-audityour-app-2026-01-28-19-42-22.html +757 -0
  97. package/reports/supasec-audityour-app-2026-01-28-19-49-18.html +1122 -0
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+ /**
3
+ * Storage Bucket Analyzer
4
+ * Scans for storage bucket security issues and misconfigurations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.analyzeStorage = analyzeStorage;
8
+ exports.getMockStorageBuckets = getMockStorageBuckets;
9
+ exports.getMockStorageObjects = getMockStorageObjects;
10
+ const finding_js_1 = require("../../models/finding.js");
11
+ /**
12
+ * Analyze storage buckets for security issues
13
+ */
14
+ async function analyzeStorage(options) {
15
+ const findings = [];
16
+ let findingCounter = 1;
17
+ let publicCount = 0;
18
+ let misconfiguredCount = 0;
19
+ for (const bucket of options.buckets) {
20
+ // Check if bucket is public
21
+ if (bucket.public) {
22
+ publicCount++;
23
+ findings.push(createPublicBucketFinding(bucket, findingCounter++));
24
+ }
25
+ // Check for missing file size limits
26
+ if (!bucket.fileSizeLimit || bucket.fileSizeLimit > 50 * 1024 * 1024) {
27
+ findings.push(createNoSizeLimitFinding(bucket, findingCounter++));
28
+ misconfiguredCount++;
29
+ }
30
+ // Check for unrestricted mime types
31
+ if (!bucket.allowedMimeTypes || bucket.allowedMimeTypes.length === 0) {
32
+ findings.push(createUnrestrictedMimeTypesFinding(bucket, findingCounter++));
33
+ misconfiguredCount++;
34
+ }
35
+ // Check for dangerous mime types allowed
36
+ if (bucket.allowedMimeTypes) {
37
+ const dangerousMimeTypes = [
38
+ 'application/x-httpd-php',
39
+ 'application/x-httpd-cgi',
40
+ 'application/x-javascript',
41
+ 'text/html',
42
+ 'application/xhtml+xml',
43
+ 'application/x-executable'
44
+ ];
45
+ const hasDangerousTypes = bucket.allowedMimeTypes.some(type => dangerousMimeTypes.includes(type.toLowerCase()));
46
+ if (hasDangerousTypes) {
47
+ findings.push(createDangerousMimeTypesFinding(bucket, findingCounter++));
48
+ misconfiguredCount++;
49
+ }
50
+ }
51
+ }
52
+ // Analyze objects if provided
53
+ if (options.objects) {
54
+ for (const object of options.objects) {
55
+ // Check for sensitive file patterns
56
+ const sensitivePatterns = [
57
+ /\.env$/i,
58
+ /\.env\./i,
59
+ /config\.json$/i,
60
+ /secrets?\./i,
61
+ /password/i,
62
+ /key\./i,
63
+ /\.pem$/i,
64
+ /\.key$/i,
65
+ /\.p12$/i,
66
+ /\.pfx$/i,
67
+ /id_rsa/i,
68
+ /\.htpasswd/i,
69
+ /credentials/i
70
+ ];
71
+ const isSensitive = sensitivePatterns.some(pattern => pattern.test(object.name));
72
+ if (isSensitive && object.isPublic) {
73
+ findings.push(createSensitiveFileExposedFinding(object, findingCounter++));
74
+ }
75
+ }
76
+ }
77
+ return {
78
+ findings,
79
+ bucketsScanned: options.buckets.length,
80
+ objectsScanned: options.objects?.length || 0,
81
+ publicBuckets: publicCount,
82
+ misconfiguredBuckets: misconfiguredCount
83
+ };
84
+ }
85
+ /**
86
+ * Create finding for public bucket
87
+ */
88
+ function createPublicBucketFinding(bucket, counter) {
89
+ return {
90
+ finding_id: (0, finding_js_1.generateFindingId)('storage', counter),
91
+ timestamp: new Date().toISOString(),
92
+ severity: 'HIGH',
93
+ category: 'storage',
94
+ subcategory: 'public_bucket',
95
+ title: `Storage bucket '${bucket.name}' is publicly accessible`,
96
+ description: `The storage bucket '${bucket.name}' is configured as public. All files in this bucket can be accessed by anyone without authentication.`,
97
+ location: {
98
+ table: `storage.buckets:${bucket.id}`
99
+ },
100
+ evidence: {
101
+ bucket_id: bucket.id,
102
+ bucket_name: bucket.name,
103
+ is_public: bucket.public,
104
+ owner: bucket.owner
105
+ },
106
+ impact: {
107
+ severity_score: 7.5,
108
+ description: 'Any file uploaded to this bucket is publicly accessible - potential data leak',
109
+ affected_resources: [`storage.buckets:${bucket.id}`],
110
+ compliance_violations: ['GDPR-Article-32', 'SOC2-CC6.1']
111
+ },
112
+ remediation: {
113
+ summary: `Make storage bucket '${bucket.name}' private`,
114
+ priority: 'HIGH',
115
+ effort: 'LOW',
116
+ steps: [
117
+ {
118
+ order: 1,
119
+ action: 'Update bucket to private',
120
+ sql: `-- Make bucket private
121
+ UPDATE storage.buckets
122
+ SET public = false
123
+ WHERE id = '${bucket.id}';`
124
+ },
125
+ {
126
+ order: 2,
127
+ action: 'Create RLS policies for bucket access',
128
+ sql: `-- Allow authenticated users to read their own files
129
+ CREATE POLICY "Users can read own files"
130
+ ON storage.objects FOR SELECT
131
+ USING (auth.uid()::text = (storage.foldername(name))[1]);
132
+
133
+ -- Allow authenticated users to upload files
134
+ CREATE POLICY "Users can upload files"
135
+ ON storage.objects FOR INSERT
136
+ WITH CHECK (auth.role() = 'authenticated');`
137
+ }
138
+ ],
139
+ auto_fixable: true
140
+ },
141
+ references: [
142
+ {
143
+ title: 'Supabase Storage Security',
144
+ url: 'https://supabase.com/docs/guides/storage/security/access-control'
145
+ }
146
+ ],
147
+ false_positive_likelihood: 'LOW',
148
+ confidence: 0.95
149
+ };
150
+ }
151
+ /**
152
+ * Create finding for missing file size limit
153
+ */
154
+ function createNoSizeLimitFinding(bucket, counter) {
155
+ const currentLimit = bucket.fileSizeLimit ? `${(bucket.fileSizeLimit / 1024 / 1024).toFixed(0)}MB` : 'No limit';
156
+ return {
157
+ finding_id: (0, finding_js_1.generateFindingId)('storage', counter),
158
+ timestamp: new Date().toISOString(),
159
+ severity: 'MEDIUM',
160
+ category: 'storage',
161
+ subcategory: 'no_size_limit',
162
+ title: `Storage bucket '${bucket.name}' has no file size limit`,
163
+ description: `The storage bucket '${bucket.name}' does not have a file size limit configured (current: ${currentLimit}). This could allow denial of service through large file uploads.`,
164
+ location: {
165
+ table: `storage.buckets:${bucket.id}`
166
+ },
167
+ evidence: {
168
+ bucket_id: bucket.id,
169
+ bucket_name: bucket.name,
170
+ file_size_limit: bucket.fileSizeLimit,
171
+ current_limit_formatted: currentLimit
172
+ },
173
+ impact: {
174
+ severity_score: 5.0,
175
+ description: 'Potential DoS through large file uploads - storage abuse and costs',
176
+ affected_resources: [`storage.buckets:${bucket.id}`]
177
+ },
178
+ remediation: {
179
+ summary: `Set file size limit for bucket '${bucket.name}'`,
180
+ priority: 'MEDIUM',
181
+ effort: 'LOW',
182
+ steps: [
183
+ {
184
+ order: 1,
185
+ action: 'Set appropriate file size limit (e.g., 5MB)',
186
+ sql: `-- Set file size limit to 5MB
187
+ UPDATE storage.buckets
188
+ SET file_size_limit = 5242880
189
+ WHERE id = '${bucket.id}';`
190
+ }
191
+ ],
192
+ auto_fixable: true
193
+ },
194
+ references: [
195
+ {
196
+ title: 'Supabase Storage Limits',
197
+ url: 'https://supabase.com/docs/guides/storage/uploads/file-limits'
198
+ }
199
+ ],
200
+ false_positive_likelihood: 'MEDIUM',
201
+ confidence: 0.8
202
+ };
203
+ }
204
+ /**
205
+ * Create finding for unrestricted mime types
206
+ */
207
+ function createUnrestrictedMimeTypesFinding(bucket, counter) {
208
+ return {
209
+ finding_id: (0, finding_js_1.generateFindingId)('storage', counter),
210
+ timestamp: new Date().toISOString(),
211
+ severity: 'MEDIUM',
212
+ category: 'storage',
213
+ subcategory: 'unrestricted_mime_types',
214
+ title: `Storage bucket '${bucket.name}' allows all file types`,
215
+ description: `The storage bucket '${bucket.name}' does not restrict allowed MIME types. This could allow upload of executable or dangerous files.`,
216
+ location: {
217
+ table: `storage.buckets:${bucket.id}`
218
+ },
219
+ evidence: {
220
+ bucket_id: bucket.id,
221
+ bucket_name: bucket.name,
222
+ allowed_mime_types: bucket.allowedMimeTypes || 'All types allowed'
223
+ },
224
+ impact: {
225
+ severity_score: 5.5,
226
+ description: 'Potential for malicious file uploads - malware distribution risk',
227
+ affected_resources: [`storage.buckets:${bucket.id}`],
228
+ compliance_violations: ['OWASP-A05-2021']
229
+ },
230
+ remediation: {
231
+ summary: `Restrict allowed MIME types for bucket '${bucket.name}'`,
232
+ priority: 'MEDIUM',
233
+ effort: 'LOW',
234
+ steps: [
235
+ {
236
+ order: 1,
237
+ action: 'Set allowed MIME types',
238
+ sql: `-- Restrict to images and documents only
239
+ UPDATE storage.buckets
240
+ SET allowed_mime_types = ARRAY[
241
+ 'image/jpeg',
242
+ 'image/png',
243
+ 'image/gif',
244
+ 'application/pdf',
245
+ 'text/plain'
246
+ ]
247
+ WHERE id = '${bucket.id}';`
248
+ }
249
+ ],
250
+ auto_fixable: true
251
+ },
252
+ references: [
253
+ {
254
+ title: 'MIME Type Security',
255
+ url: 'https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload'
256
+ }
257
+ ],
258
+ false_positive_likelihood: 'MEDIUM',
259
+ confidence: 0.75
260
+ };
261
+ }
262
+ /**
263
+ * Create finding for dangerous mime types
264
+ */
265
+ function createDangerousMimeTypesFinding(bucket, counter) {
266
+ return {
267
+ finding_id: (0, finding_js_1.generateFindingId)('storage', counter),
268
+ timestamp: new Date().toISOString(),
269
+ severity: 'HIGH',
270
+ category: 'storage',
271
+ subcategory: 'dangerous_mime_types',
272
+ title: `Storage bucket '${bucket.name}' allows dangerous file types`,
273
+ description: `The storage bucket '${bucket.name}' allows potentially dangerous MIME types (HTML, PHP, executables). This could enable XSS attacks or code execution.`,
274
+ location: {
275
+ table: `storage.buckets:${bucket.id}`
276
+ },
277
+ evidence: {
278
+ bucket_id: bucket.id,
279
+ bucket_name: bucket.name,
280
+ allowed_mime_types: bucket.allowedMimeTypes
281
+ },
282
+ impact: {
283
+ severity_score: 8.0,
284
+ description: 'XSS and code execution risk - malicious files can be served to users',
285
+ affected_resources: [`storage.buckets:${bucket.id}`],
286
+ compliance_violations: ['OWASP-A03-2021', 'XSS-CWE-79']
287
+ },
288
+ remediation: {
289
+ summary: `Remove dangerous MIME types from bucket '${bucket.name}'`,
290
+ priority: 'HIGH',
291
+ effort: 'LOW',
292
+ steps: [
293
+ {
294
+ order: 1,
295
+ action: 'Review and restrict MIME types',
296
+ sql: `-- Remove dangerous types, keep safe ones
297
+ UPDATE storage.buckets
298
+ SET allowed_mime_types = ARRAY[
299
+ 'image/jpeg',
300
+ 'image/png',
301
+ 'image/gif',
302
+ 'image/webp',
303
+ 'application/pdf'
304
+ ]
305
+ WHERE id = '${bucket.id}';`
306
+ }
307
+ ],
308
+ auto_fixable: true
309
+ },
310
+ references: [
311
+ {
312
+ title: 'OWASP XSS Prevention',
313
+ url: 'https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html'
314
+ }
315
+ ],
316
+ false_positive_likelihood: 'LOW',
317
+ confidence: 0.9
318
+ };
319
+ }
320
+ /**
321
+ * Create finding for sensitive file exposed
322
+ */
323
+ function createSensitiveFileExposedFinding(object, counter) {
324
+ return {
325
+ finding_id: (0, finding_js_1.generateFindingId)('storage', counter),
326
+ timestamp: new Date().toISOString(),
327
+ severity: 'CRITICAL',
328
+ category: 'storage',
329
+ subcategory: 'sensitive_file_exposed',
330
+ title: `Sensitive file '${object.name}' is publicly accessible`,
331
+ description: `The file '${object.name}' appears to contain sensitive information (credentials, keys, or configuration) and is publicly accessible.`,
332
+ location: {
333
+ table: `storage.objects:${object.bucketId}/${object.name}`
334
+ },
335
+ evidence: {
336
+ object_id: object.id,
337
+ bucket_id: object.bucketId,
338
+ file_name: object.name,
339
+ mime_type: object.mimeType,
340
+ size_bytes: object.size,
341
+ is_public: object.isPublic
342
+ },
343
+ impact: {
344
+ severity_score: 9.5,
345
+ description: 'Credentials or sensitive configuration exposed - immediate security breach',
346
+ affected_resources: [`storage.objects:${object.bucketId}/${object.name}`],
347
+ compliance_violations: ['GDPR-Article-32', 'PCI-DSS-3.2']
348
+ },
349
+ remediation: {
350
+ summary: `Remove or secure sensitive file '${object.name}'`,
351
+ priority: 'IMMEDIATE',
352
+ effort: 'LOW',
353
+ steps: [
354
+ {
355
+ order: 1,
356
+ action: 'Delete the exposed file immediately',
357
+ sql: `-- Delete exposed file
358
+ DELETE FROM storage.objects
359
+ WHERE id = '${object.id}';`
360
+ },
361
+ {
362
+ order: 2,
363
+ action: 'Rotate any exposed credentials',
364
+ code: '# Change passwords, API keys, and secrets that were exposed'
365
+ },
366
+ {
367
+ order: 3,
368
+ action: 'Make bucket private and add RLS policies',
369
+ sql: `-- Secure the bucket
370
+ UPDATE storage.buckets
371
+ SET public = false
372
+ WHERE id = '${object.bucketId}';`
373
+ }
374
+ ],
375
+ auto_fixable: false
376
+ },
377
+ references: [
378
+ {
379
+ title: 'OWASP Sensitive Data Exposure',
380
+ url: 'https://owasp.org/Top10/A02_2021-Cryptographic_Failures/'
381
+ }
382
+ ],
383
+ false_positive_likelihood: 'LOW',
384
+ confidence: 0.9
385
+ };
386
+ }
387
+ /**
388
+ * Mock storage buckets for testing
389
+ */
390
+ function getMockStorageBuckets() {
391
+ return [
392
+ {
393
+ id: 'avatars',
394
+ name: 'avatars',
395
+ public: true,
396
+ fileSizeLimit: 1024 * 1024, // 1MB
397
+ allowedMimeTypes: ['image/jpeg', 'image/png', 'image/gif']
398
+ },
399
+ {
400
+ id: 'documents',
401
+ name: 'documents',
402
+ public: false,
403
+ fileSizeLimit: 10 * 1024 * 1024, // 10MB
404
+ allowedMimeTypes: ['application/pdf', 'text/plain']
405
+ },
406
+ {
407
+ id: 'uploads',
408
+ name: 'uploads',
409
+ public: true,
410
+ // No size limit
411
+ // No mime type restrictions
412
+ }
413
+ ];
414
+ }
415
+ /**
416
+ * Mock storage objects for testing
417
+ */
418
+ function getMockStorageObjects() {
419
+ return [
420
+ {
421
+ id: 'obj-1',
422
+ bucketId: 'avatars',
423
+ name: 'user123/profile.jpg',
424
+ size: 102400,
425
+ mimeType: 'image/jpeg',
426
+ isPublic: true
427
+ },
428
+ {
429
+ id: 'obj-2',
430
+ bucketId: 'uploads',
431
+ name: 'backup/.env',
432
+ size: 2048,
433
+ mimeType: 'text/plain',
434
+ isPublic: true
435
+ }
436
+ ];
437
+ }
438
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/scanners/storage/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Storage Scanner Module
3
+ * Export all storage analysis functionality
4
+ */
5
+ export * from './analyzer.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scanners/storage/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Storage Scanner Module
4
+ * Export all storage analysis functionality
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ __exportStar(require("./analyzer.js"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scanners/storage/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,gDAA8B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supasec",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "A free, open-source CLI tool for comprehensive Supabase security auditing",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",