uiplug-mcp 1.3.1 → 1.3.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 (2) hide show
  1. package/dist/index.js +6 -22
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -469,31 +469,15 @@ ${c.code_component}
469
469
  const { name: compName, description, framework, category, code, installation, tags, model, group_slug, visibility = "public", } = (args ?? {});
470
470
  const { createHash: createHash2 } = await import("crypto");
471
471
  const keyHashForCreate = createHash2("sha256").update(process.env.UIPLUG_API_KEY ?? "").digest("hex");
472
- // Resolve tag names → UUIDs (create missing tags automatically)
472
+ // Resolve tag names → UUIDs via SECURITY DEFINER RPC (auto-creates missing tags)
473
473
  let tagIds = [];
474
474
  if (tags && tags.length > 0) {
475
- const normalizedNames = tags.map((t) => t.trim().toLowerCase().replace(/\s+/g, "-")).filter(Boolean);
476
- // Fetch existing tags
477
- const { data: existingTags } = await supabase
478
- .from("tags")
479
- .select("id, name")
480
- .in("name", normalizedNames);
481
- const existingMap = {};
482
- for (const t of (existingTags ?? [])) {
483
- existingMap[t.name] = t.id;
475
+ const { data: resolvedIds, error: tagError } = await supabase
476
+ .rpc("upsert_tags", { p_names: tags });
477
+ if (tagError) {
478
+ return { content: [{ type: "text", text: `Error resolving tags: ${tagError.message}` }], isError: true };
484
479
  }
485
- // Create any tags that don't exist yet
486
- const missing = normalizedNames.filter((n) => !existingMap[n]);
487
- if (missing.length > 0) {
488
- const { data: created } = await supabase
489
- .from("tags")
490
- .insert(missing.map((name) => ({ name })))
491
- .select("id, name");
492
- for (const t of (created ?? [])) {
493
- existingMap[t.name] = t.id;
494
- }
495
- }
496
- tagIds = normalizedNames.map((n) => existingMap[n]).filter(Boolean);
480
+ tagIds = resolvedIds ?? [];
497
481
  }
498
482
  const { data: componentId, error } = await supabase.rpc("create_component", {
499
483
  p_key_hash: keyHashForCreate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uiplug-mcp",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "MCP server for UIPlug — gives AI agents access to the UIPlug UI component marketplace",
5
5
  "type": "module",
6
6
  "bin": {