strapi-plugin-magic-link-v5 5.3.19 → 5.5.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 (33) hide show
  1. package/CHANGELOG.md +215 -0
  2. package/LICENSE +0 -6
  3. package/README.md +108 -0
  4. package/dist/{_chunks/index-BLVWydMU.mjs → admin/index-2avmGJ5M.mjs} +1 -1
  5. package/dist/{_chunks/index-XzZ9gY5b.mjs → admin/index-BCopEXYL.mjs} +9 -11
  6. package/dist/{_chunks/index-DsBgtATx.js → admin/index-BDG7geOg.js} +1 -1
  7. package/dist/{_chunks/index-FtAOFA-A.mjs → admin/index-BdhtSEYZ.mjs} +1 -1
  8. package/dist/{_chunks/index-DLQHbyQZ.js → admin/index-DGUMEnkD.js} +1 -1
  9. package/dist/{_chunks/index-DJQQdmfZ.js → admin/index-DYLdjufr.js} +9 -11
  10. package/dist/{_chunks/index-B2-UNgqO.js → admin/index-KsidtTDP.js} +1 -1
  11. package/dist/{_chunks/index-D4iiJVPc.mjs → admin/index-mocjHxcq.mjs} +1 -1
  12. package/dist/admin/index.js +3 -2
  13. package/dist/admin/index.mjs +1 -1
  14. package/dist/server/index.js +11 -28997
  15. package/dist/server/index.mjs +11 -28966
  16. package/package.json +51 -28
  17. package/strapi-admin.js +3 -0
  18. /package/dist/{_chunks → admin}/LicenseGuard-5sMwgS6j.mjs +0 -0
  19. /package/dist/{_chunks → admin}/LicenseGuard-DqyOwTlf.js +0 -0
  20. /package/dist/{_chunks → admin}/LicensePage-2M-vOJX8.js +0 -0
  21. /package/dist/{_chunks → admin}/LicensePage-CCNW2hT6.mjs +0 -0
  22. /package/dist/{_chunks → admin}/de-BSOk5suQ.js +0 -0
  23. /package/dist/{_chunks → admin}/de-CwhYs3O3.mjs +0 -0
  24. /package/dist/{_chunks → admin}/en-DnvSpXvu.js +0 -0
  25. /package/dist/{_chunks → admin}/en-gXXgGDV1.mjs +0 -0
  26. /package/dist/{_chunks → admin}/es-B-tnwByt.js +0 -0
  27. /package/dist/{_chunks → admin}/es-DG5gW3RZ.mjs +0 -0
  28. /package/dist/{_chunks → admin}/fr-BKo8t7Fx.js +0 -0
  29. /package/dist/{_chunks → admin}/fr-BQn1OHOR.mjs +0 -0
  30. /package/dist/{_chunks → admin}/index-B8urUtiz.mjs +0 -0
  31. /package/dist/{_chunks → admin}/index-PgHpSdc8.js +0 -0
  32. /package/dist/{_chunks → admin}/pt-CjEkXBAz.js +0 -0
  33. /package/dist/{_chunks → admin}/pt-trziAOzT.mjs +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,215 @@
