keycloakify 7.11.0 → 7.11.2

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.
package/README.md CHANGED
@@ -44,22 +44,30 @@
44
44
  We are exclusively sponsored by [Cloud IAM](https://www.cloud-iam.com), a French company offering Keycloak as a service.
45
45
  Their dedicated support helps us continue the development and maintenance of this project.
46
46
 
47
- [Cloud IAM](https://www.cloud-iam.com/) provides the following services:
47
+ [Cloud IAM](https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github) provides the following services:
48
48
 
49
49
  - Simplify and secure your Keycloak Identity and Access Management. Keycloak as a Service.
50
50
  - Custom theme building for your brand using Keycloakify.
51
51
 
52
+ <div align="center">
53
+
54
+
55
+
56
+ </div>
57
+
58
+ <div align="center">
59
+
60
+ ![Logo Light](https://user-images.githubusercontent.com/6702424/234135799-68684c33-4ec5-48d4-8763-0f3922c86643.png#gh-light-mode-only)
61
+
62
+ </div>
63
+
52
64
  <p align="center">
53
- <a href="https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github">
54
- <img src="https://user-images.githubusercontent.com/6702424/233476937-e37b1dc6-5a1c-4a0d-ba02-61c2ce62ffb6.png" alt="Cloud IAM Logo" width="350"/>
55
- </a>
56
- <br/>
57
- <i>Use promo code <code>keycloakify5</code> </i>
65
+ <i>Checkout <a href="https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github">Cloud IAM</a> and use promo code <code>keycloakify5</code></i>
58
66
  <br/>
59
67
  <i>5% of your annual subscription will be donated to us, and you'll get 5% off too.</i>
60
68
  </p>
61
69
 
62
- Thank you, [Cloud IAM](https://www.cloud-iam.com/), for your support!
70
+ Thank you, [Cloud IAM](https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github), for your support!
63
71
 
64
72
  ## Contributors ✨
65
73
 
@@ -108,10 +116,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
108
116
  You are now expected to have a `"prepare": "copy-keycloak-resources-to-public",` in your package.json scripts.
109
117
  This script will create `public/keycloak-assets` when you run `yarn install` (If you are using another package manager
110
118
  like `pnpm` makes sure that `"prepare"` is actually ran.)
111
- [See the updated starter](https://github.com/keycloakify/keycloakify-starter/blob/94532fcf10bf8b19e0873be8575fd28a8958a806/package.json#L11).
112
- `public/keycloak-assets` shouldn't be tracked by GIT and is automatically ignored.
119
+ [See the updated starter](https://github.com/keycloakify/keycloakify-starter/blob/94532fcf10bf8b19e0873be8575fd28a8958a806/package.json#L11). `public/keycloak-assets` shouldn't be tracked by GIT and is automatically ignored.
113
120
 
114
- ## 7.7
121
+ ## 7.7
115
122
 
116
123
  - Better storybook support, see [the starter project](https://github.com/keycloakify/keycloakify-starter).
117
124
 
@@ -62,6 +62,15 @@ var __read = (this && this.__read) || function (o, n) {
62
62
  }
63
63
  return ar;
64
64
  };
65
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
+ if (ar || !(i in from)) {
68
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
+ ar[i] = from[i];
70
+ }
71
+ }
72
+ return to.concat(ar || Array.prototype.slice.call(from));
73
+ };
65
74
  var __importDefault = (this && this.__importDefault) || function (mod) {
66
75
  return (mod && mod.__esModule) ? mod : { "default": mod };
67
76
  };
@@ -102,10 +111,34 @@ function exists(path) {
102
111
  });
103
112
  });
104
113
  }
114
+ function ensureArray(arg0) {
115
+ return Array.isArray(arg0) ? arg0 : typeof arg0 === "undefined" ? [] : [arg0];
116
+ }
117
+ function ensureSingleOrNone(arg0) {
118
+ if (!Array.isArray(arg0))
119
+ return arg0;
120
+ if (arg0.length === 0)
121
+ return undefined;
122
+ if (arg0.length === 1)
123
+ return arg0[0];
124
+ throw new Error("Illegal configuration, expected a single value but found multiple: " + arg0.map(String).join(", "));
125
+ }
126
+ var npmConfigReducer = function (cfg, _a) {
127
+ var _b, _c;
128
+ var _d = __read(_a, 2), key = _d[0], value = _d[1];
129
+ return key in cfg ? __assign(__assign({}, cfg), (_b = {}, _b[key] = __spreadArray(__spreadArray([], __read(ensureArray(cfg[key])), false), [value], false), _b)) : __assign(__assign({}, cfg), (_c = {}, _c[key] = value, _c));
130
+ };
105
131
  /**
106
132
  * Get npm configuration as map
107
133
  */
