@calimero-network/registry-cli 1.0.0 → 1.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/apps.ts","../src/commands/developers.ts","../src/commands/attestations.ts","../src/commands/health.ts","../src/lib/ipfs.ts","../src/utils/spinner.ts","../src/commands/ipfs.ts","../src/index.ts"],"names":["spinner","Command","SSAppRegistryClient","ora","chalk","table"],"mappings":"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","file":"index.js","sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { table } from 'table';\nimport { SSAppRegistryClient } from '@calimero-network/registry-client';\nimport fs from 'fs';\nimport path from 'path';\n\nexport const appsCommand = new Command('apps')\n .description('Manage SSApp applications')\n .addCommand(\n new Command('list')\n .description('List all applications')\n .option('-d, --dev <pubkey>', 'Filter by developer public key')\n .option('-n, --name <name>', 'Filter by application name')\n .action(async (options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Fetching applications...').start();\n\n try {\n const apps = await client.getApps({\n dev: options.dev,\n name: options.name,\n });\n\n spinner.succeed(`Found ${apps.length} application(s)`);\n\n if (apps.length === 0) {\n console.log(chalk.yellow('No applications found'));\n return;\n }\n\n const tableData = [\n ['Name', 'Developer', 'Latest Version', 'Latest CID', 'Alias'],\n ...apps.map(app => [\n app.name,\n app.developer_pubkey?.substring(0, 12) + '...' || 'Unknown',\n app.latest_version || 'Unknown',\n app.latest_cid?.substring(0, 12) + '...' || 'N/A',\n app.alias || '-',\n ]),\n ];\n\n console.log(table(tableData));\n } catch (error) {\n spinner.fail('Failed to fetch applications');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('versions')\n .description('List versions of a specific application')\n .argument('<appId>', 'Application ID')\n .action(async (appId, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora(`Fetching versions for ${appId}...`).start();\n\n try {\n const versions = await client.getAppVersions(appId);\n\n spinner.succeed(`Found ${versions.length} version(s)`);\n\n if (versions.length === 0) {\n console.log(chalk.yellow('No versions found'));\n return;\n }\n\n const tableData = [\n ['Version', 'CID', 'Yanked'],\n ...versions.map(version => [\n version.semver,\n version.cid.substring(0, 12) + '...',\n version.yanked ? chalk.red('Yes') : chalk.green('No'),\n ]),\n ];\n\n console.log(table(tableData));\n } catch (error) {\n spinner.fail('Failed to fetch versions');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('manifest')\n .description('Get manifest for a specific application version')\n .argument('<appId>', 'Application ID')\n .argument('<version>', 'Application version')\n .action(async (appId, version, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora(\n `Fetching manifest for ${appId}@${version}...`\n ).start();\n\n try {\n const manifest = await client.getAppManifest(appId, version);\n\n spinner.succeed('Manifest fetched successfully');\n\n console.log(chalk.blue('\\nApplication Manifest:'));\n console.log(JSON.stringify(manifest, null, 2));\n } catch (error) {\n spinner.fail('Failed to fetch manifest');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('submit')\n .description('Submit a new application manifest')\n .argument('<manifest-file>', 'Path to the manifest JSON file')\n .action(async (manifestFile, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Reading manifest file...').start();\n\n try {\n // Read and parse the manifest file\n const manifestPath = path.resolve(manifestFile);\n if (!fs.existsSync(manifestPath)) {\n spinner.fail('Manifest file not found');\n console.error(chalk.red(`File not found: ${manifestFile}`));\n process.exit(1);\n }\n\n const manifestContent = fs.readFileSync(manifestPath, 'utf8');\n const manifest = JSON.parse(manifestContent);\n\n spinner.text = 'Submitting application manifest...';\n\n const result = await client.submitAppManifest(manifest);\n\n spinner.succeed('Application submitted successfully');\n console.log(chalk.green(`\\nāœ… ${result.message}`));\n\n if (manifest.app?.name) {\n console.log(chalk.blue(`\\nšŸ“± App: ${manifest.app.name}`));\n console.log(\n chalk.blue(`šŸ‘¤ Developer: ${manifest.app.developer_pubkey}`)\n );\n console.log(chalk.blue(`šŸ“¦ Version: ${manifest.version?.semver}`));\n }\n } catch (error) {\n spinner.fail('Failed to submit application');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { table } from 'table';\nimport { SSAppRegistryClient } from '@calimero-network/registry-client';\n\nexport const developersCommand = new Command('developers')\n .description('Manage developer profiles')\n .addCommand(\n new Command('get')\n .description('Get developer profile information')\n .argument('<pubkey>', 'Developer public key')\n .action(async (pubkey, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Fetching developer profile...').start();\n\n try {\n const profile = await client.getDeveloper(pubkey);\n\n spinner.succeed('Developer profile fetched successfully');\n\n console.log(chalk.blue('\\nDeveloper Profile:'));\n console.log(chalk.green('Display Name:'), profile.display_name);\n if (profile.website) {\n console.log(chalk.green('Website:'), profile.website);\n }\n\n if (profile.proofs.length > 0) {\n console.log(chalk.green('\\nProofs:'));\n const tableData = [\n ['Type', 'Value', 'Verified'],\n ...profile.proofs.map(proof => [\n proof.type,\n proof.value.substring(0, 20) + '...',\n proof.verified ? chalk.green('Yes') : chalk.red('No'),\n ]),\n ];\n console.log(table(tableData));\n } else {\n console.log(chalk.yellow('\\nNo proofs found'));\n }\n } catch (error) {\n spinner.fail('Failed to fetch developer profile');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('create')\n .description('Create a new developer profile')\n .argument('<pubkey>', 'Developer public key')\n .argument('<display-name>', 'Display name for the developer')\n .option('-w, --website <url>', 'Developer website URL')\n .option('-p, --proofs <proofs>', 'JSON string of proofs array')\n .action(async (pubkey, displayName, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Creating developer profile...').start();\n\n try {\n let proofs = [];\n if (options.proofs) {\n try {\n proofs = JSON.parse(options.proofs);\n } catch {\n spinner.fail('Invalid proofs JSON format');\n console.error(chalk.red('Proofs must be a valid JSON array'));\n process.exit(1);\n }\n }\n\n const profile = {\n pubkey,\n display_name: displayName,\n website: options.website,\n proofs,\n };\n\n const result = await client.submitDeveloperProfile(pubkey, profile);\n\n spinner.succeed('Developer profile created successfully');\n console.log(chalk.green(`\\nāœ… ${result.message}`));\n console.log(chalk.blue(`\\nšŸ‘¤ Developer: ${displayName}`));\n console.log(chalk.blue(`šŸ”‘ Public Key: ${pubkey}`));\n if (options.website) {\n console.log(chalk.blue(`🌐 Website: ${options.website}`));\n }\n } catch (error) {\n spinner.fail('Failed to create developer profile');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { SSAppRegistryClient } from '@calimero-network/registry-client';\n\nexport const attestationsCommand = new Command('attestations')\n .description('Manage application attestations')\n .addCommand(\n new Command('get')\n .description('Get attestation for a specific application version')\n .argument('<pubkey>', 'Developer public key')\n .argument('<name>', 'Application name')\n .argument('<version>', 'Application version')\n .action(async (pubkey, name, version, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora(\n `Fetching attestation for ${name}@${version}...`\n ).start();\n\n try {\n const attestation = await client.getAttestation(\n pubkey,\n name,\n version\n );\n\n spinner.succeed('Attestation fetched successfully');\n\n console.log(chalk.blue('\\nAttestation:'));\n console.log(chalk.green('Status:'), attestation.status);\n console.log(chalk.green('Timestamp:'), attestation.timestamp);\n if (attestation.comment) {\n console.log(chalk.green('Comment:'), attestation.comment);\n }\n } catch (error) {\n spinner.fail('Failed to fetch attestation');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { SSAppRegistryClient } from '@calimero-network/registry-client';\n\nexport const healthCommand = new Command('health')\n .description('Check the health of the SSApp Registry API')\n .action(async (options, command) => {\n const globalOpts = command.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Checking API health...').start();\n\n try {\n const health = await client.healthCheck();\n spinner.succeed('API is healthy');\n console.log(chalk.green(`Status: ${health.status}`));\n } catch (error) {\n spinner.fail('API health check failed');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n });\n","import { writeFileSync, existsSync } from 'fs';\n\nexport async function uploadToIPFS(filePath: string): Promise<string> {\n try {\n // For now, we'll simulate IPFS upload since public gateways require authentication\n // In production, you'd use a service like Pinata, Infura, or your own IPFS node\n\n // Check if file exists (this satisfies the linter by using filePath)\n if (!existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // Use a hardcoded valid CID for demo\n const simulatedCid = 'QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG';\n\n console.log('āš ļø Using simulated IPFS upload for demo purposes');\n console.log(' In production, use a service like Pinata or Infura');\n\n return simulatedCid;\n } catch (error) {\n throw new Error(\n `Failed to upload to IPFS: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n}\n\nexport async function downloadFromIPFS(\n cid: string,\n outputPath?: string\n): Promise<string> {\n try {\n // For demo purposes, we'll simulate IPFS download\n // In production, you'd actually download from IPFS\n\n console.log('āš ļø Using simulated IPFS download for demo purposes');\n console.log(' In production, use a service like Pinata or Infura');\n\n // Generate a simulated file content based on CID\n const simulatedContent = `Simulated IPFS file content for CID: ${cid}\\nThis is a demo file that would normally contain the actual application data.`;\n\n // Determine output path\n const finalOutputPath = outputPath || `${cid}.wasm`;\n\n // Write the simulated content to file\n writeFileSync(finalOutputPath, simulatedContent);\n\n return finalOutputPath;\n } catch (error) {\n throw new Error(\n `Failed to download from IPFS: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n}\n","import ora from 'ora';\n\nexport const spinner = (text: string) => ora(text);\n","import { Command } from 'commander';\nimport { uploadToIPFS, downloadFromIPFS } from '../lib/ipfs';\nimport { spinner } from '../utils/spinner';\n\nexport const ipfsCommand = new Command('ipfs')\n .description('IPFS operations')\n .addCommand(\n new Command('upload')\n .description('Upload a file to IPFS')\n .argument('<file>', 'Path to the file to upload')\n .action(async file => {\n const s = spinner('Uploading to IPFS...').start();\n\n try {\n const cid = await uploadToIPFS(file);\n s.succeed(`File uploaded successfully!`);\n console.log(`CID: ${cid}`);\n console.log(`Gateway URL: https://ipfs.io/ipfs/${cid}`);\n } catch (error) {\n s.fail('Upload failed');\n console.error(\n 'Error:',\n error instanceof Error ? error.message : 'Unknown error'\n );\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('download')\n .description('Download a file from IPFS')\n .argument('<cid>', 'IPFS CID to download')\n .argument('[output]', 'Output file path (optional)')\n .action(async (cid, output) => {\n const s = spinner('Downloading from IPFS...').start();\n\n try {\n const outputPath = await downloadFromIPFS(cid, output);\n s.succeed(`File downloaded successfully!`);\n console.log(`Saved to: ${outputPath}`);\n console.log(`Gateway URL: https://ipfs.io/ipfs/${cid}`);\n } catch (error) {\n s.fail('Download failed');\n console.error(\n 'Error:',\n error instanceof Error ? error.message : 'Unknown error'\n );\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { appsCommand } from './commands/apps.js';\nimport { developersCommand } from './commands/developers.js';\nimport { attestationsCommand } from './commands/attestations.js';\nimport { healthCommand } from './commands/health.js';\nimport { ipfsCommand } from './commands/ipfs.js';\n\nconst program = new Command();\n\nprogram\n .name('calimero-registry')\n .description(\n 'Calimero Network App Registry CLI - Command-line interface for the App Registry'\n )\n .version('1.0.0');\n\n// Global options\nprogram.option('-u, --url <url>', 'Registry API URL', 'http://localhost:8082');\nprogram.option(\n '-t, --timeout <timeout>',\n 'Request timeout in milliseconds',\n '10000'\n);\n\n// Add commands\nprogram.addCommand(appsCommand);\nprogram.addCommand(developersCommand);\nprogram.addCommand(attestationsCommand);\nprogram.addCommand(healthCommand);\nprogram.addCommand(ipfsCommand);\n\n// Global error handler\nprogram.exitOverride();\n\ntry {\n program.parse();\n} catch (err) {\n if (err instanceof Error) {\n console.error(chalk.red('Error:'), err.message);\n } else {\n console.error(chalk.red('Unknown error occurred'));\n }\n process.exit(1);\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/local-config.ts","../src/lib/local-storage.ts","../src/lib/local-artifacts.ts","../src/lib/registry-client.ts","../src/commands/apps.ts","../src/commands/developers.ts","../src/commands/attestations.ts","../src/commands/health.ts","../src/lib/ipfs.ts","../src/utils/spinner.ts","../src/commands/ipfs.ts","../src/lib/local-server.ts","../src/commands/local.ts","../src/index.ts"],"names":["fs","path","spinner","ora","chalk","Command","SSAppRegistryClient","table"],"mappings":"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","file":"index.js","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport os from 'os';\n\nexport interface LocalConfigData {\n server: {\n port: number;\n host: string;\n };\n data: {\n dir: string;\n artifactsDir: string;\n };\n artifacts: {\n storageDir: string;\n serveLocal: boolean;\n copyArtifacts: boolean;\n maxFileSize: string;\n allowedTypes: string[];\n };\n}\n\nexport class LocalConfig {\n private configPath: string;\n private dataDir: string;\n private config: LocalConfigData;\n\n constructor() {\n this.configPath = path.join(\n os.homedir(),\n '.calimero-registry',\n 'config.json'\n );\n this.dataDir = path.join(os.homedir(), '.calimero-registry');\n this.config = this.loadConfig();\n }\n\n private loadConfig(): LocalConfigData {\n // Create default config\n const defaultConfig: LocalConfigData = {\n server: {\n port: 8082,\n host: 'localhost',\n },\n data: {\n dir: path.join(os.homedir(), '.calimero-registry', 'data'),\n artifactsDir: path.join(\n os.homedir(),\n '.calimero-registry',\n 'artifacts'\n ),\n },\n artifacts: {\n storageDir: path.join(os.homedir(), '.calimero-registry', 'artifacts'),\n serveLocal: true,\n copyArtifacts: true,\n maxFileSize: '100MB',\n allowedTypes: ['wasm', 'js', 'html'],\n },\n };\n\n // Load existing config if it exists\n if (fs.existsSync(this.configPath)) {\n try {\n const existingConfig = JSON.parse(\n fs.readFileSync(this.configPath, 'utf8')\n );\n return { ...defaultConfig, ...existingConfig };\n } catch {\n console.warn('Failed to load existing config, using defaults');\n }\n }\n\n return defaultConfig;\n }\n\n private saveConfig(): void {\n // Ensure config directory exists\n const configDir = path.dirname(this.configPath);\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n\n // Save config\n fs.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2));\n }\n\n // Server configuration\n getPort(): number {\n return this.config.server.port;\n }\n\n setPort(port: number): void {\n this.config.server.port = port;\n this.saveConfig();\n }\n\n getHost(): string {\n return this.config.server.host;\n }\n\n setHost(host: string): void {\n this.config.server.host = host;\n this.saveConfig();\n }\n\n // Data directory configuration\n getDataDir(): string {\n return this.config.data.dir;\n }\n\n setDataDir(dir: string): void {\n this.config.data.dir = dir;\n this.config.artifacts.storageDir = path.join(dir, 'artifacts');\n this.saveConfig();\n }\n\n getArtifactsDir(): string {\n return this.config.data.artifactsDir;\n }\n\n setArtifactsDir(dir: string): void {\n this.config.data.artifactsDir = dir;\n this.config.artifacts.storageDir = dir;\n this.saveConfig();\n }\n\n // Artifact configuration\n getArtifactsConfig() {\n return this.config.artifacts;\n }\n\n setArtifactsConfig(config: Partial<LocalConfigData['artifacts']>): void {\n this.config.artifacts = { ...this.config.artifacts, ...config };\n this.saveConfig();\n }\n\n // Utility methods\n ensureDirectories(): void {\n const dirs = [\n this.getDataDir(),\n this.getArtifactsDir(),\n path.join(this.getDataDir(), 'backups'),\n path.join(this.getDataDir(), 'logs'),\n ];\n\n dirs.forEach(dir => {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n });\n }\n\n getConfigPath(): string {\n return this.configPath;\n }\n\n // Get full configuration\n getConfig(): LocalConfigData {\n return { ...this.config };\n }\n\n // Reset to defaults\n reset(): void {\n this.config = {\n server: {\n port: 8082,\n host: 'localhost',\n },\n data: {\n dir: path.join(os.homedir(), '.calimero-registry', 'data'),\n artifactsDir: path.join(\n os.homedir(),\n '.calimero-registry',\n 'artifacts'\n ),\n },\n artifacts: {\n storageDir: path.join(os.homedir(), '.calimero-registry', 'artifacts'),\n serveLocal: true,\n copyArtifacts: true,\n maxFileSize: '100MB',\n allowedTypes: ['wasm', 'js', 'html'],\n },\n };\n this.saveConfig();\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { LocalConfig } from './local-config.js';\n\nexport interface AppSummary {\n name: string;\n developer_pubkey: string;\n latest_version: string;\n latest_cid: string;\n alias?: string;\n}\n\nexport interface VersionInfo {\n semver: string;\n cid: string;\n yanked: boolean;\n}\n\nexport interface AppManifest {\n manifest_version: string;\n app: {\n name: string;\n namespace: string;\n developer_pubkey: string;\n id?: string;\n alias?: string;\n };\n version: {\n semver: string;\n };\n supported_chains: string[];\n permissions: Array<{\n cap: string;\n bytes: number;\n }>;\n artifacts: Array<{\n type: 'wasm';\n target: string;\n path?: string;\n cid?: string;\n mirrors?: string[];\n size: number;\n sha256?: string;\n }>;\n metadata: Record<string, unknown>;\n distribution: string;\n signature: {\n alg: string;\n sig: string;\n signed_at: string;\n };\n}\n\nexport interface LocalRegistryData {\n apps: Map<string, AppSummary>;\n manifests: Map<string, AppManifest>;\n artifacts: Map<string, string>; // hash -> file path\n}\n\nexport class LocalDataStore {\n private config: LocalConfig;\n private data: LocalRegistryData;\n private appsFile: string;\n private manifestsFile: string;\n private artifactsFile: string;\n\n constructor(config: LocalConfig) {\n this.config = config;\n this.appsFile = path.join(config.getDataDir(), 'apps.json');\n this.manifestsFile = path.join(config.getDataDir(), 'manifests.json');\n this.artifactsFile = path.join(config.getDataDir(), 'artifacts.json');\n this.data = {\n apps: new Map(),\n manifests: new Map(),\n artifacts: new Map(),\n };\n this.loadData();\n }\n\n private loadData(): void {\n try {\n // Load apps\n if (fs.existsSync(this.appsFile)) {\n const appsData = JSON.parse(fs.readFileSync(this.appsFile, 'utf8'));\n this.data.apps = new Map(Object.entries(appsData));\n }\n\n // Load manifests\n if (fs.existsSync(this.manifestsFile)) {\n const manifestsData = JSON.parse(\n fs.readFileSync(this.manifestsFile, 'utf8')\n );\n this.data.manifests = new Map(Object.entries(manifestsData));\n }\n\n // Load artifacts\n if (fs.existsSync(this.artifactsFile)) {\n const artifactsData = JSON.parse(\n fs.readFileSync(this.artifactsFile, 'utf8')\n );\n this.data.artifacts = new Map(Object.entries(artifactsData));\n }\n } catch {\n console.warn('Failed to load existing data, starting fresh');\n }\n }\n\n private saveData(): void {\n try {\n // Ensure data directory exists\n this.config.ensureDirectories();\n\n // Save apps\n const appsObj = Object.fromEntries(this.data.apps);\n fs.writeFileSync(this.appsFile, JSON.stringify(appsObj, null, 2));\n\n // Save manifests\n const manifestsObj = Object.fromEntries(this.data.manifests);\n fs.writeFileSync(\n this.manifestsFile,\n JSON.stringify(manifestsObj, null, 2)\n );\n\n // Save artifacts\n const artifactsObj = Object.fromEntries(this.data.artifacts);\n fs.writeFileSync(\n this.artifactsFile,\n JSON.stringify(artifactsObj, null, 2)\n );\n } catch (error) {\n throw new Error(\n `Failed to save data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n // Apps management\n getApps(filters?: { dev?: string; name?: string }): AppSummary[] {\n let apps = Array.from(this.data.apps.values());\n\n if (filters?.dev) {\n apps = apps.filter(app => app.developer_pubkey === filters.dev);\n }\n\n if (filters?.name) {\n apps = apps.filter(app => app.name.includes(filters.name!));\n }\n\n return apps;\n }\n\n getApp(appKey: string): AppSummary | undefined {\n return this.data.apps.get(appKey);\n }\n\n setApp(appKey: string, app: AppSummary): void {\n this.data.apps.set(appKey, app);\n this.saveData();\n }\n\n // Versions management\n getAppVersions(appId: string): VersionInfo[] {\n const versions: VersionInfo[] = [];\n\n for (const [key, manifest] of this.data.manifests.entries()) {\n if (manifest.app.id === appId) {\n const semver = key.split('/').pop()!;\n versions.push({\n semver,\n cid: manifest.artifacts[0]?.cid || '',\n yanked: false, // TODO: Implement yanking\n });\n }\n }\n\n return versions.sort((a, b) =>\n a.semver.localeCompare(b.semver, undefined, { numeric: true })\n );\n }\n\n // Manifest management\n getManifest(appId: string, semver: string): AppManifest | undefined {\n // Find the manifest key by appId\n for (const [, manifest] of this.data.manifests.entries()) {\n if (manifest.app.id === appId && manifest.version.semver === semver) {\n return manifest;\n }\n }\n return undefined;\n }\n\n setManifest(manifestKey: string, manifest: AppManifest): void {\n this.data.manifests.set(manifestKey, manifest);\n this.saveData();\n }\n\n // Artifact management\n getArtifactPath(hash: string): string | undefined {\n return this.data.artifacts.get(hash);\n }\n\n setArtifactPath(hash: string, filePath: string): void {\n this.data.artifacts.set(hash, filePath);\n this.saveData();\n }\n\n // Statistics\n getStats() {\n return {\n publishedApps: this.data.apps.size,\n totalVersions: this.data.manifests.size,\n totalArtifacts: this.data.artifacts.size,\n };\n }\n\n // Backup and restore\n async backup(outputPath?: string): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const backupPath =\n outputPath ||\n path.join(\n this.config.getDataDir(),\n 'backups',\n `backup-${timestamp}.json`\n );\n\n // Ensure backup directory exists\n const backupDir = path.dirname(backupPath);\n if (!fs.existsSync(backupDir)) {\n fs.mkdirSync(backupDir, { recursive: true });\n }\n\n const backupData = {\n timestamp: new Date().toISOString(),\n apps: Object.fromEntries(this.data.apps),\n manifests: Object.fromEntries(this.data.manifests),\n artifacts: Object.fromEntries(this.data.artifacts),\n };\n\n fs.writeFileSync(backupPath, JSON.stringify(backupData, null, 2));\n return backupPath;\n }\n\n async restore(backupPath: string): Promise<void> {\n if (!fs.existsSync(backupPath)) {\n throw new Error(`Backup file not found: ${backupPath}`);\n }\n\n const backupData = JSON.parse(fs.readFileSync(backupPath, 'utf8'));\n\n // Restore data\n this.data.apps = new Map(Object.entries(backupData.apps || {}));\n this.data.manifests = new Map(Object.entries(backupData.manifests || {}));\n this.data.artifacts = new Map(Object.entries(backupData.artifacts || {}));\n\n this.saveData();\n }\n\n // Reset data\n reset(): void {\n this.data.apps.clear();\n this.data.manifests.clear();\n this.data.artifacts.clear();\n this.saveData();\n }\n\n // Seed with sample data\n async seed(): Promise<void> {\n const sampleApps: AppSummary[] = [\n {\n name: 'sample-wallet',\n developer_pubkey:\n 'ed25519:5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',\n latest_version: '1.0.0',\n latest_cid: 'QmSampleWallet123',\n alias: 'Sample Wallet',\n },\n {\n name: 'demo-dex',\n developer_pubkey:\n 'ed25519:5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',\n latest_version: '2.1.0',\n latest_cid: 'QmDemoDex456',\n alias: 'Demo DEX',\n },\n ];\n\n const sampleManifests: AppManifest[] = [\n {\n manifest_version: '1.0',\n app: {\n name: 'sample-wallet',\n namespace: 'com.example',\n developer_pubkey:\n 'ed25519:5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',\n id: 'sample-wallet-id',\n alias: 'Sample Wallet',\n },\n version: {\n semver: '1.0.0',\n },\n supported_chains: ['mainnet', 'testnet'],\n permissions: [\n { cap: 'wallet', bytes: 1024 },\n { cap: 'network', bytes: 512 },\n ],\n artifacts: [\n {\n type: 'wasm',\n target: 'node',\n path: '/artifacts/sample-wallet/1.0.0/app.wasm',\n size: 1024000,\n sha256: 'abc123def456',\n },\n ],\n metadata: {\n description: 'A sample wallet application for testing',\n author: 'Sample Developer',\n },\n distribution: 'local',\n signature: {\n alg: 'ed25519',\n sig: 'sample-signature',\n signed_at: new Date().toISOString(),\n },\n },\n ];\n\n // Add sample apps\n sampleApps.forEach(app => {\n const appKey = `${app.developer_pubkey}/${app.name}`;\n this.setApp(appKey, app);\n });\n\n // Add sample manifests\n sampleManifests.forEach(manifest => {\n const manifestKey = `${manifest.app.developer_pubkey}/${manifest.app.name}/${manifest.version.semver}`;\n this.setManifest(manifestKey, manifest);\n });\n\n this.saveData();\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\nimport { Buffer } from 'buffer';\nimport { LocalConfig } from './local-config.js';\nimport { LocalDataStore } from './local-storage.js';\n\nexport class LocalArtifactServer {\n private config: LocalConfig;\n private dataStore: LocalDataStore;\n private artifactsDir: string;\n\n constructor(config: LocalConfig, dataStore: LocalDataStore) {\n this.config = config;\n this.dataStore = dataStore;\n this.artifactsDir = config.getArtifactsDir();\n this.ensureArtifactsDir();\n }\n\n private ensureArtifactsDir(): void {\n if (!fs.existsSync(this.artifactsDir)) {\n fs.mkdirSync(this.artifactsDir, { recursive: true });\n }\n }\n\n // Copy artifact to local storage\n async copyArtifactToLocal(\n sourcePath: string,\n appId: string,\n version: string,\n filename: string\n ): Promise<string> {\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Source file not found: ${sourcePath}`);\n }\n\n // Create app version directory\n const appVersionDir = path.join(this.artifactsDir, appId, version);\n if (!fs.existsSync(appVersionDir)) {\n fs.mkdirSync(appVersionDir, { recursive: true });\n }\n\n // Copy file to local storage\n const targetPath = path.join(appVersionDir, filename);\n fs.copyFileSync(sourcePath, targetPath);\n\n // Calculate file hash for tracking\n const fileHash = await this.calculateFileHash(targetPath);\n this.dataStore.setArtifactPath(fileHash, targetPath);\n\n return targetPath;\n }\n\n // Serve artifact by app ID, version, and filename\n async serveArtifact(\n appId: string,\n version: string,\n filename: string\n ): Promise<Buffer> {\n const artifactPath = path.join(this.artifactsDir, appId, version, filename);\n\n if (!fs.existsSync(artifactPath)) {\n throw new Error(`Artifact not found: ${artifactPath}`);\n }\n\n return fs.readFileSync(artifactPath);\n }\n\n // Serve artifact by hash\n async serveByHash(hash: string): Promise<Buffer> {\n const artifactPath = this.dataStore.getArtifactPath(hash);\n\n if (!artifactPath || !fs.existsSync(artifactPath)) {\n throw new Error(`Artifact not found for hash: ${hash}`);\n }\n\n return fs.readFileSync(artifactPath);\n }\n\n // Validate artifact file\n async validateArtifact(\n filePath: string\n ): Promise<{ size: number; sha256: string }> {\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n const stats = fs.statSync(filePath);\n const fileBuffer = fs.readFileSync(filePath);\n const sha256 = crypto.createHash('sha256').update(fileBuffer).digest('hex');\n\n return {\n size: stats.size,\n sha256,\n };\n }\n\n // Calculate file hash\n private async calculateFileHash(filePath: string): Promise<string> {\n const fileBuffer = fs.readFileSync(filePath);\n return crypto.createHash('sha256').update(fileBuffer).digest('hex');\n }\n\n // Get artifact URL for local serving\n getArtifactUrl(appId: string, version: string, filename: string): string {\n const baseUrl = `http://${this.config.getHost()}:${this.config.getPort()}`;\n return `${baseUrl}/artifacts/${appId}/${version}/${filename}`;\n }\n\n // Get artifact URL by hash\n getArtifactUrlByHash(hash: string): string {\n const baseUrl = `http://${this.config.getHost()}:${this.config.getPort()}`;\n return `${baseUrl}/artifacts/${hash}`;\n }\n\n // Update manifest artifacts to use local URLs\n updateManifestArtifacts(manifest: {\n artifacts?: Array<{\n path?: string;\n type: string;\n target: string;\n size: number;\n sha256: string;\n }>;\n }): {\n artifacts?: Array<{\n path?: string;\n type: string;\n target: string;\n size: number;\n sha256: string;\n }>;\n } {\n const updatedManifest = { ...manifest };\n\n if (updatedManifest.artifacts) {\n updatedManifest.artifacts = updatedManifest.artifacts.map(\n (artifact: {\n path?: string;\n type: string;\n target: string;\n size: number;\n sha256: string;\n }) => {\n const updatedArtifact = { ...artifact };\n\n // If artifact has a local path, update it to use local URL\n if (artifact.path) {\n const filename = path.basename(artifact.path);\n updatedArtifact.mirrors = [\n this.getArtifactUrl(\n manifest.app.id || manifest.app.name,\n manifest.version.semver,\n filename\n ),\n ];\n // Remove local path for production compatibility\n delete updatedArtifact.path;\n }\n\n return updatedArtifact;\n }\n );\n }\n\n return updatedManifest;\n }\n\n // Clean up old artifacts\n async cleanupOldArtifacts(\n maxAge: number = 30 * 24 * 60 * 60 * 1000\n ): Promise<void> {\n const now = Date.now();\n\n // Get all artifact files\n const getAllFiles = (dir: string): string[] => {\n let files: string[] = [];\n const items = fs.readdirSync(dir);\n\n for (const item of items) {\n const fullPath = path.join(dir, item);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n files = files.concat(getAllFiles(fullPath));\n } else {\n files.push(fullPath);\n }\n }\n\n return files;\n };\n\n const allFiles = getAllFiles(this.artifactsDir);\n\n for (const file of allFiles) {\n const stats = fs.statSync(file);\n const age = now - stats.mtime.getTime();\n\n if (age > maxAge) {\n fs.unlinkSync(file);\n console.log(`Cleaned up old artifact: ${file}`);\n }\n }\n }\n\n // Get artifact statistics\n getArtifactStats(): {\n totalFiles: number;\n totalSize: number;\n oldestFile: Date | null;\n } {\n let totalFiles = 0;\n let totalSize = 0;\n let oldestFile: Date | null = null;\n\n const getAllFiles = (dir: string): string[] => {\n let files: string[] = [];\n const items = fs.readdirSync(dir);\n\n for (const item of items) {\n const fullPath = path.join(dir, item);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n files = files.concat(getAllFiles(fullPath));\n } else {\n files.push(fullPath);\n }\n }\n\n return files;\n };\n\n if (fs.existsSync(this.artifactsDir)) {\n const allFiles = getAllFiles(this.artifactsDir);\n\n for (const file of allFiles) {\n const stats = fs.statSync(file);\n totalFiles++;\n totalSize += stats.size;\n\n if (!oldestFile || stats.mtime < oldestFile) {\n oldestFile = stats.mtime;\n }\n }\n }\n\n return {\n totalFiles,\n totalSize,\n oldestFile,\n };\n }\n}\n","import { SSAppRegistryClient } from '@calimero-network/registry-client';\nimport { LocalConfig } from './local-config.js';\nimport { LocalDataStore } from './local-storage.js';\nimport { LocalArtifactServer } from './local-artifacts.js';\nimport { AppSummary, VersionInfo, AppManifest } from './local-storage.js';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface RegistryClient {\n getApps(filters?: { dev?: string; name?: string }): Promise<AppSummary[]>;\n getAppVersions(appId: string): Promise<VersionInfo[]>;\n getAppManifest(appId: string, semver: string): Promise<AppManifest>;\n submitAppManifest(\n manifest: AppManifest\n ): Promise<{ success: boolean; message: string }>;\n healthCheck(): Promise<{ status: string }>;\n}\n\nexport class RemoteRegistryClient implements RegistryClient {\n private client: SSAppRegistryClient;\n\n constructor(baseURL: string, timeout: number) {\n this.client = new SSAppRegistryClient({\n baseURL,\n timeout,\n });\n }\n\n async getApps(filters?: {\n dev?: string;\n name?: string;\n }): Promise<AppSummary[]> {\n return await this.client.getApps(filters);\n }\n\n async getAppVersions(appId: string): Promise<VersionInfo[]> {\n return await this.client.getAppVersions(appId);\n }\n\n async getAppManifest(appId: string, semver: string): Promise<AppManifest> {\n return await this.client.getAppManifest(appId, semver);\n }\n\n async submitAppManifest(\n manifest: AppManifest\n ): Promise<{ success: boolean; message: string }> {\n return await this.client.submitAppManifest(manifest);\n }\n\n async healthCheck(): Promise<{ status: string }> {\n return await this.client.healthCheck();\n }\n}\n\nexport class LocalRegistryClient implements RegistryClient {\n private config: LocalConfig;\n private dataStore: LocalDataStore;\n private artifactServer: LocalArtifactServer;\n\n constructor() {\n this.config = new LocalConfig();\n this.dataStore = new LocalDataStore(this.config);\n this.artifactServer = new LocalArtifactServer(this.config, this.dataStore);\n }\n\n async getApps(filters?: {\n dev?: string;\n name?: string;\n }): Promise<AppSummary[]> {\n return this.dataStore.getApps(filters);\n }\n\n async getAppVersions(appId: string): Promise<VersionInfo[]> {\n return this.dataStore.getAppVersions(appId);\n }\n\n async getAppManifest(appId: string, semver: string): Promise<AppManifest> {\n const manifest = this.dataStore.getManifest(appId, semver);\n if (!manifest) {\n throw new Error('Manifest not found');\n }\n return this.artifactServer.updateManifestArtifacts(manifest);\n }\n\n async submitAppManifest(\n manifest: AppManifest\n ): Promise<{ success: boolean; message: string }> {\n // Validate manifest\n if (!this.validateManifest(manifest)) {\n throw new Error('Invalid manifest structure');\n }\n\n // Process artifacts - copy to local storage\n const processedManifest = await this.processManifestArtifacts(manifest);\n\n // Store manifest\n const manifestKey = `${manifest.app.developer_pubkey}/${manifest.app.name}/${manifest.version.semver}`;\n this.dataStore.setManifest(manifestKey, processedManifest);\n\n // Update app summary\n const appKey = `${manifest.app.developer_pubkey}/${manifest.app.name}`;\n const appSummary: AppSummary = {\n name: manifest.app.name,\n developer_pubkey: manifest.app.developer_pubkey,\n latest_version: manifest.version.semver,\n latest_cid: manifest.artifacts[0]?.cid || '',\n alias: manifest.app.alias,\n };\n this.dataStore.setApp(appKey, appSummary);\n\n return {\n success: true,\n message: 'App version registered successfully',\n };\n }\n\n async healthCheck(): Promise<{ status: string }> {\n return { status: 'ok' };\n }\n\n private validateManifest(manifest: AppManifest): boolean {\n return !!(\n manifest.manifest_version &&\n manifest.app &&\n manifest.app.name &&\n manifest.app.developer_pubkey &&\n manifest.version &&\n manifest.version.semver &&\n manifest.artifacts &&\n manifest.artifacts.length > 0\n );\n }\n\n private async processManifestArtifacts(\n manifest: AppManifest\n ): Promise<AppManifest> {\n const processedManifest = { ...manifest };\n\n if (processedManifest.artifacts) {\n processedManifest.artifacts = await Promise.all(\n processedManifest.artifacts.map(async artifact => {\n const processedArtifact = { ...artifact };\n\n // If artifact has a local path, copy it to local storage\n if (artifact.path && fs.existsSync(artifact.path)) {\n const filename = path.basename(artifact.path);\n const appId = manifest.app.id || manifest.app.name;\n\n try {\n await this.artifactServer.copyArtifactToLocal(\n artifact.path,\n appId,\n manifest.version.semver,\n filename\n );\n\n // Update artifact to use local URL\n processedArtifact.mirrors = [\n this.artifactServer.getArtifactUrl(\n appId,\n manifest.version.semver,\n filename\n ),\n ];\n\n // Remove local path for production compatibility\n delete processedArtifact.path;\n } catch (error) {\n console.warn(`Failed to copy artifact ${artifact.path}:`, error);\n }\n }\n\n return processedArtifact;\n })\n );\n }\n\n return processedManifest;\n }\n}\n\nexport function createRegistryClient(\n useLocal: boolean,\n baseURL?: string,\n timeout?: number\n): RegistryClient {\n if (useLocal) {\n return new LocalRegistryClient();\n } else {\n return new RemoteRegistryClient(\n baseURL || 'http://localhost:8082',\n timeout || 10000\n );\n }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { table } from 'table';\nimport { createRegistryClient } from '../lib/registry-client.js';\nimport fs from 'fs';\nimport path from 'path';\n\nexport const appsCommand = new Command('apps')\n .description('Manage SSApp applications')\n .addCommand(\n new Command('list')\n .description('List all applications')\n .option('-d, --dev <pubkey>', 'Filter by developer public key')\n .option('-n, --name <name>', 'Filter by application name')\n .action(async (options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || false;\n const client = createRegistryClient(\n useLocal,\n globalOpts?.url,\n parseInt(globalOpts?.timeout || '10000')\n );\n\n const spinner = ora('Fetching applications...').start();\n\n try {\n const apps = await client.getApps({\n dev: options.dev,\n name: options.name,\n });\n\n spinner.succeed(`Found ${apps.length} application(s)`);\n\n if (apps.length === 0) {\n console.log(chalk.yellow('No applications found'));\n return;\n }\n\n const tableData = [\n ['Name', 'Developer', 'Latest Version', 'Latest CID', 'Alias'],\n ...apps.map(app => [\n app.name,\n app.developer_pubkey?.substring(0, 12) + '...' || 'Unknown',\n app.latest_version || 'Unknown',\n app.latest_cid?.substring(0, 12) + '...' || 'N/A',\n app.alias || '-',\n ]),\n ];\n\n console.log(table(tableData));\n } catch (error) {\n spinner.fail('Failed to fetch applications');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('versions')\n .description('List versions of a specific application')\n .argument('<appId>', 'Application ID')\n .action(async (appId, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || false;\n const client = createRegistryClient(\n useLocal,\n globalOpts?.url,\n parseInt(globalOpts?.timeout || '10000')\n );\n\n const spinner = ora(`Fetching versions for ${appId}...`).start();\n\n try {\n const versions = await client.getAppVersions(appId);\n\n spinner.succeed(`Found ${versions.length} version(s)`);\n\n if (versions.length === 0) {\n console.log(chalk.yellow('No versions found'));\n return;\n }\n\n const tableData = [\n ['Version', 'CID', 'Yanked'],\n ...versions.map(version => [\n version.semver,\n version.cid.substring(0, 12) + '...',\n version.yanked ? chalk.red('Yes') : chalk.green('No'),\n ]),\n ];\n\n console.log(table(tableData));\n } catch (error) {\n spinner.fail('Failed to fetch versions');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('manifest')\n .description('Get manifest for a specific application version')\n .argument('<appId>', 'Application ID')\n .argument('<version>', 'Application version')\n .action(async (appId, version, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || false;\n const client = createRegistryClient(\n useLocal,\n globalOpts?.url,\n parseInt(globalOpts?.timeout || '10000')\n );\n\n const spinner = ora(\n `Fetching manifest for ${appId}@${version}...`\n ).start();\n\n try {\n const manifest = await client.getAppManifest(appId, version);\n\n spinner.succeed('Manifest fetched successfully');\n\n console.log(chalk.blue('\\nApplication Manifest:'));\n console.log(JSON.stringify(manifest, null, 2));\n } catch (error) {\n spinner.fail('Failed to fetch manifest');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('submit')\n .description('Submit a new application manifest')\n .argument('<manifest-file>', 'Path to the manifest JSON file')\n .action(async (manifestFile, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || false;\n const client = createRegistryClient(\n useLocal,\n globalOpts?.url,\n parseInt(globalOpts?.timeout || '10000')\n );\n\n const spinner = ora('Reading manifest file...').start();\n\n try {\n // Read and parse the manifest file\n const manifestPath = path.resolve(manifestFile);\n if (!fs.existsSync(manifestPath)) {\n spinner.fail('Manifest file not found');\n console.error(chalk.red(`File not found: ${manifestFile}`));\n process.exit(1);\n }\n\n const manifestContent = fs.readFileSync(manifestPath, 'utf8');\n const manifest = JSON.parse(manifestContent);\n\n spinner.text = 'Submitting application manifest...';\n\n const result = await client.submitAppManifest(manifest);\n\n spinner.succeed('Application submitted successfully');\n console.log(chalk.green(`\\nāœ… ${result.message}`));\n\n if (manifest.app?.name) {\n console.log(chalk.blue(`\\nšŸ“± App: ${manifest.app.name}`));\n console.log(\n chalk.blue(`šŸ‘¤ Developer: ${manifest.app.developer_pubkey}`)\n );\n console.log(chalk.blue(`šŸ“¦ Version: ${manifest.version?.semver}`));\n }\n } catch (error) {\n spinner.fail('Failed to submit application');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { table } from 'table';\nimport { SSAppRegistryClient } from '@calimero-network/registry-client';\n\nexport const developersCommand = new Command('developers')\n .description('Manage developer profiles')\n .addCommand(\n new Command('get')\n .description('Get developer profile information')\n .argument('<pubkey>', 'Developer public key')\n .action(async (pubkey, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Fetching developer profile...').start();\n\n try {\n const profile = await client.getDeveloper(pubkey);\n\n spinner.succeed('Developer profile fetched successfully');\n\n console.log(chalk.blue('\\nDeveloper Profile:'));\n console.log(chalk.green('Display Name:'), profile.display_name);\n if (profile.website) {\n console.log(chalk.green('Website:'), profile.website);\n }\n\n if (profile.proofs.length > 0) {\n console.log(chalk.green('\\nProofs:'));\n const tableData = [\n ['Type', 'Value', 'Verified'],\n ...profile.proofs.map(proof => [\n proof.type,\n proof.value.substring(0, 20) + '...',\n proof.verified ? chalk.green('Yes') : chalk.red('No'),\n ]),\n ];\n console.log(table(tableData));\n } else {\n console.log(chalk.yellow('\\nNo proofs found'));\n }\n } catch (error) {\n spinner.fail('Failed to fetch developer profile');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('create')\n .description('Create a new developer profile')\n .argument('<pubkey>', 'Developer public key')\n .argument('<display-name>', 'Display name for the developer')\n .option('-w, --website <url>', 'Developer website URL')\n .option('-p, --proofs <proofs>', 'JSON string of proofs array')\n .action(async (pubkey, displayName, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora('Creating developer profile...').start();\n\n try {\n let proofs = [];\n if (options.proofs) {\n try {\n proofs = JSON.parse(options.proofs);\n } catch {\n spinner.fail('Invalid proofs JSON format');\n console.error(chalk.red('Proofs must be a valid JSON array'));\n process.exit(1);\n }\n }\n\n const profile = {\n pubkey,\n display_name: displayName,\n website: options.website,\n proofs,\n };\n\n const result = await client.submitDeveloperProfile(pubkey, profile);\n\n spinner.succeed('Developer profile created successfully');\n console.log(chalk.green(`\\nāœ… ${result.message}`));\n console.log(chalk.blue(`\\nšŸ‘¤ Developer: ${displayName}`));\n console.log(chalk.blue(`šŸ”‘ Public Key: ${pubkey}`));\n if (options.website) {\n console.log(chalk.blue(`🌐 Website: ${options.website}`));\n }\n } catch (error) {\n spinner.fail('Failed to create developer profile');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { SSAppRegistryClient } from '@calimero-network/registry-client';\n\nexport const attestationsCommand = new Command('attestations')\n .description('Manage application attestations')\n .addCommand(\n new Command('get')\n .description('Get attestation for a specific application version')\n .argument('<pubkey>', 'Developer public key')\n .argument('<name>', 'Application name')\n .argument('<version>', 'Application version')\n .action(async (pubkey, name, version, options, command) => {\n const globalOpts = command.parent?.parent?.opts();\n const client = new SSAppRegistryClient({\n baseURL: globalOpts?.url || 'http://localhost:8082',\n timeout: parseInt(globalOpts?.timeout || '10000'),\n });\n\n const spinner = ora(\n `Fetching attestation for ${name}@${version}...`\n ).start();\n\n try {\n const attestation = await client.getAttestation(\n pubkey,\n name,\n version\n );\n\n spinner.succeed('Attestation fetched successfully');\n\n console.log(chalk.blue('\\nAttestation:'));\n console.log(chalk.green('Status:'), attestation.status);\n console.log(chalk.green('Timestamp:'), attestation.timestamp);\n if (attestation.comment) {\n console.log(chalk.green('Comment:'), attestation.comment);\n }\n } catch (error) {\n spinner.fail('Failed to fetch attestation');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n );\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createRegistryClient } from '../lib/registry-client.js';\n\nexport const healthCommand = new Command('health')\n .description('Check the health of the SSApp Registry API')\n .action(async (options, command) => {\n const globalOpts = command.parent?.opts();\n const useLocal = globalOpts?.local || false;\n const client = createRegistryClient(\n useLocal,\n globalOpts?.url,\n parseInt(globalOpts?.timeout || '10000')\n );\n\n const spinner = ora('Checking API health...').start();\n\n try {\n const health = await client.healthCheck();\n spinner.succeed('API is healthy');\n console.log(chalk.green(`Status: ${health.status}`));\n } catch (error) {\n spinner.fail('API health check failed');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n });\n","import { writeFileSync, existsSync } from 'fs';\n\nexport async function uploadToIPFS(filePath: string): Promise<string> {\n try {\n // For now, we'll simulate IPFS upload since public gateways require authentication\n // In production, you'd use a service like Pinata, Infura, or your own IPFS node\n\n // Check if file exists (this satisfies the linter by using filePath)\n if (!existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // Use a hardcoded valid CID for demo\n const simulatedCid = 'QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG';\n\n console.log('āš ļø Using simulated IPFS upload for demo purposes');\n console.log(' In production, use a service like Pinata or Infura');\n\n return simulatedCid;\n } catch (error) {\n throw new Error(\n `Failed to upload to IPFS: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n}\n\nexport async function downloadFromIPFS(\n cid: string,\n outputPath?: string\n): Promise<string> {\n try {\n // For demo purposes, we'll simulate IPFS download\n // In production, you'd actually download from IPFS\n\n console.log('āš ļø Using simulated IPFS download for demo purposes');\n console.log(' In production, use a service like Pinata or Infura');\n\n // Generate a simulated file content based on CID\n const simulatedContent = `Simulated IPFS file content for CID: ${cid}\\nThis is a demo file that would normally contain the actual application data.`;\n\n // Determine output path\n const finalOutputPath = outputPath || `${cid}.wasm`;\n\n // Write the simulated content to file\n writeFileSync(finalOutputPath, simulatedContent);\n\n return finalOutputPath;\n } catch (error) {\n throw new Error(\n `Failed to download from IPFS: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n}\n","import ora from 'ora';\n\nexport const spinner = (text: string) => ora(text);\n","import { Command } from 'commander';\nimport { uploadToIPFS, downloadFromIPFS } from '../lib/ipfs';\nimport { spinner } from '../utils/spinner';\n\nexport const ipfsCommand = new Command('ipfs')\n .description('IPFS operations')\n .addCommand(\n new Command('upload')\n .description('Upload a file to IPFS')\n .argument('<file>', 'Path to the file to upload')\n .action(async file => {\n const s = spinner('Uploading to IPFS...').start();\n\n try {\n const cid = await uploadToIPFS(file);\n s.succeed(`File uploaded successfully!`);\n console.log(`CID: ${cid}`);\n console.log(`Gateway URL: https://ipfs.io/ipfs/${cid}`);\n } catch (error) {\n s.fail('Upload failed');\n console.error(\n 'Error:',\n error instanceof Error ? error.message : 'Unknown error'\n );\n process.exit(1);\n }\n })\n )\n .addCommand(\n new Command('download')\n .description('Download a file from IPFS')\n .argument('<cid>', 'IPFS CID to download')\n .argument('[output]', 'Output file path (optional)')\n .action(async (cid, output) => {\n const s = spinner('Downloading from IPFS...').start();\n\n try {\n const outputPath = await downloadFromIPFS(cid, output);\n s.succeed(`File downloaded successfully!`);\n console.log(`Saved to: ${outputPath}`);\n console.log(`Gateway URL: https://ipfs.io/ipfs/${cid}`);\n } catch (error) {\n s.fail('Download failed');\n console.error(\n 'Error:',\n error instanceof Error ? error.message : 'Unknown error'\n );\n process.exit(1);\n }\n })\n );\n","import fastify, { FastifyInstance } from 'fastify';\nimport cors from '@fastify/cors';\nimport { LocalConfig } from './local-config.js';\nimport { LocalDataStore, AppSummary, AppManifest } from './local-storage.js';\nimport { LocalArtifactServer } from './local-artifacts.js';\nimport path from 'path';\nimport fs from 'fs';\n\nexport interface ServerStatus {\n running: boolean;\n url: string;\n dataDir: string;\n appsCount: number;\n artifactsCount: number;\n}\n\nexport class LocalRegistryServer {\n private config: LocalConfig;\n private dataStore: LocalDataStore;\n private artifactServer: LocalArtifactServer;\n private server: FastifyInstance | null = null;\n private isRunning = false;\n\n constructor(config: LocalConfig) {\n this.config = config;\n this.dataStore = new LocalDataStore(config);\n this.artifactServer = new LocalArtifactServer(config, this.dataStore);\n }\n\n async start(port?: number): Promise<void> {\n if (this.isRunning) {\n throw new Error('Local registry is already running');\n }\n\n const serverPort = port || this.config.getPort();\n const host = this.config.getHost();\n\n // Ensure directories exist\n this.config.ensureDirectories();\n\n // Create Fastify server\n this.server = fastify({\n logger: {\n level: 'info',\n },\n });\n\n // Register CORS\n await this.server.register(cors, {\n origin: true,\n credentials: true,\n });\n\n // Register routes\n await this.registerRoutes();\n\n // Start server\n await this.server.listen({ port: serverPort, host });\n this.isRunning = true;\n\n console.log(\n `Local registry server started on http://${host}:${serverPort}`\n );\n }\n\n async stop(): Promise<void> {\n if (!this.server || !this.isRunning) {\n throw new Error('Local registry is not running');\n }\n\n await this.server.close();\n this.isRunning = false;\n this.server = null;\n }\n\n async getStatus(): Promise<ServerStatus> {\n const stats = this.dataStore.getStats();\n const artifactStats = this.artifactServer.getArtifactStats();\n\n return {\n running: this.isRunning,\n url: `http://${this.config.getHost()}:${this.config.getPort()}`,\n dataDir: this.config.getDataDir(),\n appsCount: stats.publishedApps,\n artifactsCount: artifactStats.totalFiles,\n };\n }\n\n async reset(): Promise<void> {\n this.dataStore.reset();\n\n // Clean up artifacts directory\n const artifactsDir = this.config.getArtifactsDir();\n if (fs.existsSync(artifactsDir)) {\n fs.rmSync(artifactsDir, { recursive: true, force: true });\n }\n }\n\n async backup(outputPath?: string): Promise<string> {\n return await this.dataStore.backup(outputPath);\n }\n\n async restore(backupPath: string): Promise<void> {\n await this.dataStore.restore(backupPath);\n }\n\n async seed(): Promise<void> {\n await this.dataStore.seed();\n }\n\n private async registerRoutes(): Promise<void> {\n if (!this.server) {\n throw new Error('Server not initialized');\n }\n\n // Health endpoint\n this.server.get('/healthz', async () => {\n return { status: 'ok' };\n });\n\n // Statistics endpoint\n this.server.get('/stats', async () => {\n const stats = this.dataStore.getStats();\n const artifactStats = this.artifactServer.getArtifactStats();\n\n return {\n publishedApps: stats.publishedApps,\n totalVersions: stats.totalVersions,\n totalArtifacts: artifactStats.totalFiles,\n totalSize: artifactStats.totalSize,\n };\n });\n\n // Apps endpoints\n this.server.get('/apps', async request => {\n const query = request.query as { dev?: string; name?: string };\n return this.dataStore.getApps(query);\n });\n\n this.server.get('/apps/:appId', async request => {\n const { appId } = request.params as { appId: string };\n return this.dataStore.getAppVersions(appId);\n });\n\n this.server.get('/apps/:appId/:semver', async request => {\n const { appId, semver } = request.params as {\n appId: string;\n semver: string;\n };\n const manifest = this.dataStore.getManifest(appId, semver);\n\n if (!manifest) {\n throw this.server.httpErrors.notFound('Manifest not found');\n }\n\n // Update artifacts to use local URLs\n return this.artifactServer.updateManifestArtifacts(manifest);\n });\n\n this.server.post('/apps', async request => {\n const manifest = request.body as AppManifest;\n\n // Validate manifest structure\n if (!this.validateManifest(manifest)) {\n throw this.server.httpErrors.badRequest('Invalid manifest structure');\n }\n\n // Process artifacts - copy to local storage\n const processedManifest = await this.processManifestArtifacts(manifest);\n\n // Store manifest\n const manifestKey = `${manifest.app.developer_pubkey}/${manifest.app.name}/${manifest.version.semver}`;\n this.dataStore.setManifest(manifestKey, processedManifest);\n\n // Update app summary\n const appKey = `${manifest.app.developer_pubkey}/${manifest.app.name}`;\n const appSummary: AppSummary = {\n name: manifest.app.name,\n developer_pubkey: manifest.app.developer_pubkey,\n latest_version: manifest.version.semver,\n latest_cid: manifest.artifacts[0]?.cid || '',\n alias: manifest.app.alias,\n };\n this.dataStore.setApp(appKey, appSummary);\n\n return {\n success: true,\n message: 'App version registered successfully',\n manifest_key: manifestKey,\n };\n });\n\n // Artifact endpoints\n this.server.get(\n '/artifacts/:appId/:version/:filename',\n async (request, reply) => {\n const { appId, version, filename } = request.params as {\n appId: string;\n version: string;\n filename: string;\n };\n\n try {\n const artifactData = await this.artifactServer.serveArtifact(\n appId,\n version,\n filename\n );\n\n // Set appropriate headers\n reply.header('Content-Type', 'application/octet-stream');\n reply.header(\n 'Content-Disposition',\n `attachment; filename=\"${filename}\"`\n );\n\n return artifactData;\n } catch {\n throw this.server.httpErrors.notFound('Artifact not found');\n }\n }\n );\n\n this.server.get('/artifacts/:hash', async (request, reply) => {\n const { hash } = request.params as { hash: string };\n\n try {\n const artifactData = await this.artifactServer.serveByHash(hash);\n\n // Set appropriate headers\n reply.header('Content-Type', 'application/octet-stream');\n\n return artifactData;\n } catch {\n throw this.server.httpErrors.notFound('Artifact not found');\n }\n });\n\n // Local registry management endpoints\n this.server.get('/local/status', async () => {\n return await this.getStatus();\n });\n\n this.server.post('/local/reset', async () => {\n await this.reset();\n return { message: 'Local registry data reset successfully' };\n });\n\n this.server.get('/local/backup', async request => {\n const query = request.query as { output?: string };\n const backupPath = await this.backup(query.output);\n return { backupPath };\n });\n\n this.server.post('/local/restore', async request => {\n const { backupPath } = request.body as { backupPath: string };\n await this.restore(backupPath);\n return { message: 'Data restored successfully' };\n });\n\n this.server.post('/local/seed', async () => {\n await this.seed();\n return { message: 'Sample data seeded successfully' };\n });\n }\n\n private validateManifest(manifest: AppManifest): boolean {\n // Basic validation - in production, use proper schema validation\n return !!(\n manifest.manifest_version &&\n manifest.app &&\n manifest.app.name &&\n manifest.app.developer_pubkey &&\n manifest.version &&\n manifest.version.semver &&\n manifest.artifacts &&\n manifest.artifacts.length > 0\n );\n }\n\n private async processManifestArtifacts(\n manifest: AppManifest\n ): Promise<AppManifest> {\n const processedManifest = { ...manifest };\n\n if (processedManifest.artifacts) {\n processedManifest.artifacts = await Promise.all(\n processedManifest.artifacts.map(async artifact => {\n const processedArtifact = { ...artifact };\n\n // If artifact has a local path, copy it to local storage\n if (artifact.path && fs.existsSync(artifact.path)) {\n const filename = path.basename(artifact.path);\n const appId = manifest.app.id || manifest.app.name;\n\n try {\n await this.artifactServer.copyArtifactToLocal(\n artifact.path,\n appId,\n manifest.version.semver,\n filename\n );\n\n // Update artifact to use local URL\n processedArtifact.mirrors = [\n this.artifactServer.getArtifactUrl(\n appId,\n manifest.version.semver,\n filename\n ),\n ];\n\n // Remove local path for production compatibility\n delete processedArtifact.path;\n } catch (error) {\n console.warn(`Failed to copy artifact ${artifact.path}:`, error);\n }\n }\n\n return processedArtifact;\n })\n );\n }\n\n return processedManifest;\n }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { LocalRegistryServer } from '../lib/local-server.js';\nimport { LocalConfig } from '../lib/local-config.js';\nimport fs from 'fs';\n\nconst localCommand = new Command('local').description(\n 'Manage local registry for development'\n);\n\n// Start local registry\nlocalCommand.addCommand(\n new Command('start')\n .description('Start local registry server')\n .option('-p, --port <port>', 'Port to run the server on', '8082')\n .option('-h, --host <host>', 'Host to bind the server to', 'localhost')\n .action(async options => {\n const spinner = ora('Starting local registry...').start();\n\n try {\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n await server.start(parseInt(options.port));\n\n spinner.succeed(\n `Local registry started on http://${options.host}:${options.port}`\n );\n console.log(chalk.blue('\\nšŸ“± Local Registry Status:'));\n console.log(\n chalk.green(`āœ… Server: http://${options.host}:${options.port}`)\n );\n console.log(chalk.green(`šŸ“ Data: ${config.getDataDir()}`));\n console.log(\n chalk.green(\n `šŸ“‹ Health: http://${options.host}:${options.port}/healthz`\n )\n );\n console.log(\n chalk.green(`šŸ“Š Stats: http://${options.host}:${options.port}/stats`)\n );\n console.log(\n chalk.blue(\n '\\nšŸ’” Use --local flag with other commands to use local registry'\n )\n );\n } catch (error) {\n spinner.fail('Failed to start local registry');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\n// Stop local registry\nlocalCommand.addCommand(\n new Command('stop')\n .description('Stop local registry server')\n .action(async () => {\n const spinner = ora('Stopping local registry...').start();\n\n try {\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n await server.stop();\n\n spinner.succeed('Local registry stopped');\n } catch (error) {\n spinner.fail('Failed to stop local registry');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\n// Status check\nlocalCommand.addCommand(\n new Command('status')\n .description('Check local registry status')\n .action(async () => {\n const spinner = ora('Checking local registry status...').start();\n\n try {\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n const status = await server.getStatus();\n\n if (status.running) {\n spinner.succeed('Local registry is running');\n console.log(chalk.green(`āœ… Server: ${status.url}`));\n console.log(chalk.green(`šŸ“ Data: ${status.dataDir}`));\n console.log(chalk.green(`šŸ“Š Apps: ${status.appsCount} applications`));\n console.log(\n chalk.green(`šŸ“¦ Artifacts: ${status.artifactsCount} artifacts`)\n );\n } else {\n spinner.warn('Local registry is not running');\n console.log(\n chalk.yellow(\n 'šŸ’” Run \"calimero-registry local start\" to start the local registry'\n )\n );\n }\n } catch (error) {\n spinner.fail('Failed to check local registry status');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\n// Reset local data\nlocalCommand.addCommand(\n new Command('reset')\n .description('Reset local registry data')\n .option('-f, --force', 'Force reset without confirmation')\n .action(async options => {\n if (!options.force) {\n console.log(\n chalk.yellow('āš ļø This will delete all local registry data!')\n );\n console.log(chalk.yellow(' Use --force flag to confirm'));\n return;\n }\n\n const spinner = ora('Resetting local registry data...').start();\n\n try {\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n await server.reset();\n\n spinner.succeed('Local registry data reset');\n console.log(chalk.green('āœ… All local data has been cleared'));\n } catch (error) {\n spinner.fail('Failed to reset local registry data');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\n// Backup local data\nlocalCommand.addCommand(\n new Command('backup')\n .description('Backup local registry data')\n .option('-o, --output <file>', 'Output file path')\n .action(async options => {\n const spinner = ora('Creating backup...').start();\n\n try {\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n const backupPath = await server.backup(options.output);\n\n spinner.succeed('Backup created successfully');\n console.log(chalk.green(`šŸ“¦ Backup saved to: ${backupPath}`));\n } catch (error) {\n spinner.fail('Failed to create backup');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\n// Restore from backup\nlocalCommand.addCommand(\n new Command('restore')\n .description('Restore local registry data from backup')\n .argument('<backup-file>', 'Path to backup file')\n .action(async backupFile => {\n const spinner = ora('Restoring from backup...').start();\n\n try {\n if (!fs.existsSync(backupFile)) {\n spinner.fail('Backup file not found');\n console.error(chalk.red(`File not found: ${backupFile}`));\n process.exit(1);\n }\n\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n await server.restore(backupFile);\n\n spinner.succeed('Data restored successfully');\n console.log(chalk.green(`āœ… Restored from: ${backupFile}`));\n } catch (error) {\n spinner.fail('Failed to restore from backup');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\n// Seed with sample data\nlocalCommand.addCommand(\n new Command('seed')\n .description('Seed local registry with sample data')\n .action(async () => {\n const spinner = ora('Seeding local registry with sample data...').start();\n\n try {\n const config = new LocalConfig();\n const server = new LocalRegistryServer(config);\n\n await server.seed();\n\n spinner.succeed('Sample data seeded successfully');\n console.log(\n chalk.green('āœ… Local registry populated with sample applications')\n );\n console.log(\n chalk.blue(\n 'šŸ’” Run \"calimero-registry apps list --local\" to see the sample apps'\n )\n );\n } catch (error) {\n spinner.fail('Failed to seed sample data');\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n })\n);\n\nexport { localCommand };\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { appsCommand } from './commands/apps.js';\nimport { developersCommand } from './commands/developers.js';\nimport { attestationsCommand } from './commands/attestations.js';\nimport { healthCommand } from './commands/health.js';\nimport { ipfsCommand } from './commands/ipfs.js';\nimport { localCommand } from './commands/local.js';\n\nconst program = new Command();\n\nprogram\n .name('calimero-registry')\n .description(\n 'Calimero Network App Registry CLI - Command-line interface for the App Registry'\n )\n .version('1.0.0');\n\n// Global options\nprogram.option('-u, --url <url>', 'Registry API URL', 'http://localhost:8082');\nprogram.option(\n '-t, --timeout <timeout>',\n 'Request timeout in milliseconds',\n '10000'\n);\nprogram.option('--local', 'Use local registry instead of remote API');\n\n// Add commands\nprogram.addCommand(appsCommand);\nprogram.addCommand(developersCommand);\nprogram.addCommand(attestationsCommand);\nprogram.addCommand(healthCommand);\nprogram.addCommand(ipfsCommand);\nprogram.addCommand(localCommand);\n\n// Global error handler\nprogram.exitOverride();\n\ntry {\n program.parse();\n} catch (err) {\n if (err instanceof Error) {\n console.error(chalk.red('Error:'), err.message);\n } else {\n console.error(chalk.red('Unknown error occurred'));\n }\n process.exit(1);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calimero-network/registry-cli",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Calimero Network App Registry CLI - Command-line interface for interacting with the App Registry",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -33,8 +33,10 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@calimero-network/registry-client": "workspace:*",
36
+ "@fastify/cors": "^8.4.0",
36
37
  "chalk": "^5.3.0",
37
38
  "commander": "^11.0.0",
39
+ "fastify": "^4.24.3",
38
40
  "ipfs-http-client": "^60.0.1",
39
41
  "ora": "^7.0.1",
40
42
  "table": "^6.8.1"