@calimero-network/registry-cli 1.2.0 ā 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1074,11 +1074,32 @@ var LocalRegistryServer = class {
|
|
|
1074
1074
|
});
|
|
1075
1075
|
this.server.get("/apps", async (request) => {
|
|
1076
1076
|
const query = request.query;
|
|
1077
|
+
if (query.id && query.versions === "true") {
|
|
1078
|
+
return {
|
|
1079
|
+
id: query.id,
|
|
1080
|
+
versions: this.dataStore.getAppVersions(query.id)
|
|
1081
|
+
};
|
|
1082
|
+
}
|
|
1083
|
+
if (query.id && query.version) {
|
|
1084
|
+
const manifest = this.dataStore.getManifest(query.id, query.version);
|
|
1085
|
+
if (!manifest) {
|
|
1086
|
+
return {
|
|
1087
|
+
statusCode: 404,
|
|
1088
|
+
error: "Not Found",
|
|
1089
|
+
message: "Manifest not found"
|
|
1090
|
+
};
|
|
1091
|
+
}
|
|
1092
|
+
return this.artifactServer.updateManifestArtifacts(manifest);
|
|
1093
|
+
}
|
|
1077
1094
|
return this.dataStore.getApps(query);
|
|
1078
1095
|
});
|
|
1079
1096
|
this.server.get("/apps/:appId", async (request) => {
|
|
1080
1097
|
const { appId } = request.params;
|
|
1081
|
-
|
|
1098
|
+
const versions = this.dataStore.getAppVersions(appId);
|
|
1099
|
+
return {
|
|
1100
|
+
id: appId,
|
|
1101
|
+
versions
|
|
1102
|
+
};
|
|
1082
1103
|
});
|
|
1083
1104
|
this.server.get("/apps/:appId/:semver", async (request) => {
|
|
1084
1105
|
const { appId, semver } = request.params;
|
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/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 (support both path and query parameter formats)\n this.server.get('/apps', async request => {\n const query = request.query as {\n dev?: string;\n name?: string;\n id?: string;\n versions?: string;\n version?: string;\n };\n\n // Handle Vercel-style query parameters\n if (query.id && query.versions === 'true') {\n // GET /apps?id=xxx&versions=true (Vercel format)\n return {\n id: query.id,\n versions: this.dataStore.getAppVersions(query.id),\n };\n }\n\n if (query.id && query.version) {\n // GET /apps?id=xxx&version=yyy (Vercel format)\n const manifest = this.dataStore.getManifest(query.id, query.version);\n if (!manifest) {\n return {\n statusCode: 404,\n error: 'Not Found',\n message: 'Manifest not found',\n };\n }\n return this.artifactServer.updateManifestArtifacts(manifest);\n }\n\n // Default: list all apps\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 const versions = this.dataStore.getAppVersions(appId);\n return {\n id: appId,\n versions: versions,\n };\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"]}
|
package/package.json
CHANGED