@marvalt/madapter 1.0.14 → 2.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"MauticTracking.d.ts","sourceRoot":"","sources":["../../../src/react/components/MauticTracking.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU,mBAAoB,SAAQ,oBAAoB;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,EAAE,EAAE,GAAG,CAAC;QACR,oBAAoB,EAAE,MAAM,CAAC;KAC9B;CACF;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+HxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,eAmB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;4BAGwB,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;CAqBzF,CAAC"}
1
+ {"version":3,"file":"MauticTracking.d.ts","sourceRoot":"","sources":["../../../src/react/components/MauticTracking.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU,mBAAoB,SAAQ,oBAAoB;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,EAAE,EAAE,GAAG,CAAC;QACR,oBAAoB,EAAE,MAAM,CAAC;KAC9B;CACF;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA6GxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,eAmB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;4BAGwB,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;CAqBzF,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license GPL-3.0-or-later
3
+ *
4
+ * This file is part of the MarVAlt Open SDK.
5
+ * Copyright (c) 2025 Vibune Pty Ltd.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ * See the GNU General Public License for more details.
16
+ */
17
+ export * from './mautic-proxy';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @license GPL-3.0-or-later
3
+ *
4
+ * This file is part of the MarVAlt Open SDK.
5
+ * Copyright (c) 2025 Vibune Pty Ltd.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ * See the GNU General Public License for more details.
16
+ */
17
+ /**
18
+ * Cloudflare Pages Function handler for Mautic API proxy
19
+ *
20
+ * Environment variables required:
21
+ * - VITE_MAUTIC_URL or MAUTIC_URL: Mautic instance URL
22
+ * - VITE_MAUTIC_API_PUBLIC_KEY or MAUTIC_API_PUBLIC_KEY: OAuth2 client ID
23
+ * - VITE_MAUTIC_API_SECRET_KEY or MAUTIC_API_SECRET_KEY: OAuth2 client secret
24
+ * - VITE_CF_ACCESS_CLIENT_ID or CF_ACCESS_CLIENT_ID: (Optional) Cloudflare Access client ID
25
+ * - VITE_CF_ACCESS_CLIENT_SECRET or CF_ACCESS_CLIENT_SECRET: (Optional) Cloudflare Access client secret
26
+ */
27
+ export declare function handleMauticProxy(context: any): Promise<Response>;
28
+ //# sourceMappingURL=mautic-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mautic-proxy.d.ts","sourceRoot":"","sources":["../../src/server/mautic-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA2EH;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,GAAG,qBAuGnD"}
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @license GPL-3.0-or-later
5
+ *
6
+ * This file is part of the MarVAlt Open SDK.
7
+ * Copyright (c) 2025 Vibune Pty Ltd.
8
+ *
9
+ * This program is free software: you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation, either version 3 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
+ * See the GNU General Public License for more details.
18
+ */
19
+ // In-memory token cache (per worker instance)
20
+ let cachedToken = null;
21
+ async function getOAuth2Token(mauticUrl, clientId, clientSecret, cfAccessClientId, cfAccessClientSecret) {
22
+ // Check cache (with 5-minute buffer before expiry)
23
+ if (cachedToken && cachedToken.expires_at > Date.now() + 300000) {
24
+ console.log('🔑 Using cached OAuth2 token');
25
+ return cachedToken.access_token;
26
+ }
27
+ console.log('🔑 Fetching new OAuth2 token...');
28
+ const tokenUrl = `${mauticUrl}/oauth/v2/token`;
29
+ const body = new URLSearchParams({
30
+ grant_type: 'client_credentials',
31
+ client_id: clientId,
32
+ client_secret: clientSecret,
33
+ });
34
+ const headers = {
35
+ 'Content-Type': 'application/x-www-form-urlencoded',
36
+ };
37
+ // Add CF Access headers if available
38
+ if (cfAccessClientId && cfAccessClientSecret) {
39
+ headers['CF-Access-Client-Id'] = cfAccessClientId;
40
+ headers['CF-Access-Client-Secret'] = cfAccessClientSecret;
41
+ console.log('🔐 Added CF Access headers to OAuth2 request');
42
+ }
43
+ const response = await fetch(tokenUrl, {
44
+ method: 'POST',
45
+ headers,
46
+ body: body.toString(),
47
+ });
48
+ if (!response.ok) {
49
+ const errorText = await response.text();
50
+ throw new Error(`OAuth2 token request failed: ${response.status} ${errorText}`);
51
+ }
52
+ const data = await response.json();
53
+ // Cache token
54
+ cachedToken = {
55
+ access_token: data.access_token,
56
+ expires_at: Date.now() + (data.expires_in * 1000),
57
+ };
58
+ console.log('✅ OAuth2 token cached');
59
+ return cachedToken.access_token;
60
+ }
61
+ /**
62
+ * Cloudflare Pages Function handler for Mautic API proxy
63
+ *
64
+ * Environment variables required:
65
+ * - VITE_MAUTIC_URL or MAUTIC_URL: Mautic instance URL
66
+ * - VITE_MAUTIC_API_PUBLIC_KEY or MAUTIC_API_PUBLIC_KEY: OAuth2 client ID
67
+ * - VITE_MAUTIC_API_SECRET_KEY or MAUTIC_API_SECRET_KEY: OAuth2 client secret
68
+ * - VITE_CF_ACCESS_CLIENT_ID or CF_ACCESS_CLIENT_ID: (Optional) Cloudflare Access client ID
69
+ * - VITE_CF_ACCESS_CLIENT_SECRET or CF_ACCESS_CLIENT_SECRET: (Optional) Cloudflare Access client secret
70
+ */
71
+ async function handleMauticProxy(context) {
72
+ const { request, env } = context;
73
+ try {
74
+ // Parse the endpoint from query parameter (proxy interface)
75
+ const url = new URL(request.url);
76
+ const endpoint = url.searchParams.get('endpoint');
77
+ if (!endpoint) {
78
+ return new Response('Missing endpoint parameter', { status: 400 });
79
+ }
80
+ // Get server-side credentials (prefer non-VITE_ prefixed env vars)
81
+ const mauticUrl = env.MAUTIC_URL || env.VITE_MAUTIC_URL;
82
+ const clientId = env.MAUTIC_API_PUBLIC_KEY || env.VITE_MAUTIC_API_PUBLIC_KEY;
83
+ const clientSecret = env.MAUTIC_API_SECRET_KEY || env.VITE_MAUTIC_API_SECRET_KEY;
84
+ const cfAccessClientId = env.CF_ACCESS_CLIENT_ID || env.VITE_CF_ACCESS_CLIENT_ID;
85
+ const cfAccessClientSecret = env.CF_ACCESS_CLIENT_SECRET || env.VITE_CF_ACCESS_CLIENT_SECRET;
86
+ if (!mauticUrl || !clientId || !clientSecret) {
87
+ console.error('❌ Mautic credentials not configured', {
88
+ mauticUrl: !!mauticUrl,
89
+ clientId: !!clientId,
90
+ clientSecret: !!clientSecret
91
+ });
92
+ return new Response('Mautic credentials not configured', { status: 500 });
93
+ }
94
+ // Get OAuth2 token
95
+ const accessToken = await getOAuth2Token(mauticUrl, clientId, clientSecret, cfAccessClientId, cfAccessClientSecret);
96
+ // Determine if this is a form submission (goes to /form/submit)
97
+ // or an API call (goes to /api/endpoint)
98
+ const isFormSubmission = endpoint.startsWith('/form/submit');
99
+ const targetUrl = isFormSubmission
100
+ ? `${mauticUrl}${endpoint}` // Form submissions don't use /api prefix
101
+ : `${mauticUrl}/api${endpoint}`; // API calls use /api prefix
102
+ // Prepare headers
103
+ const headers = {
104
+ 'Authorization': `Bearer ${accessToken}`,
105
+ };
106
+ // Copy relevant headers from original request
107
+ const contentType = request.headers.get('Content-Type');
108
+ if (contentType) {
109
+ headers['Content-Type'] = contentType;
110
+ }
111
+ // Add CF Access headers if available
112
+ if (cfAccessClientId && cfAccessClientSecret) {
113
+ headers['CF-Access-Client-Id'] = cfAccessClientId;
114
+ headers['CF-Access-Client-Secret'] = cfAccessClientSecret;
115
+ }
116
+ // Prepare request init
117
+ const init = {
118
+ method: request.method,
119
+ headers,
120
+ };
121
+ // Include body for POST/PATCH/PUT requests
122
+ if (request.method !== 'GET' && request.method !== 'HEAD') {
123
+ init.body = await request.text();
124
+ }
125
+ console.log(`📤 Proxying ${request.method} request to Mautic:`, {
126
+ endpoint,
127
+ targetUrl,
128
+ isFormSubmission
129
+ });
130
+ // Forward request to Mautic
131
+ const response = await fetch(targetUrl, init);
132
+ console.log(`📥 Mautic response: ${response.status} ${response.statusText}`);
133
+ // Return response to client
134
+ const responseBody = await response.text();
135
+ return new Response(responseBody, {
136
+ status: response.status,
137
+ statusText: response.statusText,
138
+ headers: {
139
+ 'Content-Type': response.headers.get('Content-Type') || 'application/json',
140
+ },
141
+ });
142
+ }
143
+ catch (error) {
144
+ console.error('❌ Mautic proxy error:', error);
145
+ return new Response(JSON.stringify({
146
+ success: false,
147
+ error: error?.message || 'Unknown error',
148
+ }), {
149
+ status: 500,
150
+ headers: { 'Content-Type': 'application/json' },
151
+ });
152
+ }
153
+ }
154
+
155
+ exports.handleMauticProxy = handleMauticProxy;
156
+ //# sourceMappingURL=server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.cjs","sources":["../src/server/mautic-proxy.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @license GPL-3.0-or-later
3
+ *
4
+ * This file is part of the MarVAlt Open SDK.
5
+ * Copyright (c) 2025 Vibune Pty Ltd.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ * See the GNU General Public License for more details.
16
+ */
17
+ // In-memory token cache (per worker instance)
18
+ let cachedToken = null;
19
+ async function getOAuth2Token(mauticUrl, clientId, clientSecret, cfAccessClientId, cfAccessClientSecret) {
20
+ // Check cache (with 5-minute buffer before expiry)
21
+ if (cachedToken && cachedToken.expires_at > Date.now() + 300000) {
22
+ console.log('🔑 Using cached OAuth2 token');
23
+ return cachedToken.access_token;
24
+ }
25
+ console.log('🔑 Fetching new OAuth2 token...');
26
+ const tokenUrl = `${mauticUrl}/oauth/v2/token`;
27
+ const body = new URLSearchParams({
28
+ grant_type: 'client_credentials',
29
+ client_id: clientId,
30
+ client_secret: clientSecret,
31
+ });
32
+ const headers = {
33
+ 'Content-Type': 'application/x-www-form-urlencoded',
34
+ };
35
+ // Add CF Access headers if available
36
+ if (cfAccessClientId && cfAccessClientSecret) {
37
+ headers['CF-Access-Client-Id'] = cfAccessClientId;
38
+ headers['CF-Access-Client-Secret'] = cfAccessClientSecret;
39
+ console.log('🔐 Added CF Access headers to OAuth2 request');
40
+ }
41
+ const response = await fetch(tokenUrl, {
42
+ method: 'POST',
43
+ headers,
44
+ body: body.toString(),
45
+ });
46
+ if (!response.ok) {
47
+ const errorText = await response.text();
48
+ throw new Error(`OAuth2 token request failed: ${response.status} ${errorText}`);
49
+ }
50
+ const data = await response.json();
51
+ // Cache token
52
+ cachedToken = {
53
+ access_token: data.access_token,
54
+ expires_at: Date.now() + (data.expires_in * 1000),
55
+ };
56
+ console.log('✅ OAuth2 token cached');
57
+ return cachedToken.access_token;
58
+ }
59
+ /**
60
+ * Cloudflare Pages Function handler for Mautic API proxy
61
+ *
62
+ * Environment variables required:
63
+ * - VITE_MAUTIC_URL or MAUTIC_URL: Mautic instance URL
64
+ * - VITE_MAUTIC_API_PUBLIC_KEY or MAUTIC_API_PUBLIC_KEY: OAuth2 client ID
65
+ * - VITE_MAUTIC_API_SECRET_KEY or MAUTIC_API_SECRET_KEY: OAuth2 client secret
66
+ * - VITE_CF_ACCESS_CLIENT_ID or CF_ACCESS_CLIENT_ID: (Optional) Cloudflare Access client ID
67
+ * - VITE_CF_ACCESS_CLIENT_SECRET or CF_ACCESS_CLIENT_SECRET: (Optional) Cloudflare Access client secret
68
+ */
69
+ async function handleMauticProxy(context) {
70
+ const { request, env } = context;
71
+ try {
72
+ // Parse the endpoint from query parameter (proxy interface)
73
+ const url = new URL(request.url);
74
+ const endpoint = url.searchParams.get('endpoint');
75
+ if (!endpoint) {
76
+ return new Response('Missing endpoint parameter', { status: 400 });
77
+ }
78
+ // Get server-side credentials (prefer non-VITE_ prefixed env vars)
79
+ const mauticUrl = env.MAUTIC_URL || env.VITE_MAUTIC_URL;
80
+ const clientId = env.MAUTIC_API_PUBLIC_KEY || env.VITE_MAUTIC_API_PUBLIC_KEY;
81
+ const clientSecret = env.MAUTIC_API_SECRET_KEY || env.VITE_MAUTIC_API_SECRET_KEY;
82
+ const cfAccessClientId = env.CF_ACCESS_CLIENT_ID || env.VITE_CF_ACCESS_CLIENT_ID;
83
+ const cfAccessClientSecret = env.CF_ACCESS_CLIENT_SECRET || env.VITE_CF_ACCESS_CLIENT_SECRET;
84
+ if (!mauticUrl || !clientId || !clientSecret) {
85
+ console.error('❌ Mautic credentials not configured', {
86
+ mauticUrl: !!mauticUrl,
87
+ clientId: !!clientId,
88
+ clientSecret: !!clientSecret
89
+ });
90
+ return new Response('Mautic credentials not configured', { status: 500 });
91
+ }
92
+ // Get OAuth2 token
93
+ const accessToken = await getOAuth2Token(mauticUrl, clientId, clientSecret, cfAccessClientId, cfAccessClientSecret);
94
+ // Determine if this is a form submission (goes to /form/submit)
95
+ // or an API call (goes to /api/endpoint)
96
+ const isFormSubmission = endpoint.startsWith('/form/submit');
97
+ const targetUrl = isFormSubmission
98
+ ? `${mauticUrl}${endpoint}` // Form submissions don't use /api prefix
99
+ : `${mauticUrl}/api${endpoint}`; // API calls use /api prefix
100
+ // Prepare headers
101
+ const headers = {
102
+ 'Authorization': `Bearer ${accessToken}`,
103
+ };
104
+ // Copy relevant headers from original request
105
+ const contentType = request.headers.get('Content-Type');
106
+ if (contentType) {
107
+ headers['Content-Type'] = contentType;
108
+ }
109
+ // Add CF Access headers if available
110
+ if (cfAccessClientId && cfAccessClientSecret) {
111
+ headers['CF-Access-Client-Id'] = cfAccessClientId;
112
+ headers['CF-Access-Client-Secret'] = cfAccessClientSecret;
113
+ }
114
+ // Prepare request init
115
+ const init = {
116
+ method: request.method,
117
+ headers,
118
+ };
119
+ // Include body for POST/PATCH/PUT requests
120
+ if (request.method !== 'GET' && request.method !== 'HEAD') {
121
+ init.body = await request.text();
122
+ }
123
+ console.log(`📤 Proxying ${request.method} request to Mautic:`, {
124
+ endpoint,
125
+ targetUrl,
126
+ isFormSubmission
127
+ });
128
+ // Forward request to Mautic
129
+ const response = await fetch(targetUrl, init);
130
+ console.log(`📥 Mautic response: ${response.status} ${response.statusText}`);
131
+ // Return response to client
132
+ const responseBody = await response.text();
133
+ return new Response(responseBody, {
134
+ status: response.status,
135
+ statusText: response.statusText,
136
+ headers: {
137
+ 'Content-Type': response.headers.get('Content-Type') || 'application/json',
138
+ },
139
+ });
140
+ }
141
+ catch (error) {
142
+ console.error('❌ Mautic proxy error:', error);
143
+ return new Response(JSON.stringify({
144
+ success: false,
145
+ error: error?.message || 'Unknown error',
146
+ }), {
147
+ status: 500,
148
+ headers: { 'Content-Type': 'application/json' },
149
+ });
150
+ }
151
+ }
152
+
153
+ export { handleMauticProxy };
154
+ //# sourceMappingURL=server.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.esm.js","sources":["../src/server/mautic-proxy.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ declare class MauticService {
34
34
  removeTagFromContact(contactId: number, tags: string[]): Promise<any>;
35
35
  trackEvent(eventName: string, eventData?: Record<string, any>): Promise<any>;
36
36
  }
37
- export declare const mauticService: MauticService;
37
+ export declare let mauticService: MauticService | null;
38
38
  export { MauticService };
39
39
  export default MauticService;
40
40
  //# sourceMappingURL=mautic-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mautic-service.d.ts","sourceRoot":"","sources":["../../src/service/mautic-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,UAAU,IAAI,cAAc,EAC5B,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAe;;IAS7B,mBAAmB,IAAI,OAAO;IAUxB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxE,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIrC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAKhD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKxD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAMzD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM3D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAc/D,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;IAInD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/E,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAW/D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIhE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAKrE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CAGnF;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC;AAMjD,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"mautic-service.d.ts","sourceRoot":"","sources":["../../src/service/mautic-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,UAAU,IAAI,cAAc,EAC5B,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAe;;IAS7B,mBAAmB,IAAI,OAAO;IAUxB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxE,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIrC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAKhD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKxD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAMzD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM3D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAc/D,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;IAInD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/E,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAW/D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIhE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAKrE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CAGnF;AAGD,eAAO,IAAI,aAAa,EAAE,aAAa,GAAG,IAAW,CAAC;AAYtD,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,eAAe,aAAa,CAAC"}
@@ -15,21 +15,31 @@
15
15
  * See the GNU General Public License for more details.
16
16
  */
17
17
  export type AuthMode = 'cloudflare_proxy' | 'direct';
18
+ /**
19
+ * Mautic client configuration (for runtime/browser use)
20
+ * Convention-based: Uses /api/mautic-submit by default
21
+ */
18
22
  export interface MauticConfig {
19
- authMode: AuthMode;
23
+ /** Mautic instance URL (e.g., https://your-mautic.com) */
20
24
  apiUrl?: string;
21
- cloudflareWorkerUrl?: string;
22
- appId?: string;
23
- workerSecret?: string;
25
+ /**
26
+ * Proxy endpoint for server-side authentication
27
+ * @default '/api/mautic-submit'
28
+ */
29
+ proxyEndpoint?: string;
30
+ /** Request timeout in milliseconds */
24
31
  timeout?: number;
32
+ /** Number of retry attempts */
25
33
  retries?: number;
26
34
  }
27
35
  export interface MauticGeneratorConfig {
28
36
  authMode: AuthMode;
29
37
  apiUrl?: string;
30
38
  cloudflareWorkerUrl?: string;
31
- appId?: string;
32
- workerSecret?: string;
39
+ clientId?: string;
40
+ clientSecret?: string;
41
+ cfAccessClientId?: string;
42
+ cfAccessClientSecret?: string;
33
43
  outputPath: string;
34
44
  formIds?: number[];
35
45
  includeInactive?: boolean;
@@ -40,7 +50,5 @@ export interface MauticTrackingConfig {
40
50
  enabled?: boolean;
41
51
  mauticUrl?: string;
42
52
  proxyUrl?: string;
43
- appId?: string;
44
- workerSecret?: string;
45
53
  }
46
54
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,QAAQ,GAAG,kBAAkB,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,QAAQ,GAAG,kBAAkB,GAAG,QAAQ,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -14,9 +14,10 @@
14
14
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
15
  * See the GNU General Public License for more details.
16
16
  */
17
- import { MauticConfig, AuthMode } from '../types/config';
17
+ import { MauticConfig } from '../types/config';
18
18
  /**
19
19
  * Create Mautic configuration from environment variables
20
+ * Convention-based: Uses /api/mautic-submit by default
20
21
  */
21
22
  export declare const createMauticConfig: (overrides?: Partial<MauticConfig>) => MauticConfig;
22
23
  /**
@@ -42,11 +43,8 @@ export declare const isMauticEnabled: (config: MauticConfig) => boolean;
42
43
  * Get Mautic configuration summary (for debugging)
43
44
  */
44
45
  export declare const getMauticConfigSummary: (config: MauticConfig) => {
45
- authMode: AuthMode;
46
46
  hasApiUrl: boolean;
47
- hasCloudflareWorkerUrl: boolean;
48
- hasAppId: boolean;
49
- hasWorkerSecret: boolean;
47
+ proxyEndpoint: string;
50
48
  timeout: number | undefined;
51
49
  retries: number | undefined;
52
50
  isEnabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAW,OAAO,CAAC,YAAY,CAAM,KAAG,YAkD1E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,YAAY,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAmC/F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAO,YAMzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,EAAE,WAAW,OAAO,CAAC,YAAY,CAAC,KAAG,YAKxF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY,KAAG,OAOtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,YAAY;;;;;;;;;CAW1D,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAY,MAAM,iBAAiB,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAW,OAAO,CAAC,YAAY,CAAM,KAAG,YAiC1E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,YAAY,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAe/F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAO,YAMzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,EAAE,WAAW,OAAO,CAAC,YAAY,CAAC,KAAG,YAKxF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY,KAAG,OAEtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,YAAY;;;;;;CAQ1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,OAG5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,OAG5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,OAOxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,GAAG,KAAG,OAMjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,eAAe,EAAE,OAAO,GAAG,KAAG,MAAM,GAAG,IA6D3E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,OAAO,GAAG,EAAE,OAAO,eAAe,KAAG,MAAM,GAAG,IAqC9F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,eAAe,EAAE,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAWhH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,OAG1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAkBlF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAU7F,CAAC"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,OAG5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,OAG5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,OAOxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,GAAG,KAAG,OAMjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,eAAe,EAAE,OAAO,GAAG,KAAG,MAAM,GAAG,IA6D3E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,OAAO,GAAG,EAAE,OAAO,eAAe,KAAG,MAAM,GAAG,IAwC9F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,eAAe,EAAE,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAWhH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,OAG1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAkBlF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAU7F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marvalt/madapter",
3
- "version": "1.0.14",
3
+ "version": "2.1.0",
4
4
  "description": "MarVAlt adapter for Mautic integration (React + static data generator)",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.esm.js",
@@ -8,6 +8,8 @@
8
8
  "type": "module",
9
9
  "files": [
10
10
  "dist",
11
+ "templates",
12
+ "scripts",
11
13
  "README.md",
12
14
  "LICENSE"
13
15
  ],
@@ -21,7 +23,8 @@
21
23
  "lint:fix": "eslint src --ext .ts,.tsx --fix",
22
24
  "type-check": "tsc --noEmit",
23
25
  "clean": "rimraf dist",
24
- "prepublishOnly": "npm run clean && npm run build"
26
+ "prepublishOnly": "npm run clean && npm run build",
27
+ "postinstall": "node scripts/postinstall.cjs"
25
28
  },
26
29
  "keywords": [
27
30
  "mautic",
@@ -46,6 +49,10 @@
46
49
  ".": {
47
50
  "import": "./dist/index.esm.js",
48
51
  "require": "./dist/index.cjs"
52
+ },
53
+ "./server": {
54
+ "import": "./dist/server.esm.js",
55
+ "require": "./dist/server.cjs"
49
56
  }
50
57
  },
51
58
  "peerDependencies": {