@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.
Files changed (167) hide show
  1. package/dist/Blok.d.ts +2 -0
  2. package/dist/Blok.js +42 -110
  3. package/dist/Blok.js.map +1 -1
  4. package/dist/DefaultLogger.d.ts +13 -0
  5. package/dist/DefaultLogger.js +25 -0
  6. package/dist/DefaultLogger.js.map +1 -1
  7. package/dist/RunnerSteps.d.ts +23 -0
  8. package/dist/RunnerSteps.js +128 -87
  9. package/dist/RunnerSteps.js.map +1 -1
  10. package/dist/SubworkflowNode.js +19 -0
  11. package/dist/SubworkflowNode.js.map +1 -1
  12. package/dist/TriggerBase.d.ts +12 -0
  13. package/dist/TriggerBase.js +216 -181
  14. package/dist/TriggerBase.js.map +1 -1
  15. package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +9 -0
  16. package/dist/adapters/grpc/GrpcRuntimeAdapter.js +76 -6
  17. package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
  18. package/dist/index.d.ts +4 -39
  19. package/dist/index.js +7 -32
  20. package/dist/index.js.map +1 -1
  21. package/dist/monitoring/JanitorMetrics.d.ts +3 -0
  22. package/dist/monitoring/JanitorMetrics.js +11 -0
  23. package/dist/monitoring/JanitorMetrics.js.map +1 -1
  24. package/dist/monitoring/ProcessErrorMetrics.d.ts +32 -0
  25. package/dist/monitoring/ProcessErrorMetrics.js +43 -0
  26. package/dist/monitoring/ProcessErrorMetrics.js.map +1 -0
  27. package/dist/monitoring/PrometheusMetricsBridge.d.ts +7 -0
  28. package/dist/monitoring/PrometheusMetricsBridge.js +8 -2
  29. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -1
  30. package/dist/monitoring/SubworkflowMetrics.d.ts +25 -0
  31. package/dist/monitoring/SubworkflowMetrics.js +38 -0
  32. package/dist/monitoring/SubworkflowMetrics.js.map +1 -0
  33. package/dist/observability/ErrorSink.d.ts +23 -0
  34. package/dist/observability/ErrorSink.js +32 -0
  35. package/dist/observability/ErrorSink.js.map +1 -0
  36. package/dist/observability/SentryIntegration.d.ts +9 -0
  37. package/dist/observability/SentryIntegration.js +31 -0
  38. package/dist/observability/SentryIntegration.js.map +1 -0
  39. package/dist/scheduling/DebounceCoordinator.d.ts +7 -53
  40. package/dist/scheduling/DebounceCoordinator.js +8 -207
  41. package/dist/scheduling/DebounceCoordinator.js.map +1 -1
  42. package/dist/tracing/InMemoryRunStore.d.ts +5 -1
  43. package/dist/tracing/InMemoryRunStore.js +14 -0
  44. package/dist/tracing/InMemoryRunStore.js.map +1 -1
  45. package/dist/tracing/Janitor.js +3 -0
  46. package/dist/tracing/Janitor.js.map +1 -1
  47. package/dist/tracing/PostgresRunStore.d.ts +4 -1
  48. package/dist/tracing/PostgresRunStore.js +73 -3
  49. package/dist/tracing/PostgresRunStore.js.map +1 -1
  50. package/dist/tracing/RunStore.d.ts +17 -1
  51. package/dist/tracing/RunTracker.d.ts +13 -34
  52. package/dist/tracing/RunTracker.js +62 -32
  53. package/dist/tracing/RunTracker.js.map +1 -1
  54. package/dist/tracing/SqliteRunStore.d.ts +4 -1
  55. package/dist/tracing/SqliteRunStore.js +60 -0
  56. package/dist/tracing/SqliteRunStore.js.map +1 -1
  57. package/dist/tracing/TraceRouter.d.ts +13 -0
  58. package/dist/tracing/TraceRouter.js +43 -11
  59. package/dist/tracing/TraceRouter.js.map +1 -1
  60. package/dist/tracing/TracingLogger.js +22 -0
  61. package/dist/tracing/TracingLogger.js.map +1 -1
  62. package/dist/tracing/createStore.js +51 -22
  63. package/dist/tracing/createStore.js.map +1 -1
  64. package/dist/tracing/types.d.ts +22 -0
  65. package/dist/types/GlobalOptions.d.ts +5 -7
  66. package/dist/workflow/WorkflowNormalizer.js +63 -0
  67. package/dist/workflow/WorkflowNormalizer.js.map +1 -1
  68. package/package.json +7 -4
  69. package/dist/cache/NodeResultCache.d.ts +0 -286
  70. package/dist/cache/NodeResultCache.js +0 -506
  71. package/dist/cache/NodeResultCache.js.map +0 -1
  72. package/dist/cache/index.d.ts +0 -1
  73. package/dist/cache/index.js +0 -2
  74. package/dist/cache/index.js.map +0 -1
  75. package/dist/concurrency/ConcurrencyBackend.d.ts +0 -61
  76. package/dist/concurrency/ConcurrencyBackend.js +0 -20
  77. package/dist/concurrency/ConcurrencyBackend.js.map +0 -1
  78. package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +0 -64
  79. package/dist/concurrency/NatsKvConcurrencyBackend.js +0 -310
  80. package/dist/concurrency/NatsKvConcurrencyBackend.js.map +0 -1
  81. package/dist/concurrency/RedisConcurrencyBackend.d.ts +0 -64
  82. package/dist/concurrency/RedisConcurrencyBackend.js +0 -374
  83. package/dist/concurrency/RedisConcurrencyBackend.js.map +0 -1
  84. package/dist/concurrency/createConcurrencyBackend.d.ts +0 -24
  85. package/dist/concurrency/createConcurrencyBackend.js +0 -38
  86. package/dist/concurrency/createConcurrencyBackend.js.map +0 -1
  87. package/dist/graphql/GraphQLSchemaGenerator.d.ts +0 -129
  88. package/dist/graphql/GraphQLSchemaGenerator.js +0 -425
  89. package/dist/graphql/GraphQLSchemaGenerator.js.map +0 -1
  90. package/dist/integrations/APMIntegration.d.ts +0 -141
  91. package/dist/integrations/APMIntegration.js +0 -212
  92. package/dist/integrations/APMIntegration.js.map +0 -1
  93. package/dist/integrations/AzureMonitorIntegration.d.ts +0 -118
  94. package/dist/integrations/AzureMonitorIntegration.js +0 -254
  95. package/dist/integrations/AzureMonitorIntegration.js.map +0 -1
  96. package/dist/integrations/CloudWatchIntegration.d.ts +0 -135
  97. package/dist/integrations/CloudWatchIntegration.js +0 -293
  98. package/dist/integrations/CloudWatchIntegration.js.map +0 -1
  99. package/dist/integrations/SentryIntegration.d.ts +0 -153
  100. package/dist/integrations/SentryIntegration.js +0 -200
  101. package/dist/integrations/SentryIntegration.js.map +0 -1
  102. package/dist/integrations/index.d.ts +0 -19
  103. package/dist/integrations/index.js +0 -16
  104. package/dist/integrations/index.js.map +0 -1
  105. package/dist/marketplace/RuntimeAutoScaler.d.ts +0 -148
  106. package/dist/marketplace/RuntimeAutoScaler.js +0 -366
  107. package/dist/marketplace/RuntimeAutoScaler.js.map +0 -1
  108. package/dist/marketplace/RuntimeCatalog.d.ts +0 -180
  109. package/dist/marketplace/RuntimeCatalog.js +0 -339
  110. package/dist/marketplace/RuntimeCatalog.js.map +0 -1
  111. package/dist/marketplace/RuntimeDiscovery.d.ts +0 -86
  112. package/dist/marketplace/RuntimeDiscovery.js +0 -231
  113. package/dist/marketplace/RuntimeDiscovery.js.map +0 -1
  114. package/dist/marketplace/RuntimeHealthMonitor.d.ts +0 -100
  115. package/dist/marketplace/RuntimeHealthMonitor.js +0 -241
  116. package/dist/marketplace/RuntimeHealthMonitor.js.map +0 -1
  117. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +0 -113
  118. package/dist/marketplace/RuntimeMetricsDashboard.js +0 -293
  119. package/dist/marketplace/RuntimeMetricsDashboard.js.map +0 -1
  120. package/dist/openapi/OpenAPIGenerator.d.ts +0 -192
  121. package/dist/openapi/OpenAPIGenerator.js +0 -378
  122. package/dist/openapi/OpenAPIGenerator.js.map +0 -1
  123. package/dist/openapi/index.d.ts +0 -20
  124. package/dist/openapi/index.js +0 -20
  125. package/dist/openapi/index.js.map +0 -1
  126. package/dist/scheduling/DebounceBackend.d.ts +0 -108
  127. package/dist/scheduling/DebounceBackend.js +0 -23
  128. package/dist/scheduling/DebounceBackend.js.map +0 -1
  129. package/dist/scheduling/NatsKvDebounceBackend.d.ts +0 -53
  130. package/dist/scheduling/NatsKvDebounceBackend.js +0 -334
  131. package/dist/scheduling/NatsKvDebounceBackend.js.map +0 -1
  132. package/dist/scheduling/RedisDebounceBackend.d.ts +0 -49
  133. package/dist/scheduling/RedisDebounceBackend.js +0 -356
  134. package/dist/scheduling/RedisDebounceBackend.js.map +0 -1
  135. package/dist/scheduling/createDebounceBackend.d.ts +0 -25
  136. package/dist/scheduling/createDebounceBackend.js +0 -39
  137. package/dist/scheduling/createDebounceBackend.js.map +0 -1
  138. package/dist/security/ABAC.d.ts +0 -224
  139. package/dist/security/ABAC.js +0 -380
  140. package/dist/security/ABAC.js.map +0 -1
  141. package/dist/security/AuditLogger.d.ts +0 -242
  142. package/dist/security/AuditLogger.js +0 -317
  143. package/dist/security/AuditLogger.js.map +0 -1
  144. package/dist/security/AuthMiddleware.d.ts +0 -162
  145. package/dist/security/AuthMiddleware.js +0 -289
  146. package/dist/security/AuthMiddleware.js.map +0 -1
  147. package/dist/security/EncryptionAtRest.d.ts +0 -206
  148. package/dist/security/EncryptionAtRest.js +0 -236
  149. package/dist/security/EncryptionAtRest.js.map +0 -1
  150. package/dist/security/OAuthProvider.d.ts +0 -334
  151. package/dist/security/OAuthProvider.js +0 -719
  152. package/dist/security/OAuthProvider.js.map +0 -1
  153. package/dist/security/PIIDetector.d.ts +0 -233
  154. package/dist/security/PIIDetector.js +0 -354
  155. package/dist/security/PIIDetector.js.map +0 -1
  156. package/dist/security/RBAC.d.ts +0 -143
  157. package/dist/security/RBAC.js +0 -285
  158. package/dist/security/RBAC.js.map +0 -1
  159. package/dist/security/SecretManager.d.ts +0 -652
  160. package/dist/security/SecretManager.js +0 -1147
  161. package/dist/security/SecretManager.js.map +0 -1
  162. package/dist/security/TLSConfig.d.ts +0 -305
  163. package/dist/security/TLSConfig.js +0 -550
  164. package/dist/security/TLSConfig.js.map +0 -1
  165. package/dist/security/index.d.ts +0 -81
  166. package/dist/security/index.js +0 -82
  167. 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