1
+ # [5.5.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.4.0...v5.5.0) (2026-04-21)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **deps:** move baileys to optionalDependencies + bump runtime deps ([b1716b2](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/b1716b22cb905aaa52fa5c7bfea5092ef722fc91)), closes [package.json#exports](https://github.com/package.json/issues/exports)
7
+ * **deps:** pin styled-components to ^6.3.9 to avoid npm ci ERESOLVE ([351cf6f](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/351cf6fd325bce0f7bc8df1bfa35895c81c326b9))
8
+ * **deps:** revert baileys back to dependencies, document protobufjs override for consumers ([260e144](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/260e1441959dfaa1bdc31550b76f4849854cc6c6))
9
+ * **enduser:** harden magic-link login/OTP flow (no enumeration, deterministic email lookup, clean delivery errors) ([707c45c](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/707c45cb4a007aa9c25b705c2b9e2f977749f126))
10
+ * **license:** wrap every license-server call in a 12s timeout with 1 retry ([6ab88ba](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/6ab88ba47e15c1d0feab53ff71866f7e5958d24a))
11
+ * **security:** gate every admin route with hasPermissions (plugin::magic-link.access) ([db821ef](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/db821ef24a46d5f5ccbebb452803dcab057123ff))
12
+
13
+
14
+ ### Features
15
+
16
+ * **security,settings:** otp binding, crypto hardening, wire-up dead settings ([90dc76d](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/90dc76d3cb77fe6bc2272155b43272e6541ab91f))
17
+
18
+ # [5.4.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.20...v5.4.0) (2026-04-15)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **rbac:** keep routes functional, only hide UI for unpermitted roles ([5f230cb](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/5f230cbc4432477bea6c9c3886205d058fa90f10))
24
+ * **routes:** restore original open policies for end-user facing routes ([30d7fb5](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/30d7fb5ec77c1576068052ca92e4fe9fb4771fbc))
25
+
26
+
27
+ ### Features
28
+
29
+ * **rbac:** add access permission and secure all admin routes ([7e68283](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/7e6828333a26f64612f0cf1831bdc2f535fb308f))
30
+
31
+ ## [5.3.20](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.19...v5.3.20) (2026-02-27)
32
+
33
+
34
+ ### Bug Fixes
35
+
36
+ * loosen peerDependencies to avoid conflicts with Strapi 5.37+ ([4ac6f96](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/4ac6f96493a408e8302655b94b0e93a8f4019ff4))
37
+ * security hardening - hash-based JWT storage, prefix token lookup, rate limiter rewrite ([7010255](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/701025549ef8f2af9d99d791c2eb143afab1a1c0))
38
+
39
+ ## [5.3.19](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.18...v5.3.19) (2026-02-14)
40
+
41
+
42
+ ### Bug Fixes
43
+
44
+ * resolve libsignal git+ssh dependency issue for CI/CD compatibility ([9c0d840](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/9c0d8403630806c10f6ea8e45de84d843d5bc206))
45
+
46
+ ## [5.3.18](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.17...v5.3.18) (2026-02-08)
47
+
48
+
49
+ ### Bug Fixes
50
+
51
+ * dark mode compatibility for LicensePage and LicenseGuard ([e3292b2](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/e3292b267ca1c1260c809ca6f7eed80be117b70a)), closes [#4945ff](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/4945ff)
52
+
53
+ ## [5.3.17](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.16...v5.3.17) (2026-02-07)
54
+
55
+
56
+ ### Bug Fixes
57
+
58
+ * replace all hardcoded theme colors with DS props and rgba for dark/light mode ([28b4f8e](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/28b4f8ee66e83012bb8037a4439dd393afe022e6)), closes [#BAE6FD](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/BAE6FD) [#BBF7D0](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/BBF7D0)
59
+
60
+ ## [5.3.16](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.15...v5.3.16) (2026-02-07)
61
+
62
+
63
+ ### Bug Fixes
64
+
65
+ * use Strapi DS tokens for light+dark mode compatibility ([6a603f9](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/6a603f9da6ec07a962e785cd3410f088b8f83a9d))
66
+
67
+ ## [5.3.15](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.14...v5.3.15) (2026-02-07)
68
+
69
+
70
+ ### Bug Fixes
71
+
72
+ * settings page fully dark mode compatible ([4b8e402](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/4b8e4026ae9d654fe655c1a812601517e82de4cd)), closes [#E5E7EB](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/E5E7EB) [#D1D5DB](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/D1D5DB) [#E9D5FF](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/E9D5FF) [#d1d5db](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/d1d5db)
73
+
74
+ ## [5.3.14](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.13...v5.3.14) (2026-02-07)
75
+
76
+
77
+ ### Bug Fixes
78
+
79
+ * extend token modal dark mode compatible ([cb10fc6](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cb10fc64806d1a4e3055120740413a18dd5aa9b4))
80
+
81
+ ## [5.3.13](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.12...v5.3.13) (2026-02-07)
82
+
83
+
84
+ ### Bug Fixes
85
+
86
+ * token details modal fully dark mode compatible ([15da652](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/15da652fb8505017edc6b164d58dccb0325214dc))
87
+
88
+ ## [5.3.12](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.11...v5.3.12) (2026-02-07)
89
+
90
+
91
+ ### Bug Fixes
92
+
93
+ * white text color for reference badge in dark mode ([cac77ee](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cac77ee2be56d9f7fd82bd62b8a38f632891ea07))
94
+
95
+ ## [5.3.11](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.10...v5.3.11) (2026-02-07)
96
+
97
+
98
+ ### Bug Fixes
99
+
100
+ * reference badge readable in dark mode ([7bb8ab6](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/7bb8ab6ed6329c2e9c6dc8f67da4b851bff92667))
101
+
102
+ ## [5.3.10](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.9...v5.3.10) (2026-02-07)
103
+
104
+
105
+ ### Bug Fixes
106
+
107
+ * use expire_period from settings as default TTL in token creation ([f8cb324](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/f8cb324882807bba5fc84a2b6ab853022f988601))
108
+
109
+ ## [5.3.9](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.8...v5.3.9) (2026-02-07)
110
+
111
+
112
+ ### Bug Fixes
113
+
114
+ * replace Toggle with Switch component (Strapi DS v2) ([a0af2f0](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/a0af2f02ac745fb6cb001008eb4af6c91257848f))
115
+
116
+ ## [5.3.8](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.7...v5.3.8) (2026-02-07)
117
+
118
+
119
+ ### Bug Fixes
120
+
121
+ * update admin UI to Strapi Design System v2 patterns ([057f5a3](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/057f5a3d4f137bb4e91b48c6a8cca103afaf067e))
122
+
123
+ ## [5.3.7](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.6...v5.3.7) (2026-02-07)
124
+
125
+
126
+ ### Bug Fixes
127
+
128
+ * context whitelist/blacklist input fields not typeable ([5e87a8c](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/5e87a8c1a78347a68d2089a0440a3c5e30f5187b))
129
+
130
+ ## [5.3.6](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.5...v5.3.6) (2026-02-07)
131
+
132
+
133
+ ### Bug Fixes
134
+
135
+ * pass all context fields through on login instead of hard whitelist ([116a032](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/116a032ecfe567dea51ec35688a030ebdef8e113))
136
+
137
+ ## [5.3.5](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.4...v5.3.5) (2026-01-30)
138
+
139
+
140
+ ### Bug Fixes
141
+
142
+ * restore package-lock.json for CI/CD npm ci ([422f849](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/422f8492e4cc677381d9c2ad8f15a63bdfbb545b))
143
+ * update NumberInput onChange to onValueChange for Strapi Design System v2 ([2b2c91f](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/2b2c91fb3b51383cc540ee06b00325831855007e))
144
+ * use expire_period from settings instead of hardcoded 1 hour ([cc48094](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cc4809471ad7f1d890881534a223eab330475629))
145
+
146
+ ## [5.3.4](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.3...v5.3.4) (2026-01-27)
147
+
148
+
149
+ ### Bug Fixes
150
+
151
+ * use onValueChange for NumberInput components ([cbdfd3e](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cbdfd3e61efabdb3867fdfce8a4e58c2959ddbe8))
152
+
153
+ ## [5.3.3](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.2...v5.3.3) (2025-12-28)
154
+
155
+
156
+ ### Bug Fixes
157
+
158
+ * remove begservice references and support email ([f8a5581](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/f8a558181b62388c3019e654ad55edb118561a4e))
159
+
160
+ ## [5.3.2](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.1...v5.3.2) (2025-12-28)
161
+
162
+
163
+ ### Bug Fixes
164
+
165
+ * update repository URLs from begservice to Schero94 ([0a5169c](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/0a5169cefba54f1582026c2027aa905c3e6b13f9))
166
+
167
+ ## [5.3.1](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.0...v5.3.1) (2025-12-16)
168
+
169
+
170
+ ### Bug Fixes
171
+
172
+ * improve WhatsApp integration stability and documentation ([5730c07](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/5730c07710cd59d007341608e10758cf7a23f2aa))
173
+
174
+ # [5.3.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.2.0...v5.3.0) (2025-12-16)
175
+
176
+
177
+ ### Features
178
+
179
+ * add WhatsApp integration for magic links v5.2.7 ([bc2ba06](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/bc2ba068d5375002a068f49f3566fee3b3e5fbca))
180
+
181
+ # [5.2.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.4...v5.2.0) (2025-12-08)
182
+
183
+
184
+ ### Features
185
+
186
+ * enhance GitHub issue templates with plugin-specific fields and feature request template ([78f9829](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/78f982927fb970d6062a584b4b81294795330d0e))
187
+ * enhance pull request template with comprehensive sections and plugin-specific checklist ([e64eec1](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/e64eec1c2986776a9f7f00f14fec37b29acd9fb5))
188
+
189
+ ## [5.1.4](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.3...v5.1.4) (2025-12-08)
190
+
191
+
192
+ ### Bug Fixes
193
+
194
+ * move semantic-release to devDependencies and add GitHub templates ([a942b79](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/a942b791a401c48f9c7450183c9ba57b4938a777))
195
+
196
+ ## [5.1.3](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.2...v5.1.3) (2025-12-05)
197
+
198
+
199
+ ### Bug Fixes
200
+
201
+ * resolve strapi reference loss in setInterval cleanup functions ([1caae3f](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/1caae3f81c274d64ee4e15457d8989e4873e9875))
202
+
203
+ ## [5.1.2](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.1...v5.1.2) (2025-12-04)
204
+
205
+
206
+ ### Bug Fixes
207
+
208
+ * hide internal content-types from Content Manager (Strapi v5) ([6cc1309](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/6cc13095229800ad00c71964738215453e102f27))
209
+
210
+ ## [5.1.1](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.0...v5.1.1) (2025-12-04)
211
+
212
+
213
+ ### Bug Fixes
214
+
215
+ * trigger release for code quality improvements ([ed51892](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/ed51892f120278841b2798adb371fa8c56f88c7a))
package/LICENSE CHANGED
@@ -12,12 +12,6 @@ furnished to do so, subject to the following conditions:
12
12
  The above copyright notice and this permission notice shall be included in all
13
13
  copies or substantial portions of the Software.
14
14
 
15
- **ADDITIONAL CONDITION:**
16
- The license validation system (including but not limited to license-guard.js,
17
- license controller, and related API endpoints) must remain intact and functional.
18
- Removing, bypassing, or disabling the license validation system is strictly
19
- prohibited.
20
-
21
15
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
16
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
17
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
package/README.md CHANGED
@@ -783,6 +783,71 @@ npm install strapi-plugin-email-designer-5
783
783
 
784
784
  ---
785
785
 
786
+ ## 🔑 Required Environment Variables
787
+
788
+ The plugin stores secrets that must be protected across restarts and should
789
+ not be rotated with the rest of your Strapi key material. Two env vars are
790
+ **mandatory in production** (the plugin refuses to boot without them):
791
+
792
+ ```bash
793
+ # 32+ random bytes — used as AES-256 key for TOTP secrets.
794
+ # DO NOT ROTATE: existing TOTP secrets would become undecryptable.
795
+ MAGIC_LINK_ENCRYPTION_KEY=<hex from: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))">
796
+
797
+ # 16+ random bytes — pepper mixed into OTP code hashes to defeat
798
+ # rainbow-table attacks on stored 6-digit codes if the DB is ever leaked.
799
+ MAGIC_LINK_OTP_PEPPER=<hex from: node -e "console.log(require('crypto').randomBytes(24).toString('hex'))">
800
+ ```
801
+
802
+ In non-production environments (`NODE_ENV !== 'production'`) the plugin
803
+ falls back to derived values so local dev setups keep working — but a WARN
804
+ is logged once per process.
805
+
806
+ ---
807
+
808
+ ## 🌐 Reverse Proxy / Rate-Limit Trust
809
+
810
+ Rate limits and all audit logs identify the caller by `ctx.request.ip`,
811
+ which Koa derives from the TCP connection by default. If your Strapi is
812
+ behind a reverse proxy (nginx, Caddy, Cloudflare, ALB, …) you MUST:
813
+
814
+ 1. Enable proxy trust in `config/server.{js,ts}`:
815
+
816
+ ```js
817
+ module.exports = ({ env }) => ({
818
+ proxy: true, // Trust X-Forwarded-For from the proxy
819
+ // ... rest of config
820
+ });
821
+ ```
822
+
823
+ 2. Configure the proxy to **strip any incoming `X-Forwarded-For`** and
824
+ emit only its own value. Without this, an attacker can spoof the
825
+ header, defeating per-IP rate limits.
826
+
827
+ 3. If you have multiple proxy hops, pin trust to the outermost ones via
828
+ Koa's `app.proxyIpHeader` / `app.maxIpsCount` (see Koa docs).
829
+
830
+ A misconfigured deployment will either:
831
+ - **Count all requests as the proxy's single IP** (everyone rate-limited together), or
832
+ - **Trust spoofed client IPs** (per-IP rate limit effectively disabled).
833
+
834
+ ---
835
+
836
+ ## 🔐 OTP Strict Binding
837
+
838
+ Starting with this release, `/otp/send`, `/otp/verify` and `/otp/resend`
839
+ require the client to present the `magicLinkToken` they received from
840
+ `/magic-link/login` when it returned `{ requiresOTP: true }`. This prevents
841
+ `/otp/send` from being abused as a standalone email-bombing vector against
842
+ arbitrary addresses and prevents `/otp/verify` from being a first-factor
843
+ login on its own.
844
+
845
+ If you have legacy integrations that must keep the old behaviour, disable
846
+ it via settings: `otp_strict_binding: false`. Doing so emits a WARN on
847
+ every request and is **not recommended**.
848
+
849
+ ---
850
+
786
851
  ## 🎨 Email Templates
787
852
 
788
853
  Customize your magic link emails using template variables:
@@ -1008,6 +1073,49 @@ If this plugin saves you time and you'd like to support development:
1008
1073
 
1009
1074
  ---
1010
1075
 
1076
+ ## Security Advisories & Dependency Overrides
1077
+
1078
+ This plugin ships with a first-party dependency tree audited on every
1079
+ release, but two transitive paths are governed by upstream packages we
1080
+ do not control. If your own `npm audit` flags any of the following,
1081
+ add the matching entry to your **Strapi project's** `package.json`
1082
+ (not this plugin's — npm `overrides` only take effect on the
1083
+ root project):
1084
+
1085
+ ```jsonc
1086
+ {
1087
+ "overrides": {
1088
+ // GHSA-xq3m-2v4x-88gg — protobufjs <7.5.5 arbitrary code execution.
1089
+ // Reaches us via @whiskeysockets/baileys → libsignal → protobufjs.
1090
+ // We already ship this override for local development; apply it in
1091
+ // your Strapi project so the fix propagates to the installed tree.
1092
+ "protobufjs": "^7.5.5",
1093
+
1094
+ // Optional: if you do not use the WhatsApp delivery feature, you
1095
+ // can also skip installing @whiskeysockets/baileys altogether:
1096
+ // npm install --omit=optional
1097
+ // (The Magic-Link code path detects the missing module and
1098
+ // disables the WhatsApp controller at runtime — the rest of the
1099
+ // plugin keeps working.)
1100
+ }
1101
+ }
1102
+ ```
1103
+
1104
+ After editing `package.json`, run:
1105
+
1106
+ ```bash
1107
+ rm -rf node_modules package-lock.json
1108
+ npm install
1109
+ npm audit
1110
+ ```
1111
+
1112
+ The critical `protobufjs` advisory disappears once the override is in
1113
+ place. The remaining `@strapi/design-system → lodash` advisory is a
1114
+ Strapi-core issue and will clear up automatically when you upgrade
1115
+ `@strapi/strapi` to the latest patch release.
1116
+
1117
+ ---
1118
+
1011
1119
  <div align="center">
1012
1120
 
1013
1121
  **Made with ❤️ by [Schero94](https://github.com/Schero94)**
@@ -5,7 +5,7 @@ import { useIntl } from "react-intl";
5
5
  import { Flex, Loader, Box, Typography, Button, TextInput, Badge } from "@strapi/design-system";
6
6
  import { Phone, Check, Message, ArrowClockwise } from "@strapi/icons";
7
7
  import { useNotification, useFetchClient } from "@strapi/strapi/admin";
8
- import { g as getTrad } from "./index-XzZ9gY5b.mjs";
8
+ import { g as getTrad } from "./index-BCopEXYL.mjs";
9
9
  const theme = {
10
10
  colors: {
11
11
  primary: { 700: "#075985", 100: "#E0F2FE", 50: "#F0F9FF" },
@@ -17,9 +17,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
17
17
  );
18
18
  });
19
19
  };
20
- const strapi = {
21
- name: "magic-link"
22
- };
20
+ const strapi = { "name": "magic-link" };
23
21
  const pluginPkg = {
24
22
  strapi
25
23
  };
@@ -33,6 +31,7 @@ const Initializer = ({ setPlugin }) => {
33
31
  };
34
32
  const PluginIcon = () => /* @__PURE__ */ jsx(Key, {});
35
33
  const pluginPermissions = {
34
+ access: [{ action: "plugin::magic-link.access", subject: null }],
36
35
  readSettings: [{ action: "plugin::magic-link.settings.read", subject: null }]
37
36
  };
38
37
  const getTrad = (id) => {
@@ -59,10 +58,9 @@ const index = {
59
58
  },
60
59
  Component: () => import(
61
60
  /* webpackChunkName: "magic-link-tokens" */
62
- "./index-FtAOFA-A.mjs"
61
+ "./index-BdhtSEYZ.mjs"
63
62
  ),
64
- permissions: []
65
- // Leeres Array = keine Permission-Prüfung nötig
63
+ permissions: pluginPermissions.access
66
64
  });
67
65
  app.createSettingSection(
68
66
  {
@@ -82,7 +80,7 @@ const index = {
82
80
  to: `${PLUGIN_ID}/config`,
83
81
  Component: () => import(
84
82
  /* webpackChunkName: "magic-link-settings" */
85
- "./index-D4iiJVPc.mjs"
83
+ "./index-mocjHxcq.mjs"
86
84
  ),
87
85
  permissions: pluginPermissions.readSettings
88
86
  },
@@ -97,7 +95,7 @@ const index = {
97
95
  /* webpackChunkName: "magic-link-license" */
98
96
  "./index-B8urUtiz.mjs"
99
97
  ),
100
- permissions: []
98
+ permissions: pluginPermissions.access
101
99
  },
102
100
  {
103
101
  intlLabel: {
@@ -110,7 +108,7 @@ const index = {
110
108
  /* webpackChunkName: "magic-link-upgrade" */
111
109
  "./LicensePage-CCNW2hT6.mjs"
112
110
  ),
113
- permissions: []
111
+ permissions: pluginPermissions.access
114
112
  },
115
113
  {
116
114
  intlLabel: {
@@ -121,9 +119,9 @@ const index = {
121
119
  to: `${PLUGIN_ID}/whatsapp`,
122
120
  Component: () => import(
123
121
  /* webpackChunkName: "magic-link-whatsapp" */
124
- "./index-BLVWydMU.mjs"
122
+ "./index-2avmGJ5M.mjs"
125
123
  ),
126
- permissions: []
124
+ permissions: pluginPermissions.access
127
125
  }
128
126
  ]
129
127
  );
@@ -7,7 +7,7 @@ const styled = require("styled-components");
7
7
  const reactIntl = require("react-intl");
8
8
  const designSystem = require("@strapi/design-system");
9
9
  const icons = require("@strapi/icons");
10
- const index = require("./index-DJQQdmfZ.js");
10
+ const index = require("./index-DYLdjufr.js");
11
11
  const admin = require("@strapi/strapi/admin");
12
12
  const LicenseGuard = require("./LicenseGuard-DqyOwTlf.js");
13
13
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
@@ -5,7 +5,7 @@ import styled, { keyframes, css } from "styled-components";
5
5
  import { useIntl } from "react-intl";
6
6
  import { Box, Flex, Typography, Button, TextInput, Textarea, Checkbox, IconButton, Loader, Searchbar, SingleSelect, SingleSelectOption, Thead, Tr, Th, Tbody, Td, Pagination, PreviousLink, PageLink, NextLink, Table, Badge, VisuallyHidden, Main } from "@strapi/design-system";
7
7
  import { Cross, Sparkle, Check, Shield, Clock, Lock, Trash, ArrowClockwise, CaretDown, User, Monitor, Calendar, Plus, Earth, WarningCircle, Server, Eye, Mail, Cog, Key, Link } from "@strapi/icons";
8
- import { g as getTrad, P as PLUGIN_ID } from "./index-XzZ9gY5b.mjs";
8
+ import { g as getTrad, P as PLUGIN_ID } from "./index-BCopEXYL.mjs";
9
9
  import { useFetchClient, useNotification } from "@strapi/strapi/admin";
10
10
  import { L as LicenseGuard, a as LanguageProvider } from "./LicenseGuard-5sMwgS6j.mjs";
11
11
  const CreateTokenModal = ({ isOpen, onClose, onSubmit, formData, setFormData }) => {
@@ -7,7 +7,7 @@ const reactIntl = require("react-intl");
7
7
  const designSystem = require("@strapi/design-system");
8
8
  const icons = require("@strapi/icons");
9
9
  const admin = require("@strapi/strapi/admin");
10
- const index = require("./index-DJQQdmfZ.js");
10
+ const index = require("./index-DYLdjufr.js");
11
11
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
12
12
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
13
13
  const theme = {
@@ -18,9 +18,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
18
18
  );
19
19
  });
20
20
  };
21
- const strapi = {
22
- name: "magic-link"
23
- };
21
+ const strapi = { "name": "magic-link" };
24
22
  const pluginPkg = {
25
23
  strapi
26
24
  };
@@ -34,6 +32,7 @@ const Initializer = ({ setPlugin }) => {
34
32
  };
35
33
  const PluginIcon = () => /* @__PURE__ */ jsxRuntime.jsx(icons.Key, {});
36
34
  const pluginPermissions = {
35
+ access: [{ action: "plugin::magic-link.access", subject: null }],
37
36
  readSettings: [{ action: "plugin::magic-link.settings.read", subject: null }]
38
37
  };
39
38
  const getTrad = (id) => {
@@ -60,10 +59,9 @@ const index = {
60
59
  },
61
60
  Component: () => Promise.resolve().then(() => require(
62
61
  /* webpackChunkName: "magic-link-tokens" */
63
- "./index-DsBgtATx.js"
62
+ "./index-BDG7geOg.js"
64
63
  )),
65
- permissions: []
66
- // Leeres Array = keine Permission-Prüfung nötig
64
+ permissions: pluginPermissions.access
67
65
  });
