strapi-plugin-magic-link-v5 5.1.4 → 5.3.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.
Files changed (26) hide show
  1. package/README.md +200 -16
  2. package/dist/_chunks/{LicenseGuard-C63moUsN.js → LicenseGuard-BEEd9IpN.js} +5 -5
  3. package/dist/_chunks/{LicenseGuard-C8cgRFNj.mjs → LicenseGuard-B_r3b1Vh.mjs} +5 -5
  4. package/dist/_chunks/{de-jJeszxKe.js → de-BSOk5suQ.js} +37 -1
  5. package/dist/_chunks/{de-Bu71udtO.mjs → de-CwhYs3O3.mjs} +37 -1
  6. package/dist/_chunks/{en-DJkz6KFX.js → en-DnvSpXvu.js} +37 -1
  7. package/dist/_chunks/{en-D3sdS7Ze.mjs → en-gXXgGDV1.mjs} +37 -1
  8. package/dist/_chunks/{es-DEi221LE.js → es-B-tnwByt.js} +37 -1
  9. package/dist/_chunks/{es-BAHNf3Ib.mjs → es-DG5gW3RZ.mjs} +37 -1
  10. package/dist/_chunks/{fr-Jik4f45i.js → fr-BKo8t7Fx.js} +37 -1
  11. package/dist/_chunks/{fr-lrD9oj9w.mjs → fr-BQn1OHOR.mjs} +37 -1
  12. package/dist/_chunks/{index-D3Nml1iM.js → index-B-nuOZIX.js} +16 -3
  13. package/dist/_chunks/{index-DkR96Nw8.js → index-Bhg2f2Zo.js} +230 -4
  14. package/dist/_chunks/{index-zHlPaWPv.mjs → index-CVGcDS9w.mjs} +80 -36
  15. package/dist/_chunks/index-CfyrhGe2.js +332 -0
  16. package/dist/_chunks/{index-sz9D6Dyr.mjs → index-CrSTu2LH.mjs} +232 -6
  17. package/dist/_chunks/index-DQOmGmP3.mjs +330 -0
  18. package/dist/_chunks/{index-DCuPHsKh.mjs → index-DRX2-5_u.mjs} +16 -3
  19. package/dist/_chunks/{index-Bi84ynFK.js → index-f-7Nf5G0.js} +80 -36
  20. package/dist/_chunks/{pt-BnnpeZJW.js → pt-CjEkXBAz.js} +37 -1
  21. package/dist/_chunks/{pt-yklHVkQB.mjs → pt-trziAOzT.mjs} +37 -1
  22. package/dist/admin/index.js +1 -1
  23. package/dist/admin/index.mjs +1 -1
  24. package/dist/server/index.js +979 -111
  25. package/dist/server/index.mjs +979 -111
  26. package/package.json +3 -1
