@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/client/mautic-client.d.ts +1 -8
- package/dist/client/mautic-client.d.ts.map +1 -1
- package/dist/generators/mautic-generator.d.ts.map +1 -1
- package/dist/index.cjs +73 -90
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +62 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +74 -92
- package/dist/index.esm.js.map +1 -1
- package/dist/react/components/TurnstileWidget.d.ts +47 -0
- package/dist/react/components/TurnstileWidget.d.ts.map +1 -0
- package/dist/server/index.d.ts +19 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/mautic-proxy.d.ts +28 -0
- package/dist/server/mautic-proxy.d.ts.map +1 -0
- package/dist/server/turnstile.d.ts +24 -0
- package/dist/server/turnstile.d.ts.map +1 -0
- package/dist/server.cjs +293 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.esm.js +290 -0
- package/dist/server.esm.js.map +1 -0
- package/dist/types/config.d.ts +12 -6
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/config.d.ts +3 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/package.json +9 -2
- package/scripts/postinstall.cjs +127 -0
- package/scripts/postinstall.js +114 -0
- package/templates/MAUTIC_SECURITY.md +308 -0
- package/templates/mautic-submit.ts +19 -0
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
|
-
|
|
26
|
+
/** Mautic instance URL (e.g., https://your-mautic.com) */
|
|
23
27
|
apiUrl?: string;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
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
|
-
|
|
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 };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|