68
66
  app.createSettingSection(
69
67
  {
@@ -83,7 +81,7 @@ const index = {
83
81
  to: `${PLUGIN_ID}/config`,
84
82
  Component: () => Promise.resolve().then(() => require(
85
83
  /* webpackChunkName: "magic-link-settings" */
86
- "./index-B2-UNgqO.js"
84
+ "./index-KsidtTDP.js"
87
85
  )),
88
86
  permissions: pluginPermissions.readSettings
89
87
  },
@@ -98,7 +96,7 @@ const index = {
98
96
  /* webpackChunkName: "magic-link-license" */
99
97
  "./index-PgHpSdc8.js"
100
98
  )),
101
- permissions: []
99
+ permissions: pluginPermissions.access
102
100
  },
103
101
  {
104
102
  intlLabel: {
@@ -111,7 +109,7 @@ const index = {
111
109
  /* webpackChunkName: "magic-link-upgrade" */
112
110
  "./LicensePage-2M-vOJX8.js"
113
111
  )),
114
- permissions: []
112
+ permissions: pluginPermissions.access
115
113
  },
116
114
  {
117
115
  intlLabel: {
@@ -122,9 +120,9 @@ const index = {
122
120
  to: `${PLUGIN_ID}/whatsapp`,
123
121
  Component: () => Promise.resolve().then(() => require(
124
122
  /* webpackChunkName: "magic-link-whatsapp" */
125
- "./index-DLQHbyQZ.js"
123
+ "./index-DGUMEnkD.js"
126
124
  )),
127
- permissions: []
125
+ permissions: pluginPermissions.access
128
126
  }
129
127
  ]
130
128
  );
