@blokjs/runner 0.2.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 (307) hide show
  1. package/dist/Blok.d.ts +19 -0
  2. package/dist/Blok.js +184 -0
  3. package/dist/Blok.js.map +1 -0
  4. package/dist/BlokResponse.d.ts +16 -0
  5. package/dist/BlokResponse.js +28 -0
  6. package/dist/BlokResponse.js.map +1 -0
  7. package/dist/Configuration.d.ts +37 -0
  8. package/dist/Configuration.js +248 -0
  9. package/dist/Configuration.js.map +1 -0
  10. package/dist/ConfigurationResolver.d.ts +7 -0
  11. package/dist/ConfigurationResolver.js +15 -0
  12. package/dist/ConfigurationResolver.js.map +1 -0
  13. package/dist/DefaultLogger.d.ts +65 -0
  14. package/dist/DefaultLogger.js +101 -0
  15. package/dist/DefaultLogger.js.map +1 -0
  16. package/dist/LocalStorage.d.ts +7 -0
  17. package/dist/LocalStorage.js +56 -0
  18. package/dist/LocalStorage.js.map +1 -0
  19. package/dist/MemoryUsage.d.ts +22 -0
  20. package/dist/MemoryUsage.js +83 -0
  21. package/dist/MemoryUsage.js.map +1 -0
  22. package/dist/NodeMap.d.ts +7 -0
  23. package/dist/NodeMap.js +13 -0
  24. package/dist/NodeMap.js.map +1 -0
  25. package/dist/ResolverBase.d.ts +8 -0
  26. package/dist/ResolverBase.js +18 -0
  27. package/dist/ResolverBase.js.map +1 -0
  28. package/dist/Runner.d.ts +25 -0
  29. package/dist/Runner.js +32 -0
  30. package/dist/Runner.js.map +1 -0
  31. package/dist/RunnerNode.d.ts +9 -0
  32. package/dist/RunnerNode.js +8 -0
  33. package/dist/RunnerNode.js.map +1 -0
  34. package/dist/RunnerNodeBase.d.ts +4 -0
  35. package/dist/RunnerNodeBase.js +3 -0
  36. package/dist/RunnerNodeBase.js.map +1 -0
  37. package/dist/RunnerSteps.d.ts +14 -0
  38. package/dist/RunnerSteps.js +110 -0
  39. package/dist/RunnerSteps.js.map +1 -0
  40. package/dist/RuntimeAdapterNode.d.ts +19 -0
  41. package/dist/RuntimeAdapterNode.js +87 -0
  42. package/dist/RuntimeAdapterNode.js.map +1 -0
  43. package/dist/RuntimeRegistry.d.ts +61 -0
  44. package/dist/RuntimeRegistry.js +87 -0
  45. package/dist/RuntimeRegistry.js.map +1 -0
  46. package/dist/TriggerBase.d.ts +119 -0
  47. package/dist/TriggerBase.js +413 -0
  48. package/dist/TriggerBase.js.map +1 -0
  49. package/dist/adapters/BunRuntimeAdapter.d.ts +38 -0
  50. package/dist/adapters/BunRuntimeAdapter.js +169 -0
  51. package/dist/adapters/BunRuntimeAdapter.js.map +1 -0
  52. package/dist/adapters/DockerRuntimeAdapter.d.ts +85 -0
  53. package/dist/adapters/DockerRuntimeAdapter.js +298 -0
  54. package/dist/adapters/DockerRuntimeAdapter.js.map +1 -0
  55. package/dist/adapters/HttpRuntimeAdapter.d.ts +58 -0
  56. package/dist/adapters/HttpRuntimeAdapter.js +152 -0
  57. package/dist/adapters/HttpRuntimeAdapter.js.map +1 -0
  58. package/dist/adapters/NodeJsRuntimeAdapter.d.ts +23 -0
  59. package/dist/adapters/NodeJsRuntimeAdapter.js +67 -0
  60. package/dist/adapters/NodeJsRuntimeAdapter.js.map +1 -0
  61. package/dist/adapters/RuntimeAdapter.d.ts +42 -0
  62. package/dist/adapters/RuntimeAdapter.js +2 -0
  63. package/dist/adapters/RuntimeAdapter.js.map +1 -0
  64. package/dist/adapters/WasmRuntimeAdapter.d.ts +69 -0
  65. package/dist/adapters/WasmRuntimeAdapter.js +279 -0
  66. package/dist/adapters/WasmRuntimeAdapter.js.map +1 -0
  67. package/dist/cache/NodeResultCache.d.ts +286 -0
  68. package/dist/cache/NodeResultCache.js +499 -0
  69. package/dist/cache/NodeResultCache.js.map +1 -0
  70. package/dist/cache/index.d.ts +1 -0
  71. package/dist/cache/index.js +2 -0
  72. package/dist/cache/index.js.map +1 -0
  73. package/dist/cost/CostEstimator.d.ts +57 -0
  74. package/dist/cost/CostEstimator.js +171 -0
  75. package/dist/cost/CostEstimator.js.map +1 -0
  76. package/dist/cost/index.d.ts +4 -0
  77. package/dist/cost/index.js +3 -0
  78. package/dist/cost/index.js.map +1 -0
  79. package/dist/cost/pricing.d.ts +24 -0
  80. package/dist/cost/pricing.js +169 -0
  81. package/dist/cost/pricing.js.map +1 -0
  82. package/dist/defineNode.d.ts +155 -0
  83. package/dist/defineNode.js +191 -0
  84. package/dist/defineNode.js.map +1 -0
  85. package/dist/graphql/GraphQLSchemaGenerator.d.ts +129 -0
  86. package/dist/graphql/GraphQLSchemaGenerator.js +425 -0
  87. package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -0
  88. package/dist/hmr/FileWatcher.d.ts +62 -0
  89. package/dist/hmr/FileWatcher.js +185 -0
  90. package/dist/hmr/FileWatcher.js.map +1 -0
  91. package/dist/hmr/HmrDevConsole.d.ts +13 -0
  92. package/dist/hmr/HmrDevConsole.js +46 -0
  93. package/dist/hmr/HmrDevConsole.js.map +1 -0
  94. package/dist/hmr/HotReloadManager.d.ts +84 -0
  95. package/dist/hmr/HotReloadManager.js +195 -0
  96. package/dist/hmr/HotReloadManager.js.map +1 -0
  97. package/dist/hmr/index.d.ts +39 -0
  98. package/dist/hmr/index.js +38 -0
  99. package/dist/hmr/index.js.map +1 -0
  100. package/dist/index.d.ts +107 -0
  101. package/dist/index.js +107 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/integrations/APMIntegration.d.ts +141 -0
  104. package/dist/integrations/APMIntegration.js +212 -0
  105. package/dist/integrations/APMIntegration.js.map +1 -0
  106. package/dist/integrations/AzureMonitorIntegration.d.ts +118 -0
  107. package/dist/integrations/AzureMonitorIntegration.js +254 -0
  108. package/dist/integrations/AzureMonitorIntegration.js.map +1 -0
  109. package/dist/integrations/CloudWatchIntegration.d.ts +135 -0
  110. package/dist/integrations/CloudWatchIntegration.js +293 -0
  111. package/dist/integrations/CloudWatchIntegration.js.map +1 -0
  112. package/dist/integrations/SentryIntegration.d.ts +153 -0
  113. package/dist/integrations/SentryIntegration.js +200 -0
  114. package/dist/integrations/SentryIntegration.js.map +1 -0
  115. package/dist/integrations/index.d.ts +19 -0
  116. package/dist/integrations/index.js +16 -0
  117. package/dist/integrations/index.js.map +1 -0
  118. package/dist/marketplace/RuntimeAutoScaler.d.ts +148 -0
  119. package/dist/marketplace/RuntimeAutoScaler.js +366 -0
  120. package/dist/marketplace/RuntimeAutoScaler.js.map +1 -0
  121. package/dist/marketplace/RuntimeCatalog.d.ts +174 -0
  122. package/dist/marketplace/RuntimeCatalog.js +339 -0
  123. package/dist/marketplace/RuntimeCatalog.js.map +1 -0
  124. package/dist/marketplace/RuntimeDiscovery.d.ts +86 -0
  125. package/dist/marketplace/RuntimeDiscovery.js +219 -0
  126. package/dist/marketplace/RuntimeDiscovery.js.map +1 -0
  127. package/dist/marketplace/RuntimeHealthMonitor.d.ts +100 -0
  128. package/dist/marketplace/RuntimeHealthMonitor.js +241 -0
  129. package/dist/marketplace/RuntimeHealthMonitor.js.map +1 -0
  130. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +113 -0
  131. package/dist/marketplace/RuntimeMetricsDashboard.js +293 -0
  132. package/dist/marketplace/RuntimeMetricsDashboard.js.map +1 -0
  133. package/dist/monitoring/CircuitBreaker.d.ts +107 -0
  134. package/dist/monitoring/CircuitBreaker.js +238 -0
  135. package/dist/monitoring/CircuitBreaker.js.map +1 -0
  136. package/dist/monitoring/DistributedTracer.d.ts +125 -0
  137. package/dist/monitoring/DistributedTracer.js +230 -0
  138. package/dist/monitoring/DistributedTracer.js.map +1 -0
  139. package/dist/monitoring/HealthCheck.d.ts +54 -0
  140. package/dist/monitoring/HealthCheck.js +102 -0
  141. package/dist/monitoring/HealthCheck.js.map +1 -0
  142. package/dist/monitoring/PerformanceProfiler.d.ts +63 -0
  143. package/dist/monitoring/PerformanceProfiler.js +229 -0
  144. package/dist/monitoring/PerformanceProfiler.js.map +1 -0
  145. package/dist/monitoring/PrometheusBootstrap.d.ts +30 -0
  146. package/dist/monitoring/PrometheusBootstrap.js +71 -0
  147. package/dist/monitoring/PrometheusBootstrap.js.map +1 -0
  148. package/dist/monitoring/PrometheusMetricsBridge.d.ts +60 -0
  149. package/dist/monitoring/PrometheusMetricsBridge.js +216 -0
  150. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -0
  151. package/dist/monitoring/RateLimiter.d.ts +58 -0
  152. package/dist/monitoring/RateLimiter.js +128 -0
  153. package/dist/monitoring/RateLimiter.js.map +1 -0
  154. package/dist/monitoring/StructuredLogger.d.ts +131 -0
  155. package/dist/monitoring/StructuredLogger.js +207 -0
  156. package/dist/monitoring/StructuredLogger.js.map +1 -0
  157. package/dist/monitoring/TracingBootstrap.d.ts +69 -0
  158. package/dist/monitoring/TracingBootstrap.js +129 -0
  159. package/dist/monitoring/TracingBootstrap.js.map +1 -0
  160. package/dist/monitoring/TriggerMetricsCollector.d.ts +94 -0
  161. package/dist/monitoring/TriggerMetricsCollector.js +174 -0
  162. package/dist/monitoring/TriggerMetricsCollector.js.map +1 -0
  163. package/dist/monitoring/index.d.ts +9 -0
  164. package/dist/monitoring/index.js +10 -0
  165. package/dist/monitoring/index.js.map +1 -0
  166. package/dist/openapi/OpenAPIGenerator.d.ts +192 -0
  167. package/dist/openapi/OpenAPIGenerator.js +373 -0
  168. package/dist/openapi/OpenAPIGenerator.js.map +1 -0
  169. package/dist/openapi/index.d.ts +20 -0
  170. package/dist/openapi/index.js +20 -0
  171. package/dist/openapi/index.js.map +1 -0
  172. package/dist/security/ABAC.d.ts +224 -0
  173. package/dist/security/ABAC.js +380 -0
  174. package/dist/security/ABAC.js.map +1 -0
  175. package/dist/security/AuditLogger.d.ts +242 -0
  176. package/dist/security/AuditLogger.js +317 -0
  177. package/dist/security/AuditLogger.js.map +1 -0
  178. package/dist/security/AuthMiddleware.d.ts +163 -0
  179. package/dist/security/AuthMiddleware.js +274 -0
  180. package/dist/security/AuthMiddleware.js.map +1 -0
  181. package/dist/security/EncryptionAtRest.d.ts +206 -0
  182. package/dist/security/EncryptionAtRest.js +236 -0
  183. package/dist/security/EncryptionAtRest.js.map +1 -0
  184. package/dist/security/OAuthProvider.d.ts +334 -0
  185. package/dist/security/OAuthProvider.js +719 -0
  186. package/dist/security/OAuthProvider.js.map +1 -0
  187. package/dist/security/PIIDetector.d.ts +233 -0
  188. package/dist/security/PIIDetector.js +354 -0
  189. package/dist/security/PIIDetector.js.map +1 -0
  190. package/dist/security/RBAC.d.ts +143 -0
  191. package/dist/security/RBAC.js +285 -0
  192. package/dist/security/RBAC.js.map +1 -0
  193. package/dist/security/SecretManager.d.ts +652 -0
  194. package/dist/security/SecretManager.js +1146 -0
  195. package/dist/security/SecretManager.js.map +1 -0
  196. package/dist/security/TLSConfig.d.ts +305 -0
  197. package/dist/security/TLSConfig.js +550 -0
  198. package/dist/security/TLSConfig.js.map +1 -0
  199. package/dist/security/index.d.ts +79 -0
  200. package/dist/security/index.js +80 -0
  201. package/dist/security/index.js.map +1 -0
  202. package/dist/testing/TestHarness.d.ts +189 -0
  203. package/dist/testing/TestHarness.js +272 -0
  204. package/dist/testing/TestHarness.js.map +1 -0
  205. package/dist/testing/TestLogger.d.ts +103 -0
  206. package/dist/testing/TestLogger.js +153 -0
  207. package/dist/testing/TestLogger.js.map +1 -0
  208. package/dist/testing/WorkflowTestRunner.d.ts +172 -0
  209. package/dist/testing/WorkflowTestRunner.js +355 -0
  210. package/dist/testing/WorkflowTestRunner.js.map +1 -0
  211. package/dist/testing/index.d.ts +21 -0
  212. package/dist/testing/index.js +22 -0
  213. package/dist/testing/index.js.map +1 -0
  214. package/dist/tracing/InMemoryRunStore.d.ts +44 -0
  215. package/dist/tracing/InMemoryRunStore.js +341 -0
  216. package/dist/tracing/InMemoryRunStore.js.map +1 -0
  217. package/dist/tracing/PostgresRunStore.d.ts +82 -0
  218. package/dist/tracing/PostgresRunStore.js +640 -0
  219. package/dist/tracing/PostgresRunStore.js.map +1 -0
  220. package/dist/tracing/RunStore.d.ts +38 -0
  221. package/dist/tracing/RunStore.js +2 -0
  222. package/dist/tracing/RunStore.js.map +1 -0
  223. package/dist/tracing/RunTracker.d.ts +75 -0
  224. package/dist/tracing/RunTracker.js +374 -0
  225. package/dist/tracing/RunTracker.js.map +1 -0
  226. package/dist/tracing/SqliteRunStore.d.ts +53 -0
  227. package/dist/tracing/SqliteRunStore.js +703 -0
  228. package/dist/tracing/SqliteRunStore.js.map +1 -0
  229. package/dist/tracing/TraceRouter.d.ts +47 -0
  230. package/dist/tracing/TraceRouter.js +904 -0
  231. package/dist/tracing/TraceRouter.js.map +1 -0
  232. package/dist/tracing/TracingLogger.d.ts +21 -0
  233. package/dist/tracing/TracingLogger.js +62 -0
  234. package/dist/tracing/TracingLogger.js.map +1 -0
  235. package/dist/tracing/createStore.d.ts +30 -0
  236. package/dist/tracing/createStore.js +75 -0
  237. package/dist/tracing/createStore.js.map +1 -0
  238. package/dist/tracing/index.d.ts +13 -0
  239. package/dist/tracing/index.js +9 -0
  240. package/dist/tracing/index.js.map +1 -0
  241. package/dist/tracing/sanitize.d.ts +7 -0
  242. package/dist/tracing/sanitize.js +95 -0
  243. package/dist/tracing/sanitize.js.map +1 -0
  244. package/dist/tracing/types.d.ts +178 -0
  245. package/dist/tracing/types.js +3 -0
  246. package/dist/tracing/types.js.map +1 -0
  247. package/dist/types/Average.d.ts +11 -0
  248. package/dist/types/Average.js +2 -0
  249. package/dist/types/Average.js.map +1 -0
  250. package/dist/types/Condition.d.ts +8 -0
  251. package/dist/types/Condition.js +2 -0
  252. package/dist/types/Condition.js.map +1 -0
  253. package/dist/types/Conditions.d.ts +5 -0
  254. package/dist/types/Conditions.js +2 -0
  255. package/dist/types/Conditions.js.map +1 -0
  256. package/dist/types/Config.d.ts +12 -0
  257. package/dist/types/Config.js +2 -0
  258. package/dist/types/Config.js.map +1 -0
  259. package/dist/types/Flow.d.ts +5 -0
  260. package/dist/types/Flow.js +2 -0
  261. package/dist/types/Flow.js.map +1 -0
  262. package/dist/types/GlobalOptions.d.ts +11 -0
  263. package/dist/types/GlobalOptions.js +2 -0
  264. package/dist/types/GlobalOptions.js.map +1 -0
  265. package/dist/types/Inputs.d.ts +5 -0
  266. package/dist/types/Inputs.js +2 -0
  267. package/dist/types/Inputs.js.map +1 -0
  268. package/dist/types/JsonLikeObject.d.ts +3 -0
  269. package/dist/types/JsonLikeObject.js +2 -0
  270. package/dist/types/JsonLikeObject.js.map +1 -0
  271. package/dist/types/Mapper.d.ts +5 -0
  272. package/dist/types/Mapper.js +2 -0
  273. package/dist/types/Mapper.js.map +1 -0
  274. package/dist/types/Node.d.ts +10 -0
  275. package/dist/types/Node.js +2 -0
  276. package/dist/types/Node.js.map +1 -0
  277. package/dist/types/ParamsDictionary.d.ts +3 -0
  278. package/dist/types/ParamsDictionary.js +2 -0
  279. package/dist/types/ParamsDictionary.js.map +1 -0
  280. package/dist/types/Properties.d.ts +5 -0
  281. package/dist/types/Properties.js +2 -0
  282. package/dist/types/Properties.js.map +1 -0
  283. package/dist/types/Targets.d.ts +5 -0
  284. package/dist/types/Targets.js +2 -0
  285. package/dist/types/Targets.js.map +1 -0
  286. package/dist/types/Trigger.d.ts +5 -0
  287. package/dist/types/Trigger.js +2 -0
  288. package/dist/types/Trigger.js.map +1 -0
  289. package/dist/types/TriggerHttp.d.ts +7 -0
  290. package/dist/types/TriggerHttp.js +2 -0
  291. package/dist/types/TriggerHttp.js.map +1 -0
  292. package/dist/types/TriggerResponse.d.ts +6 -0
  293. package/dist/types/TriggerResponse.js +2 -0
  294. package/dist/types/TriggerResponse.js.map +1 -0
  295. package/dist/types/Triggers.d.ts +5 -0
  296. package/dist/types/Triggers.js +2 -0
  297. package/dist/types/Triggers.js.map +1 -0
  298. package/dist/types/TryCatch.d.ts +6 -0
  299. package/dist/types/TryCatch.js +2 -0
  300. package/dist/types/TryCatch.js.map +1 -0
  301. package/dist/visualization/NodeDependencyGraph.d.ts +76 -0
  302. package/dist/visualization/NodeDependencyGraph.js +418 -0
  303. package/dist/visualization/NodeDependencyGraph.js.map +1 -0
  304. package/dist/visualization/WorkflowVisualizer.d.ts +144 -0
  305. package/dist/visualization/WorkflowVisualizer.js +446 -0
  306. package/dist/visualization/WorkflowVisualizer.js.map +1 -0
  307. package/package.json +95 -0