package/README.md CHANGED
@@ -8,13 +8,14 @@ Secure, modern, and user-friendly authentication using email-based magic links,
8
8
  [![npm version](https://badge.fury.io/js/strapi-plugin-magic-link-v5.svg)](https://www.npmjs.com/package/strapi-plugin-magic-link-v5)
9
9
  [![Strapi v5](https://img.shields.io/badge/Strapi-v5-7C3AED.svg)](https://strapi.io)
10
10
 
11
- ## 🚀 Why Magic Link?
11
+ ## Why Magic Link?
12
12
 
13
- - **Zero Setup Time** - Install, activate license (free), and start using
14
- - 🎯 **Production Ready** - Battle-tested with rate limiting, IP bans, and session management
15
- - 🛡️ **Multi-Factor Authentication** - Email OTP + TOTP Authenticator support
16
- - 🎨 **Beautiful UI** - Modern, responsive admin interface with German translations
17
- - 🔒 **Enterprise Security** - License-based feature unlocking with Free, Premium & Advanced tiers
13
+ - **Zero Setup Time** - Install, activate license (free), and start using
14
+ - **Production Ready** - Battle-tested with rate limiting, IP bans, and session management
15
+ - **Multi-Factor Authentication** - Email OTP + TOTP Authenticator support
16
+ - **WhatsApp Integration** - Send magic links via WhatsApp (FREE!)
17
+ - **Beautiful UI** - Modern, responsive admin interface with German translations
18
+ - **Enterprise Security** - License-based feature unlocking with Free, Premium & Advanced tiers
18
19
 
19
20
  ## 📚 Quick Links
20
21
 
@@ -23,6 +24,7 @@ Secure, modern, and user-friendly authentication using email-based magic links,
23
24
  - [🎯 Quick Start](#-quick-start) - License activation & configuration
24
25
  - [💻 Frontend Examples](#-frontend-implementation) - Magic Link, Email OTP, TOTP flows
25
26
  - [📡 API Endpoints](#-api-endpoints) - Complete API reference
27
+ - [🔄 Plugin Compatibility](#-plugin-compatibility) - Migration from other plugins
26
28
  - [⚙️ Configuration](#-configuration) - All settings explained
27
29
  - [🐛 Troubleshooting](#-troubleshooting) - Common issues & solutions
28
30
  - [📝 Changelog](#-changelog) - Version history & updates
@@ -65,16 +67,17 @@ This plugin is licensed under the **MIT License** - free for everyone to use!
65
67
 
66
68
  ## ✨ Features
67
69
 
68
- ### 🔐 Authentication Modes
70
+ ### Authentication Modes
69
71
 
70
72
  Choose the security level that fits your needs:
71
73
 
72
74
  | Mode | Description | License |
73
75
  |------|-------------|---------|
74
- | **Magic Link Only** | One-click email login - fast & user-friendly | Free |
75
- | **Magic Link + Email OTP** | 6-digit code after magic link click | 💎 Premium |
76
- | **Magic Link + TOTP (MFA)** | Authenticator app (Google Auth, Authy) | Advanced |
77
- | **TOTP-Only Login** | Direct login with email + TOTP code | Advanced |
76
+ | **Magic Link Only** | One-click email login - fast & user-friendly | Free |
77
+ | **Magic Link via WhatsApp** | Send magic links via WhatsApp messenger | Free |
78
+ | **Magic Link + Email OTP** | 6-digit code after magic link click | Premium |
79
+ | **Magic Link + TOTP (MFA)** | Authenticator app (Google Auth, Authy) | Advanced |
80
+ | **TOTP-Only Login** | Direct login with email + TOTP code | Advanced |
78
81
 
79
82
  ### 🛡️ Security Features
80
83
 
@@ -108,11 +111,13 @@ Choose the security level that fits your needs:
108
111
  - **Search & Filter** - Find anything in seconds
109
112
  - **Bulk Operations** - Manage multiple items at once
110
113
 
111
- ### ⚙️ Customization
114
+ ### Customization
112
115
 
113
116
  - **Email Templates** - HTML & plain text with variables
117
+ - **WhatsApp Templates** - Customizable WhatsApp message content
114
118
  - **Email Designer 5** - Visual email builder integration
115
119
  - **Flexible Configuration** - All settings in admin panel
120
+ - **Frontend URL** - Configure custom frontend login URLs
116
121
  - **Custom Callbacks** - Post-login redirect URLs
117
122
  - **Auto User Creation** - Optional on first login
118
123
  - **Token Reusability** - One-time or multi-use tokens
@@ -153,7 +158,83 @@ Configure core functionality and authentication options.
153
158
 
154
159
  ---
155
160
 
156
- ## 📋 Prerequisites
161
+ ## WhatsApp Integration (NEW!)
162
+
163
+ Magic Link now supports sending authentication links via **WhatsApp** - completely FREE!
164
+
165
+ ### Why WhatsApp?
166
+
167
+ - **Higher Open Rates** - 98% open rate vs 20% for email
168
+ - **Instant Delivery** - No spam folders, no delays
169
+ - **User Preference** - Many users prefer messaging over email
170
+ - **FREE** - No additional costs, uses your own WhatsApp number
171
+
172
+ ### Quick Setup
173
+
174
+ 1. Navigate to **Admin Panel -> Magic Link -> WhatsApp**
175
+ 2. Scan the QR code with your WhatsApp mobile app
176
+ 3. Done! Your WhatsApp is connected
177
+
178
+ ### How It Works
179
+
180
+ When a user requests a magic link and has a phone number on file, you can send the magic link via WhatsApp instead of email:
181
+
182
+ ```javascript
183
+ // Send magic link via WhatsApp
184
+ await fetch('/api/magic-link/send-link', {
185
+ method: 'POST',
186
+ headers: { 'Content-Type': 'application/json' },
187
+ body: JSON.stringify({
188
+ email: 'user@example.com',
189
+ channel: 'whatsapp', // Send via WhatsApp
190
+ phoneNumber: '+491234567890' // Required for WhatsApp
191
+ })
192
+ });
193
+ ```
194
+
195
+ ### Customizable Messages
196
+
197
+ Configure your WhatsApp message templates in **Settings -> Email & Messaging**:
198
+
199
+ **Available Variables:**
200
+ - `<%= URL %>` - Your frontend login URL
201
+ - `<%= CODE %>` - The magic link token
202
+ - `<%= APP_NAME %>` - Your app name
203
+ - `<%= EXPIRY_TEXT %>` - Token expiration text
204
+
205
+ **Example Template:**
206
+ ```
207
+ *<%= APP_NAME %> Login*
208
+
209
+ Click the link below to log in:
210
+
211
+ <%= URL %>?loginToken=<%= CODE %>
212
+
213
+ This link expires in <%= EXPIRY_TEXT %>.
214
+
215
+ _If you didn't request this, please ignore this message._
216
+ ```
217
+
218
+ ### Frontend Login URL
219
+
220
+ Configure where users land when clicking the magic link:
221
+
222
+ 1. Go to **Settings -> Email & Messaging**
223
+ 2. Set **Frontend Login URL** (e.g., `https://yourapp.com/auth/login`)
224
+ 3. Magic links will now redirect to your frontend
225
+
226
+ ### Integration with Magic-Mail
227
+
228
+ If you have both **Magic-Link** and **Magic-Mail** plugins installed:
229
+
230
+ - Magic-Link delegates WhatsApp functionality to Magic-Mail
231
+ - Only ONE WhatsApp connection needed (managed by Magic-Mail)
232
+ - Navigate to Magic-Mail for WhatsApp setup
233
+ - Unified WhatsApp management across both plugins
234
+
235
+ ---
236
+
237
+ ## Prerequisites
157
238
 
158
239
  This plugin requires a **configured email provider** to send magic link emails.
159
240
 
@@ -531,6 +612,81 @@ if (license.isPremium) {
531
612
 
532
613
  ---
533
614
 
615
+ ## 🔄 Plugin Compatibility
616
+
617
+ Magic Link provides **compatibility modes** for seamless migration from other authentication plugins. No frontend code changes required!
618
+
619
+ ### 🔗 strapi-plugin-passwordless Migration
620
+
621
+ If you're migrating from [strapi-plugin-passwordless](https://github.com/kucherenko/strapi-plugin-passwordless), enable the compatibility mode:
622
+
623
+ **Enable in Admin Panel:** Settings → Magic Link → Compatibility → "Passwordless Plugin Compatibility"
624
+
625
+ When enabled, these additional routes become available:
626
+
627
+ | Original Route | Magic Link Handler | Description |
628
+ |----------------|-------------------|-------------|
629
+ | `POST /api/passwordless/send-link` | `auth.sendLink` | Send magic link email |
630
+ | `GET /api/passwordless/login?loginToken=xxx` | `auth.login` | Authenticate with token |
631
+
632
+ **Request/Response Format:** Identical to the original plugin!
633
+
634
+ ```javascript
635
+ // Your existing code works without changes:
636
+ const response = await fetch('/api/passwordless/send-link', {
637
+ method: 'POST',
638
+ headers: { 'Content-Type': 'application/json' },
639
+ body: JSON.stringify({
640
+ email: 'user@example.com',
641
+ username: 'John Doe', // Optional: username for new users
642
+ context: { redirectTo: '/dashboard' }
643
+ })
644
+ });
645
+
646
+ // Login response is identical:
647
+ // { jwt: "...", user: {...}, context: {...} }
648
+ ```
649
+
650
+ **Migration Steps:**
651
+ 1. Install `strapi-plugin-magic-link-v5`
652
+ 2. Remove `strapi-plugin-passwordless` from `package.json`
653
+ 3. Enable **Passwordless Compatibility** in Settings
654
+ 4. Restart Strapi - done! ✅
655
+
656
+ **Gradual Migration:** You can later switch your frontend to use `/api/magic-link/*` endpoints and disable compatibility mode.
657
+
658
+ ### 📧 Email Designer 5 Integration
659
+
660
+ Magic Link is **fully compatible** with [strapi-plugin-email-designer-5](https://www.npmjs.com/package/strapi-plugin-email-designer-5)!
661
+
662
+ **Enable in Admin Panel:** Settings → Magic Link → Compatibility → "Email Designer 5 Integration"
663
+
664
+ ```bash
665
+ # Install Email Designer 5
666
+ npm install strapi-plugin-email-designer-5
667
+ ```
668
+
669
+ **Template Variables:**
670
+ | Variable | Description |
671
+ |----------|-------------|
672
+ | `{{magicLink}}` | Complete magic link URL with token |
673
+ | `{{token}}` | Raw token value |
674
+ | `{{user.email}}` | User's email address |
675
+ | `{{user.username}}` | User's username |
676
+ | `{{expiresAt}}` | Token expiration time |
677
+
678
+ **Configuration:**
679
+ 1. Create a template in Email Designer
680
+ 2. Go to Settings → Magic Link → Email Settings
681
+ 3. Enable "Use Email Designer Template"
682
+ 4. Select your template from the dropdown
683
+
684
+ ### 🛡️ Security Note
685
+
686
+ **Compatibility routes are disabled by default** for security. When disabled, accessing `/api/passwordless/*` returns a `404 Not Found` response - the routes appear to not exist.
687
+
688
+ ---
689
+
534
690
  ## ⚙️ Configuration
535
691
 
536
692
  ### 🔐 Authentication Mode Settings
@@ -733,9 +889,37 @@ Contributions are welcome! Please:
733
889
 
734
890
  ---
735
891
 
736
- ## 📝 Changelog
737
-
738
- ### v4.16.3 (2025-11-22) - Latest 🎉
892
+ ## Changelog
893
+
894
+ ### v5.2.7 (2025-12-16) - Latest
895
+
896
+ **WhatsApp Integration**
897
+ - **WhatsApp Magic Links** - Send authentication links via WhatsApp messenger (FREE!)
898
+ - **Customizable Templates** - Configure WhatsApp message text with variables
899
+ - **Frontend URL Setting** - Set custom frontend login URLs for magic links
900
+ - **Magic-Mail Integration** - Automatic delegation when both plugins installed
901
+ - **QR Code Setup** - Easy WhatsApp connection via QR code scan
902
+ - **Debug Mode** - Optional verbose logging for WhatsApp connections
903
+
904
+ **New Settings:**
905
+ - `frontend_login_url` - Custom frontend URL for magic links
906
+ - `whatsapp_message_text` - WhatsApp message template
907
+ - `whatsapp_app_name` - App name displayed in WhatsApp messages
908
+ - `whatsapp_debug` - Enable/disable verbose WhatsApp logging
909
+
910
+ ### v5.1.10 (2025-12-15)
911
+
912
+ **Plugin Compatibility Mode**
913
+ - **Passwordless Plugin Compatibility** - Migration support for `strapi-plugin-passwordless`
914
+ - Added `/api/passwordless/send-link` and `/api/passwordless/login` routes
915
+ - Identical request/response format - no frontend changes needed!
916
+ - Disabled by default for security (returns 404 when off)
917
+ - **Email Designer 5 Integration** - Enhanced template support
918
+ - New "Compatibility" settings section in admin UI
919
+ - Full i18n support for compatibility settings (DE, EN, ES, FR, PT)
920
+ - `compatibility-check` policy for secure route access
921
+
922
+ ### v4.16.3 (2025-11-22)
739
923
 
740
924
  **License Validation Fix**
741
925
  - ✅ Fixed license tier detection from backend features
@@ -2,11 +2,11 @@
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const react = require("react");
4
4
  const reactIntl = require("react-intl");
5
- const en = require("./en-DJkz6KFX.js");
6
- const de = require("./de-jJeszxKe.js");
7
- const fr = require("./fr-Jik4f45i.js");
8
- const es = require("./es-DEi221LE.js");
9
- const pt = require("./pt-BnnpeZJW.js");
5
+ const en = require("./en-DnvSpXvu.js");
6
+ const de = require("./de-BSOk5suQ.js");
7
+ const fr = require("./fr-BKo8t7Fx.js");
8
+ const es = require("./es-B-tnwByt.js");
9
+ const pt = require("./pt-CjEkXBAz.js");
10
10
  const designSystem = require("@strapi/design-system");
11
11
  const admin = require("@strapi/strapi/admin");
12
12
  const icons = require("@strapi/icons");
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useState, createContext, useContext, useEffect } from "react";
3
3
  import { IntlProvider } from "react-intl";
4
- import enTranslations from "./en-D3sdS7Ze.mjs";
5
- import deTranslations from "./de-Bu71udtO.mjs";
6
- import frTranslations from "./fr-lrD9oj9w.mjs";
7
- import esTranslations from "./es-BAHNf3Ib.mjs";
8
- import ptTranslations from "./pt-yklHVkQB.mjs";
4
+ import enTranslations from "./en-gXXgGDV1.mjs";
5
+ import deTranslations from "./de-CwhYs3O3.mjs";
6
+ import frTranslations from "./fr-BQn1OHOR.mjs";
7
+ import esTranslations from "./es-DG5gW3RZ.mjs";
8
+ import ptTranslations from "./pt-trziAOzT.mjs";
9
9
  import { Box, Loader, Typography, Flex, TextInput, Button } from "@strapi/design-system";
10
10
  import { useFetchClient, useNotification } from "@strapi/strapi/admin";
11
11
  import { Cross, Key, Check } from "@strapi/icons";
@@ -413,6 +413,42 @@ const deTranslations = {
413
413
  "magic-link.common.tableHeaders.sortByUser": "Nach Benutzer sortieren",
414
414
  "magic-link.common.tableHeaders.sortByStatus": "Nach Status sortieren",
415
415
  "magic-link.common.tableHeaders.sortByCreated": "Nach Erstelldatum sortieren",
416
- "magic-link.common.tableHeaders.sortByExpiry": "Nach Ablaufdatum sortieren"
416
+ "magic-link.common.tableHeaders.sortByExpiry": "Nach Ablaufdatum sortieren",
417
+ "magic-link.settings.section.compatibility": "Kompatibilität",
418
+ "magic-link.settings.section.compatibility.description": "Migrations-Unterstützung für andere Plugins",
419
+ "magic-link.settings.compatibility.title": "PLUGIN-KOMPATIBILITÄT",
420
+ "magic-link.settings.compatibility.subtitle": "Aktiviere Kompatibilitätsmodi für nahtlose Migration von anderen Plugins",
421
+ "magic-link.settings.compatibility.info.title": "Einfache Migration",
422
+ "magic-link.settings.compatibility.info.description": "Diese Einstellungen ermöglichen es dir, bestehende API-Aufrufe von anderen Plugins weiterhin zu nutzen, ohne deinen Frontend-Code ändern zu müssen.",
423
+ "magic-link.settings.compatibility.passwordless.title": "Passwordless Plugin Kompatibilität",
424
+ "magic-link.settings.compatibility.passwordless.description": "Aktiviert /api/passwordless/* Routen für Migration von strapi-plugin-passwordless",
425
+ "magic-link.settings.compatibility.emailDesigner.title": "Email Designer 5 Integration",
426
+ "magic-link.settings.compatibility.emailDesigner.description": "Nutze professionelle E-Mail-Templates von strapi-plugin-email-designer-5",
427
+ "magic-link.settings.compatibility.migration.title": "Hinweis zur Migration",
428
+ "magic-link.settings.compatibility.migration.description": "Nach erfolgreicher Migration kannst du schrittweise auf die Magic Link API (/api/magic-link/*) umstellen und dann die Kompatibilitätsmodi deaktivieren.",
429
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
430
+ "magic-link.whatsapp.title": "WhatsApp Integration",
431
+ "magic-link.whatsapp.subtitle": "Sende Magic Links über WhatsApp statt E-Mail",
432
+ "magic-link.whatsapp.notInstalled.title": "Baileys nicht installiert",
433
+ "magic-link.whatsapp.notInstalled.description": "Um die WhatsApp-Integration zu nutzen, musst du das Baileys-Paket installieren. Führe folgenden Befehl in deinem Strapi-Projekt aus:",
434
+ "magic-link.whatsapp.connection.title": "WhatsApp Verbindung",
435
+ "magic-link.whatsapp.connection.generating": "QR-Code wird generiert...",
436
+ "magic-link.whatsapp.connection.clickToConnect": "Klicke auf den Button um einen QR-Code zu generieren",
437
+ "magic-link.whatsapp.qr.instruction": "Öffne WhatsApp auf deinem Handy → Einstellungen → Verknüpfte Geräte → Gerät hinzufügen → Scanne diesen QR-Code",
438
+ "magic-link.whatsapp.connected.title": "WhatsApp verbunden",
439
+ "magic-link.whatsapp.test.title": "Test-Nachricht senden",
440
+ "magic-link.whatsapp.test.phoneLabel": "Telefonnummer",
441
+ "magic-link.whatsapp.test.phoneHint": "Telefonnummer mit Ländervorwahl eingeben (z.B. 491234567890)",
442
+ "magic-link.whatsapp.actions.connect": "WhatsApp verbinden",
443
+ "magic-link.whatsapp.actions.disconnect": "Trennen",
444
+ "magic-link.whatsapp.actions.sendTest": "Test senden",
445
+ "magic-link.whatsapp.actions.refresh": "Status aktualisieren",
446
+ "magic-link.whatsapp.info.title": "Verwendung",
447
+ "magic-link.whatsapp.info.description": "Sobald verbunden, kannst du Magic Links über WhatsApp senden, indem du eine Telefonnummer im API-Request angibst. Der Benutzer erhält den Login-Link direkt in seiner WhatsApp-App.",
448
+ "magic-link.whatsapp.info.apiExample": "API Beispiel:",
449
+ "magic-link.whatsapp.notifications.connecting": "Verbinde mit WhatsApp...",
450
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp getrennt",
451
+ "magic-link.whatsapp.notifications.phoneRequired": "Bitte Telefonnummer eingeben",
452
+ "magic-link.whatsapp.notifications.messageSent": "Test-Nachricht erfolgreich gesendet!"
417
453
  };
418
454
  exports.default = deTranslations;
@@ -411,7 +411,43 @@ const deTranslations = {
411
411
  "magic-link.common.tableHeaders.sortByUser": "Nach Benutzer sortieren",
412
412
  "magic-link.common.tableHeaders.sortByStatus": "Nach Status sortieren",
413
413
  "magic-link.common.tableHeaders.sortByCreated": "Nach Erstelldatum sortieren",
414
- "magic-link.common.tableHeaders.sortByExpiry": "Nach Ablaufdatum sortieren"
414
+ "magic-link.common.tableHeaders.sortByExpiry": "Nach Ablaufdatum sortieren",
415
+ "magic-link.settings.section.compatibility": "Kompatibilität",
416
+ "magic-link.settings.section.compatibility.description": "Migrations-Unterstützung für andere Plugins",
417
+ "magic-link.settings.compatibility.title": "PLUGIN-KOMPATIBILITÄT",
418
+ "magic-link.settings.compatibility.subtitle": "Aktiviere Kompatibilitätsmodi für nahtlose Migration von anderen Plugins",
419
+ "magic-link.settings.compatibility.info.title": "Einfache Migration",
420
+ "magic-link.settings.compatibility.info.description": "Diese Einstellungen ermöglichen es dir, bestehende API-Aufrufe von anderen Plugins weiterhin zu nutzen, ohne deinen Frontend-Code ändern zu müssen.",
421
+ "magic-link.settings.compatibility.passwordless.title": "Passwordless Plugin Kompatibilität",
422
+ "magic-link.settings.compatibility.passwordless.description": "Aktiviert /api/passwordless/* Routen für Migration von strapi-plugin-passwordless",
423
+ "magic-link.settings.compatibility.emailDesigner.title": "Email Designer 5 Integration",
424
+ "magic-link.settings.compatibility.emailDesigner.description": "Nutze professionelle E-Mail-Templates von strapi-plugin-email-designer-5",
425
+ "magic-link.settings.compatibility.migration.title": "Hinweis zur Migration",
426
+ "magic-link.settings.compatibility.migration.description": "Nach erfolgreicher Migration kannst du schrittweise auf die Magic Link API (/api/magic-link/*) umstellen und dann die Kompatibilitätsmodi deaktivieren.",
427
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
428
+ "magic-link.whatsapp.title": "WhatsApp Integration",
429
+ "magic-link.whatsapp.subtitle": "Sende Magic Links über WhatsApp statt E-Mail",
430
+ "magic-link.whatsapp.notInstalled.title": "Baileys nicht installiert",
431
+ "magic-link.whatsapp.notInstalled.description": "Um die WhatsApp-Integration zu nutzen, musst du das Baileys-Paket installieren. Führe folgenden Befehl in deinem Strapi-Projekt aus:",
432
+ "magic-link.whatsapp.connection.title": "WhatsApp Verbindung",
433
+ "magic-link.whatsapp.connection.generating": "QR-Code wird generiert...",
434
+ "magic-link.whatsapp.connection.clickToConnect": "Klicke auf den Button um einen QR-Code zu generieren",
435
+ "magic-link.whatsapp.qr.instruction": "Öffne WhatsApp auf deinem Handy → Einstellungen → Verknüpfte Geräte → Gerät hinzufügen → Scanne diesen QR-Code",
436
+ "magic-link.whatsapp.connected.title": "WhatsApp verbunden",
437
+ "magic-link.whatsapp.test.title": "Test-Nachricht senden",
438
+ "magic-link.whatsapp.test.phoneLabel": "Telefonnummer",
439
+ "magic-link.whatsapp.test.phoneHint": "Telefonnummer mit Ländervorwahl eingeben (z.B. 491234567890)",
440
+ "magic-link.whatsapp.actions.connect": "WhatsApp verbinden",
441
+ "magic-link.whatsapp.actions.disconnect": "Trennen",
442
+ "magic-link.whatsapp.actions.sendTest": "Test senden",
443
+ "magic-link.whatsapp.actions.refresh": "Status aktualisieren",
444
+ "magic-link.whatsapp.info.title": "Verwendung",
445
+ "magic-link.whatsapp.info.description": "Sobald verbunden, kannst du Magic Links über WhatsApp senden, indem du eine Telefonnummer im API-Request angibst. Der Benutzer erhält den Login-Link direkt in seiner WhatsApp-App.",
446
+ "magic-link.whatsapp.info.apiExample": "API Beispiel:",
447
+ "magic-link.whatsapp.notifications.connecting": "Verbinde mit WhatsApp...",
448
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp getrennt",
449
+ "magic-link.whatsapp.notifications.phoneRequired": "Bitte Telefonnummer eingeben",
450
+ "magic-link.whatsapp.notifications.messageSent": "Test-Nachricht erfolgreich gesendet!"
415
451
  };
416
452
  export {
417
453
  deTranslations as default
@@ -413,6 +413,42 @@ const enTranslations = {
413
413
  "magic-link.common.tableHeaders.sortByUser": "Sort by user",
414
414
  "magic-link.common.tableHeaders.sortByStatus": "Sort by status",
415
415
  "magic-link.common.tableHeaders.sortByCreated": "Sort by created date",
416
- "magic-link.common.tableHeaders.sortByExpiry": "Sort by expiry date"
416
+ "magic-link.common.tableHeaders.sortByExpiry": "Sort by expiry date",
417
+ "magic-link.settings.section.compatibility": "Compatibility",
418
+ "magic-link.settings.section.compatibility.description": "Migration support for other plugins",
419
+ "magic-link.settings.compatibility.title": "PLUGIN COMPATIBILITY",
420
+ "magic-link.settings.compatibility.subtitle": "Enable compatibility modes for seamless migration from other plugins",
421
+ "magic-link.settings.compatibility.info.title": "Easy Migration",
422
+ "magic-link.settings.compatibility.info.description": "These settings allow you to continue using existing API calls from other plugins without modifying your frontend code.",
423
+ "magic-link.settings.compatibility.passwordless.title": "Passwordless Plugin Compatibility",
424
+ "magic-link.settings.compatibility.passwordless.description": "Enables /api/passwordless/* routes for migration from strapi-plugin-passwordless",
425
+ "magic-link.settings.compatibility.emailDesigner.title": "Email Designer 5 Integration",
426
+ "magic-link.settings.compatibility.emailDesigner.description": "Use professional email templates from strapi-plugin-email-designer-5",
427
+ "magic-link.settings.compatibility.migration.title": "Migration Note",
428
+ "magic-link.settings.compatibility.migration.description": "After successful migration, you can gradually switch to the Magic Link API (/api/magic-link/*) and then disable the compatibility modes.",
429
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
430
+ "magic-link.whatsapp.title": "WhatsApp Integration",
431
+ "magic-link.whatsapp.subtitle": "Send Magic Links via WhatsApp instead of Email",
432
+ "magic-link.whatsapp.notInstalled.title": "Baileys Not Installed",
433
+ "magic-link.whatsapp.notInstalled.description": "To use WhatsApp integration, you need to install the Baileys package. Run the following command in your Strapi project:",
434
+ "magic-link.whatsapp.connection.title": "WhatsApp Connection",
435
+ "magic-link.whatsapp.connection.generating": "Generating QR Code...",
436
+ "magic-link.whatsapp.connection.clickToConnect": "Click the button below to generate a QR code",
437
+ "magic-link.whatsapp.qr.instruction": "Open WhatsApp on your phone → Settings → Linked Devices → Link a Device → Scan this QR code",
438
+ "magic-link.whatsapp.connected.title": "WhatsApp Connected",
439
+ "magic-link.whatsapp.test.title": "Send Test Message",
440
+ "magic-link.whatsapp.test.phoneLabel": "Phone Number",
441
+ "magic-link.whatsapp.test.phoneHint": "Enter phone number with country code (e.g., 491234567890)",
442
+ "magic-link.whatsapp.actions.connect": "Connect WhatsApp",
443
+ "magic-link.whatsapp.actions.disconnect": "Disconnect",
444
+ "magic-link.whatsapp.actions.sendTest": "Send Test",
445
+ "magic-link.whatsapp.actions.refresh": "Refresh Status",
446
+ "magic-link.whatsapp.info.title": "How to Use",
447
+ "magic-link.whatsapp.info.description": "Once connected, you can send Magic Links via WhatsApp by including a phone number in the API request. The user will receive the login link directly in their WhatsApp app.",
448
+ "magic-link.whatsapp.info.apiExample": "API Example:",
449
+ "magic-link.whatsapp.notifications.connecting": "Connecting to WhatsApp...",
450
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp disconnected",
451
+ "magic-link.whatsapp.notifications.phoneRequired": "Please enter a phone number",
452
+ "magic-link.whatsapp.notifications.messageSent": "Test message sent successfully!"
417
453
  };
418
454
  exports.default = enTranslations;
@@ -411,7 +411,43 @@ const enTranslations = {
411
411
  "magic-link.common.tableHeaders.sortByUser": "Sort by user",
412
412
  "magic-link.common.tableHeaders.sortByStatus": "Sort by status",
413
413
  "magic-link.common.tableHeaders.sortByCreated": "Sort by created date",
414
- "magic-link.common.tableHeaders.sortByExpiry": "Sort by expiry date"
414
+ "magic-link.common.tableHeaders.sortByExpiry": "Sort by expiry date",
415
+ "magic-link.settings.section.compatibility": "Compatibility",
416
+ "magic-link.settings.section.compatibility.description": "Migration support for other plugins",
417
+ "magic-link.settings.compatibility.title": "PLUGIN COMPATIBILITY",
418
+ "magic-link.settings.compatibility.subtitle": "Enable compatibility modes for seamless migration from other plugins",
419
+ "magic-link.settings.compatibility.info.title": "Easy Migration",
420
+ "magic-link.settings.compatibility.info.description": "These settings allow you to continue using existing API calls from other plugins without modifying your frontend code.",
421
+ "magic-link.settings.compatibility.passwordless.title": "Passwordless Plugin Compatibility",
422
+ "magic-link.settings.compatibility.passwordless.description": "Enables /api/passwordless/* routes for migration from strapi-plugin-passwordless",
423
+ "magic-link.settings.compatibility.emailDesigner.title": "Email Designer 5 Integration",
424
+ "magic-link.settings.compatibility.emailDesigner.description": "Use professional email templates from strapi-plugin-email-designer-5",
425
+ "magic-link.settings.compatibility.migration.title": "Migration Note",
426
+ "magic-link.settings.compatibility.migration.description": "After successful migration, you can gradually switch to the Magic Link API (/api/magic-link/*) and then disable the compatibility modes.",
427
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
428
+ "magic-link.whatsapp.title": "WhatsApp Integration",
429
+ "magic-link.whatsapp.subtitle": "Send Magic Links via WhatsApp instead of Email",
430
+ "magic-link.whatsapp.notInstalled.title": "Baileys Not Installed",
431
+ "magic-link.whatsapp.notInstalled.description": "To use WhatsApp integration, you need to install the Baileys package. Run the following command in your Strapi project:",
432
+ "magic-link.whatsapp.connection.title": "WhatsApp Connection",
433
+ "magic-link.whatsapp.connection.generating": "Generating QR Code...",
434
+ "magic-link.whatsapp.connection.clickToConnect": "Click the button below to generate a QR code",
435
+ "magic-link.whatsapp.qr.instruction": "Open WhatsApp on your phone → Settings → Linked Devices → Link a Device → Scan this QR code",
436
+ "magic-link.whatsapp.connected.title": "WhatsApp Connected",
437
+ "magic-link.whatsapp.test.title": "Send Test Message",
438
+ "magic-link.whatsapp.test.phoneLabel": "Phone Number",
439
+ "magic-link.whatsapp.test.phoneHint": "Enter phone number with country code (e.g., 491234567890)",
440
+ "magic-link.whatsapp.actions.connect": "Connect WhatsApp",
441
+ "magic-link.whatsapp.actions.disconnect": "Disconnect",
442
+ "magic-link.whatsapp.actions.sendTest": "Send Test",
443
+ "magic-link.whatsapp.actions.refresh": "Refresh Status",
444
+ "magic-link.whatsapp.info.title": "How to Use",
445
+ "magic-link.whatsapp.info.description": "Once connected, you can send Magic Links via WhatsApp by including a phone number in the API request. The user will receive the login link directly in their WhatsApp app.",
446
+ "magic-link.whatsapp.info.apiExample": "API Example:",
447
+ "magic-link.whatsapp.notifications.connecting": "Connecting to WhatsApp...",
448
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp disconnected",
449
+ "magic-link.whatsapp.notifications.phoneRequired": "Please enter a phone number",
450
+ "magic-link.whatsapp.notifications.messageSent": "Test message sent successfully!"
415
451
  };
416
452
  export {
417
453
  enTranslations as default
@@ -366,6 +366,42 @@ const esTranslations = {
366
366
  "magic-link.common.tableHeaders.sortByUser": "Ordenar por usuario",
367
367
  "magic-link.common.tableHeaders.sortByStatus": "Ordenar por estado",
368
368
  "magic-link.common.tableHeaders.sortByCreated": "Ordenar por fecha de creación",
369
- "magic-link.common.tableHeaders.sortByExpiry": "Ordenar por fecha de expiración"
369
+ "magic-link.common.tableHeaders.sortByExpiry": "Ordenar por fecha de expiración",
370
+ "magic-link.settings.section.compatibility": "Compatibilidad",
371
+ "magic-link.settings.section.compatibility.description": "Soporte de migración para otros plugins",
372
+ "magic-link.settings.compatibility.title": "COMPATIBILIDAD DE PLUGINS",
373
+ "magic-link.settings.compatibility.subtitle": "Activa los modos de compatibilidad para una migración sin problemas desde otros plugins",
374
+ "magic-link.settings.compatibility.info.title": "Migración Fácil",
375
+ "magic-link.settings.compatibility.info.description": "Estas configuraciones te permiten seguir usando las llamadas API existentes de otros plugins sin modificar tu código frontend.",
376
+ "magic-link.settings.compatibility.passwordless.title": "Compatibilidad con Plugin Passwordless",
377
+ "magic-link.settings.compatibility.passwordless.description": "Activa las rutas /api/passwordless/* para migrar desde strapi-plugin-passwordless",
378
+ "magic-link.settings.compatibility.emailDesigner.title": "Integración Email Designer 5",
379
+ "magic-link.settings.compatibility.emailDesigner.description": "Usa plantillas de correo profesionales de strapi-plugin-email-designer-5",
380
+ "magic-link.settings.compatibility.migration.title": "Nota de Migración",
381
+ "magic-link.settings.compatibility.migration.description": "Después de una migración exitosa, puedes cambiar gradualmente a la API de Magic Link (/api/magic-link/*) y luego desactivar los modos de compatibilidad.",
382
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
383
+ "magic-link.whatsapp.title": "Integración WhatsApp",
384
+ "magic-link.whatsapp.subtitle": "Envía Magic Links por WhatsApp en lugar de Email",
385
+ "magic-link.whatsapp.notInstalled.title": "Baileys no instalado",
386
+ "magic-link.whatsapp.notInstalled.description": "Para usar la integración de WhatsApp, necesitas instalar el paquete Baileys. Ejecuta el siguiente comando:",
387
+ "magic-link.whatsapp.connection.title": "Conexión WhatsApp",
388
+ "magic-link.whatsapp.connection.generating": "Generando código QR...",
389
+ "magic-link.whatsapp.connection.clickToConnect": "Haz clic en el botón para generar un código QR",
390
+ "magic-link.whatsapp.qr.instruction": "Abre WhatsApp en tu teléfono → Ajustes → Dispositivos vinculados → Vincular dispositivo → Escanea este código QR",
391
+ "magic-link.whatsapp.connected.title": "WhatsApp conectado",
392
+ "magic-link.whatsapp.test.title": "Enviar mensaje de prueba",
393
+ "magic-link.whatsapp.test.phoneLabel": "Número de teléfono",
394
+ "magic-link.whatsapp.test.phoneHint": "Ingresa el número con código de país (ej: 491234567890)",
395
+ "magic-link.whatsapp.actions.connect": "Conectar WhatsApp",
396
+ "magic-link.whatsapp.actions.disconnect": "Desconectar",
397
+ "magic-link.whatsapp.actions.sendTest": "Enviar prueba",
398
+ "magic-link.whatsapp.actions.refresh": "Actualizar estado",
399
+ "magic-link.whatsapp.info.title": "Cómo usar",
400
+ "magic-link.whatsapp.info.description": "Una vez conectado, puedes enviar Magic Links por WhatsApp incluyendo un número de teléfono en la solicitud API.",
401
+ "magic-link.whatsapp.info.apiExample": "Ejemplo API:",
402
+ "magic-link.whatsapp.notifications.connecting": "Conectando a WhatsApp...",
403
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp desconectado",
404
+ "magic-link.whatsapp.notifications.phoneRequired": "Por favor ingresa un número de teléfono",
405
+ "magic-link.whatsapp.notifications.messageSent": "¡Mensaje de prueba enviado!"
370
406
  };
371
407
  exports.default = esTranslations;
@@ -364,7 +364,43 @@ const esTranslations = {
364
364
  "magic-link.common.tableHeaders.sortByUser": "Ordenar por usuario",
365
365
  "magic-link.common.tableHeaders.sortByStatus": "Ordenar por estado",
366
366
  "magic-link.common.tableHeaders.sortByCreated": "Ordenar por fecha de creación",
367
- "magic-link.common.tableHeaders.sortByExpiry": "Ordenar por fecha de expiración"
367
+ "magic-link.common.tableHeaders.sortByExpiry": "Ordenar por fecha de expiración",
368
+ "magic-link.settings.section.compatibility": "Compatibilidad",
369
+ "magic-link.settings.section.compatibility.description": "Soporte de migración para otros plugins",
370
+ "magic-link.settings.compatibility.title": "COMPATIBILIDAD DE PLUGINS",
371
+ "magic-link.settings.compatibility.subtitle": "Activa los modos de compatibilidad para una migración sin problemas desde otros plugins",
372
+ "magic-link.settings.compatibility.info.title": "Migración Fácil",
373
+ "magic-link.settings.compatibility.info.description": "Estas configuraciones te permiten seguir usando las llamadas API existentes de otros plugins sin modificar tu código frontend.",
374
+ "magic-link.settings.compatibility.passwordless.title": "Compatibilidad con Plugin Passwordless",
375
+ "magic-link.settings.compatibility.passwordless.description": "Activa las rutas /api/passwordless/* para migrar desde strapi-plugin-passwordless",
376
+ "magic-link.settings.compatibility.emailDesigner.title": "Integración Email Designer 5",
377
+ "magic-link.settings.compatibility.emailDesigner.description": "Usa plantillas de correo profesionales de strapi-plugin-email-designer-5",
378
+ "magic-link.settings.compatibility.migration.title": "Nota de Migración",
379
+ "magic-link.settings.compatibility.migration.description": "Después de una migración exitosa, puedes cambiar gradualmente a la API de Magic Link (/api/magic-link/*) y luego desactivar los modos de compatibilidad.",
380
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
381
+ "magic-link.whatsapp.title": "Integración WhatsApp",
382
+ "magic-link.whatsapp.subtitle": "Envía Magic Links por WhatsApp en lugar de Email",
383
+ "magic-link.whatsapp.notInstalled.title": "Baileys no instalado",
384
+ "magic-link.whatsapp.notInstalled.description": "Para usar la integración de WhatsApp, necesitas instalar el paquete Baileys. Ejecuta el siguiente comando:",
385
+ "magic-link.whatsapp.connection.title": "Conexión WhatsApp",
386
+ "magic-link.whatsapp.connection.generating": "Generando código QR...",
387
+ "magic-link.whatsapp.connection.clickToConnect": "Haz clic en el botón para generar un código QR",
388
+ "magic-link.whatsapp.qr.instruction": "Abre WhatsApp en tu teléfono → Ajustes → Dispositivos vinculados → Vincular dispositivo → Escanea este código QR",
389
+ "magic-link.whatsapp.connected.title": "WhatsApp conectado",
390
+ "magic-link.whatsapp.test.title": "Enviar mensaje de prueba",
391
+ "magic-link.whatsapp.test.phoneLabel": "Número de teléfono",
392
+ "magic-link.whatsapp.test.phoneHint": "Ingresa el número con código de país (ej: 491234567890)",
393
+ "magic-link.whatsapp.actions.connect": "Conectar WhatsApp",
394
+ "magic-link.whatsapp.actions.disconnect": "Desconectar",
395
+ "magic-link.whatsapp.actions.sendTest": "Enviar prueba",
396
+ "magic-link.whatsapp.actions.refresh": "Actualizar estado",
397
+ "magic-link.whatsapp.info.title": "Cómo usar",
398
+ "magic-link.whatsapp.info.description": "Una vez conectado, puedes enviar Magic Links por WhatsApp incluyendo un número de teléfono en la solicitud API.",
399
+ "magic-link.whatsapp.info.apiExample": "Ejemplo API:",
400
+ "magic-link.whatsapp.notifications.connecting": "Conectando a WhatsApp...",
401
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp desconectado",
402
+ "magic-link.whatsapp.notifications.phoneRequired": "Por favor ingresa un número de teléfono",
403
+ "magic-link.whatsapp.notifications.messageSent": "¡Mensaje de prueba enviado!"
368
404
  };
369
405
  export {
370
406
  esTranslations as default
@@ -366,6 +366,42 @@ const frTranslations = {
366
366
  "magic-link.common.tableHeaders.sortByUser": "Trier par utilisateur",
367
367
  "magic-link.common.tableHeaders.sortByStatus": "Trier par statut",
368
368
  "magic-link.common.tableHeaders.sortByCreated": "Trier par date de création",
369
- "magic-link.common.tableHeaders.sortByExpiry": "Trier par date d'expiration"
369
+ "magic-link.common.tableHeaders.sortByExpiry": "Trier par date d'expiration",
370
+ "magic-link.settings.section.compatibility": "Compatibilité",
371
+ "magic-link.settings.section.compatibility.description": "Support de migration pour d'autres plugins",
372
+ "magic-link.settings.compatibility.title": "COMPATIBILITÉ DES PLUGINS",
373
+ "magic-link.settings.compatibility.subtitle": "Activez les modes de compatibilité pour une migration fluide depuis d'autres plugins",
374
+ "magic-link.settings.compatibility.info.title": "Migration Facile",
375
+ "magic-link.settings.compatibility.info.description": "Ces paramètres vous permettent de continuer à utiliser les appels API existants d'autres plugins sans modifier votre code frontend.",
376
+ "magic-link.settings.compatibility.passwordless.title": "Compatibilité Plugin Passwordless",
377
+ "magic-link.settings.compatibility.passwordless.description": "Active les routes /api/passwordless/* pour la migration depuis strapi-plugin-passwordless",
378
+ "magic-link.settings.compatibility.emailDesigner.title": "Intégration Email Designer 5",
379
+ "magic-link.settings.compatibility.emailDesigner.description": "Utilisez des modèles d'email professionnels de strapi-plugin-email-designer-5",
380
+ "magic-link.settings.compatibility.migration.title": "Note de Migration",
381
+ "magic-link.settings.compatibility.migration.description": "Après une migration réussie, vous pouvez progressivement passer à l'API Magic Link (/api/magic-link/*) puis désactiver les modes de compatibilité.",
382
+ "magic-link.Form.title.WhatsApp": "WhatsApp",
383
+ "magic-link.whatsapp.title": "Intégration WhatsApp",
384
+ "magic-link.whatsapp.subtitle": "Envoyez des Magic Links via WhatsApp au lieu d'Email",
385
+ "magic-link.whatsapp.notInstalled.title": "Baileys non installé",
386
+ "magic-link.whatsapp.notInstalled.description": "Pour utiliser l'intégration WhatsApp, vous devez installer le package Baileys. Exécutez la commande suivante:",
387
+ "magic-link.whatsapp.connection.title": "Connexion WhatsApp",
388
+ "magic-link.whatsapp.connection.generating": "Génération du code QR...",
389
+ "magic-link.whatsapp.connection.clickToConnect": "Cliquez sur le bouton pour générer un code QR",
390
+ "magic-link.whatsapp.qr.instruction": "Ouvrez WhatsApp sur votre téléphone → Paramètres → Appareils liés → Lier un appareil → Scannez ce code QR",
391
+ "magic-link.whatsapp.connected.title": "WhatsApp connecté",
392
+ "magic-link.whatsapp.test.title": "Envoyer un message test",
393
+ "magic-link.whatsapp.test.phoneLabel": "Numéro de téléphone",
394
+ "magic-link.whatsapp.test.phoneHint": "Entrez le numéro avec l'indicatif pays (ex: 491234567890)",
395
+ "magic-link.whatsapp.actions.connect": "Connecter WhatsApp",
396
+ "magic-link.whatsapp.actions.disconnect": "Déconnecter",
397
+ "magic-link.whatsapp.actions.sendTest": "Envoyer test",
398
+ "magic-link.whatsapp.actions.refresh": "Actualiser le statut",
399
+ "magic-link.whatsapp.info.title": "Comment utiliser",
400
+ "magic-link.whatsapp.info.description": "Une fois connecté, vous pouvez envoyer des Magic Links via WhatsApp en incluant un numéro de téléphone dans la requête API.",
401
+ "magic-link.whatsapp.info.apiExample": "Exemple API:",
402
+ "magic-link.whatsapp.notifications.connecting": "Connexion à WhatsApp...",
403
+ "magic-link.whatsapp.notifications.disconnected": "WhatsApp déconnecté",
404
+ "magic-link.whatsapp.notifications.phoneRequired": "Veuillez entrer un numéro de téléphone",
405
+ "magic-link.whatsapp.notifications.messageSent": "Message test envoyé avec succès!"
370
406
  };
371
407
  exports.default = frTranslations;