108
134
  function getNmpConfig() {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ return __generator(this, function (_a) {
137
+ return [2 /*return*/, readNpmConfig().then(parseNpmConfig)];
138
+ });
139
+ });
140
+ }
141
+ function readNpmConfig() {
109
142
  return __awaiter(this, void 0, void 0, function () {
110
143
  var stdout;
111
144
  return __generator(this, function (_a) {
@@ -113,38 +146,69 @@ function getNmpConfig() {
113
146
  case 0: return [4 /*yield*/, exec("npm config get", { encoding: "utf8" })];
114
147
  case 1:
115
148
  stdout = (_a.sent()).stdout;
116
- return [2 /*return*/, stdout
117
- .split("\n")
118
- .filter(function (line) { return !line.startsWith(";"); })
119
- .map(function (line) { return line.trim(); })
120
- .map(function (line) { return line.split("=", 2); })
121
- .reduce(function (cfg, _a) {
122
- var _b;
123
- var _c = __read(_a, 2), key = _c[0], value = _c[1];
124
- return (__assign(__assign({}, cfg), (_b = {}, _b[key] = value, _b)));
125
- }, {})];
149
+ return [2 /*return*/, stdout];
150
+ }
151
+ });
152
+ });
153
+ }
154
+ function parseNpmConfig(stdout) {
155
+ return stdout
156
+ .split("\n")
157
+ .filter(function (line) { return !line.startsWith(";"); })
158
+ .map(function (line) { return line.trim(); })
159
+ .map(function (line) { return line.split("=", 2); })
160
+ .reduce(npmConfigReducer, {});
161
+ }
162
+ function maybeBoolean(arg0) {
163
+ return typeof arg0 === "undefined" ? undefined : Boolean(arg0);
164
+ }
165
+ function chunks(arr, size) {
166
+ if (size === void 0) { size = 2; }
167
+ return arr.map(function (_, i) { return i % size == 0 && arr.slice(i, i + size); }).filter(Boolean);
168
+ }
169
+ function readCafile(cafile) {
170
+ return __awaiter(this, void 0, void 0, function () {
171
+ var cafileContent;
172
+ return __generator(this, function (_a) {
173
+ switch (_a.label) {
174
+ case 0: return [4 /*yield*/, (0, promises_1.readFile)(cafile, "utf-8")];
175
+ case 1:
176
+ cafileContent = _a.sent();
177
+ return [2 /*return*/, chunks(cafileContent.split(/(-----END CERTIFICATE-----)/), 2).map(function (ca) { return ca.join("").replace(/^\n/, "").replace(/\n/g, "\\n"); })];
126
178
  }
127
179
  });
128
180
  });
129
181
  }
130
182
  /**
131
- * Get proxy configuration from npm config files. Note that we don't care about
183
+ * Get proxy and ssl configuration from npm config files. Note that we don't care about
132
184
  * proxy config in env vars, because make-fetch-happen will do that for us.
133
185
  *
134
186
  * @returns proxy configuration
135
187
  */
