strray-ai 1.7.0 → 1.7.2

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 (120) hide show
  1. package/.opencode/enforcer-config.json +2 -2
  2. package/.opencode/package.json +1 -1
  3. package/.opencode/strray/codex.json +1 -1
  4. package/.opencode/strray/config.json +1 -1
  5. package/.opencode/strray/features.json +1 -1
  6. package/dist/core/boot-orchestrator.js +1 -1
  7. package/dist/core/boot-orchestrator.js.map +1 -1
  8. package/dist/core/features-config.js +1 -1
  9. package/dist/core/features-config.js.map +1 -1
  10. package/dist/delegation/task-skill-router.d.ts.map +1 -1
  11. package/dist/delegation/task-skill-router.js +110 -21
  12. package/dist/delegation/task-skill-router.js.map +1 -1
  13. package/dist/mcps/architect-tools.server.js +1 -1
  14. package/dist/mcps/architect-tools.server.js.map +1 -1
  15. package/dist/mcps/auto-format.server.js +1 -1
  16. package/dist/mcps/auto-format.server.js.map +1 -1
  17. package/dist/mcps/boot-orchestrator.server.js +1 -1
  18. package/dist/mcps/boot-orchestrator.server.js.map +1 -1
  19. package/dist/mcps/enforcer-tools.server.js +1 -1
  20. package/dist/mcps/enforcer-tools.server.js.map +1 -1
  21. package/dist/mcps/framework-compliance-audit.server.js +1 -1
  22. package/dist/mcps/framework-compliance-audit.server.js.map +1 -1
  23. package/dist/mcps/framework-help.server.js +1 -1
  24. package/dist/mcps/framework-help.server.js.map +1 -1
  25. package/dist/mcps/knowledge-skills/api-design.server.js +1 -1
  26. package/dist/mcps/knowledge-skills/api-design.server.js.map +1 -1
  27. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +1 -1
  28. package/dist/mcps/knowledge-skills/architecture-patterns.server.js.map +1 -1
  29. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +1 -1
  30. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js.map +1 -1
  31. package/dist/mcps/knowledge-skills/code-analyzer.server.js +1 -1
  32. package/dist/mcps/knowledge-skills/code-analyzer.server.js.map +1 -1
  33. package/dist/mcps/knowledge-skills/code-review.server.js +1 -1
  34. package/dist/mcps/knowledge-skills/code-review.server.js.map +1 -1
  35. package/dist/mcps/knowledge-skills/content-creator.server.js +1 -1
  36. package/dist/mcps/knowledge-skills/content-creator.server.js.map +1 -1
  37. package/dist/mcps/knowledge-skills/database-design.server.js +1 -1
  38. package/dist/mcps/knowledge-skills/database-design.server.js.map +1 -1
  39. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1 -1
  40. package/dist/mcps/knowledge-skills/devops-deployment.server.js.map +1 -1
  41. package/dist/mcps/knowledge-skills/git-workflow.server.js +1 -1
  42. package/dist/mcps/knowledge-skills/git-workflow.server.js.map +1 -1
  43. package/dist/mcps/knowledge-skills/growth-strategist.server.js +1 -1
  44. package/dist/mcps/knowledge-skills/growth-strategist.server.js.map +1 -1
  45. package/dist/mcps/knowledge-skills/log-monitor.server.js +1 -1
  46. package/dist/mcps/knowledge-skills/log-monitor.server.js.map +1 -1
  47. package/dist/mcps/knowledge-skills/mobile-development.server.js +1 -1
  48. package/dist/mcps/knowledge-skills/mobile-development.server.js.map +1 -1
  49. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1 -1
  50. package/dist/mcps/knowledge-skills/multimodal-looker.server.js.map +1 -1
  51. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1 -1
  52. package/dist/mcps/knowledge-skills/performance-optimization.server.js.map +1 -1
  53. package/dist/mcps/knowledge-skills/project-analysis.server.js +1 -1
  54. package/dist/mcps/knowledge-skills/project-analysis.server.js.map +1 -1
  55. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +1 -1
  56. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js.map +1 -1
  57. package/dist/mcps/knowledge-skills/security-audit.server.js +1 -1
  58. package/dist/mcps/knowledge-skills/security-audit.server.js.map +1 -1
  59. package/dist/mcps/knowledge-skills/seo-consultant.server.js +1 -1
  60. package/dist/mcps/knowledge-skills/seo-consultant.server.js.map +1 -1
  61. package/dist/mcps/knowledge-skills/session-management.server.js +1 -1
  62. package/dist/mcps/knowledge-skills/session-management.server.js.map +1 -1
  63. package/dist/mcps/knowledge-skills/skill-invocation.server.js +1 -1
  64. package/dist/mcps/knowledge-skills/skill-invocation.server.js.map +1 -1
  65. package/dist/mcps/knowledge-skills/strategist.server.js +1 -1
  66. package/dist/mcps/knowledge-skills/strategist.server.js.map +1 -1
  67. package/dist/mcps/knowledge-skills/tech-writer.server.js +2 -2
  68. package/dist/mcps/knowledge-skills/tech-writer.server.js.map +1 -1
  69. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +1 -1
  70. package/dist/mcps/knowledge-skills/testing-best-practices.server.js.map +1 -1
  71. package/dist/mcps/knowledge-skills/testing-strategy.server.js +1 -1
  72. package/dist/mcps/knowledge-skills/testing-strategy.server.js.map +1 -1
  73. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1 -1
  74. package/dist/mcps/knowledge-skills/ui-ux-design.server.js.map +1 -1
  75. package/dist/mcps/lint.server.js +1 -1
  76. package/dist/mcps/lint.server.js.map +1 -1
  77. package/dist/mcps/mcp-client.js +1 -1
  78. package/dist/mcps/mcp-client.js.map +1 -1
  79. package/dist/mcps/model-health-check.server.js +1 -1
  80. package/dist/mcps/model-health-check.server.js.map +1 -1
  81. package/dist/mcps/orchestrator.server.js +1 -1
  82. package/dist/mcps/orchestrator.server.js.map +1 -1
  83. package/dist/mcps/performance-analysis.server.js +1 -1
  84. package/dist/mcps/performance-analysis.server.js.map +1 -1
  85. package/dist/mcps/processor-pipeline.server.js +1 -1
  86. package/dist/mcps/processor-pipeline.server.js.map +1 -1
  87. package/dist/mcps/researcher.server.js +1 -1
  88. package/dist/mcps/researcher.server.js.map +1 -1
  89. package/dist/mcps/security-scan.server.js +1 -1
  90. package/dist/mcps/security-scan.server.js.map +1 -1
  91. package/dist/mcps/state-manager.server.js +1 -1
  92. package/dist/mcps/state-manager.server.js.map +1 -1
  93. package/dist/orchestrator/universal-registry-bridge.js +1 -1
  94. package/dist/orchestrator/universal-registry-bridge.js.map +1 -1
  95. package/dist/plugins/marketplace/marketplace-service.d.ts +108 -0
  96. package/dist/plugins/marketplace/marketplace-service.d.ts.map +1 -0
  97. package/dist/plugins/marketplace/marketplace-service.js +620 -0
  98. package/dist/plugins/marketplace/marketplace-service.js.map +1 -0
  99. package/dist/plugins/marketplace/marketplace-types.d.ts +468 -0
  100. package/dist/plugins/marketplace/marketplace-types.d.ts.map +1 -0
  101. package/dist/plugins/marketplace/marketplace-types.js +11 -0
  102. package/dist/plugins/marketplace/marketplace-types.js.map +1 -0
  103. package/dist/plugins/plugin-system.d.ts +152 -0
  104. package/dist/plugins/plugin-system.d.ts.map +1 -0
  105. package/dist/plugins/plugin-system.js +419 -0
  106. package/dist/plugins/plugin-system.js.map +1 -0
  107. package/dist/plugins/stringray-codex-injection.d.ts +21 -0
  108. package/dist/plugins/stringray-codex-injection.d.ts.map +1 -0
  109. package/dist/plugins/stringray-codex-injection.js +169 -0
  110. package/dist/plugins/stringray-codex-injection.js.map +1 -0
  111. package/dist/security/secure-authentication-system.d.ts +107 -6
  112. package/dist/security/secure-authentication-system.d.ts.map +1 -1
  113. package/dist/security/secure-authentication-system.js +426 -11
  114. package/dist/security/secure-authentication-system.js.map +1 -1
  115. package/dist/security/security-hardening-system.d.ts +11 -2
  116. package/dist/security/security-hardening-system.d.ts.map +1 -1
  117. package/dist/security/security-hardening-system.js +62 -4
  118. package/dist/security/security-hardening-system.js.map +1 -1
  119. package/package.json +4 -2
  120. package/scripts/node/universal-version-manager.js +3 -3
