From 90c7d496055c99371dffb6374f2879250ee33de2 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Thu, 10 Nov 2022 12:43:14 +0100
Subject: [PATCH] auth: move back to the keycloak package from npm again

Instead of fetching it from the configured keycloak server.

We had this initially, but switched to the server variant to make
sure we are always compatible with the keycloak version.

Now upstream keycloak has deprecated this strategy and in Keycloak 22
the server provided js bundle will be removed.

So switch back to the npm package.
---
 packages/auth/package.json    |  1 +
 packages/auth/src/keycloak.js | 19 ++-----------------
 yarn.lock                     | 15 ++++++++++++++-
 3 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/packages/auth/package.json b/packages/auth/package.json
index f2c0f531..4c3f9dab 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -42,6 +42,7 @@
         "@dbp-toolkit/common": "^0.3.3",
         "@open-wc/scoped-elements": "^2.1.0",
         "event-target-shim": "^6.0.0",
+        "keycloak-js": "^20.0.1",
         "lit": "^2.0.0"
     },
     "scripts": {
diff --git a/packages/auth/src/keycloak.js b/packages/auth/src/keycloak.js
index 50b25d8f..81f9fbfb 100644
--- a/packages/auth/src/keycloak.js
+++ b/packages/auth/src/keycloak.js
@@ -1,20 +1,5 @@
 import {EventTarget} from 'event-target-shim'; // Because EventTarget() doesn't exist on Safari
 
-/**
- * Imports the keycloak JS API as if it was a module.
- *
- * @param baseUrl {string}
- */
-async function importKeycloak(baseUrl) {
-    const keycloakSrc = baseUrl + '/js/keycloak.min.js';
-    // Importing will write it to window so we take it from there
-    await import(keycloakSrc);
-    if (importKeycloak._keycloakMod !== undefined) return importKeycloak._keycloakMod;
-    importKeycloak._keycloakMod = window.Keycloak;
-    delete window.Keycloak;
-    return importKeycloak._keycloakMod;
-}
-
 const promiseTimeout = function (ms, promise) {
     let timeout = new Promise((resolve, reject) => {
         let id = setTimeout(() => {
@@ -157,9 +142,9 @@ export class KeycloakWrapper extends EventTarget {
     async _ensureInstance() {
         if (this._keycloak !== null) return;
 
-        const Keycloak = await importKeycloak(this._baseURL);
+        const Keycloak = (await import('keycloak-js')).default;
 
-        this._keycloak = Keycloak({
+        this._keycloak = new Keycloak({
             url: this._baseURL,
             realm: this._realm,
             clientId: this._clientId,
diff --git a/yarn.lock b/yarn.lock
index a148b1f4..44096d11 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2663,7 +2663,7 @@ base-64@^1.0.0:
   resolved "https://registry.yarnpkg.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a"
   integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==
 
-base64-js@^1.3.1:
+base64-js@^1.3.1, base64-js@^1.5.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
   integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@@ -5418,6 +5418,11 @@ js-sdsl@^4.1.4:
   resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a"
   integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==
 
+js-sha256@^0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966"
+  integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==
+
 js-tokens@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -5593,6 +5598,14 @@ karma@^6.0.0:
     ua-parser-js "^0.7.30"
     yargs "^16.1.1"
 
+keycloak-js@^20.0.1:
+  version "20.0.1"
+  resolved "https://registry.yarnpkg.com/keycloak-js/-/keycloak-js-20.0.1.tgz#3f73499a6b071d096f82ab74257b1b7429f53c8c"
+  integrity sha512-YNj0X0mmdLpqjB9W5DTAVDI14CzZs7RFn9T/t/g8Uq80OjaW2zZUis/g73aWwz04S3B6U6Vrg8h1wAMGbx2NQQ==
+  dependencies:
+    base64-js "^1.5.1"
+    js-sha256 "^0.9.0"
+
 kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-- 
GitLab