Changeset 59f404a in Klonkt for src/assets/js
- Timestamp:
- 09/04/2026 11:21:16 AM (5 days ago)
- Branches:
- main
- Children:
- 4425cc2
- Parents:
- b5a0268c
- Location:
- src/assets/js/mod
- Files:
-
- 3 edited
-
lib.js (modified) (1 diff)
-
paid-gate.js (modified) (1 diff)
-
paid-passkey.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/lib.js
rb5a0268c r59f404a 64 64 }); 65 65 } 66 67 /** 68 * De WebAuthn-bibliotheek erbij halen, vanuit JavaScript (shaer-0i6). 69 * 70 * Hij stond als `<script src>` in paid-gate.ejs en paid-passkey.ejs, en dat 71 * werkt alleen bij een volledige laadbeurt. Kom je op zo'n pagina via een link 72 * BINNEN de site, dan is het een htmx-fragment met de nonce van een ANDER 73 * verzoek, en weigert de CSP hem. Het gevolg was stil: de module laadde wel, 74 * vond `window.SimpleWebAuthnBrowser` niet, en de knop deed niets -- op het 75 * passkey- en betaalpad. 76 * 77 * Een dynamische import vanuit deze module mag wel: de shell startte hem met 78 * een geldige nonce, en `strict-dynamic` bestaat er juist voor dat vertrouwde 79 * scripts verder mogen laden. Het bestand is een UMD-bundel; zonder CommonJS 80 * of AMD zet die zichzelf op globalThis, dus na afloop staat de global er. 81 * 82 * Faalt het laden, dan geeft dit undefined terug en niet een fout: beide 83 * aanroepers hebben al een nette terugval voor "geen WebAuthn hier". 84 */ 85 export async function loadWebAuthn() { 86 if (window.SimpleWebAuthnBrowser) return window.SimpleWebAuthnBrowser; 87 try { await import('/assets/vendor/simplewebauthn-browser.umd.min.js'); } 88 catch (e) { console.warn('[paid] WebAuthn-bibliotheek laadt niet:', e && e.message); } 89 return window.SimpleWebAuthnBrowser; 90 } -
src/assets/js/mod/paid-gate.js
rb5a0268c r59f404a 5 5 // interpolatie kan niet in een statisch bestand. 6 6 7 import { pageData } from './lib.js';7 import { pageData, loadWebAuthn } from './lib.js'; 8 8 9 9 // Element-bedrading leeft zo lang als de pagina; de bootstrap roept init() 10 10 // aan bij elke paginawissel waarop deze module actief is (shaer-5s1). 11 export function init() { run(); } 11 // 12 // EERST de bibliotheek, dan pas bedraden (shaer-0i6): die stond als 13 // `<script src>` in de pagina en overleefde een htmx-navigatie niet. Wacht 14 // run() daar niet op, dan valt hij terug op "geen WebAuthn" en verbergt hij 15 // de ontgrendelknop op een pagina waar ontgrendelen gewoon kan. 16 export async function init() { await loadWebAuthn(); run(); } 12 17 13 18 function run() { -
src/assets/js/mod/paid-passkey.js
rb5a0268c r59f404a 5 5 // interpolatie kan niet in een statisch bestand. 6 6 7 import { pageData } from './lib.js';7 import { pageData, loadWebAuthn } from './lib.js'; 8 8 9 9 // Element-bedrading leeft zo lang als de pagina; de bootstrap roept init() 10 10 // aan bij elke paginawissel waarop deze module actief is (shaer-5s1). 11 export function init() { run(); } 11 // 12 // EERST de bibliotheek, dan pas bedraden (shaer-0i6): die stond als 13 // `<script src>` in de pagina en overleefde een htmx-navigatie niet. Wacht 14 // run() daar niet op, dan ziet hij de global nog niet staan en zet hij de 15 // knop uit terwijl er niets aan de hand is. 16 export async function init() { await loadWebAuthn(); run(); } 12 17 13 18 function run() {
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)