@@ -0,0 +1,620 @@
1
+ /**
2
+ * Plugin Marketplace Service
3
+ *
4
+ * Core marketplace service implementing plugin discovery, search, and curation
5
+ * with enterprise-grade security and performance optimizations.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-01-08
9
+ */
10
+ import { securityHardeningSystem } from "../../security/security-hardening-system.js";
11
+ import { enterpriseMonitoringSystem } from "../../monitoring/enterprise-monitoring-system.js";
12
+ /**
13
+ * Enterprise-grade marketplace service with comprehensive plugin management
14
+ */
15
+ export class PluginMarketplaceService {
16
+ plugins = new Map();
17
+ searchIndex = new Map();
18
+ downloadTokens = new Map();
19
+ /**
20
+ * Search plugins with advanced filtering and ranking
21
+ */
22
+ async search(query) {
23
+ // Basic validation for null/undefined
24
+ if (query == null) {
25
+ throw new Error("Search query cannot be null or undefined");
26
+ }
27
+ // Input validation
28
+ const validation = securityHardeningSystem.validateInput(query, "marketplace-search");
29
+ if (!validation.isValid) {
30
+ throw new Error(`Invalid search query: ${validation.errors.join(", ")}`);
31
+ }
32
+ const sanitizedQuery = validation.sanitizedValue;
33
+ // Additional validation for query structure
34
+ if (sanitizedQuery.limit != null &&
35
+ (typeof sanitizedQuery.limit !== "number" ||
36
+ sanitizedQuery.limit < 0 ||
37
+ !Number.isFinite(sanitizedQuery.limit))) {
38
+ throw new Error("Invalid limit parameter");
39
+ }
40
+ if (sanitizedQuery.offset != null &&
41
+ (typeof sanitizedQuery.offset !== "number" ||
42
+ sanitizedQuery.offset < 0 ||
43
+ !Number.isFinite(sanitizedQuery.offset))) {
44
+ throw new Error("Invalid offset parameter");
45
+ }
46
+ if (sanitizedQuery.minRating != null &&
47
+ (typeof sanitizedQuery.minRating !== "number" ||
48
+ sanitizedQuery.minRating < 0 ||
49
+ sanitizedQuery.minRating > 5)) {
50
+ throw new Error("Invalid minRating parameter");
51
+ }
52
+ if (sanitizedQuery.query != null &&
53
+ typeof sanitizedQuery.query !== "string") {
54
+ throw new Error("Invalid query parameter");
55
+ }
56
+ try {
57
+ // Perform search with ranking and filtering
58
+ const { results, total } = await this.performSearch(sanitizedQuery);
59
+ const facets = await this.generateFacets(results);
60
+ // Log search metrics
61
+ enterpriseMonitoringSystem.recordMetric("marketplace.search", {
62
+ query: sanitizedQuery.query,
63
+ resultCount: results.length,
64
+ filters: sanitizedQuery.filters,
65
+ });
66
+ return {
67
+ plugins: results,
68
+ total,
69
+ facets,
70
+ query: sanitizedQuery,
71
+ };
72
+ }
73
+ catch (error) {
74
+ enterpriseMonitoringSystem.recordError("marketplace.search", error);
75
+ throw error;
76
+ }
77
+ }
78
+ /**
79
+ * Get plugin by ID with caching and validation
80
+ */
81
+ async getPlugin(id) {
82
+ // Input validation
83
+ const validation = securityHardeningSystem.validateInput(id, "plugin-id");
84
+ if (!validation.isValid) {
85
+ throw new Error(`Invalid plugin ID: ${validation.errors.join(", ")}`);
86
+ }
87
+ const sanitizedId = validation.sanitizedValue;
88
+ try {
89
+ const plugin = this.plugins.get(sanitizedId);
90
+ if (plugin) {
91
+ // Update access metrics
92
+ plugin.stats.lastDownload = Date.now();
93
+ enterpriseMonitoringSystem.recordMetric("marketplace.plugin_access", {
94
+ pluginId: sanitizedId,
95
+ pluginName: plugin.name,
96
+ });
97
+ }
98
+ return plugin || null;
99
+ }
100
+ catch (error) {
101
+ enterpriseMonitoringSystem.recordError("marketplace.get_plugin", error);
102
+ throw error;
103
+ }
104
+ }
105
+ /**
106
+ * Get plugins by author with reputation filtering
107
+ */
108
+ async getPluginsByAuthor(authorId) {
109
+ // Basic validation for null/undefined
110
+ if (authorId == null) {
111
+ throw new Error("Author ID cannot be null or undefined");
112
+ }
113
+ const validation = securityHardeningSystem.validateInput(authorId, "author-id");
114
+ if (!validation.isValid) {
115
+ throw new Error(`Invalid author ID: ${validation.errors.join(", ")}`);
116
+ }
117
+ const sanitizedAuthorId = validation.sanitizedValue;
118
+ try {
119
+ const plugins = Array.from(this.plugins.values()).filter((plugin) => plugin.author.id === sanitizedAuthorId &&
120
+ plugin.status === "published");
121
+ return plugins.sort((a, b) => b.updatedAt - a.updatedAt);
122
+ }
123
+ catch (error) {
124
+ enterpriseMonitoringSystem.recordError("marketplace.get_by_author", error);
125
+ throw error;
126
+ }
127
+ }
128
+ /**
129
+ * Get plugins by category with curation
130
+ */
131
+ async getPluginsByCategory(category) {
132
+ const validation = securityHardeningSystem.validateInput(category, "plugin-category");
133
+ if (!validation.isValid) {
134
+ throw new Error(`Invalid category: ${validation.errors.join(", ")}`);
135
+ }
136
+ const sanitizedCategory = validation.sanitizedValue;
137
+ try {
138
+ const plugins = Array.from(this.plugins.values()).filter((plugin) => plugin.category === sanitizedCategory &&
139
+ plugin.status === "published");
140
+ // Sort by rating and downloads
141
+ return plugins.sort((a, b) => {
142
+ const aScore = a.stats.rating * 0.7 + Math.log(a.stats.downloads + 1) * 0.3;
143
+ const bScore = b.stats.rating * 0.7 + Math.log(b.stats.downloads + 1) * 0.3;
144
+ return bScore - aScore;
145
+ });
146
+ }
147
+ catch (error) {
148
+ enterpriseMonitoringSystem.recordError("marketplace.get_by_category", error);
149
+ throw error;
150
+ }
151
+ }
152
+ /**
153
+ * Get featured plugins (curated selection)
154
+ */
155
+ async getFeaturedPlugins() {
156
+ try {
157
+ const plugins = Array.from(this.plugins.values()).filter((plugin) => plugin.status === "published" && plugin.stats.rating >= 4.0);
158
+ // Curate featured plugins based on multiple criteria
159
+ const featured = plugins
160
+ .sort((a, b) => {
161
+ const aScore = this.calculateFeaturedScore(a);
162
+ const bScore = this.calculateFeaturedScore(b);
163
+ return bScore - aScore;
164
+ })
165
+ .slice(0, 12); // Top 12 featured plugins
166
+ return featured;
167
+ }
168
+ catch (error) {
169
+ enterpriseMonitoringSystem.recordError("marketplace.get_featured", error);
170
+ throw error;
171
+ }
172
+ }
173
+ /**
174
+ * Get trending plugins based on recent activity
175
+ */
176
+ async getTrendingPlugins() {
177
+ try {
178
+ const now = Date.now();
179
+ const weekAgo = now - 7 * 24 * 60 * 60 * 1000;
180
+ const plugins = Array.from(this.plugins.values())
181
+ .filter((plugin) => plugin.status === "published")
182
+ .map((plugin) => ({
183
+ plugin,
184
+ trendScore: this.calculateTrendScore(plugin, weekAgo),
185
+ }))
186
+ .filter((item) => item.trendScore > 0)
187
+ .sort((a, b) => b.trendScore - a.trendScore)
188
+ .slice(0, 20)
189
+ .map((item) => item.plugin);
190
+ return plugins;
191
+ }
192
+ catch (error) {
193
+ enterpriseMonitoringSystem.recordError("marketplace.get_trending", error);
194
+ throw error;
195
+ }
196
+ }
197
+ /**
198
+ * Get personalized recommendations
199
+ */
200
+ async getRecommendedPlugins(userId) {
201
+ try {
202
+ // For now, return highly-rated plugins from different categories
203
+ // In a full implementation, this would use user behavior analysis
204
+ const plugins = Array.from(this.plugins.values()).filter((plugin) => plugin.status === "published" && plugin.stats.rating >= 3.5);
205
+ // Group by category and pick top from each
206
+ const categories = new Map();
207
+ for (const plugin of plugins) {
208
+ if (!categories.has(plugin.category)) {
209
+ categories.set(plugin.category, []);
210
+ }
211
+ categories.get(plugin.category).push(plugin);
212
+ }
213
+ const recommendations = [];
214
+ for (const categoryPlugins of categories.values()) {
215
+ const topPlugins = categoryPlugins
216
+ .sort((a, b) => b.stats.rating - a.stats.rating)
217
+ .slice(0, 3);
218
+ recommendations.push(...topPlugins);
219
+ }
220
+ return recommendations.slice(0, 15);
221
+ }
222
+ catch (error) {
223
+ enterpriseMonitoringSystem.recordError("marketplace.get_recommended", error);
224
+ throw error;
225
+ }
226
+ }
227
+ /**
228
+ * Download plugin with secure token generation
229
+ */
230
+ async downloadPlugin(id, version) {
231
+ const validation = securityHardeningSystem.validateInput({ id, version }, "plugin-download");
232
+ if (!validation.isValid) {
233
+ return {
234
+ success: false,
235
+ downloadUrl: "",
236
+ checksum: "",
237
+ signature: "",
238
+ expiresAt: 0,
239
+ error: `Invalid download request: ${validation.errors.join(", ")}`,
240
+ };
241
+ }
242
+ const { id: sanitizedId, version: sanitizedVersion } = validation.sanitizedValue;
243
+ try {
244
+ const plugin = this.plugins.get(sanitizedId);
245
+ if (!plugin) {
246
+ return {
247
+ success: false,
248
+ downloadUrl: "",
249
+ checksum: "",
250
+ signature: "",
251
+ expiresAt: 0,
252
+ error: "Plugin not found",
253
+ };
254
+ }
255
+ const pluginVersion = plugin.versions.find((v) => v.version === sanitizedVersion);
256
+ if (!pluginVersion) {
257
+ return {
258
+ success: false,
259
+ downloadUrl: "",
260
+ checksum: "",
261
+ signature: "",
262
+ expiresAt: 0,
263
+ error: "Version not found",
264
+ };
265
+ }
266
+ // Generate secure download token
267
+ const token = this.generateDownloadToken(sanitizedId, sanitizedVersion);
268
+ const expiresAt = Date.now() + 15 * 60 * 1000; // 15 minutes
269
+ // Update download stats
270
+ plugin.stats.downloads++;
271
+ plugin.stats.lastDownload = Date.now();
272
+ enterpriseMonitoringSystem.recordMetric("marketplace.download", {
273
+ pluginId: sanitizedId,
274
+ version: sanitizedVersion,
275
+ pluginName: plugin.name,
276
+ });
277
+ return {
278
+ success: true,
279
+ downloadUrl: pluginVersion.downloadUrl,
280
+ checksum: pluginVersion.checksum,
281
+ signature: plugin.security.signature,
282
+ expiresAt,
283
+ };
284
+ }
285
+ catch (error) {
286
+ enterpriseMonitoringSystem.recordError("marketplace.download", error);
287
+ return {
288
+ success: false,
289
+ downloadUrl: "",
290
+ checksum: "",
291
+ signature: "",
292
+ expiresAt: 0,
293
+ error: error instanceof Error ? error.message : "Download failed",
294
+ };
295
+ }
296
+ }
297
+ /**
298
+ * Report plugin for moderation
299
+ */
300
+ async reportPlugin(id, report) {
301
+ const validation = securityHardeningSystem.validateInput({ id, report }, "plugin-report");
302
+ if (!validation.isValid) {
303
+ throw new Error(`Invalid report: ${validation.errors.join(", ")}`);
304
+ }
305
+ const { id: sanitizedId, report: sanitizedReport } = validation.sanitizedValue;
306
+ try {
307
+ const plugin = this.plugins.get(sanitizedId);
308
+ if (!plugin) {
309
+ throw new Error("Plugin not found");
310
+ }
311
+ // In a full implementation, this would queue the report for moderation
312
+ // For now, we'll log it and potentially flag the plugin
313
+ enterpriseMonitoringSystem.recordMetric("marketplace.report", {
314
+ pluginId: sanitizedId,
315
+ reportType: sanitizedReport.type,
316
+ pluginName: plugin.name,
317
+ });
318
+ console.warn(`Plugin reported: ${plugin.name} (${sanitizedId}) - ${sanitizedReport.type}: ${sanitizedReport.description}`);
319
+ return true;
320
+ }
321
+ catch (error) {
322
+ enterpriseMonitoringSystem.recordError("marketplace.report", error);
323
+ throw error;
324
+ }
325
+ }
326
+ /**
327
+ * Perform advanced search with ranking
328
+ */
329
+ async performSearch(query) {
330
+ let candidates = Array.from(this.plugins.values()).filter((plugin) => plugin.status === "published");
331
+ // Apply text search
332
+ if (query.query) {
333
+ candidates = this.filterByText(candidates, query.query);
334
+ }
335
+ // Apply category filter
336
+ if (query.category) {
337
+ candidates = candidates.filter((plugin) => plugin.category === query.category);
338
+ }
339
+ // Apply author filter
340
+ if (query.author) {
341
+ candidates = candidates.filter((plugin) => plugin.author.id === query.author);
342
+ }
343
+ // Apply tag filters
344
+ if (query.tags && query.tags.length > 0) {
345
+ candidates = candidates.filter((plugin) => query.tags.some((tag) => plugin.tags.includes(tag)));
346
+ }
347
+ // Apply rating filter
348
+ if (query.minRating) {
349
+ candidates = candidates.filter((plugin) => plugin.stats.rating >= query.minRating);
350
+ }
351
+ // Apply advanced filters
352
+ if (query.filters) {
353
+ candidates = this.applyAdvancedFilters(candidates, query.filters);
354
+ }
355
+ // Sort results
356
+ candidates = this.sortResults(candidates, query.sortBy, query.sortOrder);
357
+ // Get total before pagination
358
+ const total = candidates.length;
359
+ // Apply pagination
360
+ const limit = Math.min(query.limit || 50, 100); // Max 100 results
361
+ const offset = query.offset || 0;
362
+ return {
363
+ results: candidates.slice(offset, offset + limit),
364
+ total,
365
+ };
366
+ }
367
+ /**
368
+ * Filter plugins by text search
369
+ */
370
+ filterByText(plugins, query) {
371
+ const searchTerms = query.toLowerCase().split(/\s+/);
372
+ return plugins.filter((plugin) => {
373
+ const searchableText = [
374
+ plugin.name,
375
+ plugin.description,
376
+ plugin.author.name,
377
+ ...plugin.tags,
378
+ plugin.category,
379
+ ]
380
+ .join(" ")
381
+ .toLowerCase();
382
+ return searchTerms.every((term) => searchableText.includes(term));
383
+ });
384
+ }
385
+ /**
386
+ * Apply advanced filters
387
+ */
388
+ applyAdvancedFilters(plugins, filters) {
389
+ return plugins.filter((plugin) => {
390
+ // Verified filter
391
+ if (filters.verified !== undefined &&
392
+ plugin.author.verified !== filters.verified) {
393
+ return false;
394
+ }
395
+ // Security level filter
396
+ if (filters.security) {
397
+ const securityScore = this.calculateSecurityScore(plugin);
398
+ if (filters.security === "high" && securityScore < 80)
399
+ return false;
400
+ if (filters.security === "medium" && securityScore < 60)
401
+ return false;
402
+ }
403
+ // Compatibility filters
404
+ if (filters.compatibility && filters.compatibility.length > 0) {
405
+ const compatible = filters.compatibility.some((version) => plugin.compatibility.strRayVersions.includes(version));
406
+ if (!compatible)
407
+ return false;
408
+ }
409
+ // License filters
410
+ if (filters.license && filters.license.length > 0) {
411
+ if (!filters.license.includes(plugin.license))
412
+ return false;
413
+ }
414
+ // Language filters
415
+ if (filters.language && filters.language.length > 0) {
416
+ const hasLanguage = filters.language.some((lang) => plugin.metadata.languages.includes(lang));
417
+ if (!hasLanguage)
418
+ return false;
419
+ }
420
+ // Platform filters
421
+ if (filters.platform && filters.platform.length > 0) {
422
+ const hasPlatform = filters.platform.some((platform) => plugin.metadata.supportedPlatforms.includes(platform));
423
+ if (!hasPlatform)
424
+ return false;
425
+ }
426
+ return true;
427
+ });
428
+ }
429
+ /**
430
+ * Sort search results
431
+ */
432
+ sortResults(plugins, sortBy, sortOrder) {
433
+ const order = sortOrder === "asc" ? 1 : -1;
434
+ return plugins.sort((a, b) => {
435
+ let comparison = 0;
436
+ switch (sortBy) {
437
+ case "downloads":
438
+ comparison = a.stats.downloads - b.stats.downloads;
439
+ break;
440
+ case "rating":
441
+ comparison = a.stats.rating - b.stats.rating;
442
+ break;
443
+ case "updated":
444
+ comparison = a.updatedAt - b.updatedAt;
445
+ break;
446
+ case "created":
447
+ comparison = a.createdAt - b.createdAt;
448
+ break;
449
+ case "relevance":
450
+ default:
451
+ // Default relevance scoring
452
+ const aScore = this.calculateRelevanceScore(a);
453
+ const bScore = this.calculateRelevanceScore(b);
454
+ comparison = aScore - bScore;
455
+ break;
456
+ }
457
+ return comparison * order;
458
+ });
459
+ }
460
+ /**
461
+ * Generate search facets
462
+ */
463
+ async generateFacets(plugins) {
464
+ const facets = {
465
+ categories: {
466
+ agent: 0,
467
+ integration: 0,
468
+ ui: 0,
469
+ utility: 0,
470
+ security: 0,
471
+ monitoring: 0,
472
+ performance: 0,
473
+ testing: 0,
474
+ deployment: 0,
475
+ other: 0,
476
+ },
477
+ authors: {},
478
+ tags: {},
479
+ licenses: {},
480
+ languages: {},
481
+ platforms: {},
482
+ };
483
+ for (const plugin of plugins) {
484
+ // Categories
485
+ facets.categories[plugin.category] =
486
+ (facets.categories[plugin.category] || 0) + 1;
487
+ // Authors
488
+ facets.authors[plugin.author.name] =
489
+ (facets.authors[plugin.author.name] || 0) + 1;
490
+ // Tags
491
+ for (const tag of plugin.tags) {
492
+ facets.tags[tag] = (facets.tags[tag] || 0) + 1;
493
+ }
494
+ // Licenses
495
+ facets.licenses[plugin.license] =
496
+ (facets.licenses[plugin.license] || 0) + 1;
497
+ // Languages
498
+ for (const lang of plugin.metadata.languages) {
499
+ facets.languages[lang] = (facets.languages[lang] || 0) + 1;
500
+ }
501
+ // Platforms
502
+ for (const platform of plugin.metadata.supportedPlatforms) {
503
+ facets.platforms[platform] = (facets.platforms[platform] || 0) + 1;
504
+ }
505
+ }
506
+ return facets;
507
+ }
508
+ /**
509
+ * Calculate featured score for curation
510
+ */
511
+ calculateFeaturedScore(plugin) {
512
+ const recencyWeight = Math.max(0, 1 - (Date.now() - plugin.updatedAt) / (30 * 24 * 60 * 60 * 1000)); // 30 days
513
+ const ratingWeight = plugin.stats.rating / 5.0;
514
+ const downloadWeight = Math.min(1, Math.log(plugin.stats.downloads + 1) / Math.log(1000));
515
+ const authorWeight = plugin.author.verified ? 1.2 : 1.0;
516
+ return (recencyWeight * 0.2 +
517
+ ratingWeight * 0.4 +
518
+ downloadWeight * 0.3 +
519
+ authorWeight * 0.1);
520
+ }
521
+ /**
522
+ * Calculate trend score for trending plugins
523
+ */
524
+ calculateTrendScore(plugin, since) {
525
+ // Simplified trend calculation - in reality would use time-series data
526
+ const recentDownloads = plugin.stats.downloads; // Would be downloads since 'since'
527
+ const recentRating = plugin.stats.rating;
528
+ return recentDownloads * 0.7 + recentRating * 10 * 0.3;
529
+ }
530
+ /**
531
+ * Calculate relevance score for search
532
+ */
533
+ calculateRelevanceScore(plugin) {
534
+ return (plugin.stats.rating * 0.4 +
535
+ Math.log(plugin.stats.downloads + 1) * 0.3 +
536
+ (plugin.author.reputation / 100) * 0.2 +
537
+ (plugin.author.verified ? 0.1 : 0));
538
+ }
539
+ /**
540
+ * Calculate security score
541
+ */
542
+ calculateSecurityScore(plugin) {
543
+ let score = 50; // Base score
544
+ if (plugin.security.verified)
545
+ score += 20;
546
+ if (plugin.security.compliance.owasp)
547
+ score += 10;
548
+ if (plugin.security.compliance.gdpr)
549
+ score += 5;
550
+ if (plugin.security.compliance.hipaa)
551
+ score += 5;
552
+ if (plugin.security.compliance.soc2)
553
+ score += 5;
554
+ if (plugin.security.compliance.iso27001)
555
+ score += 5;
556
+ if (plugin.security.vulnerabilities.length === 0)
557
+ score += 10;
558
+ else {
559
+ const criticalCount = plugin.security.vulnerabilities.filter((v) => v.severity === "critical").length;
560
+ const highCount = plugin.security.vulnerabilities.filter((v) => v.severity === "high").length;
561
+ score -= criticalCount * 20 + highCount * 10;
562
+ }
563
+ return Math.max(0, Math.min(100, score));
564
+ }
565
+ /**
566
+ * Generate secure download token
567
+ */
568
+ generateDownloadToken(pluginId, version) {
569
+ const crypto = require("crypto");
570
+ const payload = `${pluginId}:${version}:${Date.now()}`;
571
+ const token = crypto.createHash("sha256").update(payload).digest("hex");
572
+ // Store token with expiration
573
+ this.downloadTokens.set(token, {
574
+ token,
575
+ expires: Date.now() + 15 * 60 * 1000, // 15 minutes
576
+ });
577
+ // Cleanup expired tokens periodically
578
+ this.cleanupExpiredTokens();
579
+ return token;
580
+ }
581
+ /**
582
+ * Cleanup expired download tokens
583
+ */
584
+ cleanupExpiredTokens() {
585
+ const now = Date.now();
586
+ for (const [token, data] of this.downloadTokens.entries()) {
587
+ if (data.expires < now) {
588
+ this.downloadTokens.delete(token);
589
+ }
590
+ }
591
+ }
592
+ /**
593
+ * Register plugin in marketplace
594
+ */
595
+ registerPlugin(plugin) {
596
+ this.plugins.set(plugin.id, plugin);
597
+ this.updateSearchIndex(plugin);
598
+ }
599
+ /**
600
+ * Update search index for plugin
601
+ */
602
+ updateSearchIndex(plugin) {
603
+ const terms = [
604
+ plugin.name.toLowerCase(),
605
+ plugin.description.toLowerCase(),
606
+ plugin.author.name.toLowerCase(),
607
+ plugin.category.toLowerCase(),
608
+ ...plugin.tags.map((t) => t.toLowerCase()),
609
+ ];
610
+ for (const term of terms) {
611
+ if (!this.searchIndex.has(term)) {
612
+ this.searchIndex.set(term, new Set());
613
+ }
614
+ this.searchIndex.get(term).add(plugin.id);
615
+ }
616
+ }
617
+ }
618
+ // Export singleton instance
619
+ export const marketplaceService = new PluginMarketplaceService();
620
+ //# sourceMappingURL=marketplace-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-service.js","sourceRoot":"","sources":["../../../src/plugins/marketplace/marketplace-service.ts"],"names":[],"mappings":"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"}