@noosphere/registry 0.2.0-alpha.1 → 0.2.2-alpha.1
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.cjs +27 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +24 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/package.json +7 -8
package/dist/index.cjs
CHANGED
|
@@ -42,6 +42,7 @@ var RegistryManager = class {
|
|
|
42
42
|
constructor(config = {}) {
|
|
43
43
|
this.containers = /* @__PURE__ */ new Map();
|
|
44
44
|
this.verifiers = /* @__PURE__ */ new Map();
|
|
45
|
+
this.deployments = /* @__PURE__ */ new Map();
|
|
45
46
|
this.lastSync = 0;
|
|
46
47
|
this.config = {
|
|
47
48
|
localPath: config.localPath || import_path.default.join(process.cwd(), ".noosphere", "registry.json"),
|
|
@@ -68,7 +69,9 @@ var RegistryManager = class {
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
if (this.config.autoSync && this.containers.size === 0 && retryCount < maxRetries) {
|
|
71
|
-
console.warn(
|
|
72
|
+
console.warn(
|
|
73
|
+
`\u26A0\uFE0F Loaded 0 containers, attempting recovery (attempt ${retryCount + 1}/${maxRetries})...`
|
|
74
|
+
);
|
|
72
75
|
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
|
73
76
|
try {
|
|
74
77
|
await this.forceSync();
|
|
@@ -79,7 +82,7 @@ var RegistryManager = class {
|
|
|
79
82
|
return this.load(retryCount + 1);
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
|
-
console.log(`\u2713 Loaded ${this.containers.size} containers
|
|
85
|
+
console.log(`\u2713 Loaded ${this.containers.size} containers, ${this.verifiers.size} verifiers, ${this.deployments.size} deployments`);
|
|
83
86
|
}
|
|
84
87
|
/**
|
|
85
88
|
* Load local registry file
|
|
@@ -94,6 +97,9 @@ var RegistryManager = class {
|
|
|
94
97
|
Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {
|
|
95
98
|
this.verifiers.set(id, metadata);
|
|
96
99
|
});
|
|
100
|
+
Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {
|
|
101
|
+
this.deployments.set(chainId, metadata);
|
|
102
|
+
});
|
|
97
103
|
console.log(`\u2713 Loaded local registry from ${this.config.localPath}`);
|
|
98
104
|
} catch (error) {
|
|
99
105
|
if (error.code === "ENOENT") {
|
|
@@ -130,6 +136,7 @@ var RegistryManager = class {
|
|
|
130
136
|
console.log("Reloading registry...");
|
|
131
137
|
this.containers.clear();
|
|
132
138
|
this.verifiers.clear();
|
|
139
|
+
this.deployments.clear();
|
|
133
140
|
this.lastSync = 0;
|
|
134
141
|
await this.load();
|
|
135
142
|
}
|
|
@@ -154,6 +161,9 @@ var RegistryManager = class {
|
|
|
154
161
|
this.verifiers.set(id, metadata);
|
|
155
162
|
}
|
|
156
163
|
});
|
|
164
|
+
Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {
|
|
165
|
+
this.deployments.set(chainId, metadata);
|
|
166
|
+
});
|
|
157
167
|
this.lastSync = Date.now();
|
|
158
168
|
console.log(`\u2713 Synced registry (version: ${registry.version})`);
|
|
159
169
|
await this.saveLocal();
|
|
@@ -201,6 +211,18 @@ var RegistryManager = class {
|
|
|
201
211
|
listVerifiers() {
|
|
202
212
|
return Array.from(this.verifiers.values()).filter((v) => v.statusCode === "ACTIVE");
|
|
203
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Get deployment by chain ID
|
|
216
|
+
*/
|
|
217
|
+
getDeployment(chainId) {
|
|
218
|
+
return this.deployments.get(chainId);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get all active deployments
|
|
222
|
+
*/
|
|
223
|
+
listDeployments() {
|
|
224
|
+
return Array.from(this.deployments.values()).filter((d) => d.statusCode === "ACTIVE");
|
|
225
|
+
}
|
|
204
226
|
/**
|
|
205
227
|
* Add custom container to local registry
|
|
206
228
|
*/
|
|
@@ -242,6 +264,7 @@ var RegistryManager = class {
|
|
|
242
264
|
const registry = {
|
|
243
265
|
containers: Object.fromEntries(this.containers),
|
|
244
266
|
verifiers: Object.fromEntries(this.verifiers),
|
|
267
|
+
deployments: Object.fromEntries(this.deployments),
|
|
245
268
|
version: "1.0.0",
|
|
246
269
|
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
247
270
|
};
|
|
@@ -264,6 +287,8 @@ var RegistryManager = class {
|
|
|
264
287
|
activeContainers: this.listContainers().length,
|
|
265
288
|
totalVerifiers: this.verifiers.size,
|
|
266
289
|
activeVerifiers: this.listVerifiers().length,
|
|
290
|
+
totalDeployments: this.deployments.size,
|
|
291
|
+
activeDeployments: this.listDeployments().length,
|
|
267
292
|
lastSync: this.lastSync ? new Date(this.lastSync).toISOString() : "Never"
|
|
268
293
|
};
|
|
269
294
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/RegistryManager.ts"],"sourcesContent":["export { RegistryManager } from './RegistryManager';\nexport * from './types';\n","import fs from 'fs/promises';\nimport path from 'path';\nimport fetch from 'node-fetch';\nimport type { ContainerMetadata, VerifierMetadata, RegistryConfig, RegistryIndex } from './types';\n\nexport class RegistryManager {\n private containers = new Map<string, ContainerMetadata>();\n private verifiers = new Map<string, VerifierMetadata>();\n private config: Required<RegistryConfig>;\n private lastSync: number = 0;\n\n constructor(config: RegistryConfig = {}) {\n this.config = {\n localPath: config.localPath || path.join(process.cwd(), '.noosphere', 'registry.json'),\n remotePath:\n config.remotePath ||\n 'https://raw.githubusercontent.com/hpp-io/noosphere-registry/main/registry.json',\n autoSync: config.autoSync ?? true,\n cacheTTL: config.cacheTTL || 3600000, // 1 hour default\n };\n }\n\n /**\n * Load registry from local and optionally sync from remote\n * Retries if 0 containers are loaded\n */\n async load(retryCount: number = 0): Promise<void> {\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n // Load local registry\n await this.loadLocal();\n\n // Sync from remote if enabled\n if (this.config.autoSync) {\n try {\n await this.sync();\n } catch (error) {\n console.warn('Failed to sync remote registry:', error);\n console.log('Continuing with local registry only');\n }\n }\n\n // Check if we have 0 containers and should retry (only when autoSync is enabled)\n if (this.config.autoSync && this.containers.size === 0 && retryCount < maxRetries) {\n console.warn(`⚠️ Loaded 0 containers, attempting recovery (attempt ${retryCount + 1}/${maxRetries})...`);\n\n // Wait before retry\n await new Promise(resolve => setTimeout(resolve, retryDelayMs));\n\n // Try force sync from remote\n try {\n await this.forceSync();\n } catch (error) {\n console.warn('Force sync failed:', error);\n }\n\n // If still 0, recurse with incremented retry count\n if (this.containers.size === 0) {\n return this.load(retryCount + 1);\n }\n }\n\n console.log(`✓ Loaded ${this.containers.size} containers and ${this.verifiers.size} verifiers`);\n }\n\n /**\n * Load local registry file\n */\n private async loadLocal(): Promise<void> {\n try {\n const data = await fs.readFile(this.config.localPath, 'utf-8');\n const registry: RegistryIndex = JSON.parse(data);\n\n // Load containers\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n this.containers.set(id, metadata);\n });\n\n // Load verifiers\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n this.verifiers.set(id, metadata);\n });\n\n console.log(`✓ Loaded local registry from ${this.config.localPath}`);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.log('No local registry found, will create default');\n await this.createDefaultRegistry();\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Sync registry from remote GitHub repository\n */\n async sync(): Promise<void> {\n const now = Date.now();\n\n // Check cache TTL\n if (now - this.lastSync < this.config.cacheTTL) {\n console.log('Registry cache is fresh, skipping sync');\n return;\n }\n\n await this.fetchRemote();\n }\n\n /**\n * Force sync from remote, bypassing cache TTL\n */\n async forceSync(): Promise<void> {\n console.log('Force syncing registry (bypassing cache)...');\n this.lastSync = 0; // Reset cache\n await this.fetchRemote();\n }\n\n /**\n * Reload registry completely (clear and reload from local + remote)\n */\n async reload(): Promise<void> {\n console.log('Reloading registry...');\n this.containers.clear();\n this.verifiers.clear();\n this.lastSync = 0;\n await this.load();\n }\n\n /**\n * Fetch and merge remote registry\n */\n private async fetchRemote(): Promise<void> {\n console.log(`Syncing registry from ${this.config.remotePath}...`);\n\n try {\n const response = await fetch(this.config.remotePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const registry = (await response.json()) as RegistryIndex;\n\n // Merge remote registry (remote entries are added, local overrides are kept)\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n if (!this.containers.has(id)) {\n // Only add if not already in local registry (local takes precedence)\n this.containers.set(id, metadata);\n }\n });\n\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n if (!this.verifiers.has(id)) {\n this.verifiers.set(id, metadata);\n }\n });\n\n this.lastSync = Date.now();\n console.log(`✓ Synced registry (version: ${registry.version})`);\n\n // Persist synced registry to local file for faster subsequent loads\n await this.saveLocal();\n } catch (error) {\n console.error('Failed to sync remote registry:', error);\n throw error;\n }\n }\n\n /**\n * Get container by ID\n */\n getContainer(id: string): ContainerMetadata | undefined {\n return this.containers.get(id);\n }\n\n /**\n * Get all containers\n */\n listContainers(): ContainerMetadata[] {\n return Array.from(this.containers.values()).filter((c) => c.statusCode === 'ACTIVE');\n }\n\n /**\n * Search containers by name or tag\n */\n searchContainers(query: string): ContainerMetadata[] {\n const lowerQuery = query.toLowerCase();\n return this.listContainers().filter(\n (c) =>\n c.name.toLowerCase().includes(lowerQuery) ||\n c.description?.toLowerCase().includes(lowerQuery) ||\n c.tags?.some((tag) => tag.toLowerCase().includes(lowerQuery))\n );\n }\n\n /**\n * Get verifier by contract address\n */\n getVerifier(verifierAddress: string): VerifierMetadata | undefined {\n return this.verifiers.get(verifierAddress);\n }\n\n /**\n * Get verifier by ID\n */\n getVerifierById(id: string): VerifierMetadata | undefined {\n return Array.from(this.verifiers.values()).find((v) => v.id === id);\n }\n\n /**\n * Get all verifiers\n */\n listVerifiers(): VerifierMetadata[] {\n return Array.from(this.verifiers.values()).filter((v) => v.statusCode === 'ACTIVE');\n }\n\n /**\n * Add custom container to local registry\n */\n async addContainer(container: ContainerMetadata): Promise<void> {\n this.containers.set(container.id, container);\n await this.saveLocal();\n console.log(`✓ Added container: ${container.name} (${container.id})`);\n }\n\n /**\n * Add custom verifier to local registry\n */\n async addVerifier(verifier: VerifierMetadata): Promise<void> {\n this.verifiers.set(verifier.verifierAddress, verifier);\n await this.saveLocal();\n console.log(`✓ Added verifier: ${verifier.name} (${verifier.verifierAddress})`);\n }\n\n /**\n * Remove container from local registry\n */\n async removeContainer(id: string): Promise<void> {\n if (this.containers.delete(id)) {\n await this.saveLocal();\n console.log(`✓ Removed container: ${id}`);\n }\n }\n\n /**\n * Remove verifier from local registry\n */\n async removeVerifier(verifierAddress: string): Promise<void> {\n if (this.verifiers.delete(verifierAddress)) {\n await this.saveLocal();\n console.log(`✓ Removed verifier: ${verifierAddress}`);\n }\n }\n\n /**\n * Save local registry to disk\n */\n private async saveLocal(): Promise<void> {\n const registry: RegistryIndex = {\n containers: Object.fromEntries(this.containers),\n verifiers: Object.fromEntries(this.verifiers),\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n\n await fs.mkdir(path.dirname(this.config.localPath), { recursive: true });\n await fs.writeFile(this.config.localPath, JSON.stringify(registry, null, 2));\n }\n\n /**\n * Create default registry with example entries\n */\n private async createDefaultRegistry(): Promise<void> {\n // Create empty registry - will be populated from remote sync\n // No default containers or verifiers\n await this.saveLocal();\n console.log('✓ Created empty local registry (will sync from remote)');\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n totalContainers: number;\n activeContainers: number;\n totalVerifiers: number;\n activeVerifiers: number;\n lastSync: string;\n } {\n return {\n totalContainers: this.containers.size,\n activeContainers: this.listContainers().length,\n totalVerifiers: this.verifiers.size,\n activeVerifiers: this.listVerifiers().length,\n lastSync: this.lastSync ? new Date(this.lastSync).toISOString() : 'Never',\n };\n }\n}\n"],"mappings":"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","names":["path","fs","fetch"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/RegistryManager.ts"],"sourcesContent":["export { RegistryManager } from './RegistryManager';\nexport * from './types';\n","import fs from 'fs/promises';\nimport path from 'path';\nimport fetch from 'node-fetch';\nimport type { ContainerMetadata, DeploymentMetadata, VerifierMetadata, RegistryConfig, RegistryIndex } from './types';\n\nexport class RegistryManager {\n private containers = new Map<string, ContainerMetadata>();\n private verifiers = new Map<string, VerifierMetadata>();\n private deployments = new Map<string, DeploymentMetadata>();\n private config: Required<RegistryConfig>;\n private lastSync: number = 0;\n\n constructor(config: RegistryConfig = {}) {\n this.config = {\n localPath: config.localPath || path.join(process.cwd(), '.noosphere', 'registry.json'),\n remotePath:\n config.remotePath ||\n 'https://raw.githubusercontent.com/hpp-io/noosphere-registry/main/registry.json',\n autoSync: config.autoSync ?? true,\n cacheTTL: config.cacheTTL || 3600000, // 1 hour default\n };\n }\n\n /**\n * Load registry from local and optionally sync from remote\n * Retries if 0 containers are loaded\n */\n async load(retryCount: number = 0): Promise<void> {\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n // Load local registry\n await this.loadLocal();\n\n // Sync from remote if enabled\n if (this.config.autoSync) {\n try {\n await this.sync();\n } catch (error) {\n console.warn('Failed to sync remote registry:', error);\n console.log('Continuing with local registry only');\n }\n }\n\n // Check if we have 0 containers and should retry (only when autoSync is enabled)\n if (this.config.autoSync && this.containers.size === 0 && retryCount < maxRetries) {\n console.warn(\n `⚠️ Loaded 0 containers, attempting recovery (attempt ${retryCount + 1}/${maxRetries})...`\n );\n\n // Wait before retry\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n\n // Try force sync from remote\n try {\n await this.forceSync();\n } catch (error) {\n console.warn('Force sync failed:', error);\n }\n\n // If still 0, recurse with incremented retry count\n if (this.containers.size === 0) {\n return this.load(retryCount + 1);\n }\n }\n\n console.log(`✓ Loaded ${this.containers.size} containers, ${this.verifiers.size} verifiers, ${this.deployments.size} deployments`);\n }\n\n /**\n * Load local registry file\n */\n private async loadLocal(): Promise<void> {\n try {\n const data = await fs.readFile(this.config.localPath, 'utf-8');\n const registry: RegistryIndex = JSON.parse(data);\n\n // Load containers\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n this.containers.set(id, metadata);\n });\n\n // Load verifiers\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n this.verifiers.set(id, metadata);\n });\n\n // Load deployments\n Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {\n this.deployments.set(chainId, metadata);\n });\n\n console.log(`✓ Loaded local registry from ${this.config.localPath}`);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.log('No local registry found, will create default');\n await this.createDefaultRegistry();\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Sync registry from remote GitHub repository\n */\n async sync(): Promise<void> {\n const now = Date.now();\n\n // Check cache TTL\n if (now - this.lastSync < this.config.cacheTTL) {\n console.log('Registry cache is fresh, skipping sync');\n return;\n }\n\n await this.fetchRemote();\n }\n\n /**\n * Force sync from remote, bypassing cache TTL\n */\n async forceSync(): Promise<void> {\n console.log('Force syncing registry (bypassing cache)...');\n this.lastSync = 0; // Reset cache\n await this.fetchRemote();\n }\n\n /**\n * Reload registry completely (clear and reload from local + remote)\n */\n async reload(): Promise<void> {\n console.log('Reloading registry...');\n this.containers.clear();\n this.verifiers.clear();\n this.deployments.clear();\n this.lastSync = 0;\n await this.load();\n }\n\n /**\n * Fetch and merge remote registry\n */\n private async fetchRemote(): Promise<void> {\n console.log(`Syncing registry from ${this.config.remotePath}...`);\n\n try {\n const response = await fetch(this.config.remotePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const registry = (await response.json()) as RegistryIndex;\n\n // Merge remote registry (remote entries are added, local overrides are kept)\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n if (!this.containers.has(id)) {\n // Only add if not already in local registry (local takes precedence)\n this.containers.set(id, metadata);\n }\n });\n\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n if (!this.verifiers.has(id)) {\n this.verifiers.set(id, metadata);\n }\n });\n\n // Deployments: remote always wins (contract addresses are authoritative)\n Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {\n this.deployments.set(chainId, metadata);\n });\n\n this.lastSync = Date.now();\n console.log(`✓ Synced registry (version: ${registry.version})`);\n\n // Persist synced registry to local file for faster subsequent loads\n await this.saveLocal();\n } catch (error) {\n console.error('Failed to sync remote registry:', error);\n throw error;\n }\n }\n\n /**\n * Get container by ID\n */\n getContainer(id: string): ContainerMetadata | undefined {\n return this.containers.get(id);\n }\n\n /**\n * Get all containers\n */\n listContainers(): ContainerMetadata[] {\n return Array.from(this.containers.values()).filter((c) => c.statusCode === 'ACTIVE');\n }\n\n /**\n * Search containers by name or tag\n */\n searchContainers(query: string): ContainerMetadata[] {\n const lowerQuery = query.toLowerCase();\n return this.listContainers().filter(\n (c) =>\n c.name.toLowerCase().includes(lowerQuery) ||\n c.description?.toLowerCase().includes(lowerQuery) ||\n c.tags?.some((tag) => tag.toLowerCase().includes(lowerQuery))\n );\n }\n\n /**\n * Get verifier by contract address\n */\n getVerifier(verifierAddress: string): VerifierMetadata | undefined {\n return this.verifiers.get(verifierAddress);\n }\n\n /**\n * Get verifier by ID\n */\n getVerifierById(id: string): VerifierMetadata | undefined {\n return Array.from(this.verifiers.values()).find((v) => v.id === id);\n }\n\n /**\n * Get all verifiers\n */\n listVerifiers(): VerifierMetadata[] {\n return Array.from(this.verifiers.values()).filter((v) => v.statusCode === 'ACTIVE');\n }\n\n /**\n * Get deployment by chain ID\n */\n getDeployment(chainId: string): DeploymentMetadata | undefined {\n return this.deployments.get(chainId);\n }\n\n /**\n * Get all active deployments\n */\n listDeployments(): DeploymentMetadata[] {\n return Array.from(this.deployments.values()).filter((d) => d.statusCode === 'ACTIVE');\n }\n\n /**\n * Add custom container to local registry\n */\n async addContainer(container: ContainerMetadata): Promise<void> {\n this.containers.set(container.id, container);\n await this.saveLocal();\n console.log(`✓ Added container: ${container.name} (${container.id})`);\n }\n\n /**\n * Add custom verifier to local registry\n */\n async addVerifier(verifier: VerifierMetadata): Promise<void> {\n this.verifiers.set(verifier.verifierAddress, verifier);\n await this.saveLocal();\n console.log(`✓ Added verifier: ${verifier.name} (${verifier.verifierAddress})`);\n }\n\n /**\n * Remove container from local registry\n */\n async removeContainer(id: string): Promise<void> {\n if (this.containers.delete(id)) {\n await this.saveLocal();\n console.log(`✓ Removed container: ${id}`);\n }\n }\n\n /**\n * Remove verifier from local registry\n */\n async removeVerifier(verifierAddress: string): Promise<void> {\n if (this.verifiers.delete(verifierAddress)) {\n await this.saveLocal();\n console.log(`✓ Removed verifier: ${verifierAddress}`);\n }\n }\n\n /**\n * Save local registry to disk\n */\n private async saveLocal(): Promise<void> {\n const registry: RegistryIndex = {\n containers: Object.fromEntries(this.containers),\n verifiers: Object.fromEntries(this.verifiers),\n deployments: Object.fromEntries(this.deployments),\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n\n await fs.mkdir(path.dirname(this.config.localPath), { recursive: true });\n await fs.writeFile(this.config.localPath, JSON.stringify(registry, null, 2));\n }\n\n /**\n * Create default registry with example entries\n */\n private async createDefaultRegistry(): Promise<void> {\n // Create empty registry - will be populated from remote sync\n // No default containers or verifiers\n await this.saveLocal();\n console.log('✓ Created empty local registry (will sync from remote)');\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n totalContainers: number;\n activeContainers: number;\n totalVerifiers: number;\n activeVerifiers: number;\n totalDeployments: number;\n activeDeployments: number;\n lastSync: string;\n } {\n return {\n totalContainers: this.containers.size,\n activeContainers: this.listContainers().length,\n totalVerifiers: this.verifiers.size,\n activeVerifiers: this.listVerifiers().length,\n totalDeployments: this.deployments.size,\n activeDeployments: this.listDeployments().length,\n lastSync: this.lastSync ? new Date(this.lastSync).toISOString() : 'Never',\n };\n }\n}\n"],"mappings":"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","names":["path","fs","fetch"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -57,6 +57,17 @@ interface VerifierMetadata {
|
|
|
57
57
|
updatedAt?: string;
|
|
58
58
|
description?: string;
|
|
59
59
|
}
|
|
60
|
+
interface DeploymentMetadata {
|
|
61
|
+
chainId: number;
|
|
62
|
+
name: string;
|
|
63
|
+
rpcUrl: string;
|
|
64
|
+
wsRpcUrl?: string;
|
|
65
|
+
blockExplorerUrl?: string;
|
|
66
|
+
contracts: Record<string, string>;
|
|
67
|
+
statusCode: 'ACTIVE' | 'INACTIVE' | 'DEPRECATED';
|
|
68
|
+
description?: string;
|
|
69
|
+
updatedAt?: string;
|
|
70
|
+
}
|
|
60
71
|
interface RegistryConfig {
|
|
61
72
|
localPath?: string;
|
|
62
73
|
remotePath?: string;
|
|
@@ -66,6 +77,7 @@ interface RegistryConfig {
|
|
|
66
77
|
interface RegistryIndex {
|
|
67
78
|
containers: Record<string, ContainerMetadata>;
|
|
68
79
|
verifiers: Record<string, VerifierMetadata>;
|
|
80
|
+
deployments?: Record<string, DeploymentMetadata>;
|
|
69
81
|
version: string;
|
|
70
82
|
updatedAt: string;
|
|
71
83
|
}
|
|
@@ -73,6 +85,7 @@ interface RegistryIndex {
|
|
|
73
85
|
declare class RegistryManager {
|
|
74
86
|
private containers;
|
|
75
87
|
private verifiers;
|
|
88
|
+
private deployments;
|
|
76
89
|
private config;
|
|
77
90
|
private lastSync;
|
|
78
91
|
constructor(config?: RegistryConfig);
|
|
@@ -125,6 +138,14 @@ declare class RegistryManager {
|
|
|
125
138
|
* Get all verifiers
|
|
126
139
|
*/
|
|
127
140
|
listVerifiers(): VerifierMetadata[];
|
|
141
|
+
/**
|
|
142
|
+
* Get deployment by chain ID
|
|
143
|
+
*/
|
|
144
|
+
getDeployment(chainId: string): DeploymentMetadata | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Get all active deployments
|
|
147
|
+
*/
|
|
148
|
+
listDeployments(): DeploymentMetadata[];
|
|
128
149
|
/**
|
|
129
150
|
* Add custom container to local registry
|
|
130
151
|
*/
|
|
@@ -157,8 +178,10 @@ declare class RegistryManager {
|
|
|
157
178
|
activeContainers: number;
|
|
158
179
|
totalVerifiers: number;
|
|
159
180
|
activeVerifiers: number;
|
|
181
|
+
totalDeployments: number;
|
|
182
|
+
activeDeployments: number;
|
|
160
183
|
lastSync: string;
|
|
161
184
|
};
|
|
162
185
|
}
|
|
163
186
|
|
|
164
|
-
export { type ContainerMetadata, type ProofServiceConfig, type RegistryConfig, type RegistryIndex, RegistryManager, type VerifierMetadata };
|
|
187
|
+
export { type ContainerMetadata, type DeploymentMetadata, type ProofServiceConfig, type RegistryConfig, type RegistryIndex, RegistryManager, type VerifierMetadata };
|
package/dist/index.d.ts
CHANGED
|
@@ -57,6 +57,17 @@ interface VerifierMetadata {
|
|
|
57
57
|
updatedAt?: string;
|
|
58
58
|
description?: string;
|
|
59
59
|
}
|
|
60
|
+
interface DeploymentMetadata {
|
|
61
|
+
chainId: number;
|
|
62
|
+
name: string;
|
|
63
|
+
rpcUrl: string;
|
|
64
|
+
wsRpcUrl?: string;
|
|
65
|
+
blockExplorerUrl?: string;
|
|
66
|
+
contracts: Record<string, string>;
|
|
67
|
+
statusCode: 'ACTIVE' | 'INACTIVE' | 'DEPRECATED';
|
|
68
|
+
description?: string;
|
|
69
|
+
updatedAt?: string;
|
|
70
|
+
}
|
|
60
71
|
interface RegistryConfig {
|
|
61
72
|
localPath?: string;
|
|
62
73
|
remotePath?: string;
|
|
@@ -66,6 +77,7 @@ interface RegistryConfig {
|
|
|
66
77
|
interface RegistryIndex {
|
|
67
78
|
containers: Record<string, ContainerMetadata>;
|
|
68
79
|
verifiers: Record<string, VerifierMetadata>;
|
|
80
|
+
deployments?: Record<string, DeploymentMetadata>;
|
|
69
81
|
version: string;
|
|
70
82
|
updatedAt: string;
|
|
71
83
|
}
|
|
@@ -73,6 +85,7 @@ interface RegistryIndex {
|
|
|
73
85
|
declare class RegistryManager {
|
|
74
86
|
private containers;
|
|
75
87
|
private verifiers;
|
|
88
|
+
private deployments;
|
|
76
89
|
private config;
|
|
77
90
|
private lastSync;
|
|
78
91
|
constructor(config?: RegistryConfig);
|
|
@@ -125,6 +138,14 @@ declare class RegistryManager {
|
|
|
125
138
|
* Get all verifiers
|
|
126
139
|
*/
|
|
127
140
|
listVerifiers(): VerifierMetadata[];
|
|
141
|
+
/**
|
|
142
|
+
* Get deployment by chain ID
|
|
143
|
+
*/
|
|
144
|
+
getDeployment(chainId: string): DeploymentMetadata | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Get all active deployments
|
|
147
|
+
*/
|
|
148
|
+
listDeployments(): DeploymentMetadata[];
|
|
128
149
|
/**
|
|
129
150
|
* Add custom container to local registry
|
|
130
151
|
*/
|
|
@@ -157,8 +178,10 @@ declare class RegistryManager {
|
|
|
157
178
|
activeContainers: number;
|
|
158
179
|
totalVerifiers: number;
|
|
159
180
|
activeVerifiers: number;
|
|
181
|
+
totalDeployments: number;
|
|
182
|
+
activeDeployments: number;
|
|
160
183
|
lastSync: string;
|
|
161
184
|
};
|
|
162
185
|
}
|
|
163
186
|
|
|
164
|
-
export { type ContainerMetadata, type ProofServiceConfig, type RegistryConfig, type RegistryIndex, RegistryManager, type VerifierMetadata };
|
|
187
|
+
export { type ContainerMetadata, type DeploymentMetadata, type ProofServiceConfig, type RegistryConfig, type RegistryIndex, RegistryManager, type VerifierMetadata };
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ var RegistryManager = class {
|
|
|
6
6
|
constructor(config = {}) {
|
|
7
7
|
this.containers = /* @__PURE__ */ new Map();
|
|
8
8
|
this.verifiers = /* @__PURE__ */ new Map();
|
|
9
|
+
this.deployments = /* @__PURE__ */ new Map();
|
|
9
10
|
this.lastSync = 0;
|
|
10
11
|
this.config = {
|
|
11
12
|
localPath: config.localPath || path.join(process.cwd(), ".noosphere", "registry.json"),
|
|
@@ -32,7 +33,9 @@ var RegistryManager = class {
|
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
if (this.config.autoSync && this.containers.size === 0 && retryCount < maxRetries) {
|
|
35
|
-
console.warn(
|
|
36
|
+
console.warn(
|
|
37
|
+
`\u26A0\uFE0F Loaded 0 containers, attempting recovery (attempt ${retryCount + 1}/${maxRetries})...`
|
|
38
|
+
);
|
|
36
39
|
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
|
37
40
|
try {
|
|
38
41
|
await this.forceSync();
|
|
@@ -43,7 +46,7 @@ var RegistryManager = class {
|
|
|
43
46
|
return this.load(retryCount + 1);
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
|
-
console.log(`\u2713 Loaded ${this.containers.size} containers
|
|
49
|
+
console.log(`\u2713 Loaded ${this.containers.size} containers, ${this.verifiers.size} verifiers, ${this.deployments.size} deployments`);
|
|
47
50
|
}
|
|
48
51
|
/**
|
|
49
52
|
* Load local registry file
|
|
@@ -58,6 +61,9 @@ var RegistryManager = class {
|
|
|
58
61
|
Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {
|
|
59
62
|
this.verifiers.set(id, metadata);
|
|
60
63
|
});
|
|
64
|
+
Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {
|
|
65
|
+
this.deployments.set(chainId, metadata);
|
|
66
|
+
});
|
|
61
67
|
console.log(`\u2713 Loaded local registry from ${this.config.localPath}`);
|
|
62
68
|
} catch (error) {
|
|
63
69
|
if (error.code === "ENOENT") {
|
|
@@ -94,6 +100,7 @@ var RegistryManager = class {
|
|
|
94
100
|
console.log("Reloading registry...");
|
|
95
101
|
this.containers.clear();
|
|
96
102
|
this.verifiers.clear();
|
|
103
|
+
this.deployments.clear();
|
|
97
104
|
this.lastSync = 0;
|
|
98
105
|
await this.load();
|
|
99
106
|
}
|
|
@@ -118,6 +125,9 @@ var RegistryManager = class {
|
|
|
118
125
|
this.verifiers.set(id, metadata);
|
|
119
126
|
}
|
|
120
127
|
});
|
|
128
|
+
Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {
|
|
129
|
+
this.deployments.set(chainId, metadata);
|
|
130
|
+
});
|
|
121
131
|
this.lastSync = Date.now();
|
|
122
132
|
console.log(`\u2713 Synced registry (version: ${registry.version})`);
|
|
123
133
|
await this.saveLocal();
|
|
@@ -165,6 +175,18 @@ var RegistryManager = class {
|
|
|
165
175
|
listVerifiers() {
|
|
166
176
|
return Array.from(this.verifiers.values()).filter((v) => v.statusCode === "ACTIVE");
|
|
167
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Get deployment by chain ID
|
|
180
|
+
*/
|
|
181
|
+
getDeployment(chainId) {
|
|
182
|
+
return this.deployments.get(chainId);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get all active deployments
|
|
186
|
+
*/
|
|
187
|
+
listDeployments() {
|
|
188
|
+
return Array.from(this.deployments.values()).filter((d) => d.statusCode === "ACTIVE");
|
|
189
|
+
}
|
|
168
190
|
/**
|
|
169
191
|
* Add custom container to local registry
|
|
170
192
|
*/
|
|
@@ -206,6 +228,7 @@ var RegistryManager = class {
|
|
|
206
228
|
const registry = {
|
|
207
229
|
containers: Object.fromEntries(this.containers),
|
|
208
230
|
verifiers: Object.fromEntries(this.verifiers),
|
|
231
|
+
deployments: Object.fromEntries(this.deployments),
|
|
209
232
|
version: "1.0.0",
|
|
210
233
|
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
211
234
|
};
|
|
@@ -228,6 +251,8 @@ var RegistryManager = class {
|
|
|
228
251
|
activeContainers: this.listContainers().length,
|
|
229
252
|
totalVerifiers: this.verifiers.size,
|
|
230
253
|
activeVerifiers: this.listVerifiers().length,
|
|
254
|
+
totalDeployments: this.deployments.size,
|
|
255
|
+
activeDeployments: this.listDeployments().length,
|
|
231
256
|
lastSync: this.lastSync ? new Date(this.lastSync).toISOString() : "Never"
|
|
232
257
|
};
|
|
233
258
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/RegistryManager.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\nimport fetch from 'node-fetch';\nimport type { ContainerMetadata, VerifierMetadata, RegistryConfig, RegistryIndex } from './types';\n\nexport class RegistryManager {\n private containers = new Map<string, ContainerMetadata>();\n private verifiers = new Map<string, VerifierMetadata>();\n private config: Required<RegistryConfig>;\n private lastSync: number = 0;\n\n constructor(config: RegistryConfig = {}) {\n this.config = {\n localPath: config.localPath || path.join(process.cwd(), '.noosphere', 'registry.json'),\n remotePath:\n config.remotePath ||\n 'https://raw.githubusercontent.com/hpp-io/noosphere-registry/main/registry.json',\n autoSync: config.autoSync ?? true,\n cacheTTL: config.cacheTTL || 3600000, // 1 hour default\n };\n }\n\n /**\n * Load registry from local and optionally sync from remote\n * Retries if 0 containers are loaded\n */\n async load(retryCount: number = 0): Promise<void> {\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n // Load local registry\n await this.loadLocal();\n\n // Sync from remote if enabled\n if (this.config.autoSync) {\n try {\n await this.sync();\n } catch (error) {\n console.warn('Failed to sync remote registry:', error);\n console.log('Continuing with local registry only');\n }\n }\n\n // Check if we have 0 containers and should retry (only when autoSync is enabled)\n if (this.config.autoSync && this.containers.size === 0 && retryCount < maxRetries) {\n console.warn(`⚠️ Loaded 0 containers, attempting recovery (attempt ${retryCount + 1}/${maxRetries})...`);\n\n // Wait before retry\n await new Promise(resolve => setTimeout(resolve, retryDelayMs));\n\n // Try force sync from remote\n try {\n await this.forceSync();\n } catch (error) {\n console.warn('Force sync failed:', error);\n }\n\n // If still 0, recurse with incremented retry count\n if (this.containers.size === 0) {\n return this.load(retryCount + 1);\n }\n }\n\n console.log(`✓ Loaded ${this.containers.size} containers and ${this.verifiers.size} verifiers`);\n }\n\n /**\n * Load local registry file\n */\n private async loadLocal(): Promise<void> {\n try {\n const data = await fs.readFile(this.config.localPath, 'utf-8');\n const registry: RegistryIndex = JSON.parse(data);\n\n // Load containers\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n this.containers.set(id, metadata);\n });\n\n // Load verifiers\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n this.verifiers.set(id, metadata);\n });\n\n console.log(`✓ Loaded local registry from ${this.config.localPath}`);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.log('No local registry found, will create default');\n await this.createDefaultRegistry();\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Sync registry from remote GitHub repository\n */\n async sync(): Promise<void> {\n const now = Date.now();\n\n // Check cache TTL\n if (now - this.lastSync < this.config.cacheTTL) {\n console.log('Registry cache is fresh, skipping sync');\n return;\n }\n\n await this.fetchRemote();\n }\n\n /**\n * Force sync from remote, bypassing cache TTL\n */\n async forceSync(): Promise<void> {\n console.log('Force syncing registry (bypassing cache)...');\n this.lastSync = 0; // Reset cache\n await this.fetchRemote();\n }\n\n /**\n * Reload registry completely (clear and reload from local + remote)\n */\n async reload(): Promise<void> {\n console.log('Reloading registry...');\n this.containers.clear();\n this.verifiers.clear();\n this.lastSync = 0;\n await this.load();\n }\n\n /**\n * Fetch and merge remote registry\n */\n private async fetchRemote(): Promise<void> {\n console.log(`Syncing registry from ${this.config.remotePath}...`);\n\n try {\n const response = await fetch(this.config.remotePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const registry = (await response.json()) as RegistryIndex;\n\n // Merge remote registry (remote entries are added, local overrides are kept)\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n if (!this.containers.has(id)) {\n // Only add if not already in local registry (local takes precedence)\n this.containers.set(id, metadata);\n }\n });\n\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n if (!this.verifiers.has(id)) {\n this.verifiers.set(id, metadata);\n }\n });\n\n this.lastSync = Date.now();\n console.log(`✓ Synced registry (version: ${registry.version})`);\n\n // Persist synced registry to local file for faster subsequent loads\n await this.saveLocal();\n } catch (error) {\n console.error('Failed to sync remote registry:', error);\n throw error;\n }\n }\n\n /**\n * Get container by ID\n */\n getContainer(id: string): ContainerMetadata | undefined {\n return this.containers.get(id);\n }\n\n /**\n * Get all containers\n */\n listContainers(): ContainerMetadata[] {\n return Array.from(this.containers.values()).filter((c) => c.statusCode === 'ACTIVE');\n }\n\n /**\n * Search containers by name or tag\n */\n searchContainers(query: string): ContainerMetadata[] {\n const lowerQuery = query.toLowerCase();\n return this.listContainers().filter(\n (c) =>\n c.name.toLowerCase().includes(lowerQuery) ||\n c.description?.toLowerCase().includes(lowerQuery) ||\n c.tags?.some((tag) => tag.toLowerCase().includes(lowerQuery))\n );\n }\n\n /**\n * Get verifier by contract address\n */\n getVerifier(verifierAddress: string): VerifierMetadata | undefined {\n return this.verifiers.get(verifierAddress);\n }\n\n /**\n * Get verifier by ID\n */\n getVerifierById(id: string): VerifierMetadata | undefined {\n return Array.from(this.verifiers.values()).find((v) => v.id === id);\n }\n\n /**\n * Get all verifiers\n */\n listVerifiers(): VerifierMetadata[] {\n return Array.from(this.verifiers.values()).filter((v) => v.statusCode === 'ACTIVE');\n }\n\n /**\n * Add custom container to local registry\n */\n async addContainer(container: ContainerMetadata): Promise<void> {\n this.containers.set(container.id, container);\n await this.saveLocal();\n console.log(`✓ Added container: ${container.name} (${container.id})`);\n }\n\n /**\n * Add custom verifier to local registry\n */\n async addVerifier(verifier: VerifierMetadata): Promise<void> {\n this.verifiers.set(verifier.verifierAddress, verifier);\n await this.saveLocal();\n console.log(`✓ Added verifier: ${verifier.name} (${verifier.verifierAddress})`);\n }\n\n /**\n * Remove container from local registry\n */\n async removeContainer(id: string): Promise<void> {\n if (this.containers.delete(id)) {\n await this.saveLocal();\n console.log(`✓ Removed container: ${id}`);\n }\n }\n\n /**\n * Remove verifier from local registry\n */\n async removeVerifier(verifierAddress: string): Promise<void> {\n if (this.verifiers.delete(verifierAddress)) {\n await this.saveLocal();\n console.log(`✓ Removed verifier: ${verifierAddress}`);\n }\n }\n\n /**\n * Save local registry to disk\n */\n private async saveLocal(): Promise<void> {\n const registry: RegistryIndex = {\n containers: Object.fromEntries(this.containers),\n verifiers: Object.fromEntries(this.verifiers),\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n\n await fs.mkdir(path.dirname(this.config.localPath), { recursive: true });\n await fs.writeFile(this.config.localPath, JSON.stringify(registry, null, 2));\n }\n\n /**\n * Create default registry with example entries\n */\n private async createDefaultRegistry(): Promise<void> {\n // Create empty registry - will be populated from remote sync\n // No default containers or verifiers\n await this.saveLocal();\n console.log('✓ Created empty local registry (will sync from remote)');\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n totalContainers: number;\n activeContainers: number;\n totalVerifiers: number;\n activeVerifiers: number;\n lastSync: string;\n } {\n return {\n totalContainers: this.containers.size,\n activeContainers: this.listContainers().length,\n totalVerifiers: this.verifiers.size,\n activeVerifiers: this.listVerifiers().length,\n lastSync: this.lastSync ? new Date(this.lastSync).toISOString() : 'Never',\n };\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/RegistryManager.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\nimport fetch from 'node-fetch';\nimport type { ContainerMetadata, DeploymentMetadata, VerifierMetadata, RegistryConfig, RegistryIndex } from './types';\n\nexport class RegistryManager {\n private containers = new Map<string, ContainerMetadata>();\n private verifiers = new Map<string, VerifierMetadata>();\n private deployments = new Map<string, DeploymentMetadata>();\n private config: Required<RegistryConfig>;\n private lastSync: number = 0;\n\n constructor(config: RegistryConfig = {}) {\n this.config = {\n localPath: config.localPath || path.join(process.cwd(), '.noosphere', 'registry.json'),\n remotePath:\n config.remotePath ||\n 'https://raw.githubusercontent.com/hpp-io/noosphere-registry/main/registry.json',\n autoSync: config.autoSync ?? true,\n cacheTTL: config.cacheTTL || 3600000, // 1 hour default\n };\n }\n\n /**\n * Load registry from local and optionally sync from remote\n * Retries if 0 containers are loaded\n */\n async load(retryCount: number = 0): Promise<void> {\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n // Load local registry\n await this.loadLocal();\n\n // Sync from remote if enabled\n if (this.config.autoSync) {\n try {\n await this.sync();\n } catch (error) {\n console.warn('Failed to sync remote registry:', error);\n console.log('Continuing with local registry only');\n }\n }\n\n // Check if we have 0 containers and should retry (only when autoSync is enabled)\n if (this.config.autoSync && this.containers.size === 0 && retryCount < maxRetries) {\n console.warn(\n `⚠️ Loaded 0 containers, attempting recovery (attempt ${retryCount + 1}/${maxRetries})...`\n );\n\n // Wait before retry\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n\n // Try force sync from remote\n try {\n await this.forceSync();\n } catch (error) {\n console.warn('Force sync failed:', error);\n }\n\n // If still 0, recurse with incremented retry count\n if (this.containers.size === 0) {\n return this.load(retryCount + 1);\n }\n }\n\n console.log(`✓ Loaded ${this.containers.size} containers, ${this.verifiers.size} verifiers, ${this.deployments.size} deployments`);\n }\n\n /**\n * Load local registry file\n */\n private async loadLocal(): Promise<void> {\n try {\n const data = await fs.readFile(this.config.localPath, 'utf-8');\n const registry: RegistryIndex = JSON.parse(data);\n\n // Load containers\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n this.containers.set(id, metadata);\n });\n\n // Load verifiers\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n this.verifiers.set(id, metadata);\n });\n\n // Load deployments\n Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {\n this.deployments.set(chainId, metadata);\n });\n\n console.log(`✓ Loaded local registry from ${this.config.localPath}`);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.log('No local registry found, will create default');\n await this.createDefaultRegistry();\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Sync registry from remote GitHub repository\n */\n async sync(): Promise<void> {\n const now = Date.now();\n\n // Check cache TTL\n if (now - this.lastSync < this.config.cacheTTL) {\n console.log('Registry cache is fresh, skipping sync');\n return;\n }\n\n await this.fetchRemote();\n }\n\n /**\n * Force sync from remote, bypassing cache TTL\n */\n async forceSync(): Promise<void> {\n console.log('Force syncing registry (bypassing cache)...');\n this.lastSync = 0; // Reset cache\n await this.fetchRemote();\n }\n\n /**\n * Reload registry completely (clear and reload from local + remote)\n */\n async reload(): Promise<void> {\n console.log('Reloading registry...');\n this.containers.clear();\n this.verifiers.clear();\n this.deployments.clear();\n this.lastSync = 0;\n await this.load();\n }\n\n /**\n * Fetch and merge remote registry\n */\n private async fetchRemote(): Promise<void> {\n console.log(`Syncing registry from ${this.config.remotePath}...`);\n\n try {\n const response = await fetch(this.config.remotePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const registry = (await response.json()) as RegistryIndex;\n\n // Merge remote registry (remote entries are added, local overrides are kept)\n Object.entries(registry.containers || {}).forEach(([id, metadata]) => {\n if (!this.containers.has(id)) {\n // Only add if not already in local registry (local takes precedence)\n this.containers.set(id, metadata);\n }\n });\n\n Object.entries(registry.verifiers || {}).forEach(([id, metadata]) => {\n if (!this.verifiers.has(id)) {\n this.verifiers.set(id, metadata);\n }\n });\n\n // Deployments: remote always wins (contract addresses are authoritative)\n Object.entries(registry.deployments || {}).forEach(([chainId, metadata]) => {\n this.deployments.set(chainId, metadata);\n });\n\n this.lastSync = Date.now();\n console.log(`✓ Synced registry (version: ${registry.version})`);\n\n // Persist synced registry to local file for faster subsequent loads\n await this.saveLocal();\n } catch (error) {\n console.error('Failed to sync remote registry:', error);\n throw error;\n }\n }\n\n /**\n * Get container by ID\n */\n getContainer(id: string): ContainerMetadata | undefined {\n return this.containers.get(id);\n }\n\n /**\n * Get all containers\n */\n listContainers(): ContainerMetadata[] {\n return Array.from(this.containers.values()).filter((c) => c.statusCode === 'ACTIVE');\n }\n\n /**\n * Search containers by name or tag\n */\n searchContainers(query: string): ContainerMetadata[] {\n const lowerQuery = query.toLowerCase();\n return this.listContainers().filter(\n (c) =>\n c.name.toLowerCase().includes(lowerQuery) ||\n c.description?.toLowerCase().includes(lowerQuery) ||\n c.tags?.some((tag) => tag.toLowerCase().includes(lowerQuery))\n );\n }\n\n /**\n * Get verifier by contract address\n */\n getVerifier(verifierAddress: string): VerifierMetadata | undefined {\n return this.verifiers.get(verifierAddress);\n }\n\n /**\n * Get verifier by ID\n */\n getVerifierById(id: string): VerifierMetadata | undefined {\n return Array.from(this.verifiers.values()).find((v) => v.id === id);\n }\n\n /**\n * Get all verifiers\n */\n listVerifiers(): VerifierMetadata[] {\n return Array.from(this.verifiers.values()).filter((v) => v.statusCode === 'ACTIVE');\n }\n\n /**\n * Get deployment by chain ID\n */\n getDeployment(chainId: string): DeploymentMetadata | undefined {\n return this.deployments.get(chainId);\n }\n\n /**\n * Get all active deployments\n */\n listDeployments(): DeploymentMetadata[] {\n return Array.from(this.deployments.values()).filter((d) => d.statusCode === 'ACTIVE');\n }\n\n /**\n * Add custom container to local registry\n */\n async addContainer(container: ContainerMetadata): Promise<void> {\n this.containers.set(container.id, container);\n await this.saveLocal();\n console.log(`✓ Added container: ${container.name} (${container.id})`);\n }\n\n /**\n * Add custom verifier to local registry\n */\n async addVerifier(verifier: VerifierMetadata): Promise<void> {\n this.verifiers.set(verifier.verifierAddress, verifier);\n await this.saveLocal();\n console.log(`✓ Added verifier: ${verifier.name} (${verifier.verifierAddress})`);\n }\n\n /**\n * Remove container from local registry\n */\n async removeContainer(id: string): Promise<void> {\n if (this.containers.delete(id)) {\n await this.saveLocal();\n console.log(`✓ Removed container: ${id}`);\n }\n }\n\n /**\n * Remove verifier from local registry\n */\n async removeVerifier(verifierAddress: string): Promise<void> {\n if (this.verifiers.delete(verifierAddress)) {\n await this.saveLocal();\n console.log(`✓ Removed verifier: ${verifierAddress}`);\n }\n }\n\n /**\n * Save local registry to disk\n */\n private async saveLocal(): Promise<void> {\n const registry: RegistryIndex = {\n containers: Object.fromEntries(this.containers),\n verifiers: Object.fromEntries(this.verifiers),\n deployments: Object.fromEntries(this.deployments),\n version: '1.0.0',\n updatedAt: new Date().toISOString(),\n };\n\n await fs.mkdir(path.dirname(this.config.localPath), { recursive: true });\n await fs.writeFile(this.config.localPath, JSON.stringify(registry, null, 2));\n }\n\n /**\n * Create default registry with example entries\n */\n private async createDefaultRegistry(): Promise<void> {\n // Create empty registry - will be populated from remote sync\n // No default containers or verifiers\n await this.saveLocal();\n console.log('✓ Created empty local registry (will sync from remote)');\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n totalContainers: number;\n activeContainers: number;\n totalVerifiers: number;\n activeVerifiers: number;\n totalDeployments: number;\n activeDeployments: number;\n lastSync: string;\n } {\n return {\n totalContainers: this.containers.size,\n activeContainers: this.listContainers().length,\n totalVerifiers: this.verifiers.size,\n activeVerifiers: this.listVerifiers().length,\n totalDeployments: this.deployments.size,\n activeDeployments: this.listDeployments().length,\n lastSync: this.lastSync ? new Date(this.lastSync).toISOString() : 'Never',\n };\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noosphere/registry",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2-alpha.1",
|
|
4
4
|
"description": "Container and Verifier registry for Noosphere SDK",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"scripts": {
|
|
24
|
-
"build": "tsup",
|
|
25
|
-
"test": "
|
|
26
|
-
"test:watch": "
|
|
24
|
+
"build": "npx tsup",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"test:watch": "vitest",
|
|
27
27
|
"clean": "rm -rf dist",
|
|
28
28
|
"prepublishOnly": "npm run build"
|
|
29
29
|
},
|
|
@@ -51,10 +51,9 @@
|
|
|
51
51
|
"node-fetch": "^3.3.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/jest": "^29.5.0",
|
|
55
54
|
"@types/node": "^20.10.0",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
55
|
+
"tsup": "^8.0.0",
|
|
56
|
+
"typescript": "^5.3.0",
|
|
57
|
+
"vitest": "^4.0.16"
|
|
59
58
|
}
|
|
60
59
|
}
|