A personal website powered by Astro and ATProto
1#!/usr/bin/env node
2
3import { CollectionDiscovery } from '../src/lib/build/collection-discovery';
4import { loadConfig } from '../src/lib/config/site';
5import path from 'path';
6
7async function main() {
8 console.log('🚀 Starting collection discovery...');
9
10 try {
11 const config = loadConfig();
12 const discovery = new CollectionDiscovery();
13
14 if (!config.atproto.handle || config.atproto.handle === 'your-handle-here') {
15 console.error('❌ No ATProto handle configured. Please set ATPROTO_HANDLE in your environment.');
16 process.exit(1);
17 }
18
19 console.log(`🔍 Discovering collections for: ${config.atproto.handle}`);
20
21 // Discover collections
22 const results = await discovery.discoverCollections(config.atproto.handle);
23
24 // Save results
25 const outputPath = path.join(process.cwd(), 'src/lib/generated/discovered-types.ts');
26 await discovery.saveDiscoveryResults(results, outputPath);
27
28 console.log('✅ Collection discovery complete!');
29 console.log(`📊 Summary:`);
30 console.log(` - Collections: ${results.totalCollections}`);
31 console.log(` - Records: ${results.totalRecords}`);
32 console.log(` - Repository: ${results.repository.handle}`);
33 console.log(` - Output: ${outputPath}`);
34
35 // Log discovered collections
36 console.log('\n📦 Discovered Collections:');
37 for (const collection of results.collections) {
38 console.log(` - ${collection.name} (${collection.service})`);
39 console.log(` Types: ${collection.$types.join(', ')}`);
40 }
41
42 } catch (error) {
43 console.error('❌ Collection discovery failed:', error);
44 process.exit(1);
45 }
46}
47
48// Run if called directly
49// Run the main function
50main();