@telia-ace/alliance-internal-node-utilities 1.0.3-next.4 → 1.0.4-next.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.
- package/CHANGELOG.md +16 -0
- package/dist/index.cjs +442 -251
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +127 -0
- package/dist/index.d.ts +126 -8
- package/dist/{index.mjs → index.js} +403 -208
- package/dist/index.js.map +1 -0
- package/package.json +23 -23
- package/dist/auth/auth.middleware.d.ts +0 -14
- package/dist/auth/index.d.ts +0 -2
- package/dist/auth/tokens.d.ts +0 -19
- package/dist/constants/config.d.ts +0 -10
- package/dist/constants/headers.d.ts +0 -5
- package/dist/constants/index.d.ts +0 -2
- package/dist/distribution/cookie-policy.d.ts +0 -2
- package/dist/distribution/create-public-files.d.ts +0 -1
- package/dist/distribution/index.d.ts +0 -1
- package/dist/distribution/json-schemas.d.ts +0 -7
- package/dist/distribution/pkg-json.d.ts +0 -13
- package/dist/exceptions/alliance-gql.exception.d.ts +0 -7
- package/dist/exceptions/alliance.exception.d.ts +0 -7
- package/dist/exceptions/codes.d.ts +0 -35
- package/dist/exceptions/exception.filter.d.ts +0 -5
- package/dist/exceptions/index.d.ts +0 -4
- package/dist/get-app-manifests.d.ts +0 -2
- package/dist/logging/index.d.ts +0 -2
- package/dist/logging/logging.module.d.ts +0 -9
- package/dist/logging/logging.service.d.ts +0 -12
- package/dist/slugify.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/vite-css-import.plugin.d.ts +0 -2
|
@@ -1,19 +1,196 @@
|
|
|
1
|
-
import { InjectPinoLogger, LoggerModule as LoggerModule$1 } from 'nestjs-pino';
|
|
1
|
+
import { InjectPinoLogger, LoggerModule as LoggerModule$1, PinoLogger } from 'nestjs-pino';
|
|
2
2
|
export { LoggerErrorInterceptor } from 'nestjs-pino';
|
|
3
|
-
import
|
|
3
|
+
import { Store } from 'express-session';
|
|
4
4
|
import { auth } from 'express-openid-connect';
|
|
5
5
|
import { createClient } from 'redis';
|
|
6
6
|
import { sign } from 'jsonwebtoken';
|
|
7
7
|
import { validate } from 'jsonschema';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, rmSync } from 'node:fs';
|
|
9
|
+
import { resolve } from 'node:path';
|
|
10
10
|
import { GraphQLError } from 'graphql';
|
|
11
11
|
import { HttpStatus, HttpException, Catch, Injectable, Module } from '@nestjs/common';
|
|
12
12
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
13
13
|
import _slugify from 'slugify';
|
|
14
|
-
import { pipeline } from 'node:stream/promises';
|
|
15
14
|
|
|
16
|
-
var
|
|
15
|
+
var __defProp = Object.defineProperty;
|
|
16
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
17
|
+
var noop = /* @__PURE__ */ __name((_err, _data) => {
|
|
18
|
+
}, "noop");
|
|
19
|
+
var RedisStore = class RedisStore2 extends Store {
|
|
20
|
+
static {
|
|
21
|
+
__name(this, "RedisStore");
|
|
22
|
+
}
|
|
23
|
+
constructor(opts) {
|
|
24
|
+
super();
|
|
25
|
+
this.prefix = opts.prefix == null ? "sess:" : opts.prefix;
|
|
26
|
+
this.scanCount = opts.scanCount || 100;
|
|
27
|
+
this.serializer = opts.serializer || JSON;
|
|
28
|
+
this.ttl = opts.ttl || 86400;
|
|
29
|
+
this.disableTTL = opts.disableTTL || false;
|
|
30
|
+
this.disableTouch = opts.disableTouch || false;
|
|
31
|
+
this.client = this.normalizeClient(opts.client);
|
|
32
|
+
}
|
|
33
|
+
// Create a redis and ioredis compatible client
|
|
34
|
+
normalizeClient(client) {
|
|
35
|
+
let isRedis = "scanIterator" in client;
|
|
36
|
+
return {
|
|
37
|
+
get: (key) => client.get(key),
|
|
38
|
+
set: (key, val, ttl) => {
|
|
39
|
+
if (ttl) {
|
|
40
|
+
return isRedis ? client.set(key, val, {
|
|
41
|
+
EX: ttl
|
|
42
|
+
}) : client.set(key, val, "EX", ttl);
|
|
43
|
+
}
|
|
44
|
+
return client.set(key, val);
|
|
45
|
+
},
|
|
46
|
+
del: (key) => client.del(key),
|
|
47
|
+
expire: (key, ttl) => client.expire(key, ttl),
|
|
48
|
+
mget: (keys) => isRedis ? client.mGet(keys) : client.mget(keys),
|
|
49
|
+
scanIterator: (match, count) => {
|
|
50
|
+
if (isRedis)
|
|
51
|
+
return client.scanIterator({
|
|
52
|
+
MATCH: match,
|
|
53
|
+
COUNT: count
|
|
54
|
+
});
|
|
55
|
+
return async function* () {
|
|
56
|
+
let [c, xs] = await client.scan("0", "MATCH", match, "COUNT", count);
|
|
57
|
+
for (let key of xs)
|
|
58
|
+
yield key;
|
|
59
|
+
while (c !== "0") {
|
|
60
|
+
[c, xs] = await client.scan(c, "MATCH", match, "COUNT", count);
|
|
61
|
+
for (let key of xs)
|
|
62
|
+
yield key;
|
|
63
|
+
}
|
|
64
|
+
}();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async get(sid, cb = noop) {
|
|
69
|
+
let key = this.prefix + sid;
|
|
70
|
+
try {
|
|
71
|
+
let data = await this.client.get(key);
|
|
72
|
+
if (!data)
|
|
73
|
+
return cb();
|
|
74
|
+
return cb(null, await this.serializer.parse(data));
|
|
75
|
+
} catch (err) {
|
|
76
|
+
return cb(err);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async set(sid, sess, cb = noop) {
|
|
80
|
+
let key = this.prefix + sid;
|
|
81
|
+
let ttl = this._getTTL(sess);
|
|
82
|
+
try {
|
|
83
|
+
let val = this.serializer.stringify(sess);
|
|
84
|
+
if (ttl > 0) {
|
|
85
|
+
if (this.disableTTL)
|
|
86
|
+
await this.client.set(key, val);
|
|
87
|
+
else
|
|
88
|
+
await this.client.set(key, val, ttl);
|
|
89
|
+
return cb();
|
|
90
|
+
} else {
|
|
91
|
+
return this.destroy(sid, cb);
|
|
92
|
+
}
|
|
93
|
+
} catch (err) {
|
|
94
|
+
return cb(err);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async touch(sid, sess, cb = noop) {
|
|
98
|
+
let key = this.prefix + sid;
|
|
99
|
+
if (this.disableTouch || this.disableTTL)
|
|
100
|
+
return cb();
|
|
101
|
+
try {
|
|
102
|
+
await this.client.expire(key, this._getTTL(sess));
|
|
103
|
+
return cb();
|
|
104
|
+
} catch (err) {
|
|
105
|
+
return cb(err);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async destroy(sid, cb = noop) {
|
|
109
|
+
let key = this.prefix + sid;
|
|
110
|
+
try {
|
|
111
|
+
await this.client.del([
|
|
112
|
+
key
|
|
113
|
+
]);
|
|
114
|
+
return cb();
|
|
115
|
+
} catch (err) {
|
|
116
|
+
return cb(err);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async clear(cb = noop) {
|
|
120
|
+
try {
|
|
121
|
+
let keys = await this._getAllKeys();
|
|
122
|
+
if (!keys.length)
|
|
123
|
+
return cb();
|
|
124
|
+
await this.client.del(keys);
|
|
125
|
+
return cb();
|
|
126
|
+
} catch (err) {
|
|
127
|
+
return cb(err);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async length(cb = noop) {
|
|
131
|
+
try {
|
|
132
|
+
let keys = await this._getAllKeys();
|
|
133
|
+
return cb(null, keys.length);
|
|
134
|
+
} catch (err) {
|
|
135
|
+
return cb(err);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async ids(cb = noop) {
|
|
139
|
+
let len = this.prefix.length;
|
|
140
|
+
try {
|
|
141
|
+
let keys = await this._getAllKeys();
|
|
142
|
+
return cb(null, keys.map((k) => k.substring(len)));
|
|
143
|
+
} catch (err) {
|
|
144
|
+
return cb(err);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async all(cb = noop) {
|
|
148
|
+
let len = this.prefix.length;
|
|
149
|
+
try {
|
|
150
|
+
let keys = await this._getAllKeys();
|
|
151
|
+
if (keys.length === 0)
|
|
152
|
+
return cb(null, []);
|
|
153
|
+
let data = await this.client.mget(keys);
|
|
154
|
+
let results = data.reduce((acc, raw, idx) => {
|
|
155
|
+
if (!raw)
|
|
156
|
+
return acc;
|
|
157
|
+
let sess = this.serializer.parse(raw);
|
|
158
|
+
sess.id = keys[idx].substring(len);
|
|
159
|
+
acc.push(sess);
|
|
160
|
+
return acc;
|
|
161
|
+
}, []);
|
|
162
|
+
return cb(null, results);
|
|
163
|
+
} catch (err) {
|
|
164
|
+
return cb(err);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
_getTTL(sess) {
|
|
168
|
+
if (typeof this.ttl === "function") {
|
|
169
|
+
return this.ttl(sess);
|
|
170
|
+
}
|
|
171
|
+
let ttl;
|
|
172
|
+
if (sess && sess.cookie && sess.cookie.expires) {
|
|
173
|
+
let ms = Number(new Date(sess.cookie.expires)) - Date.now();
|
|
174
|
+
ttl = Math.ceil(ms / 1e3);
|
|
175
|
+
} else {
|
|
176
|
+
ttl = this.ttl;
|
|
177
|
+
}
|
|
178
|
+
return ttl;
|
|
179
|
+
}
|
|
180
|
+
async _getAllKeys() {
|
|
181
|
+
let pattern = this.prefix + "*";
|
|
182
|
+
let keys = [];
|
|
183
|
+
for await (let key of this.client.scanIterator(pattern, this.scanCount)) {
|
|
184
|
+
keys.push(key);
|
|
185
|
+
}
|
|
186
|
+
return keys;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
var esm_default = RedisStore;
|
|
190
|
+
|
|
191
|
+
// src/constants/config.ts
|
|
192
|
+
var SharedConfigKeys;
|
|
193
|
+
(function(SharedConfigKeys2) {
|
|
17
194
|
SharedConfigKeys2["AuthCookieName"] = "AUTH_COOKIE_NAME";
|
|
18
195
|
SharedConfigKeys2["AuthCookieSecret"] = "AUTH_COOKIE_SECRET";
|
|
19
196
|
SharedConfigKeys2["DbEndpoint"] = "DB_ENDPOINT";
|
|
@@ -22,33 +199,30 @@ var SharedConfigKeys = /* @__PURE__ */ ((SharedConfigKeys2) => {
|
|
|
22
199
|
SharedConfigKeys2["ServicePort"] = "SERVICE_PORT";
|
|
23
200
|
SharedConfigKeys2["RedisHost"] = "REDIS_HOST";
|
|
24
201
|
SharedConfigKeys2["RedisPassword"] = "REDIS_PASSWORD";
|
|
25
|
-
|
|
26
|
-
})(SharedConfigKeys || {});
|
|
202
|
+
})(SharedConfigKeys || (SharedConfigKeys = {}));
|
|
27
203
|
|
|
28
|
-
|
|
204
|
+
// src/constants/headers.ts
|
|
205
|
+
var AllianceHeaders;
|
|
206
|
+
(function(AllianceHeaders2) {
|
|
29
207
|
AllianceHeaders2["TargetUrl"] = "alliance-target-url";
|
|
30
208
|
AllianceHeaders2["TargetApp"] = "alliance-target-app";
|
|
31
209
|
AllianceHeaders2["TargetWorkspace"] = "alliance-target-workspace";
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
function authMiddleware(configService, {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
redisClient.connect().catch(console.error);
|
|
49
|
-
const redisStore = new RedisStore({
|
|
50
|
-
client: redisClient
|
|
51
|
-
});
|
|
210
|
+
})(AllianceHeaders || (AllianceHeaders = {}));
|
|
211
|
+
|
|
212
|
+
// src/auth/auth.middleware.ts
|
|
213
|
+
function authMiddleware(configService, { baseURL = "https://127.0.0.1", clientSecret, clientID = " ", authRequired = true, authorizationParams = {}, afterCallback, issuerBaseURL = "https://127.0.0.1", sessionCookiePath } = {}) {
|
|
214
|
+
let store;
|
|
215
|
+
const redisHostUrl = configService.get(SharedConfigKeys.RedisHost);
|
|
216
|
+
if (redisHostUrl) {
|
|
217
|
+
const redisClient = createClient({
|
|
218
|
+
url: configService.getOrThrow(SharedConfigKeys.RedisHost),
|
|
219
|
+
password: configService.get(SharedConfigKeys.RedisPassword)
|
|
220
|
+
});
|
|
221
|
+
redisClient.connect().catch(console.error);
|
|
222
|
+
store = new esm_default({
|
|
223
|
+
client: redisClient
|
|
224
|
+
});
|
|
225
|
+
}
|
|
52
226
|
return auth({
|
|
53
227
|
baseURL,
|
|
54
228
|
clientSecret,
|
|
@@ -60,47 +234,42 @@ function authMiddleware(configService, {
|
|
|
60
234
|
secret: configService.getOrThrow(SharedConfigKeys.AuthCookieSecret),
|
|
61
235
|
session: {
|
|
62
236
|
name: configService.getOrThrow(SharedConfigKeys.AuthCookieName),
|
|
63
|
-
|
|
237
|
+
// @ts-ignore
|
|
238
|
+
store,
|
|
239
|
+
cookie: {
|
|
240
|
+
path: sessionCookiePath
|
|
241
|
+
}
|
|
64
242
|
},
|
|
65
243
|
routes: {
|
|
66
244
|
callback: "/signin-oidc"
|
|
67
245
|
}
|
|
68
246
|
});
|
|
69
247
|
}
|
|
70
|
-
|
|
71
|
-
function createBearerToken({
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
"https://alliance.teliacompany.net/workspace": workspace.slug,
|
|
88
|
-
"https://alliance.teliacompany.net/workspace_name": workspace.name,
|
|
89
|
-
"https://alliance.teliacompany.net/tenant": workspace.slug,
|
|
90
|
-
"https://alliance.teliacompany.net/tenant_name": workspace.name
|
|
91
|
-
},
|
|
92
|
-
privateKey,
|
|
93
|
-
{
|
|
94
|
-
expiresIn: "1h",
|
|
95
|
-
algorithm: "RS256"
|
|
96
|
-
}
|
|
97
|
-
);
|
|
248
|
+
__name(authMiddleware, "authMiddleware");
|
|
249
|
+
function createBearerToken({ privateKey, aud, sub, name, user, workspace }) {
|
|
250
|
+
const jwt = sign({
|
|
251
|
+
iss: "Alliance",
|
|
252
|
+
aud,
|
|
253
|
+
sub,
|
|
254
|
+
name,
|
|
255
|
+
"https://alliance.teliacompany.net/user_type": user.type,
|
|
256
|
+
"https://alliance.teliacompany.net/user_privileges": user.permissions,
|
|
257
|
+
"https://alliance.teliacompany.net/workspace": workspace.slug,
|
|
258
|
+
"https://alliance.teliacompany.net/workspace_name": workspace.name,
|
|
259
|
+
"https://alliance.teliacompany.net/tenant": workspace.slug,
|
|
260
|
+
"https://alliance.teliacompany.net/tenant_name": workspace.name
|
|
261
|
+
}, privateKey, {
|
|
262
|
+
expiresIn: "1h",
|
|
263
|
+
algorithm: "RS256"
|
|
264
|
+
});
|
|
98
265
|
return `Bearer ${jwt}`;
|
|
99
266
|
}
|
|
267
|
+
__name(createBearerToken, "createBearerToken");
|
|
100
268
|
function getPrivateKey(configService) {
|
|
101
269
|
const privateKey = configService.getOrThrow(SharedConfigKeys.JwtPrivateKey);
|
|
102
270
|
return "-----BEGIN RSA PRIVATE KEY-----\n" + privateKey + "\n-----END RSA PRIVATE KEY-----";
|
|
103
271
|
}
|
|
272
|
+
__name(getPrivateKey, "getPrivateKey");
|
|
104
273
|
function createSystemUserToken(configService) {
|
|
105
274
|
return createBearerToken({
|
|
106
275
|
aud: "system",
|
|
@@ -117,7 +286,9 @@ function createSystemUserToken(configService) {
|
|
|
117
286
|
privateKey: getPrivateKey(configService)
|
|
118
287
|
});
|
|
119
288
|
}
|
|
289
|
+
__name(createSystemUserToken, "createSystemUserToken");
|
|
120
290
|
|
|
291
|
+
// src/distribution/cookie-policy.ts
|
|
121
292
|
function generateCookiePolicyHtml(appManifests) {
|
|
122
293
|
const cookiePolicyTableRows = [];
|
|
123
294
|
for (const appName in appManifests) {
|
|
@@ -132,8 +303,11 @@ function generateCookiePolicyHtml(appManifests) {
|
|
|
132
303
|
}
|
|
133
304
|
return cookiePolicyHtml.replace("{APP_COOKIES}", cookiePolicyTableRows.join(""));
|
|
134
305
|
}
|
|
306
|
+
__name(generateCookiePolicyHtml, "generateCookiePolicyHtml");
|
|
135
307
|
function createCookiePolicyTableRow(key, claimEntry) {
|
|
136
|
-
const rows = [
|
|
308
|
+
const rows = [
|
|
309
|
+
"<tr>"
|
|
310
|
+
];
|
|
137
311
|
const { category, purpose, lifespan } = claimEntry;
|
|
138
312
|
rows.push(`<td>${key}</td>`);
|
|
139
313
|
rows.push(`<td>${category}</td>`);
|
|
@@ -142,7 +316,8 @@ function createCookiePolicyTableRow(key, claimEntry) {
|
|
|
142
316
|
rows.push("</tr>");
|
|
143
317
|
return rows.join("");
|
|
144
318
|
}
|
|
145
|
-
|
|
319
|
+
__name(createCookiePolicyTableRow, "createCookiePolicyTableRow");
|
|
320
|
+
var cookiePolicyHtml = `
|
|
146
321
|
<!DOCTYPE html>
|
|
147
322
|
<html lang="en">
|
|
148
323
|
<head>
|
|
@@ -430,14 +605,8 @@ const cookiePolicyHtml = `
|
|
|
430
605
|
</body>
|
|
431
606
|
</html>
|
|
432
607
|
`;
|
|
433
|
-
|
|
434
608
|
function getJsonSchemas() {
|
|
435
|
-
const frameworkDistDirPath = resolve(
|
|
436
|
-
process.cwd(),
|
|
437
|
-
"node_modules",
|
|
438
|
-
"@telia-ace/alliance-framework",
|
|
439
|
-
"dist"
|
|
440
|
-
);
|
|
609
|
+
const frameworkDistDirPath = resolve(process.cwd(), "node_modules", "@telia-ace/alliance-framework", "dist");
|
|
441
610
|
const appConfigSchemaPath = resolve(frameworkDistDirPath, "config.schema.json");
|
|
442
611
|
const appManifestSchemaPath = resolve(frameworkDistDirPath, "manifest.schema.json");
|
|
443
612
|
const appConfigSchemaFile = readFileSync(appConfigSchemaPath).toString();
|
|
@@ -449,14 +618,17 @@ function getJsonSchemas() {
|
|
|
449
618
|
appManifest
|
|
450
619
|
};
|
|
451
620
|
}
|
|
452
|
-
|
|
621
|
+
__name(getJsonSchemas, "getJsonSchemas");
|
|
453
622
|
async function createTempModuleAndImport(moduleString, fileName) {
|
|
454
623
|
const file = resolve(process.cwd(), `${fileName}.mjs`);
|
|
455
624
|
writeFileSync(file, moduleString);
|
|
456
625
|
const importedModule = await import(`file:///${file}`);
|
|
457
|
-
rmSync(file, {
|
|
626
|
+
rmSync(file, {
|
|
627
|
+
force: true
|
|
628
|
+
});
|
|
458
629
|
return importedModule;
|
|
459
630
|
}
|
|
631
|
+
__name(createTempModuleAndImport, "createTempModuleAndImport");
|
|
460
632
|
async function getAppManifests(apps) {
|
|
461
633
|
const moduleStringParts = [];
|
|
462
634
|
const manifestImportVariables = [];
|
|
@@ -466,18 +638,18 @@ async function getAppManifests(apps) {
|
|
|
466
638
|
moduleStringParts.push(`import ${manifestImportVariable} from '${packageName}/manifest';`);
|
|
467
639
|
}
|
|
468
640
|
moduleStringParts.push(`export default [${manifestImportVariables.join(", ")}];`);
|
|
469
|
-
const result = await createTempModuleAndImport(
|
|
470
|
-
moduleStringParts.join("\n"),
|
|
471
|
-
"app-manifests"
|
|
472
|
-
);
|
|
641
|
+
const result = await createTempModuleAndImport(moduleStringParts.join("\n"), "app-manifests");
|
|
473
642
|
return result.default;
|
|
474
643
|
}
|
|
644
|
+
__name(getAppManifests, "getAppManifests");
|
|
475
645
|
|
|
646
|
+
// src/distribution/pkg-json.ts
|
|
476
647
|
function getPkgJson() {
|
|
477
648
|
const packageJson = resolve(process.cwd(), "package.json");
|
|
478
649
|
const pkgJsonFile = readFileSync(packageJson).toString();
|
|
479
650
|
return JSON.parse(pkgJsonFile);
|
|
480
651
|
}
|
|
652
|
+
__name(getPkgJson, "getPkgJson");
|
|
481
653
|
async function getManifests(pkgJson) {
|
|
482
654
|
if (!pkgJson || !pkgJson.alliance || !pkgJson.alliance.apps) {
|
|
483
655
|
throw new Error("Alliance apps not defined in package.json.");
|
|
@@ -488,12 +660,14 @@ async function getManifests(pkgJson) {
|
|
|
488
660
|
return acc;
|
|
489
661
|
}, {});
|
|
490
662
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
663
|
+
__name(getManifests, "getManifests");
|
|
664
|
+
|
|
665
|
+
// src/distribution/create-public-files.ts
|
|
666
|
+
var PUBLIC_DIR_NAME = "public";
|
|
667
|
+
var MANIFESTS_FILE_NAME = "manifests.json";
|
|
668
|
+
var COOKIE_POLICY_FILE_NAME = "cookie-policy.html";
|
|
669
|
+
var APP_CONFIG_SCHEMA_FILE_NAME = "config.schema.json";
|
|
670
|
+
var APP_MANIFEST_SCHEMA_FILE_NAME = "manifest.schema.json";
|
|
497
671
|
async function createPublicDistributionFiles() {
|
|
498
672
|
const pkgJson = getPkgJson();
|
|
499
673
|
const manifests = await getManifests(pkgJson);
|
|
@@ -503,12 +677,8 @@ async function createPublicDistributionFiles() {
|
|
|
503
677
|
const validationResult = validate(manifest, schemas.appManifest);
|
|
504
678
|
if (validationResult.errors.length) {
|
|
505
679
|
const errors = validationResult.errors.map((e) => JSON.stringify(e, null, 2));
|
|
506
|
-
throw new Error(
|
|
507
|
-
|
|
508
|
-
${errors.join(
|
|
509
|
-
"\n"
|
|
510
|
-
)}`
|
|
511
|
-
);
|
|
680
|
+
throw new Error(`Validation of app manifest for app '${appName}' failed with the following errors:
|
|
681
|
+
${errors.join("\n")}`);
|
|
512
682
|
}
|
|
513
683
|
}
|
|
514
684
|
const publicDirPath = resolve(process.cwd(), PUBLIC_DIR_NAME);
|
|
@@ -524,8 +694,9 @@ ${errors.join(
|
|
|
524
694
|
writeFileSync(appConfigSchemaFilePath, JSON.stringify(schemas.appConfig));
|
|
525
695
|
writeFileSync(appManifestSchemaFilePath, JSON.stringify(schemas.appManifest));
|
|
526
696
|
}
|
|
527
|
-
|
|
528
|
-
var GatewayErrorCodes
|
|
697
|
+
__name(createPublicDistributionFiles, "createPublicDistributionFiles");
|
|
698
|
+
var GatewayErrorCodes;
|
|
699
|
+
(function(GatewayErrorCodes2) {
|
|
529
700
|
GatewayErrorCodes2[GatewayErrorCodes2["NoObjectId"] = 10001] = "NoObjectId";
|
|
530
701
|
GatewayErrorCodes2[GatewayErrorCodes2["NoTargetAppHeader"] = 10002] = "NoTargetAppHeader";
|
|
531
702
|
GatewayErrorCodes2[GatewayErrorCodes2["NoTargetWorkspaceHeader"] = 10003] = "NoTargetWorkspaceHeader";
|
|
@@ -538,145 +709,158 @@ var GatewayErrorCodes = /* @__PURE__ */ ((GatewayErrorCodes2) => {
|
|
|
538
709
|
GatewayErrorCodes2[GatewayErrorCodes2["NoWorkspaceInRequestContext"] = 10010] = "NoWorkspaceInRequestContext";
|
|
539
710
|
GatewayErrorCodes2[GatewayErrorCodes2["NoUserPermissionsInRequestContext"] = 10012] = "NoUserPermissionsInRequestContext";
|
|
540
711
|
GatewayErrorCodes2[GatewayErrorCodes2["WorkspacePermissionDenied"] = 10013] = "WorkspacePermissionDenied";
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
712
|
+
})(GatewayErrorCodes || (GatewayErrorCodes = {}));
|
|
713
|
+
var DatabasesErrorCodes;
|
|
714
|
+
(function(DatabasesErrorCodes2) {
|
|
544
715
|
DatabasesErrorCodes2[DatabasesErrorCodes2["NoPublicKey"] = 11e3] = "NoPublicKey";
|
|
545
716
|
DatabasesErrorCodes2[DatabasesErrorCodes2["NoAuthHeader"] = 11001] = "NoAuthHeader";
|
|
546
717
|
DatabasesErrorCodes2[DatabasesErrorCodes2["FailedFileStore"] = 11002] = "FailedFileStore";
|
|
547
718
|
DatabasesErrorCodes2[DatabasesErrorCodes2["FailedFileRead"] = 11003] = "FailedFileRead";
|
|
548
719
|
DatabasesErrorCodes2[DatabasesErrorCodes2["NoRecord"] = 11004] = "NoRecord";
|
|
549
720
|
DatabasesErrorCodes2[DatabasesErrorCodes2["UniqueConstrain"] = 11005] = "UniqueConstrain";
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
721
|
+
})(DatabasesErrorCodes || (DatabasesErrorCodes = {}));
|
|
722
|
+
var PortalErrorCodes;
|
|
723
|
+
(function(PortalErrorCodes2) {
|
|
553
724
|
PortalErrorCodes2[PortalErrorCodes2["NoObjectId"] = 12e3] = "NoObjectId";
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
const allianceErrors = {
|
|
725
|
+
})(PortalErrorCodes || (PortalErrorCodes = {}));
|
|
726
|
+
var allianceErrors = {
|
|
557
727
|
// gateway
|
|
558
|
-
[10001
|
|
728
|
+
[10001]: {
|
|
559
729
|
httpCode: HttpStatus.UNAUTHORIZED,
|
|
560
730
|
message: "No object id available on authenticated user."
|
|
561
731
|
},
|
|
562
|
-
[10002
|
|
732
|
+
[10002]: {
|
|
563
733
|
httpCode: HttpStatus.BAD_REQUEST,
|
|
564
734
|
message: `Request missing header '${AllianceHeaders.TargetApp}'.`
|
|
565
735
|
},
|
|
566
|
-
[10003
|
|
736
|
+
[10003]: {
|
|
567
737
|
httpCode: HttpStatus.BAD_REQUEST,
|
|
568
738
|
message: `Request missing header '${AllianceHeaders.TargetWorkspace}'.`
|
|
569
739
|
},
|
|
570
|
-
[10004
|
|
740
|
+
[10004]: {
|
|
571
741
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
572
742
|
message: "App manifests missing in cache."
|
|
573
743
|
},
|
|
574
|
-
[10005
|
|
744
|
+
[10005]: {
|
|
575
745
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
576
746
|
message: "No dev session in memory cache."
|
|
577
747
|
},
|
|
578
|
-
[10006
|
|
748
|
+
[10006]: {
|
|
579
749
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
580
750
|
message: "Could not find manifest for app '{{appSlug}}'."
|
|
581
751
|
},
|
|
582
|
-
[10007
|
|
752
|
+
[10007]: {
|
|
583
753
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
584
754
|
message: "No request context."
|
|
585
755
|
},
|
|
586
|
-
[10008
|
|
756
|
+
[10008]: {
|
|
587
757
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
588
758
|
message: "No user in request context."
|
|
589
759
|
},
|
|
590
|
-
[10009
|
|
760
|
+
[10009]: {
|
|
591
761
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
592
762
|
message: "No app in request context."
|
|
593
763
|
},
|
|
594
|
-
[10010
|
|
764
|
+
[10010]: {
|
|
595
765
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
596
766
|
message: "No workspace in request context."
|
|
597
767
|
},
|
|
598
|
-
[10012
|
|
768
|
+
[10012]: {
|
|
599
769
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
600
770
|
message: "No user permissions in request context."
|
|
601
771
|
},
|
|
602
|
-
[10013
|
|
772
|
+
[10013]: {
|
|
603
773
|
httpCode: HttpStatus.FORBIDDEN,
|
|
604
774
|
message: "User does not have access to the current workspace."
|
|
605
775
|
},
|
|
606
776
|
// databases
|
|
607
|
-
[11e3
|
|
777
|
+
[11e3]: {
|
|
608
778
|
httpCode: HttpStatus.UNAUTHORIZED,
|
|
609
779
|
message: "No public key available to decode JWT."
|
|
610
780
|
},
|
|
611
|
-
[11001
|
|
781
|
+
[11001]: {
|
|
612
782
|
httpCode: HttpStatus.UNAUTHORIZED,
|
|
613
783
|
message: "No authorization header found."
|
|
614
784
|
},
|
|
615
|
-
[11002
|
|
785
|
+
[11002]: {
|
|
616
786
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
617
787
|
message: "Error storing file."
|
|
618
788
|
},
|
|
619
|
-
[11003
|
|
789
|
+
[11003]: {
|
|
620
790
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
621
791
|
message: "Error reading file."
|
|
622
792
|
},
|
|
623
|
-
[11004
|
|
793
|
+
[11004]: {
|
|
624
794
|
httpCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
625
795
|
message: "Missing database record."
|
|
626
796
|
},
|
|
627
|
-
[11005
|
|
797
|
+
[11005]: {
|
|
628
798
|
httpCode: HttpStatus.CONFLICT,
|
|
629
799
|
message: "Field has to be unique."
|
|
630
800
|
},
|
|
631
801
|
// portal
|
|
632
|
-
[12e3
|
|
802
|
+
[12e3]: {
|
|
633
803
|
httpCode: HttpStatus.UNAUTHORIZED,
|
|
634
804
|
message: "No object id found in user claims."
|
|
635
805
|
}
|
|
636
806
|
};
|
|
637
807
|
|
|
638
|
-
|
|
808
|
+
// src/exceptions/alliance-gql.exception.ts
|
|
809
|
+
function parseTemplates(message, variables) {
|
|
639
810
|
return Object.entries(variables).reduce((acc, [key, value]) => {
|
|
640
811
|
return acc.replaceAll(`{{${key}}}`, value);
|
|
641
812
|
}, message);
|
|
642
813
|
}
|
|
643
|
-
|
|
814
|
+
__name(parseTemplates, "parseTemplates");
|
|
815
|
+
var AllianceGqlException = class extends GraphQLError {
|
|
816
|
+
static {
|
|
817
|
+
__name(this, "AllianceGqlException");
|
|
818
|
+
}
|
|
819
|
+
info;
|
|
820
|
+
code;
|
|
644
821
|
constructor(code, variables = {}, extensions) {
|
|
645
822
|
const { message } = allianceErrors[code];
|
|
646
|
-
super(parseTemplates
|
|
823
|
+
super(parseTemplates(message, variables), {
|
|
647
824
|
extensions
|
|
648
825
|
});
|
|
649
826
|
this.code = code;
|
|
650
827
|
this.info = `https://github.com/telia-company/ace-alliance-sdk/wiki/error-codes#${code}`;
|
|
651
828
|
}
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
function parseTemplates(message, variables) {
|
|
829
|
+
};
|
|
830
|
+
function parseTemplates2(message, variables) {
|
|
655
831
|
return Object.entries(variables).reduce((acc, [key, value]) => {
|
|
656
832
|
return acc.replaceAll(`{{${key}}}`, value);
|
|
657
833
|
}, message);
|
|
658
834
|
}
|
|
659
|
-
|
|
835
|
+
__name(parseTemplates2, "parseTemplates");
|
|
836
|
+
var AllianceException = class extends HttpException {
|
|
837
|
+
static {
|
|
838
|
+
__name(this, "AllianceException");
|
|
839
|
+
}
|
|
840
|
+
info;
|
|
841
|
+
code;
|
|
660
842
|
constructor(code, variables = {}) {
|
|
661
843
|
const { message, httpCode } = allianceErrors[code];
|
|
662
|
-
super(
|
|
844
|
+
super(parseTemplates2(message, variables), httpCode);
|
|
663
845
|
this.code = code;
|
|
664
846
|
this.info = `https://github.com/telia-company/ace-alliance-sdk/wiki/error-codes#${code}`;
|
|
665
847
|
}
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
var __defProp$2 = Object.defineProperty;
|
|
669
|
-
var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
|
|
670
|
-
var __decorateClass$2 = (decorators, target, key, kind) => {
|
|
671
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
|
|
672
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
673
|
-
if (decorator = decorators[i])
|
|
674
|
-
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
675
|
-
if (kind && result)
|
|
676
|
-
__defProp$2(target, key, result);
|
|
677
|
-
return result;
|
|
678
848
|
};
|
|
679
|
-
|
|
849
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
850
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
851
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
852
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
853
|
+
else
|
|
854
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
855
|
+
if (d = decorators[i])
|
|
856
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
857
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
858
|
+
}
|
|
859
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
860
|
+
var AllianceExceptionFilter = class AllianceExceptionFilter2 {
|
|
861
|
+
static {
|
|
862
|
+
__name(this, "AllianceExceptionFilter");
|
|
863
|
+
}
|
|
680
864
|
catch(exception, host) {
|
|
681
865
|
const ctx = host.switchToHttp();
|
|
682
866
|
const response = ctx.getResponse();
|
|
@@ -689,23 +873,36 @@ let AllianceExceptionFilter = class {
|
|
|
689
873
|
});
|
|
690
874
|
}
|
|
691
875
|
};
|
|
692
|
-
AllianceExceptionFilter =
|
|
876
|
+
AllianceExceptionFilter = _ts_decorate([
|
|
693
877
|
Catch(AllianceException)
|
|
694
878
|
], AllianceExceptionFilter);
|
|
695
|
-
|
|
696
|
-
var
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
879
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
880
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
881
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
882
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
883
|
+
else
|
|
884
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
885
|
+
if (d = decorators[i])
|
|
886
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
887
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
888
|
+
}
|
|
889
|
+
__name(_ts_decorate2, "_ts_decorate");
|
|
890
|
+
function _ts_metadata(k, v) {
|
|
891
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
892
|
+
return Reflect.metadata(k, v);
|
|
893
|
+
}
|
|
894
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
895
|
+
function _ts_param(paramIndex, decorator) {
|
|
896
|
+
return function(target, key) {
|
|
897
|
+
decorator(target, key, paramIndex);
|
|
898
|
+
};
|
|
899
|
+
}
|
|
900
|
+
__name(_ts_param, "_ts_param");
|
|
901
|
+
var LoggerService = class LoggerService2 {
|
|
902
|
+
static {
|
|
903
|
+
__name(this, "LoggerService");
|
|
904
|
+
}
|
|
905
|
+
logger;
|
|
709
906
|
constructor(logger) {
|
|
710
907
|
this.logger = logger;
|
|
711
908
|
this.log = (...args) => this.logger.info(...args);
|
|
@@ -716,32 +913,51 @@ let LoggerService = class {
|
|
|
716
913
|
this.error = (...args) => this.logger.error(...args);
|
|
717
914
|
this.fatal = (...args) => this.logger.fatal(...args);
|
|
718
915
|
}
|
|
916
|
+
log;
|
|
917
|
+
trace;
|
|
918
|
+
debug;
|
|
919
|
+
info;
|
|
920
|
+
warn;
|
|
921
|
+
error;
|
|
922
|
+
fatal;
|
|
719
923
|
};
|
|
720
|
-
LoggerService =
|
|
924
|
+
LoggerService = _ts_decorate2([
|
|
721
925
|
Injectable(),
|
|
722
|
-
|
|
926
|
+
_ts_param(0, InjectPinoLogger()),
|
|
927
|
+
_ts_metadata("design:type", Function),
|
|
928
|
+
_ts_metadata("design:paramtypes", [
|
|
929
|
+
typeof PinoLogger === "undefined" ? Object : PinoLogger
|
|
930
|
+
])
|
|
723
931
|
], LoggerService);
|
|
724
932
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
var
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
return
|
|
735
|
-
}
|
|
736
|
-
|
|
933
|
+
// src/logging/logging.module.ts
|
|
934
|
+
function _ts_decorate3(decorators, target, key, desc) {
|
|
935
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
936
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
937
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
938
|
+
else
|
|
939
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
940
|
+
if (d = decorators[i])
|
|
941
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
942
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
943
|
+
}
|
|
944
|
+
__name(_ts_decorate3, "_ts_decorate");
|
|
945
|
+
var LoggerModule = class LoggerModule2 {
|
|
946
|
+
static {
|
|
947
|
+
__name(this, "LoggerModule");
|
|
948
|
+
}
|
|
737
949
|
static forRoot({ logLevel, redact = true } = {}) {
|
|
738
950
|
return {
|
|
739
|
-
module:
|
|
951
|
+
module: LoggerModule2,
|
|
740
952
|
controllers: [],
|
|
741
953
|
imports: [
|
|
742
954
|
LoggerModule$1.forRootAsync({
|
|
743
|
-
imports: [
|
|
744
|
-
|
|
955
|
+
imports: [
|
|
956
|
+
ConfigModule
|
|
957
|
+
],
|
|
958
|
+
inject: [
|
|
959
|
+
ConfigService
|
|
960
|
+
],
|
|
745
961
|
useFactory: async (configService) => ({
|
|
746
962
|
pinoHttp: {
|
|
747
963
|
level: logLevel || configService.get(SharedConfigKeys.ServiceLogLevel) || "silent",
|
|
@@ -756,53 +972,32 @@ let LoggerModule = class {
|
|
|
756
972
|
})
|
|
757
973
|
],
|
|
758
974
|
global: true,
|
|
759
|
-
providers: [
|
|
975
|
+
providers: [
|
|
976
|
+
LoggerService
|
|
977
|
+
],
|
|
760
978
|
exports: []
|
|
761
979
|
};
|
|
762
980
|
}
|
|
763
981
|
};
|
|
764
|
-
LoggerModule =
|
|
982
|
+
LoggerModule = _ts_decorate3([
|
|
765
983
|
Module({
|
|
766
|
-
providers: [
|
|
767
|
-
|
|
984
|
+
providers: [
|
|
985
|
+
LoggerService
|
|
986
|
+
],
|
|
987
|
+
exports: [
|
|
988
|
+
LoggerService
|
|
989
|
+
]
|
|
768
990
|
})
|
|
769
991
|
], LoggerModule);
|
|
770
|
-
|
|
771
992
|
function slugify(name) {
|
|
772
|
-
return _slugify(name, {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
name: "vite-plugin-css-import",
|
|
778
|
-
apply: "build",
|
|
779
|
-
enforce: "post",
|
|
780
|
-
writeBundle: async (_, bundle) => {
|
|
781
|
-
const cssFiles = Object.keys(bundle).filter((fileName) => fileName.endsWith(".css"));
|
|
782
|
-
if (!cssFiles.length) {
|
|
783
|
-
return;
|
|
784
|
-
}
|
|
785
|
-
const tempTargetFilePath = resolve(process.cwd(), `${outFilePath}-temp.js`);
|
|
786
|
-
const targetFilePath = resolve(process.cwd(), `${outFilePath}.js`);
|
|
787
|
-
const cssImportStatement = cssFiles.reduce((acc, cssFile) => {
|
|
788
|
-
if (relativePath) {
|
|
789
|
-
const targetDirname = dirname(targetFilePath);
|
|
790
|
-
const relativePath2 = relative(targetDirname, cssFile);
|
|
791
|
-
return `${acc}import "${relativePath2.replaceAll("\\", "/")}";
|
|
792
|
-
`;
|
|
793
|
-
}
|
|
794
|
-
return `${acc}import "./${cssFile}";
|
|
795
|
-
`;
|
|
796
|
-
}, "");
|
|
797
|
-
const writeStream = createWriteStream(tempTargetFilePath);
|
|
798
|
-
writeStream.write(cssImportStatement, "utf8");
|
|
799
|
-
const readStream = createReadStream(targetFilePath);
|
|
800
|
-
await pipeline(readStream, writeStream);
|
|
801
|
-
rmSync(targetFilePath, { force: true });
|
|
802
|
-
renameSync(tempTargetFilePath, targetFilePath);
|
|
803
|
-
writeStream.end();
|
|
804
|
-
}
|
|
805
|
-
};
|
|
993
|
+
return _slugify(name, {
|
|
994
|
+
strict: true,
|
|
995
|
+
replacement: "-",
|
|
996
|
+
lower: true
|
|
997
|
+
});
|
|
806
998
|
}
|
|
999
|
+
__name(slugify, "slugify");
|
|
807
1000
|
|
|
808
|
-
export { AllianceException, AllianceExceptionFilter, AllianceGqlException, AllianceHeaders, DatabasesErrorCodes, GatewayErrorCodes, LoggerModule, LoggerService, PortalErrorCodes, SharedConfigKeys, authMiddleware, createBearerToken, createPublicDistributionFiles, createSystemUserToken, getAppManifests, getPrivateKey, slugify
|
|
1001
|
+
export { AllianceException, AllianceExceptionFilter, AllianceGqlException, AllianceHeaders, DatabasesErrorCodes, GatewayErrorCodes, LoggerModule, LoggerService, PortalErrorCodes, SharedConfigKeys, authMiddleware, createBearerToken, createPublicDistributionFiles, createSystemUserToken, getAppManifests, getPrivateKey, slugify };
|
|
1002
|
+
//# sourceMappingURL=out.js.map
|
|
1003
|
+
//# sourceMappingURL=index.js.map
|