136
- function getNpmProxyConfig() {
137
- var _a, _b;
188
+ function getFetchOptions() {
189
+ var _a, _b, _c;
138
190
  return __awaiter(this, void 0, void 0, function () {
139
- var cfg, proxy, noProxy;
140
- return __generator(this, function (_c) {
141
- switch (_c.label) {
191
+ var cfg, proxy, noProxy, strictSSL, cert, ca, cafile, _d, _e, _f, _g;
192
+ return __generator(this, function (_h) {
193
+ switch (_h.label) {
142
194
  case 0: return [4 /*yield*/, getNmpConfig()];
143
195
  case 1:
144
- cfg = _c.sent();
145
- proxy = (_a = cfg["https-proxy"]) !== null && _a !== void 0 ? _a : cfg["proxy"];
196
+ cfg = _h.sent();
197
+ proxy = ensureSingleOrNone((_a = cfg["https-proxy"]) !== null && _a !== void 0 ? _a : cfg["proxy"]);
146
198
  noProxy = (_b = cfg["noproxy"]) !== null && _b !== void 0 ? _b : cfg["no-proxy"];
147
- return [2 /*return*/, { proxy: proxy, noProxy: noProxy }];
199
+ strictSSL = maybeBoolean(ensureSingleOrNone(cfg["strict-ssl"]));
200
+ cert = cfg["cert"];
201
+ ca = ensureArray((_c = cfg["ca"]) !== null && _c !== void 0 ? _c : cfg["ca[]"]);
202
+ cafile = ensureSingleOrNone(cfg["cafile"]);
203
+ if (!(typeof cafile !== "undefined" && cafile !== "null")) return [3 /*break*/, 3];
204
+ _e = (_d = ca.push).apply;
205
+ _f = [ca];
206
+ _g = [[]];
207
+ return [4 /*yield*/, readCafile(cafile)];
208
+ case 2:
209
+ _e.apply(_d, _f.concat([__spreadArray.apply(void 0, _g.concat([__read.apply(void 0, [(_h.sent())]), false]))]));
210
+ _h.label = 3;
211
+ case 3: return [2 /*return*/, { proxy: proxy, noProxy: noProxy, strictSSL: strictSSL, cert: cert, ca: ca.length === 0 ? undefined : ca }];
148
212
  }
149
213
  });
150
214
  });
@@ -152,7 +216,7 @@ function getNpmProxyConfig() {
152
216
  function downloadAndUnzip(params) {
153
217
  var _a, _b;
154
218
  return __awaiter(this, void 0, void 0, function () {
155
- var url, destDirPath, pathOfDirToExtractInArchive, downloadHash, projectRoot, cacheRoot, zipFilePath, extractDirPath, proxyOpts, response;
219
+ var url, destDirPath, pathOfDirToExtractInArchive, downloadHash, projectRoot, cacheRoot, zipFilePath, extractDirPath, opts, response;
156
220
  return __generator(this, function (_c) {
157
221
  switch (_c.label) {
158
222
  case 0:
@@ -165,10 +229,10 @@ function downloadAndUnzip(params) {
165
229
  return [4 /*yield*/, exists(zipFilePath)];
166
230
  case 1:
167
231
  if (!!(_c.sent())) return [3 /*break*/, 6];
168
- return [4 /*yield*/, getNpmProxyConfig()];
232
+ return [4 /*yield*/, getFetchOptions()];
169
233
  case 2:
170
- proxyOpts = _c.sent();
171
- return [4 /*yield*/, (0, make_fetch_happen_1.default)(url, proxyOpts)];
234
+ opts = _c.sent();
235
+ return [4 /*yield*/, (0, make_fetch_happen_1.default)(url, opts)];
172
236
  case 3:
173
237
  response = _c.sent();
174
238
  return [4 /*yield*/, (0, promises_1.mkdir)((0, path_1.dirname)(zipFilePath), { "recursive": true })];
@@ -1 +1 @@
1
- {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keycloakify",
3
- "version": "7.11.0",
3
+ "version": "7.11.2",
4
4
  "description": "Create Keycloak themes using React",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,6 +1,6 @@
1
1
  import { exec as execCallback } from "child_process";
2
2
  import { createHash } from "crypto";
3
- import { mkdir, stat, writeFile } from "fs/promises";
3
+ import { mkdir, readFile, stat, writeFile } from "fs/promises";
4
4
  import fetch, { type FetchOptions } from "make-fetch-happen";
5
5
  import { dirname as pathDirname, join as pathJoin } from "path";
6
6
  import { assert } from "tsafe";
@@ -25,32 +25,75 @@ async function exists(path: string) {
25
25
  }
26
26
  }
27
27
 
28
+ function ensureArray<T>(arg0: T | T[]) {
29
+ return Array.isArray(arg0) ? arg0 : typeof arg0 === "undefined" ? [] : [arg0];
30
+ }
31
+
32
+ function ensureSingleOrNone<T>(arg0: T | T[]) {
33
+ if (!Array.isArray(arg0)) return arg0;
34
+ if (arg0.length === 0) return undefined;
35
+ if (arg0.length === 1) return arg0[0];
36
+ throw new Error("Illegal configuration, expected a single value but found multiple: " + arg0.map(String).join(", "));
37
+ }
38
+
39
+ type NPMConfig = Record<string, string | string[]>;
40
+
41
+ const npmConfigReducer = (cfg: NPMConfig, [key, value]: [string, string]) =>
42
+ key in cfg ? { ...cfg, [key]: [...ensureArray(cfg[key]), value] } : { ...cfg, [key]: value };
43
+
28
44
  /**
29
45
  * Get npm configuration as map
30
46
  */
31
- async function getNmpConfig(): Promise<Record<string, string>> {
47
+ async function getNmpConfig() {
48
+ return readNpmConfig().then(parseNpmConfig);
49
+ }
50
+
51
+ async function readNpmConfig() {
32
52
  const { stdout } = await exec("npm config get", { encoding: "utf8" });
53
+ return stdout;
54
+ }
55
+
56
+ function parseNpmConfig(stdout: string) {
33
57
  return stdout
34
58
  .split("\n")
35
59
  .filter(line => !line.startsWith(";"))
36
60
  .map(line => line.trim())
37
- .map(line => line.split("=", 2))
38
- .reduce((cfg, [key, value]) => ({ ...cfg, [key]: value }), {});
61
+ .map(line => line.split("=", 2) as [string, string])
62
+ .reduce(npmConfigReducer, {} as NPMConfig);
63
+ }
64
+
65
+ function maybeBoolean(arg0: string | undefined) {
66
+ return typeof arg0 === "undefined" ? undefined : Boolean(arg0);
67
+ }
68
+
69
+ function chunks<T>(arr: T[], size: number = 2) {
70
+ return arr.map((_, i) => i % size == 0 && arr.slice(i, i + size)).filter(Boolean) as T[][];
71
+ }
72
+
73
+ async function readCafile(cafile: string) {
74
+ const cafileContent = await readFile(cafile, "utf-8");
75
+ return chunks(cafileContent.split(/(-----END CERTIFICATE-----)/), 2).map(ca => ca.join("").replace(/^\n/, "").replace(/\n/g, "\\n"));
39
76
  }
40
77
 
41
78
  /**
42
- * Get proxy configuration from npm config files. Note that we don't care about
79
+ * Get proxy and ssl configuration from npm config files. Note that we don't care about
43
80
  * proxy config in env vars, because make-fetch-happen will do that for us.
44
81
  *
45
82
  * @returns proxy configuration
46
83
  */
47
- async function getNpmProxyConfig(): Promise<Pick<FetchOptions, "proxy" | "noProxy">> {
84
+ async function getFetchOptions(): Promise<Pick<FetchOptions, "proxy" | "noProxy" | "strictSSL" | "ca" | "cert">> {
48
85
  const cfg = await getNmpConfig();
49
86
 
50
- const proxy = cfg["https-proxy"] ?? cfg["proxy"];
87
+ const proxy = ensureSingleOrNone(cfg["https-proxy"] ?? cfg["proxy"]);
51
88
  const noProxy = cfg["noproxy"] ?? cfg["no-proxy"];
89
+ const strictSSL = maybeBoolean(ensureSingleOrNone(cfg["strict-ssl"]));
90
+ const cert = cfg["cert"];
91
+ const ca = ensureArray(cfg["ca"] ?? cfg["ca[]"]);
92
+ const cafile = ensureSingleOrNone(cfg["cafile"]);
93
+
94
+ if (typeof cafile !== "undefined" && cafile !== "null") ca.push(...(await readCafile(cafile)));
52
95
 
53
- return { proxy, noProxy };
96
+ return { proxy, noProxy, strictSSL, cert, ca: ca.length === 0 ? undefined : ca };
54
97
  }
55
98
 
56
99
  export async function downloadAndUnzip(params: { url: string; destDirPath: string; pathOfDirToExtractInArchive?: string }) {
@@ -63,8 +106,8 @@ export async function downloadAndUnzip(params: { url: string; destDirPath: strin
63
106
  const extractDirPath = pathJoin(cacheRoot, "keycloakify", "unzip", `_${downloadHash}`);
64
107
 
65
108
  if (!(await exists(zipFilePath))) {
66
- const proxyOpts = await getNpmProxyConfig();
67
- const response = await fetch(url, proxyOpts);
109
+ const opts = await getFetchOptions();
110
+ const response = await fetch(url, opts);
68
111
  await mkdir(pathDirname(zipFilePath), { "recursive": true });
69
112
  /**
70
113
  * The correct way to fix this is to upgrade node-fetch beyond 3.2.5