@clipform/mcp-server 4.4.0 → 4.5.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.
@@ -6,7 +6,7 @@ import {
6
6
  recoveryHint,
7
7
  structuredResult,
8
8
  textResult
9
- } from "./chunk-K2JHO4A4.js";
9
+ } from "./chunk-Q6OG6RXP.js";
10
10
  import "./chunk-BV3KA6HC.js";
11
11
  import "./chunk-PBQ5BQWD.js";
12
12
  import "./chunk-PZ5AY32C.js";
@@ -29,7 +29,7 @@ import {
29
29
  union,
30
30
  unknown,
31
31
  url
32
- } from "./chunk-HWOV2WRK.js";
32
+ } from "./chunk-TKNPSBNU.js";
33
33
  import {
34
34
  GUIDE_TYPES,
35
35
  QUIZ_VARIANTS,
@@ -38,7 +38,7 @@ import {
38
38
  getGuideUri,
39
39
  guideFallbackText,
40
40
  registerResources
41
- } from "./chunk-F4AFULRJ.js";
41
+ } from "./chunk-WTYIKGXQ.js";
42
42
  import {
43
43
  ANON_PREVIEW_LINK_LABEL,
44
44
  ANON_PREVIEW_NOTICE,
@@ -50,7 +50,7 @@ import {
50
50
  capsFromToolsets,
51
51
  isPreviewViewerUrl,
52
52
  withAdoptedNotice
53
- } from "./chunk-5JFU4OEI.js";
53
+ } from "./chunk-RN5ORN7O.js";
54
54
  import {
55
55
  ACTIVE_NODE_TYPES,
56
56
  CONTACT_FIELDS,
@@ -75,7 +75,7 @@ import {
75
75
  stripGatedConfigKeys,
76
76
  structuredResult,
77
77
  textResult
78
- } from "./chunk-K2JHO4A4.js";
78
+ } from "./chunk-Q6OG6RXP.js";
79
79
  import {
80
80
  getMcpAuth,
81
81
  runWithMcpAuth,
@@ -20290,4 +20290,4 @@ export {
20290
20290
  * MIT Licensed
20291
20291
  *)
20292
20292
  */
20293
- //# sourceMappingURL=chunk-E2T3UTF3.js.map
20293
+ //# sourceMappingURL=chunk-OSOUHA2R.js.map
@@ -253,12 +253,12 @@ var FEATURES = {
253
253
  // Description mirrors NODE_TYPES.camera.description (the node SSOT) - the
254
254
  // node captures photo OR video (allowed_capture, #2759), not photo only.
255
255
  description: "Capture a photo or video from the device camera",
256
- // Dogfooding in live via NODE_COMPANY_ALLOWLIST.node_camera below. The DB
257
- // node_type_check constraint already accepts 'camera' in prod (migration
258
- // #2103 merged + applied 2026-07-17), so GA is now a pure app-config flip:
259
- // set enabled true + status 'live' and follow feature-lifecycle.
260
- enabled: false,
261
- status: "planned",
256
+ // GA 2026-10-26 (#5017). The NODE_COMPANY_ALLOWLIST.node_camera entry
257
+ // below stays as a safety valve: flip enabled back to false to pull it
258
+ // behind the allowlist again (draw precedent).
259
+ enabled: true,
260
+ status: "live",
261
+ wentLiveAt: "2026-10-26",
262
262
  category: "node-types"
263
263
  },
264
264
  node_conditional: {
@@ -837,6 +837,7 @@ var HELP_TOPICS = {
837
837
  // from a node's type id.
838
838
  node_choice: { path: "/help/node-types", anchor: "choice" },
839
839
  node_open: { path: "/help/node-types", anchor: "open-ended" },
840
+ node_camera: { path: "/help/node-types", anchor: "camera" },
840
841
  node_details: { path: "/help/node-types", anchor: "details" },
841
842
  node_button: { path: "/help/node-types", anchor: "button" },
842
843
  node_end_screen: { path: "/help/node-types", anchor: "end-screen" },
@@ -1220,6 +1221,9 @@ var NODE_TYPES = {
1220
1221
  // is absent from the publish gate below (pre-existing drift, not widened
1221
1222
  // here) because calendar_id is owner-scoped regardless.
1222
1223
  owner_scoped_config_keys: ["calendly", "calcom", "google_meet"],
1224
+ // The viewer iframes calendly / calcom scheduling_url (Booking.tsx): an outbound embed.
1225
+ // Unclaimed anonymous-MCP forms may not go live with this node (#4847).
1226
+ blocked_for_anon_mcp: true,
1223
1227
  default_config: null,
1224
1228
  config_schema: {
1225
1229
  type: "object",
@@ -1479,6 +1483,8 @@ var NODE_TYPES = {
1479
1483
  // Files, not a flat value - a notification renders a typed placeholder (#4154).
1480
1484
  notify_inline: false,
1481
1485
  owner_scoped_config_keys: [],
1486
+ // Unclaimed anonymous-MCP forms may not go live with this node (#4847; derived into ANON_MCP_BLOCKED_NODE_TYPES).
1487
+ blocked_for_anon_mcp: true,
1482
1488
  default_config: null,
1483
1489
  config_schema: {
1484
1490
  type: "object",
@@ -1584,21 +1590,6 @@ var NODE_TYPES = {
1584
1590
  stroke_widths: [3, 6, 12],
1585
1591
  diagram: { opacity: 1, scale: 1 }
1586
1592
  },
1587
- // Named one-click setups shown as extra rows in the dashboard node picker
1588
- // (#5060). Same node type (no new id, no migration): a preset only overlays
1589
- // default_config. `open_media_picker` opens the template-image picker on the
1590
- // new node straight away. Each config key must exist in config_schema and
1591
- // `icon` must be a known node icon (packages/config/test/node-type-picker-presets.test.js).
1592
- picker_presets: [
1593
- {
1594
- id: "markup",
1595
- label: "Mark up",
1596
- icon: "Highlighter",
1597
- description: "Respondents mark a spot on a diagram or image - one red pen, undo and clear",
1598
- config: { stroke_colors: ["#EF4444"], stroke_widths: [6] },
1599
- open_media_picker: true
1600
- }
1601
- ],
1602
1593
  config_schema: {
1603
1594
  type: "object",
1604
1595
  properties: {
@@ -2001,6 +1992,8 @@ var NODE_TYPES = {
2001
1992
  // own showcase waiver (graph-validation.js) still names workspace_integration_id
2002
1993
  // directly since it's the only per-type check today.
2003
1994
  owner_scoped_config_keys: ["workspace_integration_id"],
1995
+ // Unclaimed anonymous-MCP forms may not go live with this node (#4847; derived into ANON_MCP_BLOCKED_NODE_TYPES).
1996
+ blocked_for_anon_mcp: true,
2004
1997
  // A payment confirmation line is the whole point of a notification for
2005
1998
  // this node type - always inline (#4154).
2006
1999
  notify_inline: true,
@@ -2258,6 +2251,8 @@ var NODE_TYPES = {
2258
2251
  // (filtered by NON_COUNTABLE_FILTER); false is a no-op default.
2259
2252
  notify_inline: false,
2260
2253
  owner_scoped_config_keys: [],
2254
+ // Unclaimed anonymous-MCP forms may not go live with this node (#4847; derived into ANON_MCP_BLOCKED_NODE_TYPES).
2255
+ blocked_for_anon_mcp: true,
2261
2256
  default_config: { url: "", auto_redirect: true },
2262
2257
  config_schema: {
2263
2258
  type: "object",
@@ -2292,6 +2287,8 @@ var NODE_TYPES = {
2292
2287
  // (filtered by NON_COUNTABLE_FILTER); false is a no-op default.
2293
2288
  notify_inline: false,
2294
2289
  owner_scoped_config_keys: [],
2290
+ // Unclaimed anonymous-MCP forms may not go live with this node (#4847; derived into ANON_MCP_BLOCKED_NODE_TYPES).
2291
+ blocked_for_anon_mcp: true,
2295
2292
  default_config: { links: [{ id: "default", url: "", title: "", description: "", order: 0 }], auto_redirect: false },
2296
2293
  config_schema: {
2297
2294
  type: "object",
@@ -2343,6 +2340,8 @@ var NODE_TYPES = {
2343
2340
  // copy so a forked node can't keep serving the source workspace's files;
2344
2341
  // the publish gate's "No files uploaded" check then forces a fresh upload.
2345
2342
  owner_scoped_config_keys: ["files"],
2343
+ // Unclaimed anonymous-MCP forms may not go live with this node (#4847; derived into ANON_MCP_BLOCKED_NODE_TYPES).
2344
+ blocked_for_anon_mcp: true,
2346
2345
  default_config: null,
2347
2346
  config_schema: {
2348
2347
  type: "object",
@@ -2512,7 +2511,7 @@ var NODE_TYPES = {
2512
2511
  show_share_button: { type: "boolean", label: "Show share button", default: false, description: "Show a share button above the CTA" },
2513
2512
  cta_type: { type: "string", label: "CTA type", enum: ["none", "restart", "external_link"], default: "none", description: "Primary call-to-action button type" },
2514
2513
  cta_text: { type: "string", label: "CTA button text", default: "Continue", description: "Button label for the CTA" },
2515
- cta_url: { type: "string", label: "CTA URL", format: "uri", description: "URL to open (only for external_link CTA type)", placeholder: "https://example.com" },
2514
+ cta_url: { type: "string", label: "CTA URL", format: "uri", description: "URL to open (only for external_link CTA type)", placeholder: "https://example.com", outbound_link: true },
2516
2515
  score_ranges: {
2517
2516
  type: "array",
2518
2517
  label: "Score-based content",
@@ -2539,7 +2538,7 @@ var NODE_TYPES = {
2539
2538
  category: { type: "string", label: "Category key (must match keys used in option scores)" },
2540
2539
  title: { type: "string", label: "Title" },
2541
2540
  message: { type: "string", label: "Message" },
2542
- cta_url: { type: "string", label: "CTA URL", format: "uri" },
2541
+ cta_url: { type: "string", label: "CTA URL", format: "uri", outbound_link: true },
2543
2542
  cta_text: { type: "string", label: "CTA button text" }
2544
2543
  }
2545
2544
  }
@@ -2612,6 +2611,25 @@ var RESULTS_EXCLUDED_TYPES = Object.entries(NODE_TYPES).filter(([, v]) => !v.sho
2612
2611
  var NON_STEP_TYPES = /* @__PURE__ */ new Set(["button"]);
2613
2612
  var STEP_COUNTED_TYPES = Object.entries(NODE_TYPES).filter(([k, v]) => v.show_nav_bar && !NON_STEP_TYPES.has(k)).map(([k]) => k);
2614
2613
  var RESPONSES_EXCLUDED_TYPES = Object.entries(NODE_TYPES).filter(([, v]) => !(v.show_in_responses ?? v.show_in_results)).map(([k]) => k);
2614
+ var ANON_MCP_BLOCKED_NODE_TYPES = Object.entries(NODE_TYPES).filter(([, v]) => v.blocked_for_anon_mcp === true).map(([k]) => k);
2615
+ var ANON_MCP_OUTBOUND_LINK_RULES = (() => {
2616
+ const rules = [];
2617
+ const walk = (type, schema, path) => {
2618
+ if (!schema || typeof schema !== "object") return;
2619
+ for (const [key, prop] of Object.entries(schema.properties ?? {})) {
2620
+ const next = [...path, key];
2621
+ if (prop.outbound_link === true) rules.push({ type, path: next, kind: "non_empty" });
2622
+ if (Array.isArray(prop.enum) && prop.enum.includes("external_link")) {
2623
+ rules.push({ type, path: next, kind: "equals", value: "external_link" });
2624
+ }
2625
+ walk(type, prop, next);
2626
+ if (prop.items) walk(type, prop.items, [...next, "[]"]);
2627
+ }
2628
+ for (const branch of [...schema.oneOf ?? [], ...schema.anyOf ?? []]) walk(type, branch, path);
2629
+ };
2630
+ for (const [type, def] of Object.entries(NODE_TYPES)) walk(type, def.config_schema, []);
2631
+ return rules;
2632
+ })();
2615
2633
 
2616
2634
  // ../config/form-types.js
2617
2635
  var FORM_TYPES = {
@@ -3526,4 +3544,4 @@ export {
3526
3544
  textResult,
3527
3545
  structuredResult
3528
3546
  };
3529
- //# sourceMappingURL=chunk-K2JHO4A4.js.map
3547
+ //# sourceMappingURL=chunk-Q6OG6RXP.js.map