@calimero-network/registry-cli 1.2.0 ā 1.4.2
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 +463 -612
- package/dist/index.js.map +1 -1
- package/package.json +11 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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/commands/v1.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 id?: string;\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 app_id: string;\n name: string;\n developer_pubkey: 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 (key.startsWith(`${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 // Use direct key lookup for app_id system\n const manifestKey = `${appId}/${semver}`;\n return this.data.manifests.get(manifestKey);\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.app_id}/${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 ||\n manifest.app.name?.replace(/\\s+/g, '-').toLowerCase(),\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.app_id}/${manifest.version.semver}`;\n this.dataStore.setManifest(manifestKey, processedManifest);\n\n // Update app summary\n const appKey = manifest.app.app_id;\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 =\n manifest.app.id ||\n manifest.app.name?.replace(/\\s+/g, '-').toLowerCase();\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';\nimport { Buffer } from 'buffer';\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 return {\n statusCode: 404,\n error: 'Not Found',\n message: 'Manifest not found',\n };\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 return {\n statusCode: 400,\n error: 'Bad Request',\n message: 'Invalid manifest structure',\n };\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.app_id}/${manifest.version.semver}`;\n this.dataStore.setManifest(manifestKey, processedManifest);\n\n // Update app summary\n const appKey = manifest.app.app_id;\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.name, // Use name as 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 as Uint8Array;\n } catch {\n return {\n statusCode: 404,\n error: 'Not Found',\n message: 'Artifact not found',\n };\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 as Uint8Array;\n } catch {\n return {\n statusCode: 404,\n error: 'Not Found',\n message: 'Artifact not found',\n };\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 // V1 API endpoints\n this.server.post('/v1/apps', async (request, reply) => {\n const manifest = request.body as Record<string, unknown>;\n\n // Basic validation\n if (\n !manifest.manifest_version ||\n !manifest.id ||\n !manifest.name ||\n !manifest.version\n ) {\n return reply.code(400).send({\n error: 'invalid_schema',\n details: 'Missing required fields',\n });\n }\n\n try {\n // Process artifacts - copy to local storage\n const processedManifest = await this.processManifestArtifacts(manifest);\n\n // Store manifest directly (no conversion needed)\n const manifestKey = `${manifest.id}/${manifest.version}`;\n this.dataStore.setManifest(manifestKey, processedManifest);\n\n // Create app summary\n const appKey = manifest.id;\n const appSummary = {\n id: manifest.id,\n name: manifest.name,\n developer_pubkey: 'local-dev-key',\n latest_version: manifest.version,\n latest_cid: manifest.artifact?.digest || '',\n };\n this.dataStore.setApp(appKey, appSummary);\n\n return reply.code(201).send({\n id: manifest.id,\n version: manifest.version,\n canonical_uri: `/v1/apps/${manifest.id}/${manifest.version}`,\n });\n } catch {\n return reply.code(409).send({\n error: 'already_exists',\n details: `${manifest.id}@${manifest.version}`,\n });\n }\n });\n\n this.server.get('/v1/apps/:id', async (request, reply) => {\n const { id } = request.params as { id: string };\n const versions = this.dataStore.getAppVersions(id);\n\n if (!versions || versions.length === 0) {\n return reply\n .code(404)\n .send({ error: 'not_found', message: 'App not found' });\n }\n\n return {\n id,\n versions: versions.map(v => v.semver),\n };\n });\n\n this.server.get('/v1/apps/:id/:version', async (request, reply) => {\n const { id, version } = request.params as { id: string; version: string };\n const { canonical } = request.query as { canonical?: string };\n\n const oldManifest = this.dataStore.getManifest(id, version);\n if (!oldManifest) {\n return reply\n .code(404)\n .send({ error: 'not_found', message: 'Manifest not found' });\n }\n\n // Convert old format to V1 format\n const v1Manifest = {\n manifest_version: oldManifest.manifest_version,\n id: oldManifest.app.app_id,\n name: oldManifest.app.name,\n version: oldManifest.version.semver,\n chains: oldManifest.supported_chains,\n artifact: oldManifest.artifacts[0]\n ? {\n type: oldManifest.artifacts[0].type,\n target: oldManifest.artifacts[0].target,\n digest:\n oldManifest.artifacts[0].cid || `sha256:${'0'.repeat(64)}`,\n uri:\n oldManifest.artifacts[0].path ||\n oldManifest.artifacts[0].mirrors?.[0] ||\n 'https://example.com/artifact',\n }\n : {\n type: 'wasm',\n target: 'node',\n digest: `sha256:${'0'.repeat(64)}`,\n uri: 'https://example.com/artifact',\n },\n _warnings: [],\n };\n\n if (canonical === 'true') {\n // Return canonical JCS format\n const canonicalJCS = JSON.stringify(\n v1Manifest,\n Object.keys(v1Manifest).sort()\n );\n return {\n canonical_jcs: Buffer.from(canonicalJCS, 'utf8').toString('base64'),\n };\n }\n\n return v1Manifest;\n });\n\n this.server.get('/v1/search', async (request, reply) => {\n const { q } = request.query as { q?: string };\n\n if (!q) {\n return reply.code(400).send({\n error: 'bad_request',\n message: 'Query parameter \"q\" is required',\n });\n }\n\n // Simple search implementation\n const apps = this.dataStore.getApps({});\n const results = apps.filter(\n app =>\n app.name.toLowerCase().includes(q.toLowerCase()) ||\n (app as { id?: string }).id?.toLowerCase().includes(q.toLowerCase())\n );\n\n return results.map(app => ({\n id: app.id || app.name,\n versions: [app.latest_version],\n }));\n });\n\n this.server.post('/v1/resolve', async (request, reply) => {\n const { root } = request.body as {\n root: { id: string; version: string };\n installed?: Array<{ id: string; version: string }>;\n };\n\n if (!root || !root.id || !root.version) {\n return reply.code(400).send({\n error: 'bad_request',\n message: 'Root app ID and version are required',\n });\n }\n\n // Simple resolution - just return the root app for now\n return {\n plan: [{ action: 'install', id: root.id, version: root.version }],\n satisfies: [],\n missing: [],\n };\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.app_id &&\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 // Handle V1 manifest format (single artifact object)\n if (manifest.artifact && manifest.artifact.uri) {\n const artifact = manifest.artifact;\n\n // Check if it's a file:// URI\n if (artifact.uri.startsWith('file://')) {\n const filePath = artifact.uri.replace('file://', '');\n\n if (fs.existsSync(filePath)) {\n const filename = path.basename(filePath);\n const appId = manifest.id;\n\n try {\n await this.artifactServer.copyArtifactToLocal(\n filePath,\n appId,\n manifest.version,\n filename\n );\n\n // Update artifact URI to use local URL\n processedManifest.artifact = {\n ...artifact,\n uri: this.artifactServer.getArtifactUrl(\n appId,\n manifest.version,\n filename\n ),\n };\n } catch (error) {\n console.warn(`Failed to copy artifact ${filePath}:`, error);\n }\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","/**\n * V1 CLI Commands\n *\n * Implements CLI commands for the v1 API: push, get, ls, resolve, verify\n */\n\nimport { Command } from 'commander';\nimport fs from 'fs';\nimport fetch from 'node-fetch';\n\ninterface V1Manifest {\n manifest_version: '1.0';\n id: string;\n name: string;\n version: string;\n chains: string[];\n artifact: {\n type: 'wasm';\n target: 'node';\n digest: string;\n uri: string;\n };\n provides?: string[];\n requires?: string[];\n dependencies?: { id: string; range: string }[];\n signature?: {\n alg: 'ed25519';\n pubkey: string;\n sig: string;\n signed_at: string;\n };\n _warnings?: string[];\n}\n\nexport const v1Command = new Command('v1')\n .description('V1 API commands for Calimero SSApp Registry')\n .addCommand(createPushCommand())\n .addCommand(createGetCommand())\n .addCommand(createListCommand())\n .addCommand(createResolveCommand())\n .addCommand(createVerifyCommand());\n\nfunction createPushCommand(): Command {\n return new Command('push')\n .description('Submit a v1 manifest to the registry')\n .argument('<manifest-file>', 'Path to manifest JSON file')\n .option('--local', 'Use local registry')\n .action(\n async (\n manifestFile: string,\n options: { local?: boolean } = {},\n command\n ) => {\n try {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || options.local || false;\n\n // Read and validate manifest file\n if (!fs.existsSync(manifestFile)) {\n console.error(`ā Manifest file not found: ${manifestFile}`);\n process.exit(1);\n }\n\n const manifestContent = fs.readFileSync(manifestFile, 'utf8');\n const manifest: V1Manifest = JSON.parse(manifestContent);\n\n // Basic validation\n if (manifest.manifest_version !== '1.0') {\n console.error('ā Invalid manifest version. Must be \"1.0\"');\n process.exit(1);\n }\n\n if (!manifest.id || !manifest.name || !manifest.version) {\n console.error('ā Missing required fields: id, name, version');\n process.exit(1);\n }\n\n // Get registry URL\n const baseUrl = useLocal\n ? 'http://localhost:8082'\n : 'http://localhost:8080';\n\n console.log(\n `š¤ Submitting manifest: ${manifest.id}@${manifest.version}`\n );\n console.log(` Name: ${manifest.name}`);\n console.log(` Chains: ${manifest.chains?.join(', ')}`);\n console.log(\n ` Provides: ${manifest.provides?.join(', ') || 'none'}`\n );\n console.log(\n ` Requires: ${manifest.requires?.join(', ') || 'none'}`\n );\n\n // Submit to registry\n const response = await fetch(`${baseUrl}/v1/apps`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(manifest),\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`${error.error}: ${error.details}`);\n }\n\n const result = await response.json();\n\n console.log('ā
Manifest submitted successfully!');\n console.log(` ID: ${result.id}`);\n console.log(` Version: ${result.version}`);\n console.log(` URI: ${result.canonical_uri}`);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error('ā Failed to submit manifest:', errorMessage);\n process.exit(1);\n }\n }\n );\n}\n\nfunction createGetCommand(): Command {\n return new Command('get')\n .description('Get manifest from registry')\n .argument('<app-id>', 'Application ID')\n .argument('[version]', 'Specific version (optional)')\n .option('--local', 'Use local registry')\n .option('--canonical', 'Return canonical JCS format')\n .action(\n async (\n appId: string,\n version?: string,\n options: { local?: boolean; canonical?: boolean } = {},\n command\n ) => {\n try {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || options.local || false;\n const baseUrl = useLocal\n ? 'http://localhost:8082'\n : 'http://localhost:8080';\n\n if (version) {\n // Get specific version\n console.log(`š„ Getting manifest: ${appId}@${version}`);\n\n const url = options.canonical\n ? `/v1/apps/${appId}/${version}?canonical=true`\n : `/v1/apps/${appId}/${version}`;\n\n const response = await fetch(`${baseUrl}${url}`);\n\n if (!response.ok) {\n if (response.status === 404) {\n console.error(`ā Manifest not found: ${appId}@${version}`);\n } else {\n console.error(\n `ā Error: ${response.status} ${response.statusText}`\n );\n }\n process.exit(1);\n }\n\n const manifest = await response.json();\n console.log(JSON.stringify(manifest, null, 2));\n } else {\n // Get all versions\n console.log(`š„ Getting versions for: ${appId}`);\n\n const response = await fetch(`${baseUrl}/v1/apps/${appId}`);\n\n if (!response.ok) {\n if (response.status === 404) {\n console.error(`ā App not found: ${appId}`);\n } else {\n console.error(\n `ā Error: ${response.status} ${response.statusText}`\n );\n }\n process.exit(1);\n }\n\n const result = await response.json();\n console.log(`š± App: ${result.id}`);\n console.log(`š Versions: ${result.versions.join(', ')}`);\n }\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error('ā Failed to get manifest:', errorMessage);\n process.exit(1);\n }\n }\n );\n}\n\nfunction createListCommand(): Command {\n return new Command('ls')\n .description('List applications in registry')\n .option('--local', 'Use local registry')\n .option('--search <query>', 'Search query')\n .action(\n async (options: { local?: boolean; search?: string } = {}, command) => {\n try {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || options.local || false;\n const baseUrl = useLocal\n ? 'http://localhost:8082'\n : 'http://localhost:8080';\n\n if (options.search) {\n // Search manifests\n console.log(`š Searching for: ${options.search}`);\n\n const response = await fetch(\n `${baseUrl}/v1/search?q=${encodeURIComponent(options.search)}`\n );\n\n if (!response.ok) {\n console.error(\n `ā Error: ${response.status} ${response.statusText}`\n );\n process.exit(1);\n }\n\n const results = await response.json();\n\n if (results.length === 0) {\n console.log('No results found');\n return;\n }\n\n console.log(`Found ${results.length} result(s):`);\n results.forEach((result: { id: string; versions?: string[] }) => {\n console.log(\n ` š± ${result.id}@${result.versions?.[0] || 'unknown'}`\n );\n if (result.provides?.length > 0) {\n console.log(` Provides: ${result.provides.join(', ')}`);\n }\n if (result.requires?.length > 0) {\n console.log(` Requires: ${result.requires.join(', ')}`);\n }\n });\n } else {\n // List all apps (this would need a different endpoint)\n console.log('š Listing all applications...');\n console.log(\n 'Note: Use --search <query> to search for specific apps'\n );\n }\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error('ā Failed to list applications:', errorMessage);\n process.exit(1);\n }\n }\n );\n}\n\nfunction createResolveCommand(): Command {\n return new Command('resolve')\n .description('Resolve dependencies for an application')\n .argument('<app-id>', 'Application ID')\n .argument('<version>', 'Application version')\n .option('--local', 'Use local registry')\n .action(\n async (\n appId: string,\n version: string,\n options: { local?: boolean } = {},\n command\n ) => {\n try {\n const globalOpts = command.parent?.parent?.opts();\n const useLocal = globalOpts?.local || options.local || false;\n const baseUrl = useLocal\n ? 'http://localhost:8082'\n : 'http://localhost:8080';\n\n console.log(`š Resolving dependencies for: ${appId}@${version}`);\n\n const resolveRequest = {\n root: { id: appId, version },\n installed: [], // Could be extended to support pre-installed apps\n };\n\n const response = await fetch(`${baseUrl}/v1/resolve`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(resolveRequest),\n });\n\n if (!response.ok) {\n const error = await response.json();\n console.error(`ā Resolution failed: ${error.error}`);\n console.error(` Details: ${error.details}`);\n process.exit(1);\n }\n\n const result = await response.json();\n\n console.log('ā
Dependencies resolved successfully!');\n console.log(`š Installation plan:`);\n result.plan.forEach(\n (item: { action: string; id: string; version: string }) => {\n console.log(` ${item.action}: ${item.id}@${item.version}`);\n }\n );\n\n if (result.satisfies?.length > 0) {\n console.log(`ā
Satisfies: ${result.satisfies.join(', ')}`);\n }\n\n if (result.missing?.length > 0) {\n console.log(`ā Missing: ${result.missing.join(', ')}`);\n }\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error('ā Failed to resolve dependencies:', errorMessage);\n process.exit(1);\n }\n }\n );\n}\n\nfunction createVerifyCommand(): Command {\n return new Command('verify')\n .description('Verify manifest signature and integrity')\n .argument('<manifest-file>', 'Path to manifest JSON file')\n .action(async (manifestFile: string) => {\n try {\n // Read manifest file\n if (!fs.existsSync(manifestFile)) {\n console.error(`ā Manifest file not found: ${manifestFile}`);\n process.exit(1);\n }\n\n const manifestContent = fs.readFileSync(manifestFile, 'utf8');\n const manifest: V1Manifest = JSON.parse(manifestContent);\n\n console.log(\n `š Verifying manifest: ${manifest.id}@${manifest.version}`\n );\n\n // Verify manifest structure\n if (manifest.manifest_version !== '1.0') {\n console.error('ā Invalid manifest version');\n process.exit(1);\n }\n\n // Verify required fields\n const requiredFields = ['id', 'name', 'version', 'chains', 'artifact'];\n const missingFields = requiredFields.filter(\n field => !manifest[field as keyof V1Manifest]\n );\n\n if (missingFields.length > 0) {\n console.error(\n `ā Missing required fields: ${missingFields.join(', ')}`\n );\n process.exit(1);\n }\n\n // Verify artifact\n if (\n manifest.artifact.type !== 'wasm' ||\n manifest.artifact.target !== 'node'\n ) {\n console.error('ā Invalid artifact type or target');\n process.exit(1);\n }\n\n if (!manifest.artifact.digest.match(/^sha256:[0-9a-f]{64}$/)) {\n console.error('ā Invalid artifact digest format');\n process.exit(1);\n }\n\n if (!manifest.artifact.uri.match(/^(https:\\/\\/|ipfs:\\/\\/)/)) {\n console.error('ā Invalid artifact URI format');\n process.exit(1);\n }\n\n // Verify signature if present\n if (manifest.signature) {\n console.log('š Verifying signature...');\n // Note: Actual signature verification would require the V1Utils\n console.log('ā ļø Signature verification not implemented in CLI yet');\n }\n\n console.log('ā
Manifest verification passed!');\n console.log(` ID: ${manifest.id}`);\n console.log(` Name: ${manifest.name}`);\n console.log(` Version: ${manifest.version}`);\n console.log(` Chains: ${manifest.chains.join(', ')}`);\n console.log(` Artifact: ${manifest.artifact.uri}`);\n\n if (manifest.provides?.length > 0) {\n console.log(` Provides: ${manifest.provides.join(', ')}`);\n }\n\n if (manifest.requires?.length > 0) {\n console.log(` Requires: ${manifest.requires.join(', ')}`);\n }\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error('ā Failed to verify manifest:', errorMessage);\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';\nimport { localCommand } from './commands/local.js';\nimport { v1Command } from './commands/v1.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);\nprogram.addCommand(v1Command);\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/commands/bundle.ts","../src/index.ts"],"names":["path","fs","spinner","ora","chalk","Command","SSAppRegistryClient","table","crypto"],"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 publicHost: 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: '0.0.0.0',\n publicHost: 'host.docker.internal',\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 {\n server: {\n ...defaultConfig.server,\n ...(existingConfig.server || {}),\n },\n data: {\n ...defaultConfig.data,\n ...(existingConfig.data || {}),\n },\n artifacts: {\n ...defaultConfig.artifacts,\n ...(existingConfig.artifacts || {}),\n },\n };\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 getPublicHost(): string {\n return this.config.server.publicHost;\n }\n\n setPublicHost(host: string): void {\n this.config.server.publicHost = 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 id: string;\n name: string;\n latest_version: string;\n latest_digest: string;\n developer_pubkey?: string;\n alias?: string;\n}\n\nexport interface VersionInfo {\n semver: string;\n digest: string;\n cid: string; // Added for compatibility\n yanked: boolean;\n}\n\n// --- V2 / Bundle Manifest Support ---\n\nexport interface BundleArtifact {\n path: string;\n hash: string | null;\n size: number;\n}\n\nexport interface BundleMetadata {\n name: string;\n description?: string;\n icon?: string;\n tags?: string[];\n license?: string;\n}\n\nexport interface BundleInterfaces {\n exports?: string[];\n uses?: string[];\n}\n\nexport interface BundleLinks {\n frontend?: string;\n github?: string;\n docs?: string;\n}\n\nexport interface BundleSignature {\n alg: string;\n sig: string;\n pubkey: string;\n signed_at: string;\n}\n\nexport interface BundleManifest {\n version: string; // \"1.0\" (internal manifest version)\n package: string;\n appVersion: string;\n\n metadata?: BundleMetadata;\n interfaces?: BundleInterfaces;\n\n wasm?: BundleArtifact;\n abi?: BundleArtifact;\n migrations: BundleArtifact[];\n\n links?: BundleLinks;\n signature?: BundleSignature;\n}\n\nexport interface LocalRegistryData {\n apps: Map<string, AppSummary>;\n bundleManifests: Map<string, BundleManifest>; // Key: \"package/version\"\n artifacts: Map<string, string>; // digest -> file path\n}\n\nexport class LocalDataStore {\n private config: LocalConfig;\n private data: LocalRegistryData;\n private appsFile: string;\n private bundleManifestsFile: 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.bundleManifestsFile = path.join(\n config.getDataDir(),\n 'bundle_manifests.json'\n );\n this.artifactsFile = path.join(config.getDataDir(), 'artifacts.json');\n this.data = {\n apps: new Map(),\n bundleManifests: 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 bundle manifests\n if (fs.existsSync(this.bundleManifestsFile)) {\n const bundleManifestsData = JSON.parse(\n fs.readFileSync(this.bundleManifestsFile, 'utf8')\n );\n this.data.bundleManifests = new Map(\n Object.entries(bundleManifestsData)\n );\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 bundle manifests\n const bundleManifestsObj = Object.fromEntries(this.data.bundleManifests);\n fs.writeFileSync(\n this.bundleManifestsFile,\n JSON.stringify(bundleManifestsObj, 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: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n // Apps management\n getApps(filters?: { name?: string; dev?: string }): AppSummary[] {\n let apps = Array.from(this.data.apps.values());\n\n if (filters?.name) {\n apps = apps.filter(app => app.name.includes(filters.name!));\n }\n\n if (filters?.dev) {\n apps = apps.filter(app => app.developer_pubkey === filters.dev);\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 (bundles only)\n getAppVersions(packageId: string): VersionInfo[] {\n const versions: VersionInfo[] = [];\n\n // Get bundle versions\n for (const [key, manifest] of this.data.bundleManifests.entries()) {\n if (key.startsWith(`${packageId}/`)) {\n const semver = key.split('/').pop()!;\n const digest = manifest.wasm?.hash || '';\n versions.push({\n semver,\n digest,\n cid: digest, // Compatibility\n yanked: false,\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 (V2 / Bundles)\n getBundleManifest(pkg: string, version: string): BundleManifest | undefined {\n const key = `${pkg}/${version}`;\n return this.data.bundleManifests.get(key);\n }\n\n setBundleManifest(\n pkg: string,\n version: string,\n manifest: BundleManifest\n ): void {\n const key = `${pkg}/${version}`;\n this.data.bundleManifests.set(key, 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.bundleManifests.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 bundleManifests: Object.fromEntries(this.data.bundleManifests),\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.bundleManifests = new Map(\n Object.entries(backupData.bundleManifests || {})\n );\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.bundleManifests.clear();\n this.data.artifacts.clear();\n this.saveData();\n }\n\n /**\n * Get all bundle manifests\n */\n getAllBundles(): BundleManifest[] {\n return Array.from(this.data.bundleManifests.values());\n }\n\n // Seed with sample data\n async seed(): Promise<void> {\n // V2 Sample Bundle\n const bundleManifest: BundleManifest = {\n version: '1.0',\n package: 'com.calimero.sample-bundle',\n appVersion: '1.0.0',\n metadata: {\n name: 'Sample Bundle App',\n description: 'A sample application using V2 Bundle Manifest',\n tags: ['sample', 'v2'],\n license: 'MIT',\n },\n interfaces: {\n exports: ['com.calimero.sample.v1'],\n uses: [],\n },\n links: {\n frontend: 'https://example.com/app',\n github: 'https://github.com/example/app',\n },\n wasm: {\n path: 'app.wasm',\n size: 1024,\n hash: null,\n },\n abi: {\n path: 'abi.json',\n size: 512,\n hash: null,\n },\n migrations: [],\n };\n\n this.setBundleManifest(\n bundleManifest.package,\n bundleManifest.appVersion,\n bundleManifest\n );\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, V1Manifest } 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.getPublicHost()}:${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.getPublicHost()}:${this.config.getPort()}`;\n return `${baseUrl}/artifacts/${hash}`;\n }\n\n // Update manifest artifact to use local URLs (and preserve HTTP access)\n updateManifestArtifact(manifest: V1Manifest): V1Manifest {\n const updatedManifest: V1Manifest = { ...manifest };\n\n if (!manifest.artifact?.uri) {\n return updatedManifest;\n }\n\n const uri = manifest.artifact.uri;\n\n if (uri.startsWith('/')) {\n updatedManifest.artifact = {\n ...manifest.artifact,\n uri: `${this.getArtifactUrl(manifest.id, manifest.version, path.basename(manifest.artifact.uri))}`,\n };\n } else if (uri.startsWith('file://')) {\n const filePath = uri.replace('file://', '');\n const filename = path.basename(filePath);\n updatedManifest.artifact = {\n ...manifest.artifact,\n uri: this.getArtifactUrl(manifest.id, manifest.version, filename),\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 {\n LocalDataStore,\n AppSummary,\n VersionInfo,\n V1Manifest,\n} from './local-storage.js';\nimport { LocalArtifactServer } from './local-artifacts.js';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface RegistryClient {\n getApps(filters?: { name?: string }): Promise<AppSummary[]>;\n getAppVersions(appId: string): Promise<VersionInfo[]>;\n getAppManifest(appId: string, semver: string): Promise<V1Manifest>;\n submitAppManifest(\n manifest: V1Manifest\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?: { name?: string }): 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<V1Manifest> {\n return await this.client.getAppManifest(appId, semver);\n }\n\n async submitAppManifest(\n manifest: V1Manifest\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?: { name?: string }): 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<V1Manifest> {\n const manifest = this.dataStore.getManifest(appId, semver);\n if (!manifest) {\n throw new Error('Manifest not found');\n }\n return this.artifactServer.updateManifestArtifact(manifest);\n }\n\n async submitAppManifest(\n manifest: V1Manifest\n ): Promise<{ success: boolean; message: string }> {\n if (!this.validateManifest(manifest)) {\n throw new Error('Invalid manifest structure');\n }\n\n const processedManifest = await this.processManifestArtifacts(manifest);\n const manifestKey = `${processedManifest.id}/${processedManifest.version}`;\n this.dataStore.setManifest(manifestKey, processedManifest);\n\n const appSummary: AppSummary = {\n id: processedManifest.id,\n name: processedManifest.name,\n latest_version: processedManifest.version,\n latest_digest: processedManifest.artifact.digest,\n };\n this.dataStore.setApp(processedManifest.id, 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: V1Manifest): boolean {\n return !!(\n manifest.manifest_version &&\n manifest.id &&\n manifest.name &&\n manifest.version &&\n manifest.artifact &&\n manifest.artifact.type &&\n manifest.artifact.target &&\n manifest.artifact.digest &&\n manifest.artifact.uri\n );\n }\n\n private async processManifestArtifacts(\n manifest: V1Manifest\n ): Promise<V1Manifest> {\n const processedManifest: V1Manifest = { ...manifest };\n\n if (manifest.artifact?.uri?.startsWith('file://')) {\n const filePath = manifest.artifact.uri.replace('file://', '');\n\n if (fs.existsSync(filePath)) {\n const filename = path.basename(filePath);\n\n try {\n await this.artifactServer.copyArtifactToLocal(\n filePath,\n manifest.id,\n manifest.version,\n filename\n );\n\n processedManifest.artifact = {\n ...manifest.artifact,\n uri: this.artifactServer.getArtifactUrl(\n manifest.id,\n manifest.version,\n filename\n ),\n };\n } catch (error) {\n console.warn(`Failed to copy artifact ${filePath}:`, error);\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('-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 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 ['ID', 'Name', 'Latest Version', 'Digest'],\n ...apps.map(app => [\n app.id,\n app.name,\n app.latest_version,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (app.latest_digest || (app as any).latest_cid || 'N/A')\n .toString()\n .substring(0, 12) + '...',\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, BundleManifest } from './local-storage.js';\nimport { LocalArtifactServer } from './local-artifacts.js';\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 // 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 as Uint8Array;\n } catch {\n return {\n statusCode: 404,\n error: 'Not Found',\n message: 'Artifact not found',\n };\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 as Uint8Array;\n } catch {\n return {\n statusCode: 404,\n error: 'Not Found',\n message: 'Artifact not found',\n };\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 // V2 Bundle API endpoints\n this.server.get('/api/v2/bundles', async (request, reply) => {\n const query = request.query as {\n package?: string;\n version?: string;\n developer?: string;\n };\n\n const { package: pkg, version, developer } = query;\n\n // If specific package and version requested, return single bundle\n if (pkg && version) {\n const manifest = this.dataStore.getBundleManifest(pkg, version);\n if (!manifest) {\n return reply.code(404).send({\n error: 'bundle_not_found',\n message: `Bundle ${pkg}@${version} not found`,\n });\n }\n return [manifest];\n }\n\n // Get all bundles\n const allBundles = this.dataStore.getAllBundles();\n const bundles = [];\n\n for (const bundle of allBundles) {\n // Filter by package if specified\n if (pkg && bundle.package !== pkg) {\n continue;\n }\n\n // Filter by developer pubkey if specified\n if (developer) {\n const bundlePubkey = bundle.signature?.pubkey;\n if (!bundlePubkey || bundlePubkey !== developer) {\n continue;\n }\n }\n\n bundles.push(bundle);\n }\n\n // Sort by package name, then by version (descending)\n bundles.sort((a, b) => {\n const pkgCompare = a.package.localeCompare(b.package);\n if (pkgCompare !== 0) return pkgCompare;\n // For same package, sort by version descending\n return b.appVersion.localeCompare(a.appVersion, undefined, {\n numeric: true,\n });\n });\n\n // If filtering by package, return all versions\n // Otherwise, return only latest version per package\n if (pkg) {\n return bundles;\n }\n\n // Group by package and return only latest version\n const latestByPackage = new Map<string, BundleManifest>();\n for (const bundle of bundles) {\n const existing = latestByPackage.get(bundle.package);\n if (!existing || bundle.appVersion > existing.appVersion) {\n latestByPackage.set(bundle.package, bundle);\n }\n }\n\n return Array.from(latestByPackage.values());\n });\n\n this.server.get(\n '/api/v2/bundles/:package/:version',\n async (request, reply) => {\n const { package: pkg, version } = request.params as {\n package: string;\n version: string;\n };\n\n const manifest = this.dataStore.getBundleManifest(pkg, version);\n\n if (!manifest) {\n return reply.code(404).send({\n error: 'manifest_not_found',\n message: `Manifest not found for ${pkg}@${version}`,\n });\n }\n\n return manifest;\n }\n );\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', '0.0.0.0')\n .option(\n '--public-host <host>',\n 'Public host exposed in manifest artifact URLs',\n 'host.docker.internal'\n )\n .action(async options => {\n const spinner = ora('Starting local registry...').start();\n\n try {\n const config = new LocalConfig();\n config.setHost(options.host);\n config.setPublicHost(options.publicHost);\n config.setPort(parseInt(options.port, 10));\n const server = new LocalRegistryServer(config);\n\n await server.start(parseInt(options.port));\n\n spinner.succeed(\n `Local registry started on http://${config.getHost()}:${config.getPort()}`\n );\n console.log(chalk.blue('\\nš± Local Registry Status:'));\n console.log(\n chalk.green(\n `ā
Server: http://${config.getHost()}:${config.getPort()}`\n )\n );\n console.log(\n chalk.green(\n `š Public URL: http://${config.getPublicHost()}:${config.getPort()}`\n )\n );\n console.log(chalk.green(`š Data: ${config.getDataDir()}`));\n console.log(\n chalk.green(\n `š Health: http://${config.getHost()}:${config.getPort()}/healthz`\n )\n );\n console.log(\n chalk.green(\n `š Stats: http://${config.getHost()}:${config.getPort()}/stats`\n )\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","/**\n * Bundle Management Commands\n *\n * Implements:\n * - bundle push <file.mpk>\n * - bundle get <package> <version>\n */\n\nimport { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport * as tar from 'tar';\nimport crypto from 'crypto';\nimport { LocalDataStore, BundleManifest } from '../lib/local-storage.js';\nimport { LocalConfig } from '../lib/local-config.js';\nimport { LocalArtifactServer } from '../lib/local-artifacts.js';\n\nexport const bundleCommand = new Command('bundle')\n .description('Manage application bundles (V2)')\n .addCommand(createCreateCommand())\n .addCommand(createPushCommand())\n .addCommand(createGetCommand());\n\nfunction createCreateCommand(): Command {\n return new Command('create')\n .description('Create an MPK bundle from a WASM file')\n .argument('<wasm-file>', 'Path to the WASM file')\n .argument('<package>', 'Package name (e.g. com.calimero.myapp)')\n .argument('<version>', 'Version (e.g. 1.0.0)')\n .option('-o, --output <path>', 'Output path for the MPK file')\n .option('--name <name>', 'Application name')\n .option('--description <description>', 'Application description')\n .option('--author <author>', 'Application author', 'Calimero Team')\n .option('--frontend <url>', 'Frontend URL')\n .option('--github <url>', 'GitHub URL')\n .option('--docs <url>', 'Documentation URL')\n .option(\n '--export <interface>',\n 'Export interface (can be specified multiple times)',\n (value, prev) => {\n return [...(prev || []), value];\n }\n )\n .option(\n '--use <interface>',\n 'Use interface (can be specified multiple times)',\n (value, prev) => {\n return [...(prev || []), value];\n }\n )\n .action(async (wasmFile, pkg, version, options) => {\n try {\n const wasmPath = path.resolve(wasmFile);\n if (!fs.existsSync(wasmPath)) {\n console.error(`ā WASM file not found: ${wasmFile}`);\n process.exit(1);\n }\n\n console.log(`š¦ Creating MPK bundle from: ${path.basename(wasmPath)}`);\n\n // Read WASM file\n const wasmContent = fs.readFileSync(wasmPath);\n const wasmSize = wasmContent.length;\n\n // Calculate SHA256 hash\n const hash = crypto\n .createHash('sha256')\n .update(wasmContent)\n .digest('hex');\n\n // Build metadata\n const metadata: {\n name: string;\n description: string;\n author: string;\n } = {\n name: options.name || pkg,\n description: options.description || '',\n author: options.author || 'Calimero Team',\n };\n\n // Build links if provided\n const links: {\n frontend?: string;\n github?: string;\n docs?: string;\n } = {};\n if (options.frontend) links.frontend = options.frontend;\n if (options.github) links.github = options.github;\n if (options.docs) links.docs = options.docs;\n\n // Build interfaces\n const interfaces = {\n exports: options.export || [],\n uses: options.use || [],\n };\n\n // Create bundle manifest\n const manifest: BundleManifest = {\n version: '1.0',\n package: pkg,\n appVersion: version,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n interfaces:\n interfaces.exports.length > 0 || interfaces.uses.length > 0\n ? interfaces\n : undefined,\n wasm: {\n path: 'app.wasm',\n hash: hash,\n size: wasmSize,\n },\n abi: null,\n migrations: [],\n links: Object.keys(links).length > 0 ? links : undefined,\n signature: undefined,\n };\n\n // Determine output path\n let outputPath = options.output;\n if (!outputPath) {\n const outputDir = path.join(process.cwd(), pkg, version);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n outputPath = path.join(outputDir, `${pkg}-${version}.mpk`);\n } else {\n outputPath = path.resolve(outputPath);\n const outputDir = path.dirname(outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n }\n\n // Create temporary directory for bundle contents\n const tempDir = path.join(\n path.dirname(outputPath),\n `.temp-bundle-${Date.now()}`\n );\n fs.mkdirSync(tempDir, { recursive: true });\n\n try {\n // Write manifest.json\n fs.writeFileSync(\n path.join(tempDir, 'manifest.json'),\n JSON.stringify(manifest, null, 2)\n );\n\n // Copy WASM file as app.wasm\n fs.writeFileSync(path.join(tempDir, 'app.wasm'), wasmContent);\n\n // Create gzip-compressed tar archive\n await tar.create(\n {\n gzip: true,\n file: outputPath,\n cwd: tempDir,\n },\n ['manifest.json', 'app.wasm']\n );\n\n const outputSize = fs.statSync(outputPath).size;\n console.log(`ā
Created MPK bundle: ${outputPath}`);\n console.log(` Package: ${pkg}`);\n console.log(` Version: ${version}`);\n console.log(` Size: ${outputSize} bytes`);\n console.log(` WASM Hash: ${hash}`);\n } finally {\n // Cleanup temp directory\n if (fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown error';\n console.error('ā Failed to create bundle:', message);\n process.exit(1);\n }\n });\n}\n\nfunction createPushCommand(): Command {\n return new Command('push')\n .description('Push a bundle (.mpk) to the registry')\n .argument('<bundle-file>', 'Path to the .mpk bundle file')\n .option('--local', 'Push to local registry instance', true) // Default to local for now\n .action(async (bundleFile, options) => {\n try {\n const fullPath = path.resolve(bundleFile);\n if (!fs.existsSync(fullPath)) {\n console.error(`ā File not found: ${bundleFile}`);\n process.exit(1);\n }\n\n console.log(`š¦ Processing bundle: ${path.basename(fullPath)}`);\n\n // 1. Read bundle and extract manifest\n const manifest = await extractManifest(fullPath);\n\n if (!manifest) {\n console.error('ā manifest.json not found in bundle');\n process.exit(1);\n }\n\n // 2. Validate manifest\n if (!manifest.package || !manifest.appVersion) {\n console.error('ā Invalid manifest: missing package or appVersion');\n process.exit(1);\n }\n\n console.log(` Package: ${manifest.package}`);\n console.log(` Version: ${manifest.appVersion}`);\n if (manifest.metadata) {\n console.log(` Name: ${manifest.metadata.name}`);\n }\n\n // 3. Store (Local Mode)\n if (options.local) {\n const config = new LocalConfig();\n const store = new LocalDataStore(config);\n const artifactServer = new LocalArtifactServer(config, store);\n\n // Copy bundle artifact to local storage\n const bundleFilename = `${manifest.package}-${manifest.appVersion}.mpk`;\n const targetPath = await artifactServer.copyArtifactToLocal(\n fullPath,\n manifest.package,\n manifest.appVersion,\n bundleFilename\n );\n\n console.log(` Artifact stored: ${targetPath}`);\n\n // Update manifest with local artifact path/url?\n // Actually, for V2 bundles, the registry serves the whole .mpk.\n // The manifest inside the registry is metadata.\n // We might want to store the bundle download URL in the manifest we serve via API?\n // Or just keep it implicit (API constructs download link).\n\n // For local-storage, we can add a field to track where the .mpk is.\n // But LocalDataStore mainly stores the JSON.\n // The artifacts are stored by convention in artifacts/package/version/.\n\n store.setBundleManifest(\n manifest.package,\n manifest.appVersion,\n manifest\n );\n console.log('ā
Bundle manifest registered locally');\n console.log(\n ` Run 'calimero-registry bundle get ${manifest.package} ${manifest.appVersion}' to verify`\n );\n } else {\n console.error('ā Remote push not implemented yet');\n process.exit(1);\n }\n } catch (error) {\n console.error('ā Failed to push bundle:', error);\n process.exit(1);\n }\n });\n}\n\nfunction createGetCommand(): Command {\n return new Command('get')\n .description('Get bundle manifest')\n .argument('<package>', 'Package name (e.g. com.calimero.kv)')\n .argument('<version>', 'Version (e.g. 1.0.0)')\n .option('--local', 'Use local registry', true)\n .action(async (pkg, version, options) => {\n try {\n if (options.local) {\n const config = new LocalConfig();\n const store = new LocalDataStore(config);\n const manifest = store.getBundleManifest(pkg, version);\n\n if (manifest) {\n console.log(JSON.stringify(manifest, null, 2));\n } else {\n console.error(`ā Manifest not found: ${pkg}@${version}`);\n process.exit(1);\n }\n } else {\n console.error('ā Remote get not implemented yet');\n process.exit(1);\n }\n } catch (error) {\n console.error('ā Error:', error);\n process.exit(1);\n }\n });\n}\n\n// Helper to extract manifest.json from .mpk (tar.gz)\nasync function extractManifest(\n bundlePath: string\n): Promise<BundleManifest | null> {\n let manifestContent: string | null = null;\n\n // @ts-expect-error tar typing issue\n await tar.t({\n file: bundlePath,\n\n onentry: (entry: tar.ReadEntry) => {\n if (entry.path === 'manifest.json') {\n // Found it\n }\n },\n });\n\n // Actual extraction\n const extractDir = path.join(path.dirname(bundlePath), `.temp-${Date.now()}`);\n if (!fs.existsSync(extractDir)) {\n fs.mkdirSync(extractDir);\n }\n\n try {\n // @ts-expect-error tar typing issue\n await tar.x({\n file: bundlePath,\n cwd: extractDir,\n filter: (path: string) => path === 'manifest.json',\n });\n\n const manifestPath = path.join(extractDir, 'manifest.json');\n if (fs.existsSync(manifestPath)) {\n const content = fs.readFileSync(manifestPath, 'utf8');\n manifestContent = content;\n }\n } catch {\n // ignore\n } finally {\n // Cleanup\n if (fs.existsSync(extractDir)) {\n fs.rmSync(extractDir, { recursive: true, force: true });\n }\n }\n\n if (manifestContent) {\n try {\n return JSON.parse(manifestContent) as BundleManifest;\n } catch {\n console.error('Failed to parse manifest JSON');\n return null;\n }\n }\n\n return null;\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';\nimport { localCommand } from './commands/local.js';\nimport { bundleCommand } from './commands/bundle.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 help text with examples\nprogram.addHelpText(\n 'after',\n `\nExamples:\n $ calimero-registry apps list\n $ calimero-registry apps create --file manifest.json\n $ calimero-registry local start\n $ calimero-registry health --local\n\nFor more information, visit: https://github.com/calimero-network/app-registry\n`\n);\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);\nprogram.addCommand(bundleCommand);\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"]}
|