@clipform/mcp-server 2.3.0 → 2.4.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.
@@ -2,7 +2,7 @@ import {
2
2
  WORKFLOW_TYPES,
3
3
  getDiscoveryParams,
4
4
  getSessionContextWithAuth
5
- } from "./chunk-YZJZ5NPL.js";
5
+ } from "./chunk-5LV55T7F.js";
6
6
  import {
7
7
  __export
8
8
  } from "./chunk-G3PMV62Z.js";
@@ -4708,4 +4708,4 @@ export {
4708
4708
  getWorkflowText,
4709
4709
  registerPrompts
4710
4710
  };
4711
- //# sourceMappingURL=chunk-WCPHQ4GU.js.map
4711
+ //# sourceMappingURL=chunk-4G4MF3ME.js.map
@@ -544,6 +544,9 @@ var DRAW_GAME_DEFAULT_TIERS = [
544
544
  { min_score: 75, label: "Great match" },
545
545
  { min_score: 92, label: "Perfect" }
546
546
  ];
547
+ var DEFAULT_MAX_RECORDING_SECONDS = 120;
548
+ var MAX_RECORDING_SECONDS_MIN = 10;
549
+ var MAX_RECORDING_SECONDS_MAX = 300;
547
550
  var NODE_TYPES = {
548
551
  start: {
549
552
  label: "Start",
@@ -719,6 +722,14 @@ var NODE_TYPES = {
719
722
  type: "string",
720
723
  label: "Content media type",
721
724
  description: "How the node media was provided"
725
+ },
726
+ max_recording_seconds: {
727
+ type: "number",
728
+ default: DEFAULT_MAX_RECORDING_SECONDS,
729
+ minimum: MAX_RECORDING_SECONDS_MIN,
730
+ maximum: MAX_RECORDING_SECONDS_MAX,
731
+ label: "Max recording length (seconds)",
732
+ description: "Cap on the audio/video recorder for this node, in seconds"
722
733
  }
723
734
  }
724
735
  },
@@ -1029,6 +1040,22 @@ var NODE_TYPES = {
1029
1040
  value: { type: "string" }
1030
1041
  }
1031
1042
  }
1043
+ },
1044
+ // Consent/opt-in agreements the respondent was shown. Present only when
1045
+ // the node has consent items. `accepted` is their choice; `label` is the
1046
+ // exact wording they agreed to, snapshotted per response (#2828).
1047
+ consent: {
1048
+ type: "array",
1049
+ items: {
1050
+ type: "object",
1051
+ required: ["name", "accepted", "type", "label"],
1052
+ properties: {
1053
+ name: { type: "string" },
1054
+ accepted: { type: "boolean" },
1055
+ type: { type: "string", enum: CONSENT_TYPES },
1056
+ label: { type: "string" }
1057
+ }
1058
+ }
1032
1059
  }
1033
1060
  }
1034
1061
  }