@@ -0,0 +1,174 @@
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
+ import type { RuntimeKind } from "../adapters/RuntimeAdapter";
9
+ export interface RuntimeNodeInfo {
10
+ name: string;
11
+ description: string;
12
+ inputs: Record<string, string>;
13
+ outputs: Record<string, string>;
14
+ }
15
+ export interface RuntimePackageManifest {
16
+ name: string;
17
+ version: string;
18
+ runtime: RuntimeKind;
19
+ description: string;
20
+ author: string;
21
+ license: string;
22
+ repository?: string;
23
+ tags: string[];
24
+ protocols: ("http" | "grpc" | "both")[];
25
+ dockerImage?: string;
26
+ minBlokVersion?: string;
27
+ nodeCount: number;
28
+ nodes: RuntimeNodeInfo[];
29
+ createdAt: number;
30
+ updatedAt: number;
31
+ downloads: number;
32
+ rating: number;
33
+ verified: boolean;
34
+ }
35
+ export interface CatalogSearchOptions {
36
+ query?: string;
37
+ runtime?: RuntimeKind;
38
+ tags?: string[];
39
+ verified?: boolean;
40
+ sortBy?: "name" | "downloads" | "rating" | "updated";
41
+ sortOrder?: "asc" | "desc";
42
+ limit?: number;
43
+ offset?: number;
44
+ }
45
+ export interface CatalogSearchResult {
46
+ packages: RuntimePackageManifest[];
47
+ total: number;
48
+ page: number;
49
+ pageSize: number;
50
+ }
51
+ export interface CatalogStats {
52
+ totalPackages: number;
53
+ totalVersions: number;
54
+ packagesByRuntime: Record<string, number>;
55
+ totalDownloads: number;
56
+ verifiedCount: number;
57
+ averageRating: number;
58
+ }
59
+ export declare class RuntimeCatalog {
60
+ private packages;
61
+ constructor();
62
+ /**
63
+ * Publish a runtime package to the catalog.
64
+ *
65
+ * @param manifest - The package manifest to publish
66
+ * @throws Error if required fields are missing or invalid
67
+ */
68
+ publish(manifest: RuntimePackageManifest): void;
69
+ /**
70
+ * Remove a specific version of a package from the catalog.
71
+ *
72
+ * @param name - The package name
73
+ * @param version - The version to remove
74
+ * @returns true if the version was removed, false if not found
75
+ */
76
+ unpublish(name: string, version: string): boolean;
77
+ /**
78
+ * Get a package manifest by name and optional version.
79
+ * Returns the latest version if no version is specified.
80
+ *
81
+ * @param name - The package name
82
+ * @param version - Optional specific version
83
+ * @returns The manifest if found, undefined otherwise
84
+ */
85
+ get(name: string, version?: string): RuntimePackageManifest | undefined;
86
+ /**
87
+ * Get all available versions of a package, sorted by semver descending.
88
+ *
89
+ * @param name - The package name
90
+ * @returns Array of version strings sorted by semver (newest first)
91
+ */
92
+ getVersions(name: string): string[];
93
+ /**
94
+ * Get the latest version of a package by semver ordering.
95
+ *
96
+ * @param name - The package name
97
+ * @returns The latest version string, or undefined if package not found
98
+ */
99
+ getLatestVersion(name: string): string | undefined;
100
+ /**
101
+ * Search the catalog with filtering, sorting, and pagination.
102
+ *
103
+ * @param options - Search and filter options
104
+ * @returns Paginated search results
105
+ */
106
+ search(options: CatalogSearchOptions): CatalogSearchResult;
107
+ /**
108
+ * List all latest-version packages for a specific runtime.
109
+ *
110
+ * @param runtime - The runtime kind to filter by
111
+ * @returns Array of matching package manifests
112
+ */
113
+ listByRuntime(runtime: RuntimeKind): RuntimePackageManifest[];
114
+ /**
115
+ * Get the most popular packages sorted by download count.
116
+ *
117
+ * @param limit - Maximum number of results (default 10)
118
+ * @returns Array of package manifests sorted by downloads descending
119
+ */
120
+ getPopular(limit?: number): RuntimePackageManifest[];
121
+ /**
122
+ * Get all verified packages.
123
+ *
124
+ * @returns Array of verified package manifests
125
+ */
126
+ getVerified(): RuntimePackageManifest[];
127
+ /**
128
+ * Increment the download counter for a specific package version.
129
+ *
130
+ * @param name - The package name
131
+ * @param version - The package version
132
+ */
133
+ incrementDownloads(name: string, version: string): void;
134
+ /**
135
+ * Set the rating for a specific package version.
136
+ *
137
+ * @param name - The package name
138
+ * @param version - The package version
139
+ * @param rating - The rating value (0-5)
140
+ * @throws Error if rating is out of range
141
+ */
142
+ setRating(name: string, version: string, rating: number): void;
143
+ /**
144
+ * Get overall catalog statistics.
145
+ *
146
+ * @returns Aggregated catalog statistics
147
+ */
148
+ getStats(): CatalogStats;
149
+ /**
150
+ * Serialize the catalog to a JSON string for persistence.
151
+ *
152
+ * @returns JSON string representation of the catalog
153
+ */
154
+ toJSON(): string;
155
+ /**
156
+ * Deserialize a catalog from a JSON string.
157
+ *
158
+ * @param json - The JSON string to parse
159
+ * @returns A new RuntimeCatalog instance populated with the data
160
+ */
161
+ static fromJSON(json: string): RuntimeCatalog;
162
+ /**
163
+ * Get the latest version manifest for every package in the catalog.
164
+ */
165
+ private getAllLatestPackages;
166
+ /**
167
+ * Validate that a manifest has all required fields.
168
+ */
169
+ private validateManifest;
170
+ /**
171
+ * Compare two semver strings. Returns negative if a < b, 0 if equal, positive if a > b.
172
+ */
173
+ private compareSemver;
174
+ }
@@ -0,0 +1,339 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeCatalog.js","sourceRoot":"","sources":["../../src/marketplace/RuntimeCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
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, ^ (caret), and ~ (tilde) ranges.
76
+ *
77
+ * @param name - The package name
78
+ * @param range - The semver range string (e.g., "^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
+ }