@marvalt/madapter 1.1.0 → 2.1.1

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.
package/dist/index.d.ts CHANGED
@@ -18,15 +18,21 @@ import * as _tanstack_react_query from '@tanstack/react-query';
18
18
  * See the GNU General Public License for more details.
19
19
  */
20
20
  type AuthMode = 'cloudflare_proxy' | 'direct';
21
+ /**
22
+ * Mautic client configuration (for runtime/browser use)
23
+ * Convention-based: Uses /api/mautic-submit by default
24
+ */
21
25
  interface MauticConfig {
22
- authMode: AuthMode;
26
+ /** Mautic instance URL (e.g., https://your-mautic.com) */
23
27
  apiUrl?: string;
24
- cloudflareWorkerUrl?: string;
25
- clientId?: string;
26
- clientSecret?: string;
27
- cfAccessClientId?: string;
28
- cfAccessClientSecret?: string;
28
+ /**
29
+ * Proxy endpoint for server-side authentication
30
+ * @default '/api/mautic-submit'
31
+ */
32
+ proxyEndpoint?: string;
33
+ /** Request timeout in milliseconds */
29
34
  timeout?: number;
35
+ /** Number of retry attempts */
30
36
  retries?: number;
31
37
  }
32
38
  interface MauticGeneratorConfig {
@@ -175,16 +181,9 @@ interface MauticApiResponse<T = any> {
175
181
  */
176
182
 
177
183
  declare class MauticClient {
178
- private baseUrl;
179
- private proxyUrl?;
180
- private appId?;
181
- private workerSecret?;
182
- private useProxy;
183
- private isConfigured;
184
+ private proxyEndpoint;
184
185
  private config;
185
186
  constructor(config: MauticConfig);
186
- private validateConfiguration;
187
- private getAuthHeaders;
188
187
  private makeRequest;
189
188
  /**
190
189
  * Submit a form to Mautic
@@ -462,6 +461,52 @@ declare const useMauticEvent: () => {
462
461
  trackPageview: () => void;
463
462
  };
464
463
 
464
+ /**
465
+ * @license GPL-3.0-or-later
466
+ *
467
+ * This file is part of the MarVAlt Open SDK.
468
+ * Copyright (c) 2025 Vibune Pty Ltd.
469
+ *
470
+ * This program is free software: you can redistribute it and/or modify
471
+ * it under the terms of the GNU General Public License as published by
472
+ * the Free Software Foundation, either version 3 of the License, or
473
+ * (at your option) any later version.
474
+ *
475
+ * This program is distributed in the hope that it will be useful,
476
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
477
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
478
+ * See the GNU General Public License for more details.
479
+ */
480
+
481
+ declare global {
482
+ interface Window {
483
+ turnstile?: {
484
+ render: (element: HTMLElement, options: TurnstileOptions) => string;
485
+ remove: (widgetId: string) => void;
486
+ reset: (widgetId: string) => void;
487
+ };
488
+ }
489
+ }
490
+ interface TurnstileOptions {
491
+ sitekey: string;
492
+ callback?: (token: string) => void;
493
+ 'error-callback'?: () => void;
494
+ 'expired-callback'?: () => void;
495
+ theme?: 'light' | 'dark' | 'auto';
496
+ size?: 'normal' | 'compact';
497
+ tabindex?: number;
498
+ }
499
+ interface TurnstileWidgetProps {
500
+ siteKey: string;
501
+ onSuccess: (token: string) => void;
502
+ onError?: () => void;
503
+ onExpire?: () => void;
504
+ theme?: 'light' | 'dark' | 'auto';
505
+ size?: 'normal' | 'compact';
506
+ tabIndex?: number;
507
+ }
508
+ declare const TurnstileWidget: React.FC<TurnstileWidgetProps>;
509
+
465
510
  /**
466
511
  * Set the default Mautic client for hooks
467
512
  */
@@ -684,6 +729,7 @@ declare const getDataMetadata: () => {
684
729
 
685
730
  /**
686
731
  * Create Mautic configuration from environment variables
732
+ * Convention-based: Uses /api/mautic-submit by default
687
733
  */
688
734
  declare const createMauticConfig: (overrides?: Partial<MauticConfig>) => MauticConfig;
689
735
  /**
@@ -709,9 +755,8 @@ declare const isMauticEnabled: (config: MauticConfig) => boolean;
709
755
  * Get Mautic configuration summary (for debugging)
710
756
  */
711
757
  declare const getMauticConfigSummary: (config: MauticConfig) => {
712
- authMode: AuthMode;
713
758
  hasApiUrl: boolean;
714
- hasCloudflareWorkerUrl: boolean;
759
+ proxyEndpoint: string;
715
760
  timeout: number | undefined;
716
761
  retries: number | undefined;
717
762
  isEnabled: boolean;
@@ -771,5 +816,5 @@ declare const sanitizeFormData: (formData: Record<string, any>) => Record<string
771
816
  */
772
817
  declare const formatFormDataForSubmission: (formData: Record<string, any>) => Record<string, any>;
773
818
 
774
- export { MauticClient, MauticForm, MauticGenerator, MauticProvider, MauticService, MauticTracking, createMauticConfig, formatFormDataForSubmission, generateMauticData, getAllFieldTypes, getDataMetadata, getDefaultMauticConfig, getFormByAlias, getFormById, getFormFieldByAlias, getFormsByFieldType, getFormsByType, getFormsCountByStatus, getMauticConfigSummary, getMauticData, getPublishedForms, isDataLoaded, isFormDataValid, isMauticEnabled, isRequiredFieldValid, isValidEmail, isValidPhone, isValidUrl, loadMauticData, mauticService, mergeMauticConfig, sanitizeFormData, searchForms, setMauticClient, useMauticAddTags, useMauticAddToSegment, useMauticClient, useMauticConfig, useMauticContactByEmail, useMauticContactTags, useMauticContext, useMauticCreateContact, useMauticEvent, useMauticEventTracking, useMauticForm, useMauticFormSubmission, useMauticForms, useMauticRemoveFromSegment, useMauticRemoveTags, useMauticSegments, useMauticTags, useMauticTracking, useMauticUpdateContact, validateField, validateFormData, validateMauticConfig };
819
+ export { MauticClient, MauticForm, MauticGenerator, MauticProvider, MauticService, MauticTracking, TurnstileWidget, createMauticConfig, formatFormDataForSubmission, generateMauticData, getAllFieldTypes, getDataMetadata, getDefaultMauticConfig, getFormByAlias, getFormById, getFormFieldByAlias, getFormsByFieldType, getFormsByType, getFormsCountByStatus, getMauticConfigSummary, getMauticData, getPublishedForms, isDataLoaded, isFormDataValid, isMauticEnabled, isRequiredFieldValid, isValidEmail, isValidPhone, isValidUrl, loadMauticData, mauticService, mergeMauticConfig, sanitizeFormData, searchForms, setMauticClient, useMauticAddTags, useMauticAddToSegment, useMauticClient, useMauticConfig, useMauticContactByEmail, useMauticContactTags, useMauticContext, useMauticCreateContact, useMauticEvent, useMauticEventTracking, useMauticForm, useMauticFormSubmission, useMauticForms, useMauticRemoveFromSegment, useMauticRemoveTags, useMauticSegments, useMauticTags, useMauticTracking, useMauticUpdateContact, validateField, validateFormData, validateMauticConfig };
775
820
  export type { AuthMode, MauticApiResponse, MauticConfig, MauticContact, MauticEvent, MauticFormAction, MauticFormConfig, MauticFormData, MauticFormField, MauticFormSubmission, MauticForm$1 as MauticFormType, MauticGeneratorConfig, MauticStaticData, MauticTrackingConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGpF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGtG,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,UAAU,IAAI,cAAc,EAC5B,gBAAgB,EAChB,WAAW,EACX,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGpF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAGrE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,UAAU,IAAI,cAAc,EAC5B,gBAAgB,EAChB,WAAW,EACX,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import React, { useState, useEffect, createContext, useMemo, useContext } from 'react';
3
+ import React, { useState, useEffect, useRef, createContext, useMemo, useContext } from 'react';
4
4
  import { useQueryClient, useMutation, useQuery } from '@tanstack/react-query';
5
5
 
6
6
  /**
@@ -21,58 +21,17 @@ import { useQueryClient, useMutation, useQuery } from '@tanstack/react-query';
21
21
  */
22
22
  class MauticClient {
23
23
  constructor(config) {
24
- this.baseUrl = '';
25
24
  this.config = config;
26
- if (config.authMode === 'cloudflare_proxy' && config.cloudflareWorkerUrl) {
27
- // Cloudflare Worker proxy (recommended - uses Secrets Store)
28
- this.proxyUrl = config.cloudflareWorkerUrl;
29
- this.useProxy = true;
30
- this.isConfigured = true;
31
- }
32
- else if (config.authMode === 'direct' && config.apiUrl) {
33
- // Direct Mautic API access (legacy - for local development only)
34
- this.baseUrl = config.apiUrl || '';
35
- this.useProxy = false;
36
- this.isConfigured = true;
37
- }
38
- else {
39
- // Fallback or error state
40
- this.useProxy = false;
41
- this.isConfigured = false;
42
- }
43
- }
44
- validateConfiguration() {
45
- if (!this.isConfigured) {
46
- throw new Error('Mautic service not properly configured. Check your configuration.');
47
- }
25
+ // Convention-based: Always use /api/mautic-submit unless explicitly overridden
26
+ this.proxyEndpoint = config.proxyEndpoint || '/api/mautic-submit';
48
27
  }
49
- getAuthHeaders() { return {}; }
50
28
  async makeRequest(endpoint, options = {}) {
51
- this.validateConfiguration();
52
- let url;
53
- if (this.useProxy) {
54
- // Use Cloudflare Worker proxy
55
- const proxyEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
56
- url = `${this.proxyUrl}?endpoint=${encodeURIComponent(proxyEndpoint)}`;
57
- }
58
- else {
59
- // Use direct Mautic API
60
- // Determine if this is a form submission endpoint (should not use /api prefix)
61
- const isFormSubmission = endpoint.startsWith('/form/submit') ||
62
- (endpoint.startsWith('/forms/') && endpoint.includes('/submit'));
63
- if (isFormSubmission) {
64
- // Form submissions go directly to the form endpoint, not the API
65
- url = `${this.baseUrl}${endpoint}`;
66
- }
67
- else {
68
- // API calls use the /api prefix
69
- url = `${this.baseUrl}/api${endpoint}`;
70
- }
71
- }
29
+ // Always use proxy endpoint (convention-based)
30
+ const proxyEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
31
+ const url = `${this.proxyEndpoint}?endpoint=${encodeURIComponent(proxyEndpoint)}`;
72
32
  const isFormSubmission = endpoint.startsWith('/form/submit') ||
73
33
  (endpoint.startsWith('/forms/') && endpoint.includes('/submit'));
74
34
  const headers = {
75
- // no app headers in proxy mode
76
35
  ...options.headers,
77
36
  };
78
37
  // Default JSON only for non-form submissions when a body exists and no explicit content-type provided
@@ -276,6 +235,7 @@ class MauticClient {
276
235
  */
277
236
  /**
278
237
  * Create Mautic configuration from environment variables
238
+ * Convention-based: Uses /api/mautic-submit by default
279
239
  */
280
240
  const createMauticConfig = (overrides = {}) => {
281
241
  // Use import.meta.env for Vite compatibility in browser
@@ -302,26 +262,12 @@ const createMauticConfig = (overrides = {}) => {
302
262
  return undefined;
303
263
  };
304
264
  const merged = {
305
- authMode: getEnvVar('VITE_AUTH_MODE') || getEnvVar('VITE_MAUTIC_AUTH_MODE') || 'cloudflare_proxy',
306
265
  apiUrl: getEnvVar('VITE_MAUTIC_URL'),
307
- cloudflareWorkerUrl: getEnvVar('VITE_MAUTIC_PROXY_URL'),
266
+ proxyEndpoint: getEnvVar('VITE_MAUTIC_PROXY_ENDPOINT') || '/api/mautic-submit',
308
267
  timeout: parseInt(getEnvVar('VITE_MAUTIC_TIMEOUT') || '30000'),
309
268
  retries: parseInt(getEnvVar('VITE_MAUTIC_RETRIES') || '3'),
310
269
  ...overrides,
311
270
  };
312
- // Enforce required fields depending on authMode
313
- const errors = [];
314
- if (merged.authMode === 'cloudflare_proxy') {
315
- if (!merged.cloudflareWorkerUrl)
316
- errors.push('cloudflareWorkerUrl is required for cloudflare_proxy mode');
317
- }
318
- if (merged.authMode === 'direct') {
319
- if (!merged.apiUrl)
320
- errors.push('apiUrl is required for direct mode');
321
- }
322
- if (errors.length) {
323
- throw new Error(`Invalid Mautic configuration: ${errors.join('; ')}`);
324
- }
325
271
  return merged;
326
272
  };
327
273
  /**
@@ -329,19 +275,6 @@ const createMauticConfig = (overrides = {}) => {
329
275
  */
330
276
  const validateMauticConfig = (config) => {
331
277
  const errors = [];
332
- if (!config.authMode) {
333
- errors.push('authMode is required');
334
- }
335
- if (config.authMode === 'cloudflare_proxy') {
336
- if (!config.cloudflareWorkerUrl) {
337
- errors.push('cloudflareWorkerUrl is required for cloudflare_proxy mode');
338
- }
339
- }
340
- else if (config.authMode === 'direct') {
341
- if (!config.apiUrl) {
342
- errors.push('apiUrl is required for direct mode');
343
- }
344
- }
345
278
  if (config.timeout && config.timeout < 1000) {
346
279
  errors.push('timeout must be at least 1000ms');
347
280
  }
@@ -358,7 +291,7 @@ const validateMauticConfig = (config) => {
358
291
  */
359
292
  const getDefaultMauticConfig = () => {
360
293
  return {
361
- authMode: 'cloudflare_proxy',
294
+ proxyEndpoint: '/api/mautic-submit',
362
295
  timeout: 30000,
363
296
  retries: 3,
364
297
  };
@@ -376,22 +309,15 @@ const mergeMauticConfig = (base, overrides) => {
376
309
  * Check if Mautic is enabled based on configuration
377
310
  */
378
311
  const isMauticEnabled = (config) => {
379
- if (config.authMode === 'cloudflare_proxy') {
380
- return !!config.cloudflareWorkerUrl;
381
- }
382
- else if (config.authMode === 'direct') {
383
- return !!config.apiUrl;
384
- }
385
- return false;
312
+ return !!config.apiUrl;
386
313
  };
387
314
  /**
388
315
  * Get Mautic configuration summary (for debugging)
389
316
  */
390
317
  const getMauticConfigSummary = (config) => {
391
318
  return {
392
- authMode: config.authMode,
393
319
  hasApiUrl: !!config.apiUrl,
394
- hasCloudflareWorkerUrl: !!config.cloudflareWorkerUrl,
320
+ proxyEndpoint: config.proxyEndpoint || '/api/mautic-submit',
395
321
  timeout: config.timeout,
396
322
  retries: config.retries,
397
323
  isEnabled: isMauticEnabled(config),
@@ -533,14 +459,11 @@ class MauticGenerator {
533
459
  constructor(config) {
534
460
  this.cachedToken = null;
535
461
  this.config = config;
462
+ // Generator uses direct OAuth2 calls, not the client
463
+ // Client is only used for proxy mode (cloudflare_proxy)
536
464
  this.client = new MauticClient({
537
- authMode: config.authMode,
538
465
  apiUrl: config.apiUrl,
539
- cloudflareWorkerUrl: config.cloudflareWorkerUrl,
540
- clientId: config.clientId,
541
- clientSecret: config.clientSecret,
542
- cfAccessClientId: config.cfAccessClientId,
543
- cfAccessClientSecret: config.cfAccessClientSecret,
466
+ proxyEndpoint: config.cloudflareWorkerUrl,
544
467
  timeout: config.timeout,
545
468
  retries: config.retries,
546
469
  });
@@ -2732,6 +2655,65 @@ const useMauticEvent = () => {
2732
2655
  };
2733
2656
  };
2734
2657
 
2658
+ const TurnstileWidget = ({ siteKey, onSuccess, onError, onExpire, theme = 'auto', size = 'normal', tabIndex, }) => {
2659
+ const widgetRef = useRef(null);
2660
+ const widgetId = useRef(null);
2661
+ const scriptLoaded = useRef(false);
2662
+ useEffect(() => {
2663
+ if (!widgetRef.current || !siteKey)
2664
+ return;
2665
+ const loadTurnstile = () => {
2666
+ if (window.turnstile && widgetRef.current && !widgetId.current) {
2667
+ try {
2668
+ widgetId.current = window.turnstile.render(widgetRef.current, {
2669
+ sitekey: siteKey,
2670
+ callback: onSuccess,
2671
+ 'error-callback': onError,
2672
+ 'expired-callback': onExpire,
2673
+ theme,
2674
+ size,
2675
+ tabindex: tabIndex,
2676
+ });
2677
+ }
2678
+ catch (error) {
2679
+ console.error('Failed to render Turnstile widget:', error);
2680
+ onError?.();
2681
+ }
2682
+ }
2683
+ };
2684
+ // Check if Turnstile is already loaded
2685
+ if (window.turnstile) {
2686
+ loadTurnstile();
2687
+ }
2688
+ else if (!scriptLoaded.current) {
2689
+ // Load Turnstile script
2690
+ scriptLoaded.current = true;
2691
+ const script = document.createElement('script');
2692
+ script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js';
2693
+ script.async = true;
2694
+ script.defer = true;
2695
+ script.onload = loadTurnstile;
2696
+ script.onerror = () => {
2697
+ console.error('Failed to load Turnstile script');
2698
+ onError?.();
2699
+ };
2700
+ document.head.appendChild(script);
2701
+ }
2702
+ return () => {
2703
+ if (widgetId.current && window.turnstile) {
2704
+ try {
2705
+ window.turnstile.remove(widgetId.current);
2706
+ }
2707
+ catch (error) {
2708
+ console.error('Failed to remove Turnstile widget:', error);
2709
+ }
2710
+ widgetId.current = null;
2711
+ }
2712
+ };
2713
+ }, [siteKey, onSuccess, onError, onExpire, theme, size, tabIndex]);
2714
+ return jsxRuntimeExports.jsx("div", { ref: widgetRef, className: "cf-turnstile" });
2715
+ };
2716
+
2735
2717
  const MauticContext = createContext(null);
2736
2718
  const MauticProvider = ({ config, children }) => {
2737
2719
  const client = useMemo(() => {
@@ -3144,5 +3126,5 @@ const formatFormDataForSubmission = (formData) => {
3144
3126
  return formatted;
3145
3127
  };
3146
3128
 
3147
- export { MauticClient, MauticForm, MauticGenerator, MauticProvider, MauticService, MauticTracking, createMauticConfig, formatFormDataForSubmission, generateMauticData, getAllFieldTypes, getDataMetadata, getDefaultMauticConfig, getFormByAlias, getFormById, getFormFieldByAlias, getFormsByFieldType, getFormsByType, getFormsCountByStatus, getMauticConfigSummary, getMauticData, getPublishedForms, isDataLoaded, isFormDataValid, isMauticEnabled, isRequiredFieldValid, isValidEmail, isValidPhone, isValidUrl, loadMauticData, mauticService, mergeMauticConfig, sanitizeFormData, searchForms, setMauticClient, useMauticAddTags, useMauticAddToSegment, useMauticClient, useMauticConfig, useMauticContactByEmail, useMauticContactTags, useMauticContext, useMauticCreateContact, useMauticEvent, useMauticEventTracking, useMauticForm, useMauticFormSubmission, useMauticForms, useMauticRemoveFromSegment, useMauticRemoveTags, useMauticSegments, useMauticTags, useMauticTracking, useMauticUpdateContact, validateField, validateFormData, validateMauticConfig };
3129
+ export { MauticClient, MauticForm, MauticGenerator, MauticProvider, MauticService, MauticTracking, TurnstileWidget, createMauticConfig, formatFormDataForSubmission, generateMauticData, getAllFieldTypes, getDataMetadata, getDefaultMauticConfig, getFormByAlias, getFormById, getFormFieldByAlias, getFormsByFieldType, getFormsByType, getFormsCountByStatus, getMauticConfigSummary, getMauticData, getPublishedForms, isDataLoaded, isFormDataValid, isMauticEnabled, isRequiredFieldValid, isValidEmail, isValidPhone, isValidUrl, loadMauticData, mauticService, mergeMauticConfig, sanitizeFormData, searchForms, setMauticClient, useMauticAddTags, useMauticAddToSegment, useMauticClient, useMauticConfig, useMauticContactByEmail, useMauticContactTags, useMauticContext, useMauticCreateContact, useMauticEvent, useMauticEventTracking, useMauticForm, useMauticFormSubmission, useMauticForms, useMauticRemoveFromSegment, useMauticRemoveTags, useMauticSegments, useMauticTags, useMauticTracking, useMauticUpdateContact, validateField, validateFormData, validateMauticConfig };
3148
3130
  //# sourceMappingURL=index.esm.js.map