@blokjs/runner 0.6.20 → 0.7.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/Blok.d.ts +2 -0
- package/dist/Blok.js +42 -110
- package/dist/Blok.js.map +1 -1
- package/dist/DefaultLogger.d.ts +13 -0
- package/dist/DefaultLogger.js +25 -0
- package/dist/DefaultLogger.js.map +1 -1
- package/dist/RunnerSteps.d.ts +23 -0
- package/dist/RunnerSteps.js +128 -87
- package/dist/RunnerSteps.js.map +1 -1
- package/dist/SubworkflowNode.js +19 -0
- package/dist/SubworkflowNode.js.map +1 -1
- package/dist/TriggerBase.d.ts +12 -0
- package/dist/TriggerBase.js +216 -181
- package/dist/TriggerBase.js.map +1 -1
- package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +9 -0
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js +76 -6
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
- package/dist/index.d.ts +4 -39
- package/dist/index.js +7 -32
- package/dist/index.js.map +1 -1
- package/dist/monitoring/JanitorMetrics.d.ts +3 -0
- package/dist/monitoring/JanitorMetrics.js +11 -0
- package/dist/monitoring/JanitorMetrics.js.map +1 -1
- package/dist/monitoring/ProcessErrorMetrics.d.ts +32 -0
- package/dist/monitoring/ProcessErrorMetrics.js +43 -0
- package/dist/monitoring/ProcessErrorMetrics.js.map +1 -0
- package/dist/monitoring/PrometheusMetricsBridge.d.ts +7 -0
- package/dist/monitoring/PrometheusMetricsBridge.js +8 -2
- package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -1
- package/dist/monitoring/SubworkflowMetrics.d.ts +25 -0
- package/dist/monitoring/SubworkflowMetrics.js +38 -0
- package/dist/monitoring/SubworkflowMetrics.js.map +1 -0
- package/dist/observability/ErrorSink.d.ts +23 -0
- package/dist/observability/ErrorSink.js +32 -0
- package/dist/observability/ErrorSink.js.map +1 -0
- package/dist/observability/SentryIntegration.d.ts +9 -0
- package/dist/observability/SentryIntegration.js +31 -0
- package/dist/observability/SentryIntegration.js.map +1 -0
- package/dist/scheduling/DebounceCoordinator.d.ts +7 -53
- package/dist/scheduling/DebounceCoordinator.js +8 -207
- package/dist/scheduling/DebounceCoordinator.js.map +1 -1
- package/dist/tracing/InMemoryRunStore.d.ts +5 -1
- package/dist/tracing/InMemoryRunStore.js +14 -0
- package/dist/tracing/InMemoryRunStore.js.map +1 -1
- package/dist/tracing/Janitor.js +3 -0
- package/dist/tracing/Janitor.js.map +1 -1
- package/dist/tracing/PostgresRunStore.d.ts +4 -1
- package/dist/tracing/PostgresRunStore.js +73 -3
- package/dist/tracing/PostgresRunStore.js.map +1 -1
- package/dist/tracing/RunStore.d.ts +17 -1
- package/dist/tracing/RunTracker.d.ts +13 -34
- package/dist/tracing/RunTracker.js +62 -32
- package/dist/tracing/RunTracker.js.map +1 -1
- package/dist/tracing/SqliteRunStore.d.ts +4 -1
- package/dist/tracing/SqliteRunStore.js +60 -0
- package/dist/tracing/SqliteRunStore.js.map +1 -1
- package/dist/tracing/TraceRouter.d.ts +13 -0
- package/dist/tracing/TraceRouter.js +43 -11
- package/dist/tracing/TraceRouter.js.map +1 -1
- package/dist/tracing/TracingLogger.js +22 -0
- package/dist/tracing/TracingLogger.js.map +1 -1
- package/dist/tracing/createStore.js +51 -22
- package/dist/tracing/createStore.js.map +1 -1
- package/dist/tracing/types.d.ts +22 -0
- package/dist/types/GlobalOptions.d.ts +5 -7
- package/dist/workflow/WorkflowNormalizer.js +63 -0
- package/dist/workflow/WorkflowNormalizer.js.map +1 -1
- package/package.json +7 -4
- package/dist/cache/NodeResultCache.d.ts +0 -286
- package/dist/cache/NodeResultCache.js +0 -506
- package/dist/cache/NodeResultCache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -1
- package/dist/cache/index.js +0 -2
- package/dist/cache/index.js.map +0 -1
- package/dist/concurrency/ConcurrencyBackend.d.ts +0 -61
- package/dist/concurrency/ConcurrencyBackend.js +0 -20
- package/dist/concurrency/ConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +0 -64
- package/dist/concurrency/NatsKvConcurrencyBackend.js +0 -310
- package/dist/concurrency/NatsKvConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/RedisConcurrencyBackend.d.ts +0 -64
- package/dist/concurrency/RedisConcurrencyBackend.js +0 -374
- package/dist/concurrency/RedisConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/createConcurrencyBackend.d.ts +0 -24
- package/dist/concurrency/createConcurrencyBackend.js +0 -38
- package/dist/concurrency/createConcurrencyBackend.js.map +0 -1
- package/dist/graphql/GraphQLSchemaGenerator.d.ts +0 -129
- package/dist/graphql/GraphQLSchemaGenerator.js +0 -425
- package/dist/graphql/GraphQLSchemaGenerator.js.map +0 -1
- package/dist/integrations/APMIntegration.d.ts +0 -141
- package/dist/integrations/APMIntegration.js +0 -212
- package/dist/integrations/APMIntegration.js.map +0 -1
- package/dist/integrations/AzureMonitorIntegration.d.ts +0 -118
- package/dist/integrations/AzureMonitorIntegration.js +0 -254
- package/dist/integrations/AzureMonitorIntegration.js.map +0 -1
- package/dist/integrations/CloudWatchIntegration.d.ts +0 -135
- package/dist/integrations/CloudWatchIntegration.js +0 -293
- package/dist/integrations/CloudWatchIntegration.js.map +0 -1
- package/dist/integrations/SentryIntegration.d.ts +0 -153
- package/dist/integrations/SentryIntegration.js +0 -200
- package/dist/integrations/SentryIntegration.js.map +0 -1
- package/dist/integrations/index.d.ts +0 -19
- package/dist/integrations/index.js +0 -16
- package/dist/integrations/index.js.map +0 -1
- package/dist/marketplace/RuntimeAutoScaler.d.ts +0 -148
- package/dist/marketplace/RuntimeAutoScaler.js +0 -366
- package/dist/marketplace/RuntimeAutoScaler.js.map +0 -1
- package/dist/marketplace/RuntimeCatalog.d.ts +0 -180
- package/dist/marketplace/RuntimeCatalog.js +0 -339
- package/dist/marketplace/RuntimeCatalog.js.map +0 -1
- package/dist/marketplace/RuntimeDiscovery.d.ts +0 -86
- package/dist/marketplace/RuntimeDiscovery.js +0 -231
- package/dist/marketplace/RuntimeDiscovery.js.map +0 -1
- package/dist/marketplace/RuntimeHealthMonitor.d.ts +0 -100
- package/dist/marketplace/RuntimeHealthMonitor.js +0 -241
- package/dist/marketplace/RuntimeHealthMonitor.js.map +0 -1
- package/dist/marketplace/RuntimeMetricsDashboard.d.ts +0 -113
- package/dist/marketplace/RuntimeMetricsDashboard.js +0 -293
- package/dist/marketplace/RuntimeMetricsDashboard.js.map +0 -1
- package/dist/openapi/OpenAPIGenerator.d.ts +0 -192
- package/dist/openapi/OpenAPIGenerator.js +0 -378
- package/dist/openapi/OpenAPIGenerator.js.map +0 -1
- package/dist/openapi/index.d.ts +0 -20
- package/dist/openapi/index.js +0 -20
- package/dist/openapi/index.js.map +0 -1
- package/dist/scheduling/DebounceBackend.d.ts +0 -108
- package/dist/scheduling/DebounceBackend.js +0 -23
- package/dist/scheduling/DebounceBackend.js.map +0 -1
- package/dist/scheduling/NatsKvDebounceBackend.d.ts +0 -53
- package/dist/scheduling/NatsKvDebounceBackend.js +0 -334
- package/dist/scheduling/NatsKvDebounceBackend.js.map +0 -1
- package/dist/scheduling/RedisDebounceBackend.d.ts +0 -49
- package/dist/scheduling/RedisDebounceBackend.js +0 -356
- package/dist/scheduling/RedisDebounceBackend.js.map +0 -1
- package/dist/scheduling/createDebounceBackend.d.ts +0 -25
- package/dist/scheduling/createDebounceBackend.js +0 -39
- package/dist/scheduling/createDebounceBackend.js.map +0 -1
- package/dist/security/ABAC.d.ts +0 -224
- package/dist/security/ABAC.js +0 -380
- package/dist/security/ABAC.js.map +0 -1
- package/dist/security/AuditLogger.d.ts +0 -242
- package/dist/security/AuditLogger.js +0 -317
- package/dist/security/AuditLogger.js.map +0 -1
- package/dist/security/AuthMiddleware.d.ts +0 -162
- package/dist/security/AuthMiddleware.js +0 -289
- package/dist/security/AuthMiddleware.js.map +0 -1
- package/dist/security/EncryptionAtRest.d.ts +0 -206
- package/dist/security/EncryptionAtRest.js +0 -236
- package/dist/security/EncryptionAtRest.js.map +0 -1
- package/dist/security/OAuthProvider.d.ts +0 -334
- package/dist/security/OAuthProvider.js +0 -719
- package/dist/security/OAuthProvider.js.map +0 -1
- package/dist/security/PIIDetector.d.ts +0 -233
- package/dist/security/PIIDetector.js +0 -354
- package/dist/security/PIIDetector.js.map +0 -1
- package/dist/security/RBAC.d.ts +0 -143
- package/dist/security/RBAC.js +0 -285
- package/dist/security/RBAC.js.map +0 -1
- package/dist/security/SecretManager.d.ts +0 -652
- package/dist/security/SecretManager.js +0 -1147
- package/dist/security/SecretManager.js.map +0 -1
- package/dist/security/TLSConfig.d.ts +0 -305
- package/dist/security/TLSConfig.js +0 -550
- package/dist/security/TLSConfig.js.map +0 -1
- package/dist/security/index.d.ts +0 -81
- package/dist/security/index.js +0 -82
- package/dist/security/index.js.map +0 -1
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuntimeCatalog - Central Registry for Runtime Packages
|
|
3
|
-
*
|
|
4
|
-
* Manages runtime package metadata, search, versioning, and statistics
|
|
5
|
-
* for the Blok marketplace. Supports publishing, discovery, and filtering
|
|
6
|
-
* of runtime packages across all supported language runtimes.
|
|
7
|
-
*/
|
|
8
|
-
export class RuntimeCatalog {
|
|
9
|
-
packages;
|
|
10
|
-
constructor() {
|
|
11
|
-
this.packages = new Map();
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Publish a runtime package to the catalog.
|
|
15
|
-
*
|
|
16
|
-
* @param manifest - The package manifest to publish
|
|
17
|
-
* @throws Error if required fields are missing or invalid
|
|
18
|
-
*/
|
|
19
|
-
publish(manifest) {
|
|
20
|
-
this.validateManifest(manifest);
|
|
21
|
-
let versions = this.packages.get(manifest.name);
|
|
22
|
-
if (!versions) {
|
|
23
|
-
versions = new Map();
|
|
24
|
-
this.packages.set(manifest.name, versions);
|
|
25
|
-
}
|
|
26
|
-
versions.set(manifest.version, { ...manifest });
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Remove a specific version of a package from the catalog.
|
|
30
|
-
*
|
|
31
|
-
* @param name - The package name
|
|
32
|
-
* @param version - The version to remove
|
|
33
|
-
* @returns true if the version was removed, false if not found
|
|
34
|
-
*/
|
|
35
|
-
unpublish(name, version) {
|
|
36
|
-
const versions = this.packages.get(name);
|
|
37
|
-
if (!versions)
|
|
38
|
-
return false;
|
|
39
|
-
const deleted = versions.delete(version);
|
|
40
|
-
if (versions.size === 0) {
|
|
41
|
-
this.packages.delete(name);
|
|
42
|
-
}
|
|
43
|
-
return deleted;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Get a package manifest by name and optional version.
|
|
47
|
-
* Returns the latest version if no version is specified.
|
|
48
|
-
*
|
|
49
|
-
* @param name - The package name
|
|
50
|
-
* @param version - Optional specific version
|
|
51
|
-
* @returns The manifest if found, undefined otherwise
|
|
52
|
-
*/
|
|
53
|
-
get(name, version) {
|
|
54
|
-
const versions = this.packages.get(name);
|
|
55
|
-
if (!versions)
|
|
56
|
-
return undefined;
|
|
57
|
-
if (version) {
|
|
58
|
-
return versions.get(version);
|
|
59
|
-
}
|
|
60
|
-
const latest = this.getLatestVersion(name);
|
|
61
|
-
if (!latest)
|
|
62
|
-
return undefined;
|
|
63
|
-
return versions.get(latest);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get all available versions of a package, sorted by semver descending.
|
|
67
|
-
*
|
|
68
|
-
* @param name - The package name
|
|
69
|
-
* @returns Array of version strings sorted by semver (newest first)
|
|
70
|
-
*/
|
|
71
|
-
getVersions(name) {
|
|
72
|
-
const versions = this.packages.get(name);
|
|
73
|
-
if (!versions)
|
|
74
|
-
return [];
|
|
75
|
-
return Array.from(versions.keys()).sort((a, b) => this.compareSemver(b, a));
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Get the latest version of a package by semver ordering.
|
|
79
|
-
*
|
|
80
|
-
* @param name - The package name
|
|
81
|
-
* @returns The latest version string, or undefined if package not found
|
|
82
|
-
*/
|
|
83
|
-
getLatestVersion(name) {
|
|
84
|
-
const sorted = this.getVersions(name);
|
|
85
|
-
return sorted.length > 0 ? sorted[0] : undefined;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Search the catalog with filtering, sorting, and pagination.
|
|
89
|
-
*
|
|
90
|
-
* @param options - Search and filter options
|
|
91
|
-
* @returns Paginated search results
|
|
92
|
-
*/
|
|
93
|
-
search(options) {
|
|
94
|
-
const { query, runtime, tags, verified, sortBy = "name", sortOrder = "asc", limit = 20, offset = 0 } = options;
|
|
95
|
-
let results = this.getAllLatestPackages();
|
|
96
|
-
// Filter by query (searches name, description, tags, author)
|
|
97
|
-
if (query) {
|
|
98
|
-
const lowerQuery = query.toLowerCase();
|
|
99
|
-
results = results.filter((pkg) => pkg.name.toLowerCase().includes(lowerQuery) ||
|
|
100
|
-
pkg.description.toLowerCase().includes(lowerQuery) ||
|
|
101
|
-
pkg.author.toLowerCase().includes(lowerQuery) ||
|
|
102
|
-
pkg.tags.some((tag) => tag.toLowerCase().includes(lowerQuery)));
|
|
103
|
-
}
|
|
104
|
-
// Filter by runtime
|
|
105
|
-
if (runtime) {
|
|
106
|
-
results = results.filter((pkg) => pkg.runtime === runtime);
|
|
107
|
-
}
|
|
108
|
-
// Filter by tags (package must have all specified tags)
|
|
109
|
-
if (tags && tags.length > 0) {
|
|
110
|
-
results = results.filter((pkg) => tags.every((tag) => pkg.tags.some((pkgTag) => pkgTag.toLowerCase() === tag.toLowerCase())));
|
|
111
|
-
}
|
|
112
|
-
// Filter by verified status
|
|
113
|
-
if (verified !== undefined) {
|
|
114
|
-
results = results.filter((pkg) => pkg.verified === verified);
|
|
115
|
-
}
|
|
116
|
-
// Sort results
|
|
117
|
-
results.sort((a, b) => {
|
|
118
|
-
let comparison = 0;
|
|
119
|
-
switch (sortBy) {
|
|
120
|
-
case "name":
|
|
121
|
-
comparison = a.name.localeCompare(b.name);
|
|
122
|
-
break;
|
|
123
|
-
case "downloads":
|
|
124
|
-
comparison = a.downloads - b.downloads;
|
|
125
|
-
break;
|
|
126
|
-
case "rating":
|
|
127
|
-
comparison = a.rating - b.rating;
|
|
128
|
-
break;
|
|
129
|
-
case "updated":
|
|
130
|
-
comparison = a.updatedAt - b.updatedAt;
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
return sortOrder === "desc" ? -comparison : comparison;
|
|
134
|
-
});
|
|
135
|
-
const total = results.length;
|
|
136
|
-
const pageSize = limit;
|
|
137
|
-
const page = Math.floor(offset / limit) + 1;
|
|
138
|
-
const paged = results.slice(offset, offset + limit);
|
|
139
|
-
return {
|
|
140
|
-
packages: paged,
|
|
141
|
-
total,
|
|
142
|
-
page,
|
|
143
|
-
pageSize,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* List all latest-version packages for a specific runtime.
|
|
148
|
-
*
|
|
149
|
-
* @param runtime - The runtime kind to filter by
|
|
150
|
-
* @returns Array of matching package manifests
|
|
151
|
-
*/
|
|
152
|
-
listByRuntime(runtime) {
|
|
153
|
-
return this.getAllLatestPackages().filter((pkg) => pkg.runtime === runtime);
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Get the most popular packages sorted by download count.
|
|
157
|
-
*
|
|
158
|
-
* @param limit - Maximum number of results (default 10)
|
|
159
|
-
* @returns Array of package manifests sorted by downloads descending
|
|
160
|
-
*/
|
|
161
|
-
getPopular(limit = 10) {
|
|
162
|
-
return this.getAllLatestPackages()
|
|
163
|
-
.sort((a, b) => b.downloads - a.downloads)
|
|
164
|
-
.slice(0, limit);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Get all verified packages.
|
|
168
|
-
*
|
|
169
|
-
* @returns Array of verified package manifests
|
|
170
|
-
*/
|
|
171
|
-
getVerified() {
|
|
172
|
-
return this.getAllLatestPackages().filter((pkg) => pkg.verified);
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Increment the download counter for a specific package version.
|
|
176
|
-
*
|
|
177
|
-
* @param name - The package name
|
|
178
|
-
* @param version - The package version
|
|
179
|
-
*/
|
|
180
|
-
incrementDownloads(name, version) {
|
|
181
|
-
const versions = this.packages.get(name);
|
|
182
|
-
if (!versions)
|
|
183
|
-
return;
|
|
184
|
-
const manifest = versions.get(version);
|
|
185
|
-
if (manifest) {
|
|
186
|
-
manifest.downloads++;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Set the rating for a specific package version.
|
|
191
|
-
*
|
|
192
|
-
* @param name - The package name
|
|
193
|
-
* @param version - The package version
|
|
194
|
-
* @param rating - The rating value (0-5)
|
|
195
|
-
* @throws Error if rating is out of range
|
|
196
|
-
*/
|
|
197
|
-
setRating(name, version, rating) {
|
|
198
|
-
if (rating < 0 || rating > 5) {
|
|
199
|
-
throw new Error(`Rating must be between 0 and 5, got ${rating}`);
|
|
200
|
-
}
|
|
201
|
-
const versions = this.packages.get(name);
|
|
202
|
-
if (!versions)
|
|
203
|
-
return;
|
|
204
|
-
const manifest = versions.get(version);
|
|
205
|
-
if (manifest) {
|
|
206
|
-
manifest.rating = rating;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Get overall catalog statistics.
|
|
211
|
-
*
|
|
212
|
-
* @returns Aggregated catalog statistics
|
|
213
|
-
*/
|
|
214
|
-
getStats() {
|
|
215
|
-
const allPackages = this.getAllLatestPackages();
|
|
216
|
-
const packagesByRuntime = {};
|
|
217
|
-
let totalDownloads = 0;
|
|
218
|
-
let verifiedCount = 0;
|
|
219
|
-
let ratingSum = 0;
|
|
220
|
-
let ratedCount = 0;
|
|
221
|
-
let totalVersions = 0;
|
|
222
|
-
for (const [, versions] of this.packages) {
|
|
223
|
-
totalVersions += versions.size;
|
|
224
|
-
}
|
|
225
|
-
for (const pkg of allPackages) {
|
|
226
|
-
const count = packagesByRuntime[pkg.runtime] || 0;
|
|
227
|
-
packagesByRuntime[pkg.runtime] = count + 1;
|
|
228
|
-
totalDownloads += pkg.downloads;
|
|
229
|
-
if (pkg.verified) {
|
|
230
|
-
verifiedCount++;
|
|
231
|
-
}
|
|
232
|
-
if (pkg.rating > 0) {
|
|
233
|
-
ratingSum += pkg.rating;
|
|
234
|
-
ratedCount++;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return {
|
|
238
|
-
totalPackages: allPackages.length,
|
|
239
|
-
totalVersions,
|
|
240
|
-
packagesByRuntime,
|
|
241
|
-
totalDownloads,
|
|
242
|
-
verifiedCount,
|
|
243
|
-
averageRating: ratedCount > 0 ? ratingSum / ratedCount : 0,
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Serialize the catalog to a JSON string for persistence.
|
|
248
|
-
*
|
|
249
|
-
* @returns JSON string representation of the catalog
|
|
250
|
-
*/
|
|
251
|
-
toJSON() {
|
|
252
|
-
const data = {};
|
|
253
|
-
for (const [name, versions] of this.packages) {
|
|
254
|
-
data[name] = {};
|
|
255
|
-
for (const [version, manifest] of versions) {
|
|
256
|
-
data[name][version] = manifest;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
return JSON.stringify(data);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Deserialize a catalog from a JSON string.
|
|
263
|
-
*
|
|
264
|
-
* @param json - The JSON string to parse
|
|
265
|
-
* @returns A new RuntimeCatalog instance populated with the data
|
|
266
|
-
*/
|
|
267
|
-
static fromJSON(json) {
|
|
268
|
-
const catalog = new RuntimeCatalog();
|
|
269
|
-
const data = JSON.parse(json);
|
|
270
|
-
for (const name of Object.keys(data)) {
|
|
271
|
-
const versionsMap = new Map();
|
|
272
|
-
for (const version of Object.keys(data[name])) {
|
|
273
|
-
versionsMap.set(version, data[name][version]);
|
|
274
|
-
}
|
|
275
|
-
catalog.packages.set(name, versionsMap);
|
|
276
|
-
}
|
|
277
|
-
return catalog;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Get the latest version manifest for every package in the catalog.
|
|
281
|
-
*/
|
|
282
|
-
getAllLatestPackages() {
|
|
283
|
-
const result = [];
|
|
284
|
-
for (const [name] of this.packages) {
|
|
285
|
-
const latest = this.get(name);
|
|
286
|
-
if (latest) {
|
|
287
|
-
result.push(latest);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return result;
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Validate that a manifest has all required fields.
|
|
294
|
-
*/
|
|
295
|
-
validateManifest(manifest) {
|
|
296
|
-
if (!manifest.name || typeof manifest.name !== "string") {
|
|
297
|
-
throw new Error("Package manifest must have a valid 'name'");
|
|
298
|
-
}
|
|
299
|
-
if (!manifest.version || typeof manifest.version !== "string") {
|
|
300
|
-
throw new Error("Package manifest must have a valid 'version'");
|
|
301
|
-
}
|
|
302
|
-
if (!manifest.runtime) {
|
|
303
|
-
throw new Error("Package manifest must have a valid 'runtime'");
|
|
304
|
-
}
|
|
305
|
-
if (!manifest.description || typeof manifest.description !== "string") {
|
|
306
|
-
throw new Error("Package manifest must have a valid 'description'");
|
|
307
|
-
}
|
|
308
|
-
if (!manifest.author || typeof manifest.author !== "string") {
|
|
309
|
-
throw new Error("Package manifest must have a valid 'author'");
|
|
310
|
-
}
|
|
311
|
-
if (!manifest.license || typeof manifest.license !== "string") {
|
|
312
|
-
throw new Error("Package manifest must have a valid 'license'");
|
|
313
|
-
}
|
|
314
|
-
if (!Array.isArray(manifest.tags)) {
|
|
315
|
-
throw new Error("Package manifest must have a 'tags' array");
|
|
316
|
-
}
|
|
317
|
-
if (!Array.isArray(manifest.protocols) || manifest.protocols.length === 0) {
|
|
318
|
-
throw new Error("Package manifest must have at least one 'protocol'");
|
|
319
|
-
}
|
|
320
|
-
if (!Array.isArray(manifest.nodes)) {
|
|
321
|
-
throw new Error("Package manifest must have a 'nodes' array");
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Compare two semver strings. Returns negative if a < b, 0 if equal, positive if a > b.
|
|
326
|
-
*/
|
|
327
|
-
compareSemver(a, b) {
|
|
328
|
-
const partsA = a.split(".").map(Number);
|
|
329
|
-
const partsB = b.split(".").map(Number);
|
|
330
|
-
for (let i = 0; i < 3; i++) {
|
|
331
|
-
const numA = partsA[i] || 0;
|
|
332
|
-
const numB = partsB[i] || 0;
|
|
333
|
-
if (numA !== numB)
|
|
334
|
-
return numA - numB;
|
|
335
|
-
}
|
|
336
|
-
return 0;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
//# sourceMappingURL=RuntimeCatalog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeCatalog.js","sourceRoot":"","sources":["../../src/marketplace/RuntimeCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuntimeDiscovery - Package Discovery and Resolution Service
|
|
3
|
-
*
|
|
4
|
-
* Helps find, resolve, and recommend runtime packages from the catalog.
|
|
5
|
-
* Provides compatibility checking, semver range resolution, and
|
|
6
|
-
* intelligent package recommendations for the Blok marketplace.
|
|
7
|
-
*/
|
|
8
|
-
import type { RuntimeRegistry } from "../RuntimeRegistry";
|
|
9
|
-
import type { RuntimeKind } from "../adapters/RuntimeAdapter";
|
|
10
|
-
import type { RuntimePackageManifest } from "./RuntimeCatalog";
|
|
11
|
-
import type { RuntimeCatalog } from "./RuntimeCatalog";
|
|
12
|
-
export interface CompatibilityInfo {
|
|
13
|
-
compatible: boolean;
|
|
14
|
-
blokVersionMatch: boolean;
|
|
15
|
-
runtimeAvailable: boolean;
|
|
16
|
-
protocolSupported: boolean;
|
|
17
|
-
warnings: string[];
|
|
18
|
-
}
|
|
19
|
-
export interface DiscoveryResult {
|
|
20
|
-
package: RuntimePackageManifest;
|
|
21
|
-
compatibility: CompatibilityInfo;
|
|
22
|
-
alternatives: RuntimePackageManifest[];
|
|
23
|
-
}
|
|
24
|
-
export interface ResolveOptions {
|
|
25
|
-
name: string;
|
|
26
|
-
version?: string;
|
|
27
|
-
runtime?: RuntimeKind;
|
|
28
|
-
preferVerified?: boolean;
|
|
29
|
-
}
|
|
30
|
-
export declare class RuntimeDiscovery {
|
|
31
|
-
private catalog;
|
|
32
|
-
private registry;
|
|
33
|
-
constructor(catalog: RuntimeCatalog, registry: RuntimeRegistry);
|
|
34
|
-
/**
|
|
35
|
-
* Discover all packages available for a specific runtime.
|
|
36
|
-
*
|
|
37
|
-
* @param runtime - The runtime kind to discover packages for
|
|
38
|
-
* @returns Array of matching package manifests
|
|
39
|
-
*/
|
|
40
|
-
discover(runtime: RuntimeKind): RuntimePackageManifest[];
|
|
41
|
-
/**
|
|
42
|
-
* Resolve a package by name with full compatibility checking.
|
|
43
|
-
*
|
|
44
|
-
* @param options - Resolution options including name, version, runtime preference
|
|
45
|
-
* @returns Discovery result with compatibility info and alternatives, or undefined
|
|
46
|
-
*/
|
|
47
|
-
resolve(options: ResolveOptions): DiscoveryResult | undefined;
|
|
48
|
-
/**
|
|
49
|
-
* Find alternative packages similar to a given package.
|
|
50
|
-
* Searches by shared tags and runtime kind.
|
|
51
|
-
*
|
|
52
|
-
* @param name - The package name to find alternatives for
|
|
53
|
-
* @param runtime - Optional runtime kind to filter alternatives
|
|
54
|
-
* @returns Array of alternative package manifests
|
|
55
|
-
*/
|
|
56
|
-
findAlternatives(name: string, runtime?: RuntimeKind): RuntimePackageManifest[];
|
|
57
|
-
/**
|
|
58
|
-
* Check if a package is compatible with the current environment.
|
|
59
|
-
*
|
|
60
|
-
* @param manifest - The package manifest to check
|
|
61
|
-
* @returns Compatibility information with warnings
|
|
62
|
-
*/
|
|
63
|
-
checkCompatibility(manifest: RuntimePackageManifest): CompatibilityInfo;
|
|
64
|
-
/**
|
|
65
|
-
* Recommend packages for a runtime, optionally filtered by tags.
|
|
66
|
-
* Results are sorted by a composite score of rating and downloads.
|
|
67
|
-
*
|
|
68
|
-
* @param runtime - The runtime kind to recommend packages for
|
|
69
|
-
* @param tags - Optional tags to filter recommendations
|
|
70
|
-
* @returns Array of recommended package manifests
|
|
71
|
-
*/
|
|
72
|
-
recommend(runtime: RuntimeKind, tags?: string[]): RuntimePackageManifest[];
|
|
73
|
-
/**
|
|
74
|
-
* Resolve a semver range to a specific version available in the catalog.
|
|
75
|
-
* Supports exact versions, >= (minimum), ^ (caret), and ~ (tilde) ranges.
|
|
76
|
-
*
|
|
77
|
-
* @param name - The package name
|
|
78
|
-
* @param range - The semver range string (e.g., ">=1.0.0", "^1.2.0", "~2.0.0", "1.5.3")
|
|
79
|
-
* @returns The resolved version string, or undefined if no match found
|
|
80
|
-
*/
|
|
81
|
-
resolveVersion(name: string, range: string): string | undefined;
|
|
82
|
-
/**
|
|
83
|
-
* Check if version (major, minor, patch) is >= base version.
|
|
84
|
-
*/
|
|
85
|
-
private semverGte;
|
|
86
|
-
}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuntimeDiscovery - Package Discovery and Resolution Service
|
|
3
|
-
*
|
|
4
|
-
* Helps find, resolve, and recommend runtime packages from the catalog.
|
|
5
|
-
* Provides compatibility checking, semver range resolution, and
|
|
6
|
-
* intelligent package recommendations for the Blok marketplace.
|
|
7
|
-
*/
|
|
8
|
-
export class RuntimeDiscovery {
|
|
9
|
-
catalog;
|
|
10
|
-
registry;
|
|
11
|
-
constructor(catalog, registry) {
|
|
12
|
-
this.catalog = catalog;
|
|
13
|
-
this.registry = registry;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Discover all packages available for a specific runtime.
|
|
17
|
-
*
|
|
18
|
-
* @param runtime - The runtime kind to discover packages for
|
|
19
|
-
* @returns Array of matching package manifests
|
|
20
|
-
*/
|
|
21
|
-
discover(runtime) {
|
|
22
|
-
return this.catalog.listByRuntime(runtime);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Resolve a package by name with full compatibility checking.
|
|
26
|
-
*
|
|
27
|
-
* @param options - Resolution options including name, version, runtime preference
|
|
28
|
-
* @returns Discovery result with compatibility info and alternatives, or undefined
|
|
29
|
-
*/
|
|
30
|
-
resolve(options) {
|
|
31
|
-
const { name, version, runtime, preferVerified } = options;
|
|
32
|
-
let resolvedVersion;
|
|
33
|
-
if (version) {
|
|
34
|
-
// Check if this is a semver range or exact version
|
|
35
|
-
if (version.startsWith("^") || version.startsWith("~") || version.startsWith(">=")) {
|
|
36
|
-
resolvedVersion = this.resolveVersion(name, version);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
resolvedVersion = version;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const manifest = this.catalog.get(name, resolvedVersion);
|
|
43
|
-
if (!manifest)
|
|
44
|
-
return undefined;
|
|
45
|
-
// If runtime is specified, verify it matches
|
|
46
|
-
if (runtime && manifest.runtime !== runtime) {
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
const compatibility = this.checkCompatibility(manifest);
|
|
50
|
-
let alternatives = this.findAlternatives(name, manifest.runtime);
|
|
51
|
-
// If preferVerified, sort alternatives with verified first
|
|
52
|
-
if (preferVerified) {
|
|
53
|
-
alternatives = alternatives.sort((a, b) => {
|
|
54
|
-
if (a.verified && !b.verified)
|
|
55
|
-
return -1;
|
|
56
|
-
if (!a.verified && b.verified)
|
|
57
|
-
return 1;
|
|
58
|
-
return 0;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
package: manifest,
|
|
63
|
-
compatibility,
|
|
64
|
-
alternatives,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Find alternative packages similar to a given package.
|
|
69
|
-
* Searches by shared tags and runtime kind.
|
|
70
|
-
*
|
|
71
|
-
* @param name - The package name to find alternatives for
|
|
72
|
-
* @param runtime - Optional runtime kind to filter alternatives
|
|
73
|
-
* @returns Array of alternative package manifests
|
|
74
|
-
*/
|
|
75
|
-
findAlternatives(name, runtime) {
|
|
76
|
-
const original = this.catalog.get(name);
|
|
77
|
-
const searchResult = this.catalog.search({
|
|
78
|
-
runtime,
|
|
79
|
-
limit: 100,
|
|
80
|
-
});
|
|
81
|
-
// Exclude the original package and score by tag overlap
|
|
82
|
-
const candidates = searchResult.packages.filter((pkg) => pkg.name !== name);
|
|
83
|
-
if (!original)
|
|
84
|
-
return candidates;
|
|
85
|
-
// Score by tag similarity
|
|
86
|
-
const scored = candidates.map((pkg) => {
|
|
87
|
-
const sharedTags = pkg.tags.filter((tag) => original.tags.some((oTag) => oTag.toLowerCase() === tag.toLowerCase()));
|
|
88
|
-
return { pkg, score: sharedTags.length };
|
|
89
|
-
});
|
|
90
|
-
scored.sort((a, b) => b.score - a.score);
|
|
91
|
-
return scored.map((s) => s.pkg);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Check if a package is compatible with the current environment.
|
|
95
|
-
*
|
|
96
|
-
* @param manifest - The package manifest to check
|
|
97
|
-
* @returns Compatibility information with warnings
|
|
98
|
-
*/
|
|
99
|
-
checkCompatibility(manifest) {
|
|
100
|
-
const warnings = [];
|
|
101
|
-
let runtimeAvailable = false;
|
|
102
|
-
const blokVersionMatch = true;
|
|
103
|
-
let protocolSupported = true;
|
|
104
|
-
// Check if the runtime adapter is registered
|
|
105
|
-
try {
|
|
106
|
-
runtimeAvailable = this.registry.has(manifest.runtime);
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
runtimeAvailable = false;
|
|
110
|
-
}
|
|
111
|
-
if (!runtimeAvailable) {
|
|
112
|
-
warnings.push(`Runtime '${manifest.runtime}' is not currently registered. Install the adapter before using this package.`);
|
|
113
|
-
}
|
|
114
|
-
// Check minimum Blok version compatibility
|
|
115
|
-
if (manifest.minBlokVersion) {
|
|
116
|
-
// In a real implementation, this would compare against the actual Blok version.
|
|
117
|
-
// For now, we assume compatibility and note the requirement.
|
|
118
|
-
warnings.push(`Package requires minimum Blok version ${manifest.minBlokVersion}. Verify your Blok installation is compatible.`);
|
|
119
|
-
}
|
|
120
|
-
// Check protocol support
|
|
121
|
-
if (manifest.protocols.length === 0) {
|
|
122
|
-
protocolSupported = false;
|
|
123
|
-
warnings.push("Package does not declare any supported protocols.");
|
|
124
|
-
}
|
|
125
|
-
const compatible = runtimeAvailable && blokVersionMatch && protocolSupported;
|
|
126
|
-
return {
|
|
127
|
-
compatible,
|
|
128
|
-
blokVersionMatch,
|
|
129
|
-
runtimeAvailable,
|
|
130
|
-
protocolSupported,
|
|
131
|
-
warnings,
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Recommend packages for a runtime, optionally filtered by tags.
|
|
136
|
-
* Results are sorted by a composite score of rating and downloads.
|
|
137
|
-
*
|
|
138
|
-
* @param runtime - The runtime kind to recommend packages for
|
|
139
|
-
* @param tags - Optional tags to filter recommendations
|
|
140
|
-
* @returns Array of recommended package manifests
|
|
141
|
-
*/
|
|
142
|
-
recommend(runtime, tags) {
|
|
143
|
-
let candidates = this.catalog.listByRuntime(runtime);
|
|
144
|
-
// Filter by tags if provided
|
|
145
|
-
if (tags && tags.length > 0) {
|
|
146
|
-
candidates = candidates.filter((pkg) => tags.some((tag) => pkg.tags.some((pkgTag) => pkgTag.toLowerCase() === tag.toLowerCase())));
|
|
147
|
-
}
|
|
148
|
-
// Sort by composite score: rating * log(downloads + 1)
|
|
149
|
-
candidates.sort((a, b) => {
|
|
150
|
-
const scoreA = a.rating * Math.log(a.downloads + 1);
|
|
151
|
-
const scoreB = b.rating * Math.log(b.downloads + 1);
|
|
152
|
-
return scoreB - scoreA;
|
|
153
|
-
});
|
|
154
|
-
return candidates;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Resolve a semver range to a specific version available in the catalog.
|
|
158
|
-
* Supports exact versions, >= (minimum), ^ (caret), and ~ (tilde) ranges.
|
|
159
|
-
*
|
|
160
|
-
* @param name - The package name
|
|
161
|
-
* @param range - The semver range string (e.g., ">=1.0.0", "^1.2.0", "~2.0.0", "1.5.3")
|
|
162
|
-
* @returns The resolved version string, or undefined if no match found
|
|
163
|
-
*/
|
|
164
|
-
resolveVersion(name, range) {
|
|
165
|
-
const versions = this.catalog.getVersions(name);
|
|
166
|
-
if (versions.length === 0)
|
|
167
|
-
return undefined;
|
|
168
|
-
// Exact version match
|
|
169
|
-
if (!range.startsWith("^") && !range.startsWith("~") && !range.startsWith(">=")) {
|
|
170
|
-
return versions.includes(range) ? range : undefined;
|
|
171
|
-
}
|
|
172
|
-
let prefix;
|
|
173
|
-
let baseVersion;
|
|
174
|
-
if (range.startsWith(">=")) {
|
|
175
|
-
prefix = ">=";
|
|
176
|
-
baseVersion = range.slice(2);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
prefix = range[0];
|
|
180
|
-
baseVersion = range.slice(1);
|
|
181
|
-
}
|
|
182
|
-
const baseParts = baseVersion.split(".").map(Number);
|
|
183
|
-
if (baseParts.length < 3) {
|
|
184
|
-
// Pad with zeros
|
|
185
|
-
while (baseParts.length < 3) {
|
|
186
|
-
baseParts.push(0);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
const [baseMajor, baseMinor, basePatch] = baseParts;
|
|
190
|
-
const matching = versions.filter((v) => {
|
|
191
|
-
const parts = v.split(".").map(Number);
|
|
192
|
-
const [major, minor, patch] = [parts[0] || 0, parts[1] || 0, parts[2] || 0];
|
|
193
|
-
if (prefix === ">=") {
|
|
194
|
-
// Minimum version: any version >= base
|
|
195
|
-
return this.semverGte(major, minor, patch, baseMajor, baseMinor, basePatch);
|
|
196
|
-
}
|
|
197
|
-
if (prefix === "^") {
|
|
198
|
-
// Caret: allows changes that do not modify the left-most non-zero digit
|
|
199
|
-
// ^1.2.3 := >=1.2.3 <2.0.0
|
|
200
|
-
// ^0.2.3 := >=0.2.3 <0.3.0
|
|
201
|
-
// ^0.0.3 := >=0.0.3 <0.0.4
|
|
202
|
-
if (baseMajor !== 0) {
|
|
203
|
-
return major === baseMajor && this.semverGte(major, minor, patch, baseMajor, baseMinor, basePatch);
|
|
204
|
-
}
|
|
205
|
-
if (baseMinor !== 0) {
|
|
206
|
-
return major === 0 && minor === baseMinor && patch >= basePatch;
|
|
207
|
-
}
|
|
208
|
-
return major === 0 && minor === 0 && patch === basePatch;
|
|
209
|
-
}
|
|
210
|
-
if (prefix === "~") {
|
|
211
|
-
// Tilde: allows patch-level changes
|
|
212
|
-
// ~1.2.3 := >=1.2.3 <1.3.0
|
|
213
|
-
return major === baseMajor && minor === baseMinor && patch >= basePatch;
|
|
214
|
-
}
|
|
215
|
-
return false;
|
|
216
|
-
});
|
|
217
|
-
// Return the highest matching version (versions are already sorted desc)
|
|
218
|
-
return matching.length > 0 ? matching[0] : undefined;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Check if version (major, minor, patch) is >= base version.
|
|
222
|
-
*/
|
|
223
|
-
semverGte(major, minor, patch, baseMajor, baseMinor, basePatch) {
|
|
224
|
-
if (major !== baseMajor)
|
|
225
|
-
return major > baseMajor;
|
|
226
|
-
if (minor !== baseMinor)
|
|
227
|
-
return minor > baseMinor;
|
|
228
|
-
return patch >= basePatch;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
//# sourceMappingURL=RuntimeDiscovery.js.map
|