@@ -7,7 +7,7 @@ const reactIntl = require("react-intl");
7
7
  const designSystem = require("@strapi/design-system");
8
8
  const icons = require("@strapi/icons");
9
9
  const admin = require("@strapi/strapi/admin");
10
- const index = require("./index-DJQQdmfZ.js");
10
+ const index = require("./index-DYLdjufr.js");
11
11
  const LicenseGuard = require("./LicenseGuard-DqyOwTlf.js");
12
12
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
13
13
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
@@ -5,7 +5,7 @@ import { useIntl } from "react-intl";
5
5
  import { Box, Typography, Flex, Button, Accordion, SingleSelect, SingleSelectOption, Grid, Switch, NumberInput, TextInput, Divider, Textarea, Badge } from "@strapi/design-system";
6
6
  import { Check, Cog, Lightning, Shield, Mail, CheckCircle, Code, Link, Lock, Key } from "@strapi/icons";
7
7
  import { useNotification, useFetchClient } from "@strapi/strapi/admin";
8
- import { g as getTrad } from "./index-XzZ9gY5b.mjs";
8
+ import { g as getTrad } from "./index-BCopEXYL.mjs";
9
9
  import { u as usePluginLanguage, L as LicenseGuard, a as LanguageProvider } from "./LicenseGuard-5sMwgS6j.mjs";
10
10
  const EMAIL_TEMPLATES = {
11
11
  modern: {
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
- const index = require("../_chunks/index-DJQQdmfZ.js");
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const index = require("./index-DYLdjufr.js");
3
4
  require("@strapi/icons");
4
- module.exports = index.index;
5
+ exports.default = index.index;
@@ -1,4 +1,4 @@
1
- import { i } from "../_chunks/index-XzZ9gY5b.mjs";
1
+ import { i } from "./index-BCopEXYL.mjs";
2
2
  import "@strapi/icons";
3
3
  export {
4
4
  i as default