@@ -1810,7 +1837,10 @@ var NODE_TYPES = {
1810
1837
  supports_media: false,
1811
1838
  is_system: false,
1812
1839
  show_in_results: false,
1813
- default_config: null,
1840
+ default_config: {
1841
+ title: "Thank you!",
1842
+ message: "Your response has been submitted."
1843
+ },
1814
1844
  config_schema: {
1815
1845
  type: "object",
1816
1846
  properties: {
@@ -2115,7 +2145,8 @@ var HELP_TOPICS = {
2115
2145
  liveAndDraft: { path: "/help/managing-forms", anchor: "live-and-draft" },
2116
2146
  publishingChanges: { path: "/help/managing-forms", anchor: "publishing-changes" },
2117
2147
  embedding: { path: "/help/embed", anchor: null },
2118
- publicResults: { path: "/help/public-results", anchor: null }
2148
+ publicResults: { path: "/help/public-results", anchor: null },
2149
+ trash: { path: "/help/managing-forms", anchor: "trash" }
2119
2150
  };
2120
2151
  function buildHelpLinks(docsBaseUrl) {
2121
2152
  const links = {};
@@ -2206,6 +2237,154 @@ var MEDIA_DIRECT_MAX_BYTES = 20 * 1024 * 1024;
2206
2237
  var SUPABASE_STORAGE_MAX_BYTES = 50 * 1024 * 1024;
2207
2238
  var VIDEO_COMPRESS_FLOOR_BYTES = 1 * 1024 * 1024;
2208
2239
  var HELP_LINKS = buildHelpLinks(BUSINESS.urls.docs);
2240
+ var PLAN_LIMITS = {
2241
+ free_v1: {
2242
+ tier: 0,
2243
+ name: "Free",
2244
+ price: "$0",
2245
+ period: "forever",
2246
+ price_cents: 0,
2247
+ stripe_price_id: { test: null, live: null },
2248
+ // Shopify App Pricing plan NAME (must match the Partner Dashboard plan
2249
+ // exactly - the app_subscriptions/update payload carries this name). Free
2250
+ // generates no subscription, so this is only used by the drift check.
2251
+ shopify_plan_handle: "Free",
2252
+ node_limit: null,
2253
+ form_limit: 5,
2254
+ workspace_limit: 1,
2255
+ show_branding: true,
2256
+ custom_theme: false,
2257
+ response_limit: 100,
2258
+ features: [
2259
+ "Up to 5 forms",
2260
+ "Unlimited questions per form",
2261
+ // "completed" is not a tightening: response_limit has always been 100,
2262
+ // but the counter now excludes partials (#2618), so this wording is both
2263
+ // accurate and strictly more generous than what it replaced.
2264
+ "100 completed responses per month",
2265
+ "Full AI tooling (TTS, media, video)",
2266
+ "Clipform branding"
2267
+ ]
2268
+ },
2269
+ pro_v1: {
2270
+ tier: 1,
2271
+ name: "Pro",
2272
+ price: "$25",
2273
+ period: "/month",
2274
+ price_cents: 2500,
2275
+ stripe_price_id: { test: "price_1TZnmhCWdEPD0KoNWWJTc3B6", live: "price_1TZnrZEJOD9ik3LhhFwGZ6ut" },
2276
+ // Must match the Partner Dashboard plan name exactly (drives webhook plan
2277
+ // mapping + the price drift check). Keep in step with price_cents above.
2278
+ shopify_plan_handle: "Pro",
2279
+ node_limit: null,
2280
+ form_limit: null,
2281
+ workspace_limit: null,
2282
+ show_branding: false,
2283
+ custom_theme: true,
2284
+ response_limit: null,
2285
+ features: [
2286
+ "Unlimited forms",
2287
+ "Unlimited questions",
2288
+ "Unlimited responses",
2289
+ "Custom themes & colors",
2290
+ "Remove Clipform branding"
2291
+ ]
2292
+ },
2293
+ // Banded Pro (#1937). pro_v2_1k IS the current tier-1 version (#2671) - new
2294
+ // Pro signups land here; pro_v1 is retained only to grandfather the accounts
2295
+ // that predate the flip.
2296
+ //
2297
+ // Billing is one subscription with TWO Stripe items: this licensed base
2298
+ // billed in advance, plus a volume-tiered metered top-up (STRIPE_BAND_PRICE_ID
2299
+ // below) billed in arrears - so the band a workspace lands in is decided by
2300
+ // usage, never by swapping plan version. Completed responses report to the
2301
+ // Stripe usage meter (#2651, apps/api/src/lib/usage-metering.ts) via
2302
+ // planMetersUsage below, and checkout appends the metered item whenever a band
2303
+ // price is configured for the mode (#2652). The band price now exists in BOTH
2304
+ // test and live (STRIPE_BAND_PRICE_ID), so a new Pro checkout is two-item and
2305
+ // usage above the base band IS charged once this deploys - the HUMAN LEGAL
2306
+ // REVIEW on LEGAL.billing below must clear before that go-live.
2307
+ //
2308
+ // `response_limit` counts COMPLETED response sets only; partials never
2309
+ // consume allowance.
2310
+ //
2311
+ // shopify_plan_handle is null until the matching Partner Dashboard plans
2312
+ // exist - so planVersionForShopifyPlan still maps Shopify's "Pro" to pro_v1
2313
+ // ($25 unlimited) while web signups get this band. Creating those plans is
2314
+ // what closes that cross-channel gap.
2315
+ pro_v2_1k: {
2316
+ tier: 1,
2317
+ name: "Pro",
2318
+ price: "$24",
2319
+ period: "/month",
2320
+ price_cents: 2400,
2321
+ stripe_price_id: {
2322
+ test: "price_1U0lA6EJOD9ik3Lhube5eBcK",
2323
+ live: "price_1U115SEJOD9ik3LhOU9OkqJk"
2324
+ },
2325
+ shopify_plan_handle: null,
2326
+ node_limit: null,
2327
+ form_limit: null,
2328
+ workspace_limit: null,
2329
+ show_branding: false,
2330
+ custom_theme: true,
2331
+ response_limit: 1e3,
2332
+ features: [
2333
+ "Unlimited forms",
2334
+ "Unlimited questions",
2335
+ "1,000 completed responses per month",
2336
+ "Custom themes & colors",
2337
+ "Remove Clipform branding"
2338
+ ]
2339
+ },
2340
+ pro_v2_5k: {
2341
+ tier: 1,
2342
+ name: "Pro",
2343
+ price: "$49",
2344
+ period: "/month",
2345
+ price_cents: 4900,
2346
+ stripe_price_id: { test: null, live: null },
2347
+ shopify_plan_handle: null,
2348
+ node_limit: null,
2349
+ form_limit: null,
2350
+ workspace_limit: null,
2351
+ show_branding: false,
2352
+ custom_theme: true,
2353
+ response_limit: 5e3,
2354
+ features: [
2355
+ "Unlimited forms",
2356
+ "Unlimited questions",
2357
+ "5,000 completed responses per month",
2358
+ "Custom themes & colors",
2359
+ "Remove Clipform branding"
2360
+ ]
2361
+ },
2362
+ pro_v2_20k: {
2363
+ tier: 1,
2364
+ name: "Pro",
2365
+ price: "$99",
2366
+ period: "/month",
2367
+ price_cents: 9900,
2368
+ stripe_price_id: { test: null, live: null },
2369
+ shopify_plan_handle: null,
2370
+ node_limit: null,
2371
+ form_limit: null,
2372
+ workspace_limit: null,
2373
+ show_branding: false,
2374
+ custom_theme: true,
2375
+ response_limit: 2e4,
2376
+ features: [
2377
+ "Unlimited forms",
2378
+ "Unlimited questions",
2379
+ "20,000 completed responses per month",
2380
+ "Custom themes & colors",
2381
+ "Remove Clipform branding"
2382
+ ]
2383
+ }
2384
+ };
2385
+ var PRO_BANDS = ["pro_v2_1k", "pro_v2_5k", "pro_v2_20k"].map(
2386
+ (version) => ({ version, ...PLAN_LIMITS[version] })
2387
+ );
2209
2388
  var CONTACT_FIELDS = [
2210
2389
  { id: "first_name", label: "First Name", type: "text", placeholder: "Enter first name", order: 1 },
2211
2390
  { id: "last_name", label: "Last Name", type: "text", placeholder: "Enter last name", order: 2 },
@@ -2494,4 +2673,4 @@ export {
2494
2673
  getSessionContextWithAuth,
2495
2674
  getSessionContext
2496
2675
  };
2497
- //# sourceMappingURL=chunk-YZJZ5NPL.js.map
2676
+ //# sourceMappingURL=chunk-5LV55T7F.js.map