Compare commits
17 Commits
main
...
web/packag
Author | SHA1 | Date | |
---|---|---|---|
1dc4fbbb2b | |||
3332de267d | |||
ab366d0ec2 | |||
ac162582aa | |||
7d82e029d5 | |||
9b40ecb023 | |||
0cc0fdaae3 | |||
b55b168718 | |||
c46dc8f290 | |||
e48da3520c | |||
1ec4652c60 | |||
e375646705 | |||
b84652d9d3 | |||
74b8da28ca | |||
9084c7c6b4 | |||
7a0b227b46 | |||
cc9128fd46 |
@ -43,7 +43,7 @@ const otherFiles = [
|
|||||||
["node_modules/@patternfly/patternfly/patternfly.min.css", "."],
|
["node_modules/@patternfly/patternfly/patternfly.min.css", "."],
|
||||||
["node_modules/@patternfly/patternfly/assets/**", ".", "node_modules/@patternfly/patternfly/"],
|
["node_modules/@patternfly/patternfly/assets/**", ".", "node_modules/@patternfly/patternfly/"],
|
||||||
["src/custom.css", "."],
|
["src/custom.css", "."],
|
||||||
["src/common/styles/**", "."],
|
["packages/common/src/styles/**", "."],
|
||||||
["src/assets/images/**", "./assets/images"],
|
["src/assets/images/**", "./assets/images"],
|
||||||
["./icons/*", "./assets/icons"],
|
["./icons/*", "./assets/icons"],
|
||||||
];
|
];
|
||||||
|
@ -12,6 +12,8 @@ export default [
|
|||||||
{
|
{
|
||||||
ignores: [
|
ignores: [
|
||||||
"dist/",
|
"dist/",
|
||||||
|
".wireit/",
|
||||||
|
"packages/",
|
||||||
// don't ever lint node_modules
|
// don't ever lint node_modules
|
||||||
"node_modules/",
|
"node_modules/",
|
||||||
".storybook/*",
|
".storybook/*",
|
||||||
|
761
web/package-lock.json
generated
761
web/package-lock.json
generated
@ -11,7 +11,8 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
".",
|
".",
|
||||||
"./packages/*"
|
"./packages/sfe",
|
||||||
|
"./packages/common"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/lang-html": "^6.4.9",
|
"@codemirror/lang-html": "^6.4.9",
|
||||||
@ -3376,6 +3377,10 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.6.3-1723109801.tgz",
|
"resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.6.3-1723109801.tgz",
|
||||||
"integrity": "sha512-liqFlqaAqmcCQyfrfkmJC3W+6tgzglf5hpONNpyV6qCxY81xVKzL4qhW9gk1CMbViVCrnKCeFBdYEyLHus7izg=="
|
"integrity": "sha512-liqFlqaAqmcCQyfrfkmJC3W+6tgzglf5hpONNpyV6qCxY81xVKzL4qhW9gk1CMbViVCrnKCeFBdYEyLHus7izg=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@goauthentik/common": {
|
||||||
|
"resolved": "packages/common",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@goauthentik/web": {
|
"node_modules/@goauthentik/web": {
|
||||||
"resolved": "",
|
"resolved": "",
|
||||||
"link": true
|
"link": true
|
||||||
@ -4085,6 +4090,61 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@npmcli/agent": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"agent-base": "^7.1.0",
|
||||||
|
"http-proxy-agent": "^7.0.0",
|
||||||
|
"https-proxy-agent": "^7.0.1",
|
||||||
|
"lru-cache": "^10.0.1",
|
||||||
|
"socks-proxy-agent": "^8.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^16.14.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@npmcli/agent/node_modules/lru-cache": {
|
||||||
|
"version": "10.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
|
||||||
|
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/@npmcli/fs": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"semver": "^7.3.5"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@npmcli/fs/node_modules/semver": {
|
||||||
|
"version": "7.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@npmcli/redact": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "^16.14.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@open-wc/lit-helpers": {
|
"node_modules/@open-wc/lit-helpers": {
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -8756,6 +8816,11 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/webappsec-credential-management": {
|
||||||
|
"version": "0.6.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/webappsec-credential-management/-/webappsec-credential-management-0.6.8.tgz",
|
||||||
|
"integrity": "sha512-DES/SkK54U7AG8hmMkGCJkOSlywM3R+TzaWT+rBnX3lQTJ3K57jWr+UccWY8ImkuKekC9BjB+AH4zLJB4JKpvQ=="
|
||||||
|
},
|
||||||
"node_modules/@types/which": {
|
"node_modules/@types/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -10135,6 +10200,19 @@
|
|||||||
"node": ">= 14"
|
"node": ">= 14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/aggregate-error": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"clean-stack": "^2.0.0",
|
||||||
|
"indent-string": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ajv": {
|
"node_modules/ajv": {
|
||||||
"version": "6.12.6",
|
"version": "6.12.6",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -10556,6 +10634,19 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/awilix": {
|
||||||
|
"version": "10.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/awilix/-/awilix-10.0.2.tgz",
|
||||||
|
"integrity": "sha512-hFatb7eZFdtiWjjmGRSm/K/uxZpmcBlM+YoeMB3VpOPXk3xa6+7zctg3LRbUzoimom5bwGrePF0jXReO6b4zNQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"camel-case": "^4.1.2",
|
||||||
|
"fast-glob": "^3.3.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "1.7.3",
|
"version": "1.7.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -11201,6 +11292,113 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cacache": {
|
||||||
|
"version": "18.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
|
||||||
|
"integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@npmcli/fs": "^3.1.0",
|
||||||
|
"fs-minipass": "^3.0.0",
|
||||||
|
"glob": "^10.2.2",
|
||||||
|
"lru-cache": "^10.0.1",
|
||||||
|
"minipass": "^7.0.3",
|
||||||
|
"minipass-collect": "^2.0.1",
|
||||||
|
"minipass-flush": "^1.0.5",
|
||||||
|
"minipass-pipeline": "^1.2.4",
|
||||||
|
"p-map": "^4.0.0",
|
||||||
|
"ssri": "^10.0.0",
|
||||||
|
"tar": "^6.1.11",
|
||||||
|
"unique-filename": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^16.14.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cacache/node_modules/fs-minipass": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^7.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cacache/node_modules/glob": {
|
||||||
|
"version": "10.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||||
|
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"foreground-child": "^3.1.0",
|
||||||
|
"jackspeak": "^3.1.2",
|
||||||
|
"minimatch": "^9.0.4",
|
||||||
|
"minipass": "^7.1.2",
|
||||||
|
"package-json-from-dist": "^1.0.0",
|
||||||
|
"path-scurry": "^1.11.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"glob": "dist/esm/bin.mjs"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cacache/node_modules/jackspeak": {
|
||||||
|
"version": "3.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
|
||||||
|
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@isaacs/cliui": "^8.0.2"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@pkgjs/parseargs": "^0.11.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cacache/node_modules/lru-cache": {
|
||||||
|
"version": "10.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
|
||||||
|
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/cacache/node_modules/p-map": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"aggregate-error": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cacache/node_modules/path-scurry": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": "^10.2.0",
|
||||||
|
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16 || 14 >=14.18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cacheable-lookup": {
|
"node_modules/cacheable-lookup": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -11273,6 +11471,16 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/camel-case": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"pascal-case": "^3.1.2",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/camelcase": {
|
"node_modules/camelcase": {
|
||||||
"version": "5.3.1",
|
"version": "5.3.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -11434,6 +11642,15 @@
|
|||||||
"consola": "^3.2.3"
|
"consola": "^3.2.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/clean-stack": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cli-cursor": {
|
"node_modules/cli-cursor": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -12936,7 +13153,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"iconv-lite": "^0.6.2"
|
"iconv-lite": "^0.6.2"
|
||||||
}
|
}
|
||||||
@ -12946,7 +13162,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||||
},
|
},
|
||||||
@ -13015,6 +13230,12 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/err-code": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/error-ex": {
|
"node_modules/error-ex": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -13959,6 +14180,24 @@
|
|||||||
"eslint": ">=5.16.0"
|
"eslint": ">=5.16.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/eslint-config-nightmare-mode": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-config-nightmare-mode/-/eslint-config-nightmare-mode-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-oDstNzzG6wwOUupvQniUpV641RLlP6NFkltQVBdHx67CjaOsIXkPbDWWYANvx1BwxscPQW+Mzh5NFPATvgDBEQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"object-assign": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/eslint-plugin-custom-elements": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-custom-elements/-/eslint-plugin-custom-elements-0.0.8.tgz",
|
||||||
|
"integrity": "sha512-726XMAabRLKKm6/yjvYfvY4MKBwX9C4x8yPjj/ap470KhSIBHm+xHbm3P7cKlsFz/4cxq6YrBeSwKmwlacF1jg==",
|
||||||
|
"dev": true,
|
||||||
|
"peerDependencies": {
|
||||||
|
"eslint": ">=4.19.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/eslint-plugin-lit": {
|
"node_modules/eslint-plugin-lit": {
|
||||||
"version": "1.14.0",
|
"version": "1.14.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -15914,6 +16153,15 @@
|
|||||||
"node": ">=0.8.19"
|
"node": ">=0.8.19"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/indent-string": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/inflight": {
|
"node_modules/inflight": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -16255,6 +16503,12 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-lambda": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/is-module": {
|
"node_modules/is-module": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -17148,6 +17402,15 @@
|
|||||||
"graceful-fs": "^4.1.6"
|
"graceful-fs": "^4.1.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jsonparse": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": [
|
||||||
|
"node >= 0.2.0"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/jsonschema": {
|
"node_modules/jsonschema": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -17733,6 +17996,15 @@
|
|||||||
"loose-envify": "cli.js"
|
"loose-envify": "cli.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lower-case": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/lowercase-keys": {
|
"node_modules/lowercase-keys": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -17779,6 +18051,29 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
|
"node_modules/make-fetch-happen": {
|
||||||
|
"version": "13.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
|
||||||
|
"integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@npmcli/agent": "^2.0.0",
|
||||||
|
"cacache": "^18.0.0",
|
||||||
|
"http-cache-semantics": "^4.1.1",
|
||||||
|
"is-lambda": "^1.0.1",
|
||||||
|
"minipass": "^7.0.2",
|
||||||
|
"minipass-fetch": "^3.0.0",
|
||||||
|
"minipass-flush": "^1.0.5",
|
||||||
|
"minipass-pipeline": "^1.2.4",
|
||||||
|
"negotiator": "^0.6.3",
|
||||||
|
"proc-log": "^4.2.0",
|
||||||
|
"promise-retry": "^2.0.1",
|
||||||
|
"ssri": "^10.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^16.14.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/map-or-similar": {
|
"node_modules/map-or-similar": {
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -18457,6 +18752,125 @@
|
|||||||
"node": ">=16 || 14 >=14.17"
|
"node": ">=16 || 14 >=14.17"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/minipass-collect": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^7.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16 || 14 >=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-fetch": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^7.0.3",
|
||||||
|
"minipass-sized": "^1.0.3",
|
||||||
|
"minizlib": "^2.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"encoding": "^0.1.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-flush": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-flush/node_modules/minipass": {
|
||||||
|
"version": "3.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||||
|
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-flush/node_modules/yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/minipass-pipeline": {
|
||||||
|
"version": "1.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
|
||||||
|
"integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-pipeline/node_modules/minipass": {
|
||||||
|
"version": "3.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||||
|
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-pipeline/node_modules/yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/minipass-sized": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-sized/node_modules/minipass": {
|
||||||
|
"version": "3.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||||
|
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass-sized/node_modules/yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/minizlib": {
|
"node_modules/minizlib": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -18957,6 +19371,16 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/no-case": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"lower-case": "^2.0.2",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/node-abi": {
|
"node_modules/node-abi": {
|
||||||
"version": "3.65.0",
|
"version": "3.65.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -19182,6 +19606,25 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/npm-registry-fetch": {
|
||||||
|
"version": "17.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz",
|
||||||
|
"integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@npmcli/redact": "^2.0.0",
|
||||||
|
"jsonparse": "^1.3.1",
|
||||||
|
"make-fetch-happen": "^13.0.0",
|
||||||
|
"minipass": "^7.0.2",
|
||||||
|
"minipass-fetch": "^3.0.0",
|
||||||
|
"minizlib": "^2.1.2",
|
||||||
|
"npm-package-arg": "^11.0.0",
|
||||||
|
"proc-log": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^16.14.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/npm-run-all": {
|
"node_modules/npm-run-all": {
|
||||||
"version": "4.1.5",
|
"version": "4.1.5",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -19342,6 +19785,15 @@
|
|||||||
"node": "^14.16.0 || >=16.10.0"
|
"node": "^14.16.0 || >=16.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/object-assign": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/object-hash": {
|
"node_modules/object-hash": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -19801,6 +20253,16 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pascal-case": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"no-case": "^3.0.4",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/path-exists": {
|
"node_modules/path-exists": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -20245,6 +20707,19 @@
|
|||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/promise-retry": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"err-code": "^2.0.2",
|
||||||
|
"retry": "^0.12.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/prompts": {
|
"node_modules/prompts": {
|
||||||
"version": "2.4.2",
|
"version": "2.4.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -21402,6 +21877,25 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/rimraf": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "^11.0.0",
|
||||||
|
"package-json-from-dist": "^1.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rimraf": "dist/esm/bin.mjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "20 || >=22"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/robust-predicates": {
|
"node_modules/robust-predicates": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"license": "Unlicense"
|
"license": "Unlicense"
|
||||||
@ -22243,6 +22737,18 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
},
|
},
|
||||||
|
"node_modules/ssri": {
|
||||||
|
"version": "10.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
|
||||||
|
"integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^7.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/stack-utils": {
|
"node_modules/stack-utils": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -23760,6 +24266,7 @@
|
|||||||
},
|
},
|
||||||
"node_modules/tree-sitter-json": {
|
"node_modules/tree-sitter-json": {
|
||||||
"version": "0.20.2",
|
"version": "0.20.2",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -23768,6 +24275,7 @@
|
|||||||
},
|
},
|
||||||
"node_modules/tree-sitter-yaml": {
|
"node_modules/tree-sitter-yaml": {
|
||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -24089,6 +24597,194 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/typesync": {
|
||||||
|
"version": "0.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/typesync/-/typesync-0.13.0.tgz",
|
||||||
|
"integrity": "sha512-t5+DHmXqNHJyX9PSocEEB6c5gQlO0j0LLxEiZ/HMz0lWJWBf+bKEXTORkquAuUgjMZ7U5Hx8w63Qmebx7bK2FA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"awilix": "^10.0.2",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"cosmiconfig": "^9.0.0",
|
||||||
|
"detect-indent": "^6.0.0",
|
||||||
|
"glob": "^10.4.2",
|
||||||
|
"js-yaml": "^4.1.0",
|
||||||
|
"npm-registry-fetch": "^17.1.0",
|
||||||
|
"ora": "^5.1.0",
|
||||||
|
"semver": "^7.6.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"typesync": "bin/typesync"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/argparse": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/chalk": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/cosmiconfig": {
|
||||||
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
|
||||||
|
"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"env-paths": "^2.2.1",
|
||||||
|
"import-fresh": "^3.3.0",
|
||||||
|
"js-yaml": "^4.1.0",
|
||||||
|
"parse-json": "^5.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/d-fischer"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": ">=4.9.5"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"typescript": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/glob": {
|
||||||
|
"version": "10.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||||
|
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"foreground-child": "^3.1.0",
|
||||||
|
"jackspeak": "^3.1.2",
|
||||||
|
"minimatch": "^9.0.4",
|
||||||
|
"minipass": "^7.1.2",
|
||||||
|
"package-json-from-dist": "^1.0.0",
|
||||||
|
"path-scurry": "^1.11.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"glob": "dist/esm/bin.mjs"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/jackspeak": {
|
||||||
|
"version": "3.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
|
||||||
|
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@isaacs/cliui": "^8.0.2"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@pkgjs/parseargs": "^0.11.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/js-yaml": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"argparse": "^2.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"js-yaml": "bin/js-yaml.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/lru-cache": {
|
||||||
|
"version": "10.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
|
||||||
|
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/path-scurry": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": "^10.2.0",
|
||||||
|
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16 || 14 >=14.18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/semver": {
|
||||||
|
"version": "7.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typesync/node_modules/supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/typical": {
|
"node_modules/typical": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -24177,6 +24873,30 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/unique-filename": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"unique-slug": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unique-slug": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"imurmurhash": "^0.1.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/unique-string": {
|
"node_modules/unique-string": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@ -25429,6 +26149,41 @@
|
|||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"packages/common": {
|
||||||
|
"name": "@goauthentik/common",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@sentry/browser": "^8.23.0",
|
||||||
|
"@types/webappsec-credential-management": "^0.6.8",
|
||||||
|
"base64-js": "^1.5.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.8.0",
|
||||||
|
"@types/eslint__js": "^8.42.3",
|
||||||
|
"esbuild": "^0.23.0",
|
||||||
|
"eslint": "^9.8.0",
|
||||||
|
"eslint-config-google": "^0.14.0",
|
||||||
|
"eslint-config-nightmare-mode": "^2.3.0",
|
||||||
|
"eslint-plugin-custom-elements": "^0.0.8",
|
||||||
|
"eslint-plugin-lit": "^1.14.0",
|
||||||
|
"eslint-plugin-sonarjs": "^1.0.4",
|
||||||
|
"glob": "^11.0.0",
|
||||||
|
"lit-analyzer": "^2.0.3",
|
||||||
|
"lockfile-lint": "^4.14.0",
|
||||||
|
"prettier": "^3.3.3",
|
||||||
|
"rimraf": "^6.0.1",
|
||||||
|
"syncpack": "^12.4.0",
|
||||||
|
"typescript": "^5.5.4",
|
||||||
|
"typescript-eslint": "^8.0.1",
|
||||||
|
"typesync": "^0.13.0",
|
||||||
|
"wireit": "^0.14.4"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@lit/localize": "^0.12.2",
|
||||||
|
"lit": "^3.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"packages/sfe": {
|
"packages/sfe": {
|
||||||
"name": "@goauthentik/web-sfe",
|
"name": "@goauthentik/web-sfe",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
|
@ -138,6 +138,8 @@
|
|||||||
"lint": "wireit",
|
"lint": "wireit",
|
||||||
"lint:lockfile": "wireit",
|
"lint:lockfile": "wireit",
|
||||||
"lint:package": "wireit",
|
"lint:package": "wireit",
|
||||||
|
"lint:precommit": "wireit",
|
||||||
|
"lint:nightmare": "wireit",
|
||||||
"lit-analyse": "wireit",
|
"lit-analyse": "wireit",
|
||||||
"postinstall": "bash scripts/patch-spotlight.sh",
|
"postinstall": "bash scripts/patch-spotlight.sh",
|
||||||
"precommit": "wireit",
|
"precommit": "wireit",
|
||||||
@ -186,6 +188,7 @@
|
|||||||
],
|
],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"build-locales",
|
"build-locales",
|
||||||
|
"./packages/common:build",
|
||||||
"./packages/sfe:build"
|
"./packages/sfe:build"
|
||||||
],
|
],
|
||||||
"env": {
|
"env": {
|
||||||
@ -241,6 +244,10 @@
|
|||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
"command": "eslint --max-warnings 0 --fix",
|
"command": "eslint --max-warnings 0 --fix",
|
||||||
|
"dependencies": [
|
||||||
|
"./packages/common:lint",
|
||||||
|
"./packages/common:build:types"
|
||||||
|
],
|
||||||
"env": {
|
"env": {
|
||||||
"NODE_OPTIONS": "--max_old_space_size=65536"
|
"NODE_OPTIONS": "--max_old_space_size=65536"
|
||||||
}
|
}
|
||||||
@ -251,6 +258,7 @@
|
|||||||
"lint:types": {
|
"lint:types": {
|
||||||
"command": "tsc --noEmit -p .",
|
"command": "tsc --noEmit -p .",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
|
"./packages/common:build:types",
|
||||||
"build-locales"
|
"build-locales"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -322,13 +330,19 @@
|
|||||||
"command": "node scripts/build-storybook-import-maps.mjs"
|
"command": "node scripts/build-storybook-import-maps.mjs"
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"command": "wdio run ./wdio.conf.ts --logLevel=warn --autoCompileOpts.tsNodeOpts.project=tsconfig.test.json",
|
"command": "wdio run ./wdio.conf.mts --logLevel=warn --autoCompileOpts.tsNodeOpts.project=tsconfig.test.json",
|
||||||
|
"dependencies": [
|
||||||
|
"./packages/common:build"
|
||||||
|
],
|
||||||
"env": {
|
"env": {
|
||||||
"CI": "true"
|
"CI": "true"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"test-view": {
|
"test-view": {
|
||||||
"command": "wdio run ./wdio.conf.ts --autoCompileOpts.tsNodeOpts.project=tsconfig.test.json"
|
"command": "wdio run ./wdio.conf.mts --autoCompileOpts.tsNodeOpts.project=tsconfig.test.json",
|
||||||
|
"dependencies": [
|
||||||
|
"./packages/common:build"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"tsc": {
|
"tsc": {
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -338,6 +352,7 @@
|
|||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
".",
|
".",
|
||||||
"./packages/*"
|
"./packages/sfe",
|
||||||
|
"./packages/common"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
16
web/packages/common/.prettierignore
Normal file
16
web/packages/common/.prettierignore
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# don't ever lint node_modules
|
||||||
|
node_modules
|
||||||
|
# don't lint build output (make sure it's set to your correct build folder name)
|
||||||
|
dist
|
||||||
|
# don't lint nyc coverage output
|
||||||
|
coverage
|
||||||
|
# Import order matters
|
||||||
|
poly.ts
|
||||||
|
src/locale-codes.ts
|
||||||
|
src/locales/
|
||||||
|
storybook-static/
|
||||||
|
# Prettier breaks the tsconfig file
|
||||||
|
tsconfig.json
|
||||||
|
.storybook/css-import-maps*
|
||||||
|
package.json
|
||||||
|
packages/**/package.json
|
23
web/packages/common/.prettierrc.json
Normal file
23
web/packages/common/.prettierrc.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"arrowParens": "always",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"embeddedLanguageFormatting": "auto",
|
||||||
|
"htmlWhitespaceSensitivity": "css",
|
||||||
|
"insertPragma": false,
|
||||||
|
"jsxSingleQuote": false,
|
||||||
|
"printWidth": 100,
|
||||||
|
"proseWrap": "preserve",
|
||||||
|
"quoteProps": "consistent",
|
||||||
|
"requirePragma": false,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": false,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"trailingComma": "all",
|
||||||
|
"useTabs": false,
|
||||||
|
"vueIndentScriptAndStyle": false,
|
||||||
|
"plugins": ["@trivago/prettier-plugin-sort-imports"],
|
||||||
|
"importOrder": ["^(@?)lit(.*)$", "\\.css$", "^@goauthentik/api$", "^[./]"],
|
||||||
|
"importOrderSeparation": true,
|
||||||
|
"importOrderSortSpecifiers": true,
|
||||||
|
"importOrderParserPlugins": ["typescript", "classProperties", "decorators-legacy"]
|
||||||
|
}
|
93
web/packages/common/README.md
Normal file
93
web/packages/common/README.md
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# @goauthentik/common
|
||||||
|
|
||||||
|
The `common` package is a bit of a grab-bag of tools, utilities, and configuration details used
|
||||||
|
throughout the Authentik front-end suite. Here, we'll try (emphasis on the _try_) to document what
|
||||||
|
each part does.
|
||||||
|
|
||||||
|
- `./api`
|
||||||
|
|
||||||
|
The `./api` folder contains helpers and plug-ins for communicating with the Authentik API. Its
|
||||||
|
primary purpose is to provide the default configuration details for establishing a channel to the
|
||||||
|
API, as well as figuring out the default locale, branding information, and even the favicon. (See
|
||||||
|
what I said about it being a grab-bag?) It has its own list of todos.
|
||||||
|
|
||||||
|
- `/helpers/plex`
|
||||||
|
|
||||||
|
Contains configuration tools and access for the Plex TV client. Used by all three primary
|
||||||
|
interfaces, but again, not exactly a foundational tool.
|
||||||
|
|
||||||
|
- `/helpers/webauthn`
|
||||||
|
|
||||||
|
Used entirely by the WebAuthn tools in the Flow interface.
|
||||||
|
|
||||||
|
- `/styles`:
|
||||||
|
|
||||||
|
authentik's overrides for patternfly and dark mode.
|
||||||
|
|
||||||
|
TODO: Move this into its own package.
|
||||||
|
|
||||||
|
- `/ui`:
|
||||||
|
|
||||||
|
Describes the schema of the UIConfig Attributes Object, which dictates certain details about UI
|
||||||
|
behavior, such as the preliminary state of drawers, editors, and layouts. It also has an API call
|
||||||
|
to fetch that UIConfig object from the server.
|
||||||
|
|
||||||
|
- `/constants.ts`
|
||||||
|
|
||||||
|
Another grab-bag of configuration details: event names, default classnames for setting some visual
|
||||||
|
details, web socket message type tokens, and the localstorage key.
|
||||||
|
|
||||||
|
- `/enums.ts`
|
||||||
|
|
||||||
|
Contains one thing: a mapping of generic UI sizing terms to specific classnames in the CSS.
|
||||||
|
|
||||||
|
- `./errors.ts`
|
||||||
|
|
||||||
|
An error handling toolkit related to the `./api` above.
|
||||||
|
|
||||||
|
- `./events.ts`
|
||||||
|
|
||||||
|
An extension of the API's "Event" types to assist in reporting server-side events to the user. Has
|
||||||
|
nothing to do with the browser's internal Event type. Used entirely within `./admin`, may be
|
||||||
|
suitable to being moved there.
|
||||||
|
|
||||||
|
- `./global.ts`
|
||||||
|
|
||||||
|
A single function that retrieves any global information for the UI from the `index.html` file in
|
||||||
|
which it was invoked. Used by our Django application to preload configuration information.
|
||||||
|
|
||||||
|
- `./labels.ts`,
|
||||||
|
|
||||||
|
Maps a variety of API tokens to human-readable labels, including those for:
|
||||||
|
|
||||||
|
- Events
|
||||||
|
- Severities
|
||||||
|
- User Types
|
||||||
|
- Stage Intent
|
||||||
|
|
||||||
|
It might make more sense to move these closer to where they're used, if their use is local to a
|
||||||
|
single interface or component.
|
||||||
|
|
||||||
|
- `./messages.ts`
|
||||||
|
|
||||||
|
Contains one thing: a mapping of generic UI alert-level terms to specific classnames in the CSS.
|
||||||
|
|
||||||
|
- `./sentry.ts`
|
||||||
|
|
||||||
|
Sentry is an application monitoring package for finding code breakage. The Sentry configuration for
|
||||||
|
all of our interfaces is kept here.
|
||||||
|
|
||||||
|
- `./users.ts`
|
||||||
|
|
||||||
|
Despite the plural name, this is entirely about getting the current user's configuration from the
|
||||||
|
server. Used by all three major interfaces. Could probably be replaced by a context. (Possibly
|
||||||
|
already has been.)
|
||||||
|
|
||||||
|
- `./utils.ts`
|
||||||
|
|
||||||
|
The classic junk drawer of UI development. A few string functions, a few utilities from
|
||||||
|
YouMightNotNeedLodash, a slugifier, some date handling utilities, that sort of thing.
|
||||||
|
|
||||||
|
- `./ws.ts`
|
||||||
|
|
||||||
|
Sets up our web socket for receiving server-side events. Used by all three major interfaces.
|
53
web/packages/common/build.mjs
Normal file
53
web/packages/common/build.mjs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import * as esbuild from "esbuild";
|
||||||
|
import fs from "fs";
|
||||||
|
import { globSync } from "glob";
|
||||||
|
import path from "path";
|
||||||
|
import { cwd } from "process";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
|
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
||||||
|
|
||||||
|
const isProdBuild = process.env.NODE_ENV === "production";
|
||||||
|
|
||||||
|
const apiBasePath = process.env.AK_API_BASE_PATH || "";
|
||||||
|
|
||||||
|
const definitions = {
|
||||||
|
"process.env.NODE_ENV": JSON.stringify(isProdBuild ? "production" : "development"),
|
||||||
|
"process.env.CWD": JSON.stringify(cwd()),
|
||||||
|
"process.env.AK_API_BASE_PATH": JSON.stringify(apiBasePath),
|
||||||
|
};
|
||||||
|
|
||||||
|
const otherFiles = [["src/styles/**", "styles"]];
|
||||||
|
|
||||||
|
const isFile = (filePath) => fs.statSync(filePath).isFile();
|
||||||
|
function nameCopyTarget(src, dest, strip) {
|
||||||
|
const target = path.join(dest, strip ? src.replace(strip, "") : path.parse(src).base);
|
||||||
|
return [src, target];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [source, rawdest, strip] of otherFiles) {
|
||||||
|
const matchedPaths = globSync(source);
|
||||||
|
const dest = path.join("dist", rawdest);
|
||||||
|
const copyTargets = matchedPaths.map((path) => nameCopyTarget(path, dest, strip));
|
||||||
|
for (const [src, dest] of copyTargets) {
|
||||||
|
if (isFile(src)) {
|
||||||
|
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
||||||
|
fs.copyFileSync(src, dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const tsfiles = globSync("src/**/*.ts");
|
||||||
|
|
||||||
|
esbuild
|
||||||
|
.build({
|
||||||
|
entryPoints: tsfiles,
|
||||||
|
sourcemap: true,
|
||||||
|
bundle: false,
|
||||||
|
tsconfig: "./tsconfig.build.json",
|
||||||
|
outdir: "dist/",
|
||||||
|
format: "esm",
|
||||||
|
define: definitions,
|
||||||
|
loader: { ".css": "text" },
|
||||||
|
})
|
||||||
|
.catch(() => process.exit(1));
|
82
web/packages/common/eslint.config.mjs
Normal file
82
web/packages/common/eslint.config.mjs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
import eslint from "@eslint/js";
|
||||||
|
import tsparser from "@typescript-eslint/parser";
|
||||||
|
import litconf from "eslint-plugin-lit";
|
||||||
|
import wcconf from "eslint-plugin-wc";
|
||||||
|
import globals from "globals";
|
||||||
|
import tseslint from "typescript-eslint";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
// You would not believe how much this change has frustrated users: ["if an ignores key is used
|
||||||
|
// without any other keys in the configuration object, then the patterns act as global
|
||||||
|
// ignores"](https://eslint.org/docs/latest/use/configure/ignore)
|
||||||
|
{
|
||||||
|
ignores: [
|
||||||
|
"dist/",
|
||||||
|
".wireit/",
|
||||||
|
"packages/common/.wireit/",
|
||||||
|
// don't ever lint node_modules
|
||||||
|
"node_modules/",
|
||||||
|
".storybook/*",
|
||||||
|
// don't lint build output (make sure it's set to your correct build folder name)
|
||||||
|
// don't lint nyc coverage output
|
||||||
|
"coverage/",
|
||||||
|
"src/locale-codes.ts",
|
||||||
|
"storybook-static/",
|
||||||
|
"src/locales/",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
eslint.configs.recommended,
|
||||||
|
wcconf.configs["flat/recommended"],
|
||||||
|
litconf.configs["flat/recommended"],
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsparser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: ["src/**"],
|
||||||
|
rules: {
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
argsIgnorePattern: "^_",
|
||||||
|
varsIgnorePattern: "^_",
|
||||||
|
caughtErrorsIgnorePattern: "^_",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsparser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
...globals.nodeBuiltin,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: ["scripts/*.mjs", "*.ts", "*.mjs"],
|
||||||
|
rules: {
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
// We WANT our scripts to output to the console!
|
||||||
|
"no-console": "off",
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
argsIgnorePattern: "^_",
|
||||||
|
varsIgnorePattern: "^_",
|
||||||
|
caughtErrorsIgnorePattern: "^_",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
5199
web/packages/common/package-lock.json
generated
Normal file
5199
web/packages/common/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
156
web/packages/common/package.json
Normal file
156
web/packages/common/package.json
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
{
|
||||||
|
"name": "@goauthentik/common",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@sentry/browser": "^8.23.0",
|
||||||
|
"@types/webappsec-credential-management": "^0.6.8",
|
||||||
|
"base64-js": "^1.5.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.8.0",
|
||||||
|
"@types/eslint__js": "^8.42.3",
|
||||||
|
"esbuild": "^0.23.0",
|
||||||
|
"eslint": "^9.8.0",
|
||||||
|
"eslint-config-google": "^0.14.0",
|
||||||
|
"eslint-config-nightmare-mode": "^2.3.0",
|
||||||
|
"eslint-plugin-custom-elements": "^0.0.8",
|
||||||
|
"eslint-plugin-lit": "^1.14.0",
|
||||||
|
"eslint-plugin-sonarjs": "^1.0.4",
|
||||||
|
"glob": "^11.0.0",
|
||||||
|
"lit-analyzer": "^2.0.3",
|
||||||
|
"lockfile-lint": "^4.14.0",
|
||||||
|
"prettier": "^3.3.3",
|
||||||
|
"rimraf": "^6.0.1",
|
||||||
|
"syncpack": "^12.4.0",
|
||||||
|
"typescript": "^5.5.4",
|
||||||
|
"typescript-eslint": "^8.0.1",
|
||||||
|
"typesync": "^0.13.0",
|
||||||
|
"wireit": "^0.14.4"
|
||||||
|
},
|
||||||
|
"exports": {
|
||||||
|
"./*": "./dist/*"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"./dist/**/*"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@lit/localize": "^0.12.2",
|
||||||
|
"lit": "^3.2.0"
|
||||||
|
},
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "wireit",
|
||||||
|
"build:types": "wireit",
|
||||||
|
"format": "wireit",
|
||||||
|
"lint": "wireit",
|
||||||
|
"lint:lockfile": "wireit",
|
||||||
|
"lint:nightmare": "wireit",
|
||||||
|
"lint:package": "wireit",
|
||||||
|
"lint:spelling": "wireit",
|
||||||
|
"lint:types": "wireit",
|
||||||
|
"precommit": "wireit",
|
||||||
|
"prettier": "wireit"
|
||||||
|
},
|
||||||
|
"type": "module",
|
||||||
|
"wireit": {
|
||||||
|
"build": {
|
||||||
|
"command": "${NODE_RUNNER} build.mjs",
|
||||||
|
"dependencies": [
|
||||||
|
"build:types"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"src/**/*.{css,jpg,png,ts,js,json}",
|
||||||
|
"!src/**/*.stories.ts",
|
||||||
|
"!src/**/*.tests.ts",
|
||||||
|
"!src/locales/*.ts",
|
||||||
|
"!src/locale-codes.ts"
|
||||||
|
],
|
||||||
|
"output": [
|
||||||
|
"./dist/**/*.js",
|
||||||
|
"./dist/**/*.css"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"NODE_RUNNER": {
|
||||||
|
"external": true,
|
||||||
|
"default": "node"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build:types": {
|
||||||
|
"command": "tsc --declaration -p .",
|
||||||
|
"files": [
|
||||||
|
"src/**/*.ts",
|
||||||
|
"!src/**/*.stories.ts",
|
||||||
|
"!src/**/*.tests.ts"
|
||||||
|
],
|
||||||
|
"output": [
|
||||||
|
"./dist/**/*.d.ts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"lint": {
|
||||||
|
"command": "eslint --max-warnings 0 --fix --config ./eslint.config.mjs",
|
||||||
|
"env": {
|
||||||
|
"NODE_OPTIONS": "--max_old_space_size=65536"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint:types": {
|
||||||
|
"command": "tsc --noEmit -p ."
|
||||||
|
},
|
||||||
|
"lint:lockfile": {
|
||||||
|
"command": "lockfile-lint --path package.json --type npm --allowed-hosts npm --validate-https"
|
||||||
|
},
|
||||||
|
"lint:package": {
|
||||||
|
"command": "syncpack format -i ' '"
|
||||||
|
},
|
||||||
|
"lint:precommit": {
|
||||||
|
"command": "${NODE_RUNNER} ./scripts/eslint.mjs --precommit",
|
||||||
|
"env": {
|
||||||
|
"NODE_RUNNER": {
|
||||||
|
"external": true,
|
||||||
|
"default": "node"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint:nightmare": {
|
||||||
|
"command": "${NODE_RUNNER} ./scripts/eslint.mjs --nightmare",
|
||||||
|
"env": {
|
||||||
|
"NODE_RUNNER": {
|
||||||
|
"external": true,
|
||||||
|
"default": "node"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"prettier": {
|
||||||
|
"command": "prettier --write .",
|
||||||
|
"dependencies": [
|
||||||
|
"lint:package"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"format": {
|
||||||
|
"command": "prettier --write .",
|
||||||
|
"dependencies": [
|
||||||
|
"lint:package"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"precommit": {
|
||||||
|
"command": "prettier --write .",
|
||||||
|
"dependencies": [
|
||||||
|
"lint:types",
|
||||||
|
"lint:spelling",
|
||||||
|
"lint:lockfile",
|
||||||
|
"lint:package",
|
||||||
|
"lint:precommit"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"NODE_RUNNER": {
|
||||||
|
"external": true,
|
||||||
|
"default": "node"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint:spelling": {
|
||||||
|
"command": "node scripts/check-spelling.mjs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
web/packages/common/scripts/check-spelling.mjs
Normal file
15
web/packages/common/scripts/check-spelling.mjs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { execSync } from "child_process";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
const projectRoot = execSync("git rev-parse --show-toplevel", { encoding: "utf8" }).replace(
|
||||||
|
"\n",
|
||||||
|
"",
|
||||||
|
);
|
||||||
|
const cmd = [
|
||||||
|
"codespell -D -",
|
||||||
|
`-D ${path.join(projectRoot, ".github/codespell-dictionary.txt")}`,
|
||||||
|
`-I ${path.join(projectRoot, ".github/codespell-words.txt")}`,
|
||||||
|
"-S './src/locales/**' ./src -s",
|
||||||
|
].join(" ");
|
||||||
|
|
||||||
|
console.log(execSync(cmd, { encoding: "utf8" }));
|
56
web/packages/common/scripts/eslint.mjs
Normal file
56
web/packages/common/scripts/eslint.mjs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import { execFileSync } from "child_process";
|
||||||
|
import { ESLint } from "eslint";
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
import process from "process";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
|
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
||||||
|
const projectRoot = path.join(__dirname, "..");
|
||||||
|
process.chdir(projectRoot);
|
||||||
|
|
||||||
|
function changedFiles() {
|
||||||
|
const gitStatus = execFileSync("git", ["diff", "--name-only", "HEAD"], { encoding: "utf8" });
|
||||||
|
const gitUntracked = execFileSync("git", ["ls-files", "--others", "--exclude-standard"], {
|
||||||
|
encoding: "utf8",
|
||||||
|
});
|
||||||
|
|
||||||
|
const changed = gitStatus
|
||||||
|
.split("\n")
|
||||||
|
.filter((line) => line.trim().substring(0, 4) === "web/")
|
||||||
|
.filter((line) => /\.(m|c)?(t|j)s$/.test(line))
|
||||||
|
.map((line) => line.substring(4))
|
||||||
|
.filter((line) => fs.existsSync(line));
|
||||||
|
|
||||||
|
const untracked = gitUntracked
|
||||||
|
.split("\n")
|
||||||
|
.filter((line) => /\.(m|c)?(t|j)s$/.test(line))
|
||||||
|
.filter((line) => fs.existsSync(line));
|
||||||
|
|
||||||
|
const sourceFiles = [...changed, ...untracked].filter((line) => /^src\//.test(line));
|
||||||
|
const scriptFiles = [...changed, ...untracked].filter(
|
||||||
|
(line) => /^scripts\//.test(line) || !/^src\//.test(line),
|
||||||
|
);
|
||||||
|
|
||||||
|
return [...sourceFiles, ...scriptFiles];
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasFlag = (flags) => process.argv.length > 1 && flags.includes(process.argv[2]);
|
||||||
|
|
||||||
|
const [configFile, files] = hasFlag(["-n", "--nightmare"])
|
||||||
|
? [path.join(__dirname, "eslint.nightmare.mjs"), changedFiles()]
|
||||||
|
: hasFlag(["-p", "--precommit"])
|
||||||
|
? [path.join(__dirname, "eslint.precommit.mjs"), changedFiles()]
|
||||||
|
: [path.join(projectRoot, "eslint.config.mjs"), ["."]];
|
||||||
|
|
||||||
|
const eslint = new ESLint({
|
||||||
|
overrideConfigFile: configFile,
|
||||||
|
warnIgnored: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const results = await eslint.lintFiles(files);
|
||||||
|
const formatter = await eslint.loadFormatter("stylish");
|
||||||
|
const resultText = formatter.format(results);
|
||||||
|
const errors = results.reduce((acc, result) => acc + result.errorCount, 0);
|
||||||
|
console.log(resultText);
|
||||||
|
process.exit(errors > 1 ? 1 : 0);
|
203
web/packages/common/scripts/eslint.nightmare.mjs
Normal file
203
web/packages/common/scripts/eslint.nightmare.mjs
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
import eslint from "@eslint/js";
|
||||||
|
import tsparser from "@typescript-eslint/parser";
|
||||||
|
import litconf from "eslint-plugin-lit";
|
||||||
|
import sonar from "eslint-plugin-sonarjs";
|
||||||
|
import wcconf from "eslint-plugin-wc";
|
||||||
|
import globals from "globals";
|
||||||
|
import tseslint from "typescript-eslint";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
// You would not believe how much this change has frustrated users: ["if an ignores key is used
|
||||||
|
// without any other keys in the configuration object, then the patterns act as global
|
||||||
|
// ignores"](https://eslint.org/docs/latest/use/configure/ignore)
|
||||||
|
{
|
||||||
|
ignores: [
|
||||||
|
"dist/",
|
||||||
|
// don't ever lint node_modules
|
||||||
|
"node_modules/",
|
||||||
|
".storybook/",
|
||||||
|
".wireit/",
|
||||||
|
// don't lint build output (make sure it's set to your correct build folder name)
|
||||||
|
// don't lint nyc coverage output
|
||||||
|
"coverage/",
|
||||||
|
"src/locale-codes.ts",
|
||||||
|
"storybook-static/",
|
||||||
|
"src/locales/",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
eslint.configs.recommended,
|
||||||
|
wcconf.configs["flat/recommended"],
|
||||||
|
litconf.configs["flat/recommended"],
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
sonar.configs.recommended,
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsparser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
...globals.browser,
|
||||||
|
process: "readonly",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: ["src/**"],
|
||||||
|
rules: {
|
||||||
|
"accessor-pairs": "error",
|
||||||
|
"array-callback-return": "error",
|
||||||
|
"block-scoped-var": "error",
|
||||||
|
"consistent-return": "error",
|
||||||
|
"consistent-this": ["error", "that"],
|
||||||
|
"curly": ["error", "all"],
|
||||||
|
"dot-notation": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
allowKeywords: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"eqeqeq": "error",
|
||||||
|
"func-names": "error",
|
||||||
|
"guard-for-in": "error",
|
||||||
|
"max-depth": ["error", 4],
|
||||||
|
"max-nested-callbacks": ["error", 4],
|
||||||
|
"max-params": ["error", 5],
|
||||||
|
"new-cap": "error",
|
||||||
|
"no-alert": "error",
|
||||||
|
"no-array-constructor": "error",
|
||||||
|
"no-bitwise": "error",
|
||||||
|
"no-caller": "error",
|
||||||
|
"no-case-declarations": "error",
|
||||||
|
"no-class-assign": "error",
|
||||||
|
"no-cond-assign": "error",
|
||||||
|
"no-const-assign": "error",
|
||||||
|
"no-constant-condition": "error",
|
||||||
|
"no-control-regex": "error",
|
||||||
|
"no-debugger": "error",
|
||||||
|
"no-delete-var": "error",
|
||||||
|
"no-div-regex": "error",
|
||||||
|
"no-dupe-args": "error",
|
||||||
|
"no-dupe-keys": "error",
|
||||||
|
"no-duplicate-case": "error",
|
||||||
|
"no-else-return": "error",
|
||||||
|
"no-empty": "error",
|
||||||
|
"no-empty-character-class": "error",
|
||||||
|
"no-empty-function": "error",
|
||||||
|
"no-labels": "error",
|
||||||
|
"no-eq-null": "error",
|
||||||
|
"no-eval": "error",
|
||||||
|
"no-ex-assign": "error",
|
||||||
|
"no-extend-native": "error",
|
||||||
|
"no-extra-bind": "error",
|
||||||
|
"no-extra-boolean-cast": "error",
|
||||||
|
"no-extra-label": "error",
|
||||||
|
"no-fallthrough": "error",
|
||||||
|
"no-func-assign": "error",
|
||||||
|
"no-implied-eval": "error",
|
||||||
|
"no-implicit-coercion": "error",
|
||||||
|
"no-implicit-globals": "error",
|
||||||
|
"no-inner-declarations": ["error", "functions"],
|
||||||
|
"no-invalid-regexp": "error",
|
||||||
|
"no-irregular-whitespace": "error",
|
||||||
|
"no-iterator": "error",
|
||||||
|
"no-invalid-this": "error",
|
||||||
|
"no-label-var": "error",
|
||||||
|
"no-lone-blocks": "error",
|
||||||
|
"no-lonely-if": "error",
|
||||||
|
"no-loop-func": "error",
|
||||||
|
"no-magic-numbers": ["error", { ignore: [0, 1, -1] }],
|
||||||
|
"no-multi-str": "error",
|
||||||
|
"no-negated-condition": "error",
|
||||||
|
"no-nested-ternary": "error",
|
||||||
|
"no-new": "error",
|
||||||
|
"no-new-func": "error",
|
||||||
|
"no-new-wrappers": "error",
|
||||||
|
"no-obj-calls": "error",
|
||||||
|
"no-octal": "error",
|
||||||
|
"no-octal-escape": "error",
|
||||||
|
"no-param-reassign": "error",
|
||||||
|
"no-proto": "error",
|
||||||
|
"no-redeclare": "error",
|
||||||
|
"no-regex-spaces": "error",
|
||||||
|
"no-restricted-syntax": ["error", "WithStatement"],
|
||||||
|
"no-script-url": "error",
|
||||||
|
"no-self-assign": "error",
|
||||||
|
"no-self-compare": "error",
|
||||||
|
"no-sequences": "error",
|
||||||
|
"no-shadow": "warn",
|
||||||
|
"no-shadow-restricted-names": "error",
|
||||||
|
"no-sparse-arrays": "error",
|
||||||
|
"no-this-before-super": "error",
|
||||||
|
"no-throw-literal": "error",
|
||||||
|
"no-trailing-spaces": "error",
|
||||||
|
"no-undef": "error",
|
||||||
|
"no-undef-init": "error",
|
||||||
|
"no-unexpected-multiline": "error",
|
||||||
|
"no-useless-constructor": "error",
|
||||||
|
"no-unmodified-loop-condition": "error",
|
||||||
|
"no-unneeded-ternary": "error",
|
||||||
|
"no-unreachable": "error",
|
||||||
|
"no-unused-expressions": "error",
|
||||||
|
"no-unused-labels": "error",
|
||||||
|
"no-use-before-define": "error",
|
||||||
|
"no-useless-call": "error",
|
||||||
|
"no-dupe-class-members": "error",
|
||||||
|
"no-var": "error",
|
||||||
|
"no-void": "error",
|
||||||
|
"no-with": "error",
|
||||||
|
"prefer-arrow-callback": "error",
|
||||||
|
"prefer-const": "error",
|
||||||
|
"prefer-rest-params": "error",
|
||||||
|
"prefer-spread": "error",
|
||||||
|
"prefer-template": "error",
|
||||||
|
"radix": "error",
|
||||||
|
"require-yield": "error",
|
||||||
|
"strict": ["error", "global"],
|
||||||
|
"use-isnan": "error",
|
||||||
|
"valid-typeof": "error",
|
||||||
|
"vars-on-top": "error",
|
||||||
|
"yoda": ["error", "never"],
|
||||||
|
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
|
"sonarjs/cognitive-complexity": ["off", 9],
|
||||||
|
"sonarjs/no-duplicate-string": "off",
|
||||||
|
"sonarjs/no-nested-template-literals": "off",
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
argsIgnorePattern: "^_",
|
||||||
|
varsIgnorePattern: "^_",
|
||||||
|
caughtErrorsIgnorePattern: "^_",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsparser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
...globals.nodeBuiltin,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: ["scripts/*.mjs", "*.ts", "*.mjs"],
|
||||||
|
rules: {
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-console": "off",
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
argsIgnorePattern: "^_",
|
||||||
|
varsIgnorePattern: "^_",
|
||||||
|
caughtErrorsIgnorePattern: "^_",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
85
web/packages/common/scripts/eslint.precommit.mjs
Normal file
85
web/packages/common/scripts/eslint.precommit.mjs
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
import eslint from "@eslint/js";
|
||||||
|
import tsparser from "@typescript-eslint/parser";
|
||||||
|
import litconf from "eslint-plugin-lit";
|
||||||
|
import sonar from "eslint-plugin-sonarjs";
|
||||||
|
import wcconf from "eslint-plugin-wc";
|
||||||
|
import globals from "globals";
|
||||||
|
import tseslint from "typescript-eslint";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
// You would not believe how much this change has frustrated users: ["if an ignores key is used
|
||||||
|
// without any other keys in the configuration object, then the patterns act as global
|
||||||
|
// ignores"](https://eslint.org/docs/latest/use/configure/ignore)
|
||||||
|
{
|
||||||
|
ignores: [
|
||||||
|
"dist/",
|
||||||
|
".wireit/",
|
||||||
|
// don't ever lint node_modules
|
||||||
|
"node_modules/",
|
||||||
|
".storybook/*",
|
||||||
|
// don't lint build output (make sure it's set to your correct build folder name)
|
||||||
|
// don't lint nyc coverage output
|
||||||
|
"coverage/",
|
||||||
|
"src/locale-codes.ts",
|
||||||
|
"storybook-static/",
|
||||||
|
"src/locales/",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
eslint.configs.recommended,
|
||||||
|
wcconf.configs["flat/recommended"],
|
||||||
|
litconf.configs["flat/recommended"],
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
sonar.configs.recommended,
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsparser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: ["src/**"],
|
||||||
|
rules: {
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
|
"sonarjs/cognitive-complexity": ["off", 9],
|
||||||
|
"sonarjs/no-duplicate-string": "off",
|
||||||
|
"sonarjs/no-nested-template-literals": "off",
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
argsIgnorePattern: "^_",
|
||||||
|
varsIgnorePattern: "^_",
|
||||||
|
caughtErrorsIgnorePattern: "^_",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsparser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
...globals.nodeBuiltin,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: ["scripts/*.mjs", "*.ts", "*.mjs"],
|
||||||
|
rules: {
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-console": "off",
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
argsIgnorePattern: "^_",
|
||||||
|
varsIgnorePattern: "^_",
|
||||||
|
caughtErrorsIgnorePattern: "^_",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
@ -2,12 +2,32 @@ import {
|
|||||||
CSRFMiddleware,
|
CSRFMiddleware,
|
||||||
EventMiddleware,
|
EventMiddleware,
|
||||||
LoggingMiddleware,
|
LoggingMiddleware,
|
||||||
} from "@goauthentik/common/api/middleware";
|
} from "@goauthentik/common/api/middleware.js";
|
||||||
import { EVENT_LOCALE_REQUEST, VERSION } from "@goauthentik/common/constants";
|
import { EVENT_LOCALE_REQUEST, VERSION } from "@goauthentik/common/constants.js";
|
||||||
import { globalAK } from "@goauthentik/common/global";
|
import { globalAK } from "@goauthentik/common/global.js";
|
||||||
|
|
||||||
import { Config, Configuration, CoreApi, CurrentBrand, RootApi } from "@goauthentik/api";
|
import { Config, Configuration, CoreApi, CurrentBrand, RootApi } from "@goauthentik/api";
|
||||||
|
|
||||||
|
export function getMetaContent(key: string): string {
|
||||||
|
const metaEl = document.querySelector<HTMLMetaElement>(`meta[name=${key}]`);
|
||||||
|
if (!metaEl) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return metaEl.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DEFAULT_CONFIG = new Configuration({
|
||||||
|
basePath: `${process.env.AK_API_BASE_PATH || window.location.origin}/api/v3`,
|
||||||
|
headers: {
|
||||||
|
"sentry-trace": getMetaContent("sentry-trace"),
|
||||||
|
},
|
||||||
|
middleware: [
|
||||||
|
new CSRFMiddleware(),
|
||||||
|
new EventMiddleware(),
|
||||||
|
new LoggingMiddleware(globalAK().brand),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
let globalConfigPromise: Promise<Config> | undefined = Promise.resolve(globalAK().config);
|
let globalConfigPromise: Promise<Config> | undefined = Promise.resolve(globalAK().config);
|
||||||
export function config(): Promise<Config> {
|
export function config(): Promise<Config> {
|
||||||
if (!globalConfigPromise) {
|
if (!globalConfigPromise) {
|
||||||
@ -61,24 +81,6 @@ export function brand(): Promise<CurrentBrand> {
|
|||||||
return globalBrandPromise;
|
return globalBrandPromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMetaContent(key: string): string {
|
|
||||||
const metaEl = document.querySelector<HTMLMetaElement>(`meta[name=${key}]`);
|
|
||||||
if (!metaEl) return "";
|
|
||||||
return metaEl.content;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const DEFAULT_CONFIG = new Configuration({
|
|
||||||
basePath: (process.env.AK_API_BASE_PATH || window.location.origin) + "/api/v3",
|
|
||||||
headers: {
|
|
||||||
"sentry-trace": getMetaContent("sentry-trace"),
|
|
||||||
},
|
|
||||||
middleware: [
|
|
||||||
new CSRFMiddleware(),
|
|
||||||
new EventMiddleware(),
|
|
||||||
new LoggingMiddleware(globalAK().brand),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
// This is just a function so eslint doesn't complain about
|
// This is just a function so eslint doesn't complain about
|
||||||
// missing-whitespace-between-attributes or
|
// missing-whitespace-between-attributes or
|
||||||
// unexpected-character-in-attribute-name
|
// unexpected-character-in-attribute-name
|
@ -1,5 +1,5 @@
|
|||||||
import { EVENT_REQUEST_POST } from "@goauthentik/common/constants";
|
import { EVENT_REQUEST_POST } from "@goauthentik/common/constants.js";
|
||||||
import { getCookie } from "@goauthentik/common/utils";
|
import { getCookie } from "@goauthentik/common/utils.js";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
CurrentBrand,
|
CurrentBrand,
|
||||||
@ -17,6 +17,8 @@ export interface RequestInfo {
|
|||||||
status: number;
|
status: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const HTTP_BAD_REQUEST = 400;
|
||||||
|
|
||||||
export class LoggingMiddleware implements Middleware {
|
export class LoggingMiddleware implements Middleware {
|
||||||
brand: CurrentBrand;
|
brand: CurrentBrand;
|
||||||
constructor(brand: CurrentBrand) {
|
constructor(brand: CurrentBrand) {
|
||||||
@ -28,7 +30,7 @@ export class LoggingMiddleware implements Middleware {
|
|||||||
// https://developer.mozilla.org/en-US/docs/Web/API/console#styling_console_output
|
// https://developer.mozilla.org/en-US/docs/Web/API/console#styling_console_output
|
||||||
msg += `%c${context.response.status}%c ${context.init.method} ${context.url}`;
|
msg += `%c${context.response.status}%c ${context.init.method} ${context.url}`;
|
||||||
let style = "";
|
let style = "";
|
||||||
if (context.response.status >= 400) {
|
if (context.response.status >= HTTP_BAD_REQUEST) {
|
||||||
style = "color: red; font-weight: bold;";
|
style = "color: red; font-weight: bold;";
|
||||||
}
|
}
|
||||||
console.debug(msg, style, "");
|
console.debug(msg, style, "");
|
||||||
@ -38,7 +40,7 @@ export class LoggingMiddleware implements Middleware {
|
|||||||
|
|
||||||
export class CSRFMiddleware implements Middleware {
|
export class CSRFMiddleware implements Middleware {
|
||||||
pre?(context: RequestContext): Promise<FetchParams | void> {
|
pre?(context: RequestContext): Promise<FetchParams | void> {
|
||||||
// @ts-ignore
|
// @ts-expect-error Headers collection type does not recognize 'X-' headers.
|
||||||
context.init.headers[CSRFHeaderName] = getCookie("authentik_csrf");
|
context.init.headers[CSRFHeaderName] = getCookie("authentik_csrf");
|
||||||
return Promise.resolve(context);
|
return Promise.resolve(context);
|
||||||
}
|
}
|
@ -12,18 +12,25 @@ export class RequestError extends Error {}
|
|||||||
|
|
||||||
export type APIErrorTypes = ValidationError | GenericError;
|
export type APIErrorTypes = ValidationError | GenericError;
|
||||||
|
|
||||||
|
const HTTP_BAD_REQUEST = 400;
|
||||||
|
const HTTP_FORBIDDEN = 403;
|
||||||
|
const HTTP_INTERNAL_SERVICE_ERROR = 500;
|
||||||
|
|
||||||
export async function parseAPIError(error: Error): Promise<APIErrorTypes> {
|
export async function parseAPIError(error: Error): Promise<APIErrorTypes> {
|
||||||
if (!(error instanceof ResponseError)) {
|
if (!(error instanceof ResponseError)) {
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
if (error.response.status < 400 || error.response.status > 499) {
|
if (
|
||||||
|
error.response.status < HTTP_BAD_REQUEST ||
|
||||||
|
error.response.status >= HTTP_INTERNAL_SERVICE_ERROR
|
||||||
|
) {
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
const body = await error.response.json();
|
const body = await error.response.json();
|
||||||
if (error.response.status === 400) {
|
if (error.response.status === HTTP_BAD_REQUEST) {
|
||||||
return ValidationErrorFromJSON(body);
|
return ValidationErrorFromJSON(body);
|
||||||
}
|
}
|
||||||
if (error.response.status === 403) {
|
if (error.response.status === HTTP_FORBIDDEN) {
|
||||||
return GenericErrorFromJSON(body);
|
return GenericErrorFromJSON(body);
|
||||||
}
|
}
|
||||||
return body;
|
return body;
|
@ -8,6 +8,13 @@ export interface EventUser {
|
|||||||
is_anonymous?: boolean;
|
is_anonymous?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface EventModel {
|
||||||
|
pk: string;
|
||||||
|
name: string;
|
||||||
|
app: string;
|
||||||
|
model_name: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface EventContext {
|
export interface EventContext {
|
||||||
[key: string]: EventContext | EventModel | string | number | string[];
|
[key: string]: EventContext | EventModel | string | number | string[];
|
||||||
}
|
}
|
||||||
@ -17,13 +24,6 @@ export interface EventWithContext extends Event {
|
|||||||
context: EventContext;
|
context: EventContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface EventModel {
|
|
||||||
pk: string;
|
|
||||||
name: string;
|
|
||||||
app: string;
|
|
||||||
model_name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface EventRequest {
|
export interface EventRequest {
|
||||||
path: string;
|
path: string;
|
||||||
method: string;
|
method: string;
|
@ -1,5 +1,5 @@
|
|||||||
import { VERSION } from "@goauthentik/common/constants";
|
import { VERSION } from "@goauthentik/common/constants.js";
|
||||||
import { SentryIgnoredError } from "@goauthentik/common/errors";
|
import { SentryIgnoredError } from "@goauthentik/common/errors.js";
|
||||||
|
|
||||||
export interface PlexPinResponse {
|
export interface PlexPinResponse {
|
||||||
// Only has the fields we care about
|
// Only has the fields we care about
|
||||||
@ -23,14 +23,16 @@ export const DEFAULT_HEADERS = {
|
|||||||
"X-Plex-Device-Vendor": "goauthentik.io",
|
"X-Plex-Device-Vendor": "goauthentik.io",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const HTTP_OK = 200;
|
||||||
|
const POLL_TIMEOUT = 500; // milliseconds
|
||||||
|
|
||||||
export async function popupCenterScreen(
|
export async function popupCenterScreen(
|
||||||
url: string,
|
url: string,
|
||||||
title: string,
|
title: string,
|
||||||
w: number,
|
w: number,
|
||||||
h: number,
|
h: number,
|
||||||
): Promise<Window | null> {
|
): Promise<Window | null> {
|
||||||
const top = (screen.height - h) / 4,
|
const [top, left] = [(screen.height - h) / 4, (screen.width - w) / 2];
|
||||||
left = (screen.width - w) / 2;
|
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const popup = window.open(
|
const popup = window.open(
|
||||||
@ -78,7 +80,7 @@ export class PlexAPIClient {
|
|||||||
const pinResponse = await fetch(`https://plex.tv/api/v2/pins/${id}`, {
|
const pinResponse = await fetch(`https://plex.tv/api/v2/pins/${id}`, {
|
||||||
headers: headers,
|
headers: headers,
|
||||||
});
|
});
|
||||||
if (pinResponse.status > 200) {
|
if (pinResponse.status > HTTP_OK) {
|
||||||
throw new SentryIgnoredError("Invalid response code");
|
throw new SentryIgnoredError("Invalid response code");
|
||||||
}
|
}
|
||||||
const pin: PlexPinResponse = await pinResponse.json();
|
const pin: PlexPinResponse = await pinResponse.json();
|
||||||
@ -97,7 +99,7 @@ export class PlexAPIClient {
|
|||||||
if (response) {
|
if (response) {
|
||||||
resolve(response);
|
resolve(response);
|
||||||
} else {
|
} else {
|
||||||
setTimeout(executePoll, 500, resolve, reject);
|
setTimeout(executePoll, POLL_TIMEOUT, resolve, reject);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
reject(e as Error);
|
reject(e as Error);
|
@ -3,7 +3,7 @@ import * as base64js from "base64-js";
|
|||||||
import { msg } from "@lit/localize";
|
import { msg } from "@lit/localize";
|
||||||
|
|
||||||
export function b64enc(buf: Uint8Array): string {
|
export function b64enc(buf: Uint8Array): string {
|
||||||
return base64js.fromByteArray(buf).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
return base64js.fromByteArray(buf).replace(/\+/g, "-").replace(/\//g, "_").replace(/[=]/g, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
export function b64RawEnc(buf: Uint8Array): string {
|
export function b64RawEnc(buf: Uint8Array): string {
|
@ -1,7 +1,7 @@
|
|||||||
import { config } from "@goauthentik/common/api/config";
|
import { config } from "@goauthentik/common/api/config.js";
|
||||||
import { VERSION } from "@goauthentik/common/constants";
|
import { VERSION } from "@goauthentik/common/constants.js";
|
||||||
import { SentryIgnoredError } from "@goauthentik/common/errors";
|
import { SentryIgnoredError } from "@goauthentik/common/errors.js";
|
||||||
import { me } from "@goauthentik/common/users";
|
import { me } from "@goauthentik/common/users.js";
|
||||||
import {
|
import {
|
||||||
ErrorEvent,
|
ErrorEvent,
|
||||||
EventHint,
|
EventHint,
|
||||||
@ -15,6 +15,17 @@ import { CapabilitiesEnum, Config, ResponseError } from "@goauthentik/api";
|
|||||||
|
|
||||||
export const TAG_SENTRY_COMPONENT = "authentik.component";
|
export const TAG_SENTRY_COMPONENT = "authentik.component";
|
||||||
export const TAG_SENTRY_CAPABILITIES = "authentik.capabilities";
|
export const TAG_SENTRY_CAPABILITIES = "authentik.capabilities";
|
||||||
|
const MIN_PATH_LENGTH = 2;
|
||||||
|
|
||||||
|
// Get the interface name from URL
|
||||||
|
export function currentInterface(): string {
|
||||||
|
const pathMatches = window.location.pathname.match(/.+if\/(\w+)\//);
|
||||||
|
let knownInterface = "unknown";
|
||||||
|
if (pathMatches && pathMatches.length >= MIN_PATH_LENGTH) {
|
||||||
|
knownInterface = pathMatches[1];
|
||||||
|
}
|
||||||
|
return knownInterface.toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
export async function configureSentry(canDoPpi = false): Promise<Config> {
|
export async function configureSentry(canDoPpi = false): Promise<Config> {
|
||||||
const cfg = await config();
|
const cfg = await config();
|
||||||
@ -81,13 +92,3 @@ export async function configureSentry(canDoPpi = false): Promise<Config> {
|
|||||||
}
|
}
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the interface name from URL
|
|
||||||
export function currentInterface(): string {
|
|
||||||
const pathMatches = window.location.pathname.match(/.+if\/(\w+)\//);
|
|
||||||
let currentInterface = "unknown";
|
|
||||||
if (pathMatches && pathMatches.length >= 2) {
|
|
||||||
currentInterface = pathMatches[1];
|
|
||||||
}
|
|
||||||
return currentInterface.toLowerCase();
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
import { currentInterface } from "@goauthentik/common/sentry";
|
import { currentInterface } from "@goauthentik/common/sentry.js";
|
||||||
import { me } from "@goauthentik/common/users";
|
import { me } from "@goauthentik/common/users.js";
|
||||||
|
|
||||||
import { UiThemeEnum, UserSelf } from "@goauthentik/api";
|
import { UiThemeEnum, UserSelf } from "@goauthentik/api";
|
||||||
|
|
@ -1,14 +1,12 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EVENT_LOCALE_REQUEST } from "@goauthentik/common/constants";
|
import { EVENT_LOCALE_REQUEST } from "@goauthentik/common/constants.js";
|
||||||
|
|
||||||
import { CoreApi, ResponseError, SessionUser } from "@goauthentik/api";
|
import { CoreApi, ResponseError, SessionUser } from "@goauthentik/api";
|
||||||
|
|
||||||
let globalMePromise: Promise<SessionUser> | undefined;
|
let globalMePromise: Promise<SessionUser> | undefined;
|
||||||
|
|
||||||
export function refreshMe(): Promise<SessionUser> {
|
const HTTP_FORBIDDEN = 403;
|
||||||
globalMePromise = undefined;
|
const HTTP_UNAUTHORIZED = 401;
|
||||||
return me();
|
|
||||||
}
|
|
||||||
|
|
||||||
export function me(): Promise<SessionUser> {
|
export function me(): Promise<SessionUser> {
|
||||||
if (!globalMePromise) {
|
if (!globalMePromise) {
|
||||||
@ -48,7 +46,10 @@ export function me(): Promise<SessionUser> {
|
|||||||
systemPermissions: [],
|
systemPermissions: [],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
if (ex.response?.status === 401 || ex.response?.status === 403) {
|
if (
|
||||||
|
ex.response?.status === HTTP_UNAUTHORIZED ||
|
||||||
|
ex.response?.status === HTTP_FORBIDDEN
|
||||||
|
) {
|
||||||
const relativeUrl = window.location
|
const relativeUrl = window.location
|
||||||
.toString()
|
.toString()
|
||||||
.substring(window.location.origin.length);
|
.substring(window.location.origin.length);
|
||||||
@ -61,3 +62,8 @@ export function me(): Promise<SessionUser> {
|
|||||||
}
|
}
|
||||||
return globalMePromise;
|
return globalMePromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function refreshMe(): Promise<SessionUser> {
|
||||||
|
globalMePromise = undefined;
|
||||||
|
return me();
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import { SentryIgnoredError } from "@goauthentik/common/errors";
|
import { SentryIgnoredError } from "@goauthentik/common/errors.js";
|
||||||
|
|
||||||
import { CSSResult, css } from "lit";
|
import { CSSResult, css } from "lit";
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ export function getCookie(name: string): string {
|
|||||||
for (let i = 0; i < cookies.length; i++) {
|
for (let i = 0; i < cookies.length; i++) {
|
||||||
const cookie = cookies[i].trim();
|
const cookie = cookies[i].trim();
|
||||||
// Does this cookie string begin with the name we want?
|
// Does this cookie string begin with the name we want?
|
||||||
if (cookie.substring(0, name.length + 1) === name + "=") {
|
if (cookie.substring(0, name.length + 1) === `${name}=`) {
|
||||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -25,21 +25,21 @@ export function convertToSlug(text: string): string {
|
|||||||
.replace(/[^\w-]+/g, "");
|
.replace(/[^\w-]+/g, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const WORD_COUNT_TRUNCATION_DEFAULT = 10;
|
||||||
/**
|
/**
|
||||||
* Truncate a string based on maximum word count
|
* Truncate a string based on maximum word count
|
||||||
*/
|
*/
|
||||||
export function truncateWords(string: string, length = 10): string {
|
export function truncateWords(input: string, length = WORD_COUNT_TRUNCATION_DEFAULT): string {
|
||||||
string = string || "";
|
const words = (input ?? "").trim().split(" ");
|
||||||
const array = string.trim().split(" ");
|
const ellipsis = words.length > length ? "..." : "";
|
||||||
const ellipsis = array.length > length ? "..." : "";
|
return words.slice(0, length).join(" ") + ellipsis;
|
||||||
|
|
||||||
return array.slice(0, length).join(" ") + ellipsis;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CHAR_COUNT_TRUNCATION_DEFAULT = 10;
|
||||||
/**
|
/**
|
||||||
* Truncate a string based on character count
|
* Truncate a string based on character count
|
||||||
*/
|
*/
|
||||||
export function truncate(string: string, length = 10): string {
|
export function truncate(string: string, length = CHAR_COUNT_TRUNCATION_DEFAULT): string {
|
||||||
return string.length > length ? `${string.substring(0, length)}...` : string;
|
return string.length > length ? `${string.substring(0, length)}...` : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,20 +83,24 @@ export const ascii_lowercase = "abcdefghijklmnopqrstuvwxyz";
|
|||||||
export const ascii_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
export const ascii_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
export const ascii_letters = ascii_lowercase + ascii_uppercase;
|
export const ascii_letters = ascii_lowercase + ascii_uppercase;
|
||||||
export const digits = "0123456789";
|
export const digits = "0123456789";
|
||||||
export const hexdigits = digits + "abcdef" + "ABCDEF";
|
export const hexdigits = `${digits}abcdefABCDEF}`;
|
||||||
export const octdigits = "01234567";
|
export const octdigits = "01234567";
|
||||||
export const punctuation = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
|
export const punctuation = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
|
||||||
|
|
||||||
|
const BYTE_SIZE = 256;
|
||||||
|
|
||||||
export function randomString(len: number, charset: string): string {
|
export function randomString(len: number, charset: string): string {
|
||||||
const chars = [];
|
const chars = [];
|
||||||
const array = new Uint8Array(len);
|
const array = new Uint8Array(len);
|
||||||
self.crypto.getRandomValues(array);
|
self.crypto.getRandomValues(array);
|
||||||
for (let index = 0; index < len; index++) {
|
for (let index = 0; index < len; index++) {
|
||||||
chars.push(charset[Math.floor(charset.length * (array[index] / Math.pow(2, 8)))]);
|
chars.push(charset[Math.floor(charset.length * (array[index] / BYTE_SIZE))]);
|
||||||
}
|
}
|
||||||
return chars.join("");
|
return chars.join("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TIMEZONE_OFFSET = 60000; // milliseconds
|
||||||
|
|
||||||
export function dateTimeLocal(date: Date): string {
|
export function dateTimeLocal(date: Date): string {
|
||||||
// So for some reason, the datetime-local input field requires ISO Datetime as value
|
// So for some reason, the datetime-local input field requires ISO Datetime as value
|
||||||
// But the standard javascript date.toISOString() returns everything with seconds and
|
// But the standard javascript date.toISOString() returns everything with seconds and
|
||||||
@ -105,7 +109,7 @@ export function dateTimeLocal(date: Date): string {
|
|||||||
// figure.
|
// figure.
|
||||||
// Additionally, toISOString always returns the date without timezone, which we would like
|
// Additionally, toISOString always returns the date without timezone, which we would like
|
||||||
// to include for better usability
|
// to include for better usability
|
||||||
const tzOffset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds
|
const tzOffset = new Date().getTimezoneOffset() * TIMEZONE_OFFSET;
|
||||||
const localISOTime = new Date(date.getTime() - tzOffset).toISOString().slice(0, -1);
|
const localISOTime = new Date(date.getTime() - tzOffset).toISOString().slice(0, -1);
|
||||||
const parts = localISOTime.split(":");
|
const parts = localISOTime.split(":");
|
||||||
return `${parts[0]}:${parts[1]}`;
|
return `${parts[0]}:${parts[1]}`;
|
||||||
@ -122,7 +126,7 @@ export function dateToUTC(date: Date): Date {
|
|||||||
// then subtract the timezone offset to create an "invalid" date (correct time&date)
|
// then subtract the timezone offset to create an "invalid" date (correct time&date)
|
||||||
// but it still "thinks" it's in local TZ
|
// but it still "thinks" it's in local TZ
|
||||||
const timestamp = date.getTime();
|
const timestamp = date.getTime();
|
||||||
const offset = -1 * (new Date().getTimezoneOffset() * 60000);
|
const offset = -1 * (new Date().getTimezoneOffset() * TIMEZONE_OFFSET);
|
||||||
return new Date(timestamp - offset);
|
return new Date(timestamp - offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,13 +155,26 @@ export function adaptCSS(sheet: AdaptableStylesheet | AdaptableStylesheet[]): Ad
|
|||||||
return Array.isArray(sheet) ? sheet.map(_adaptCSS) : _adaptCSS(sheet);
|
return Array.isArray(sheet) ? sheet.map(_adaptCSS) : _adaptCSS(sheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SECONDS_IN_A_MINUTE = 60;
|
||||||
|
const MINUTES_IN_AN_HOUR = 60;
|
||||||
|
const HOURS_IN_A_DAY = 24;
|
||||||
|
const DAYS_IN_A_YEAR = 365;
|
||||||
|
const MONTHS_IN_A_YEAR = 12;
|
||||||
|
|
||||||
|
const MILLISECONDS_IN_A_SECOND = 1000;
|
||||||
|
const MILLISECONDS_IN_A_MINUTE = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;
|
||||||
|
const MILLISECONDS_IN_AN_HOUR = MILLISECONDS_IN_A_MINUTE * MINUTES_IN_AN_HOUR;
|
||||||
|
const MILLISECONDS_IN_A_DAY = MILLISECONDS_IN_AN_HOUR * HOURS_IN_A_DAY;
|
||||||
|
const MILLISECONDS_IN_A_YEAR = MILLISECONDS_IN_A_DAY * DAYS_IN_A_YEAR;
|
||||||
|
const MILLISECONDS_IN_A_MONTH = MILLISECONDS_IN_A_YEAR / MONTHS_IN_A_YEAR;
|
||||||
|
|
||||||
const _timeUnits = new Map<Intl.RelativeTimeFormatUnit, number>([
|
const _timeUnits = new Map<Intl.RelativeTimeFormatUnit, number>([
|
||||||
["year", 24 * 60 * 60 * 1000 * 365],
|
["year", MILLISECONDS_IN_A_YEAR],
|
||||||
["month", (24 * 60 * 60 * 1000 * 365) / 12],
|
["month", MILLISECONDS_IN_A_MONTH],
|
||||||
["day", 24 * 60 * 60 * 1000],
|
["day", MILLISECONDS_IN_A_DAY],
|
||||||
["hour", 60 * 60 * 1000],
|
["hour", MILLISECONDS_IN_AN_HOUR],
|
||||||
["minute", 60 * 1000],
|
["minute", MILLISECONDS_IN_A_MINUTE],
|
||||||
["second", 1000],
|
["second", MILLISECONDS_IN_A_SECOND],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export function getRelativeTime(d1: Date, d2: Date = new Date()): string {
|
export function getRelativeTime(d1: Date, d2: Date = new Date()): string {
|
||||||
@ -166,9 +183,9 @@ export function getRelativeTime(d1: Date, d2: Date = new Date()): string {
|
|||||||
|
|
||||||
// "Math.abs" accounts for both "past" & "future" scenarios
|
// "Math.abs" accounts for both "past" & "future" scenarios
|
||||||
for (const [key, value] of _timeUnits) {
|
for (const [key, value] of _timeUnits) {
|
||||||
if (Math.abs(elapsed) > value || key == "second") {
|
if (Math.abs(elapsed) > value || key === "second") {
|
||||||
return rtf.format(Math.round(elapsed / value), key);
|
return rtf.format(Math.round(elapsed / value), key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rtf.format(Math.round(elapsed / 1000), "second");
|
return rtf.format(Math.round(elapsed / MILLISECONDS_IN_A_SECOND), "second");
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import { EVENT_MESSAGE, EVENT_WS_MESSAGE } from "@goauthentik/common/constants";
|
import { EVENT_MESSAGE, EVENT_WS_MESSAGE } from "@goauthentik/common/constants.js";
|
||||||
import { MessageLevel } from "@goauthentik/common/messages";
|
import { MessageLevel } from "@goauthentik/common/messages.js";
|
||||||
|
|
||||||
import { msg } from "@lit/localize";
|
import { msg } from "@lit/localize";
|
||||||
|
|
||||||
@ -7,9 +7,14 @@ export interface WSMessage {
|
|||||||
message_type: string;
|
message_type: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MESSAGE_RETRY_DELAY = 200; // milliseconds
|
||||||
|
const CLOSE_RETRY_DELAY = 6000; // milliseconds
|
||||||
|
const OPEN_RETRY_DELAY = 200; // milliseconds
|
||||||
|
const RETRY_BACKOFF = 2;
|
||||||
|
|
||||||
export class WebsocketClient {
|
export class WebsocketClient {
|
||||||
messageSocket?: WebSocket;
|
messageSocket?: WebSocket;
|
||||||
retryDelay = 200;
|
retryDelay = MESSAGE_RETRY_DELAY;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
try {
|
try {
|
||||||
@ -20,18 +25,20 @@ export class WebsocketClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
connect(): void {
|
connect(): void {
|
||||||
if (navigator.webdriver) return;
|
if (navigator.webdriver) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const wsUrl = `${window.location.protocol.replace("http", "ws")}//${
|
const wsUrl = `${window.location.protocol.replace("http", "ws")}//${
|
||||||
window.location.host
|
window.location.host
|
||||||
}/ws/client/`;
|
}/ws/client/`;
|
||||||
this.messageSocket = new WebSocket(wsUrl);
|
this.messageSocket = new WebSocket(wsUrl);
|
||||||
this.messageSocket.addEventListener("open", () => {
|
this.messageSocket.addEventListener("open", () => {
|
||||||
console.debug(`authentik/ws: connected to ${wsUrl}`);
|
console.debug(`authentik/ws: connected to ${wsUrl}`);
|
||||||
this.retryDelay = 200;
|
this.retryDelay = OPEN_RETRY_DELAY;
|
||||||
});
|
});
|
||||||
this.messageSocket.addEventListener("close", (e) => {
|
this.messageSocket.addEventListener("close", (e) => {
|
||||||
console.debug("authentik/ws: closed ws connection", e);
|
console.debug("authentik/ws: closed ws connection", e);
|
||||||
if (this.retryDelay > 6000) {
|
if (this.retryDelay > CLOSE_RETRY_DELAY) {
|
||||||
window.dispatchEvent(
|
window.dispatchEvent(
|
||||||
new CustomEvent(EVENT_MESSAGE, {
|
new CustomEvent(EVENT_MESSAGE, {
|
||||||
bubbles: true,
|
bubbles: true,
|
||||||
@ -47,7 +54,7 @@ export class WebsocketClient {
|
|||||||
console.debug(`authentik/ws: reconnecting ws in ${this.retryDelay}ms`);
|
console.debug(`authentik/ws: reconnecting ws in ${this.retryDelay}ms`);
|
||||||
this.connect();
|
this.connect();
|
||||||
}, this.retryDelay);
|
}, this.retryDelay);
|
||||||
this.retryDelay = this.retryDelay * 2;
|
this.retryDelay = this.retryDelay * RETRY_BACKOFF;
|
||||||
});
|
});
|
||||||
this.messageSocket.addEventListener("message", (e) => {
|
this.messageSocket.addEventListener("message", (e) => {
|
||||||
const data = JSON.parse(e.data);
|
const data = JSON.parse(e.data);
|
||||||
@ -60,7 +67,7 @@ export class WebsocketClient {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
this.messageSocket.addEventListener("error", () => {
|
this.messageSocket.addEventListener("error", () => {
|
||||||
this.retryDelay = this.retryDelay * 2;
|
this.retryDelay = this.retryDelay * RETRY_BACKOFF;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
12
web/packages/common/tsconfig.build.json
Normal file
12
web/packages/common/tsconfig.build.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"baseUrl": ".",
|
||||||
|
"outDir": "./dist/",
|
||||||
|
"types": ["webauthn"],
|
||||||
|
"paths": {
|
||||||
|
"@goauthentik/elements/*": ["./src/*"],
|
||||||
|
"@goauthentik/locales/*": ["src/locales/*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
44
web/packages/common/tsconfig.json
Normal file
44
web/packages/common/tsconfig.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"outDir": "./dist/",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"paths": {
|
||||||
|
"@goauthentik/common/*": ["./src/*"],
|
||||||
|
"@goauthentik/locales/*": ["src/locales/*"]
|
||||||
|
},
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"lib": [
|
||||||
|
"ES5",
|
||||||
|
"ES2015",
|
||||||
|
"ES2016",
|
||||||
|
"ES2017",
|
||||||
|
"ES2018",
|
||||||
|
"ES2019",
|
||||||
|
"ES2020",
|
||||||
|
"ESNext",
|
||||||
|
"DOM",
|
||||||
|
"DOM.Iterable",
|
||||||
|
"WebWorker"
|
||||||
|
],
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"strictBindCallApply": true,
|
||||||
|
"strictFunctionTypes": true,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"allowUnreachableCode": false,
|
||||||
|
"allowUnusedLabels": false,
|
||||||
|
"useDefineForClassFields": false,
|
||||||
|
"alwaysStrict": true,
|
||||||
|
"noImplicitAny": true,
|
||||||
|
},
|
||||||
|
"exclude": ["node_modules", "dist"]
|
||||||
|
}
|
@ -48,6 +48,11 @@ const eslint = new ESLint({
|
|||||||
warnIgnored: false,
|
warnIgnored: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (files.length < 1) {
|
||||||
|
console.log("eslint: change set contains no lintable files");
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
const results = await eslint.lintFiles(files);
|
const results = await eslint.lintFiles(files);
|
||||||
const formatter = await eslint.loadFormatter("stylish");
|
const formatter = await eslint.loadFormatter("stylish");
|
||||||
const resultText = formatter.format(results);
|
const resultText = formatter.format(results);
|
||||||
|
@ -13,6 +13,8 @@ export default [
|
|||||||
{
|
{
|
||||||
ignores: [
|
ignores: [
|
||||||
"dist/",
|
"dist/",
|
||||||
|
".wireit/",
|
||||||
|
"packages/",
|
||||||
// don't ever lint node_modules
|
// don't ever lint node_modules
|
||||||
"node_modules/",
|
"node_modules/",
|
||||||
".storybook/*",
|
".storybook/*",
|
||||||
|
@ -13,6 +13,8 @@ export default [
|
|||||||
{
|
{
|
||||||
ignores: [
|
ignores: [
|
||||||
"dist/",
|
"dist/",
|
||||||
|
".wireit/",
|
||||||
|
"packages/",
|
||||||
// don't ever lint node_modules
|
// don't ever lint node_modules
|
||||||
"node_modules/",
|
"node_modules/",
|
||||||
".storybook/*",
|
".storybook/*",
|
||||||
|
3057
web/sfe/package-lock.json
generated
3057
web/sfe/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@goauthentik/web-sfe",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"private": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@goauthentik/api": "^2024.6.3-1723109801",
|
|
||||||
"base64-js": "^1.5.1",
|
|
||||||
"bootstrap": "^4.6.1",
|
|
||||||
"formdata-polyfill": "^4.0.10",
|
|
||||||
"jquery": "^3.7.1",
|
|
||||||
"weakmap-polyfill": "^2.0.4"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "rollup -c rollup.config.js --bundleConfigAsCjs",
|
|
||||||
"watch": "rollup -w -c rollup.config.js --bundleConfigAsCjs"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@rollup/plugin-commonjs": "^26.0.1",
|
|
||||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
||||||
"@rollup/plugin-swc": "^0.3.1",
|
|
||||||
"@swc/cli": "^0.4.0",
|
|
||||||
"@swc/core": "^1.7.6",
|
|
||||||
"@types/jquery": "^3.5.30",
|
|
||||||
"rollup": "^4.20.0",
|
|
||||||
"rollup-plugin-copy": "^3.5.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,12 @@
|
|||||||
import { ROUTES } from "@goauthentik/admin/Routes";
|
import { ROUTES } from "@goauthentik/admin/Routes";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import {
|
import {
|
||||||
EVENT_API_DRAWER_TOGGLE,
|
EVENT_API_DRAWER_TOGGLE,
|
||||||
EVENT_NOTIFICATION_DRAWER_TOGGLE,
|
EVENT_NOTIFICATION_DRAWER_TOGGLE,
|
||||||
} from "@goauthentik/common/constants";
|
} from "@goauthentik/common/constants.js";
|
||||||
import { configureSentry } from "@goauthentik/common/sentry";
|
import { configureSentry } from "@goauthentik/common/sentry.js";
|
||||||
import { me } from "@goauthentik/common/users";
|
import { me } from "@goauthentik/common/users.js";
|
||||||
import { WebsocketClient } from "@goauthentik/common/ws";
|
import { WebsocketClient } from "@goauthentik/common/ws.js";
|
||||||
import { EnterpriseAwareInterface } from "@goauthentik/elements/Interface";
|
import { EnterpriseAwareInterface } from "@goauthentik/elements/Interface";
|
||||||
import "@goauthentik/elements/ak-locale-context";
|
import "@goauthentik/elements/ak-locale-context";
|
||||||
import "@goauthentik/elements/enterprise/EnterpriseStatusBanner";
|
import "@goauthentik/elements/enterprise/EnterpriseStatusBanner";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EVENT_SIDEBAR_TOGGLE, VERSION } from "@goauthentik/common/constants";
|
import { EVENT_SIDEBAR_TOGGLE, VERSION } from "@goauthentik/common/constants.js";
|
||||||
import { me } from "@goauthentik/common/users";
|
import { me } from "@goauthentik/common/users.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import {
|
import {
|
||||||
CapabilitiesEnum,
|
CapabilitiesEnum,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { MessageLevel } from "@goauthentik/common/messages";
|
import { MessageLevel } from "@goauthentik/common/messages.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import "@goauthentik/elements/PageHeader";
|
import "@goauthentik/elements/PageHeader";
|
||||||
import { showMessage } from "@goauthentik/elements/messages/MessageContainer";
|
import { showMessage } from "@goauthentik/elements/messages/MessageContainer";
|
||||||
|
@ -8,8 +8,8 @@ import "@goauthentik/admin/admin-overview/cards/WorkerStatusCard";
|
|||||||
import "@goauthentik/admin/admin-overview/charts/AdminLoginAuthorizeChart";
|
import "@goauthentik/admin/admin-overview/charts/AdminLoginAuthorizeChart";
|
||||||
import "@goauthentik/admin/admin-overview/charts/OutpostStatusChart";
|
import "@goauthentik/admin/admin-overview/charts/OutpostStatusChart";
|
||||||
import "@goauthentik/admin/admin-overview/charts/SyncStatusChart";
|
import "@goauthentik/admin/admin-overview/charts/SyncStatusChart";
|
||||||
import { VERSION } from "@goauthentik/common/constants";
|
import { VERSION } from "@goauthentik/common/constants.js";
|
||||||
import { me } from "@goauthentik/common/users";
|
import { me } from "@goauthentik/common/users.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import { WithLicenseSummary } from "@goauthentik/elements/Interface/licenseSummaryProvider.js";
|
import { WithLicenseSummary } from "@goauthentik/elements/Interface/licenseSummaryProvider.js";
|
||||||
import "@goauthentik/elements/PageHeader";
|
import "@goauthentik/elements/PageHeader";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import "@goauthentik/elements/Spinner";
|
import "@goauthentik/elements/Spinner";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { EVENT_REFRESH } from "@goauthentik/common/constants";
|
import { EVENT_REFRESH } from "@goauthentik/common/constants.js";
|
||||||
import { PFSize } from "@goauthentik/common/enums.js";
|
import { PFSize } from "@goauthentik/common/enums.js";
|
||||||
import { AggregateCard } from "@goauthentik/elements/cards/AggregateCard";
|
import { AggregateCard } from "@goauthentik/elements/cards/AggregateCard";
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import {
|
|||||||
AdminStatus,
|
AdminStatus,
|
||||||
AdminStatusCard,
|
AdminStatusCard,
|
||||||
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
|
|
||||||
import { msg } from "@lit/localize";
|
import { msg } from "@lit/localize";
|
||||||
import { TemplateResult, html } from "lit";
|
import { TemplateResult, html } from "lit";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { EventGeo, EventUser } from "@goauthentik/admin/events/utils";
|
import { EventGeo, EventUser } from "@goauthentik/admin/events/utils";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EventWithContext } from "@goauthentik/common/events";
|
import { EventWithContext } from "@goauthentik/common/events.js";
|
||||||
import { actionToLabel } from "@goauthentik/common/labels";
|
import { actionToLabel } from "@goauthentik/common/labels.js";
|
||||||
import { getRelativeTime } from "@goauthentik/common/utils";
|
import { getRelativeTime } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-event-info";
|
import "@goauthentik/components/ak-event-info";
|
||||||
import "@goauthentik/elements/Tabs";
|
import "@goauthentik/elements/Tabs";
|
||||||
import "@goauthentik/elements/buttons/Dropdown";
|
import "@goauthentik/elements/buttons/Dropdown";
|
||||||
|
@ -2,7 +2,7 @@ import {
|
|||||||
AdminStatus,
|
AdminStatus,
|
||||||
AdminStatusCard,
|
AdminStatusCard,
|
||||||
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
|
|
||||||
import { msg } from "@lit/localize";
|
import { msg } from "@lit/localize";
|
||||||
import { TemplateResult, html } from "lit";
|
import { TemplateResult, html } from "lit";
|
||||||
|
@ -2,7 +2,7 @@ import {
|
|||||||
AdminStatus,
|
AdminStatus,
|
||||||
AdminStatusCard,
|
AdminStatusCard,
|
||||||
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
|
|
||||||
import { msg, str } from "@lit/localize";
|
import { msg, str } from "@lit/localize";
|
||||||
import { TemplateResult, html } from "lit";
|
import { TemplateResult, html } from "lit";
|
||||||
|
@ -2,7 +2,7 @@ import {
|
|||||||
AdminStatus,
|
AdminStatus,
|
||||||
AdminStatusCard,
|
AdminStatusCard,
|
||||||
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
|
|
||||||
import { msg } from "@lit/localize";
|
import { msg } from "@lit/localize";
|
||||||
import { TemplateResult, html } from "lit";
|
import { TemplateResult, html } from "lit";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKChart, RGBAColor } from "@goauthentik/elements/charts/Chart";
|
import { AKChart, RGBAColor } from "@goauthentik/elements/charts/Chart";
|
||||||
import { ChartData } from "chart.js";
|
import { ChartData } from "chart.js";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
||||||
import { ChartData, Tick } from "chart.js";
|
import { ChartData, Tick } from "chart.js";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { SummarizedSyncStatus } from "@goauthentik/admin/admin-overview/charts/SyncStatusChart";
|
import { SummarizedSyncStatus } from "@goauthentik/admin/admin-overview/charts/SyncStatusChart";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
||||||
import "@goauthentik/elements/forms/ConfirmationForm";
|
import "@goauthentik/elements/forms/ConfirmationForm";
|
||||||
import { ChartData, ChartOptions } from "chart.js";
|
import { ChartData, ChartOptions } from "chart.js";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
||||||
import "@goauthentik/elements/forms/ConfirmationForm";
|
import "@goauthentik/elements/forms/ConfirmationForm";
|
||||||
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
|
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-number-input";
|
import "@goauthentik/components/ak-number-input";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
import "@goauthentik/components/ak-text-input";
|
import "@goauthentik/components/ak-text-input";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import "@goauthentik/admin/admin-settings/AdminSettingsForm";
|
import "@goauthentik/admin/admin-settings/AdminSettingsForm";
|
||||||
import { AdminSettingsForm } from "@goauthentik/admin/admin-settings/AdminSettingsForm";
|
import { AdminSettingsForm } from "@goauthentik/admin/admin-settings/AdminSettingsForm";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/components/events/ObjectChangelog";
|
import "@goauthentik/components/events/ObjectChangelog";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import "@goauthentik/elements/CodeMirror";
|
import "@goauthentik/elements/CodeMirror";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
||||||
import { ChartData, Tick } from "chart.js";
|
import { ChartData, Tick } from "chart.js";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/components/ak-status-label";
|
import "@goauthentik/components/ak-status-label";
|
||||||
import "@goauthentik/elements/events/LogViewer";
|
import "@goauthentik/elements/events/LogViewer";
|
||||||
import { Form } from "@goauthentik/elements/forms/Form";
|
import { Form } from "@goauthentik/elements/forms/Form";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "@goauthentik/admin/applications/ProviderSelectModal";
|
import "@goauthentik/admin/applications/ProviderSelectModal";
|
||||||
import { iconHelperText } from "@goauthentik/admin/helperText";
|
import { iconHelperText } from "@goauthentik/admin/helperText";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-file-input";
|
import "@goauthentik/components/ak-file-input";
|
||||||
import "@goauthentik/components/ak-radio-input";
|
import "@goauthentik/components/ak-radio-input";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import "@goauthentik/admin/applications/ApplicationForm";
|
import "@goauthentik/admin/applications/ApplicationForm";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { PFSize } from "@goauthentik/common/enums.js";
|
import { PFSize } from "@goauthentik/common/enums.js";
|
||||||
import "@goauthentik/components/ak-app-icon";
|
import "@goauthentik/components/ak-app-icon";
|
||||||
import MDApplication from "@goauthentik/docs/applications/index.md";
|
import MDApplication from "@goauthentik/docs/applications/index.md";
|
||||||
|
@ -3,7 +3,7 @@ import "@goauthentik/admin/applications/ApplicationCheckAccessForm";
|
|||||||
import "@goauthentik/admin/applications/ApplicationForm";
|
import "@goauthentik/admin/applications/ApplicationForm";
|
||||||
import "@goauthentik/admin/policies/BoundPoliciesList";
|
import "@goauthentik/admin/policies/BoundPoliciesList";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionsPage";
|
import "@goauthentik/admin/rbac/ObjectPermissionsPage";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { PFSize } from "@goauthentik/common/enums.js";
|
import { PFSize } from "@goauthentik/common/enums.js";
|
||||||
import "@goauthentik/components/ak-app-icon";
|
import "@goauthentik/components/ak-app-icon";
|
||||||
import "@goauthentik/components/events/ObjectChangelog";
|
import "@goauthentik/components/events/ObjectChangelog";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
|
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
|
||||||
import { TableColumn } from "@goauthentik/elements/table/Table";
|
import { TableColumn } from "@goauthentik/elements/table/Table";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { groupBy } from "@goauthentik/common/utils";
|
import { groupBy } from "@goauthentik/common/utils.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import "@goauthentik/elements/forms/SearchSelect";
|
import "@goauthentik/elements/forms/SearchSelect";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { policyOptions } from "@goauthentik/admin/applications/ApplicationForm";
|
import { policyOptions } from "@goauthentik/admin/applications/ApplicationForm";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-radio-input";
|
import "@goauthentik/components/ak-radio-input";
|
||||||
import "@goauthentik/components/ak-slug-input";
|
import "@goauthentik/components/ak-slug-input";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EVENT_REFRESH } from "@goauthentik/common/constants";
|
import { EVENT_REFRESH } from "@goauthentik/common/constants.js";
|
||||||
import "@goauthentik/components/ak-radio-input";
|
import "@goauthentik/components/ak-radio-input";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
import "@goauthentik/components/ak-text-input";
|
import "@goauthentik/components/ak-text-input";
|
||||||
|
@ -2,7 +2,7 @@ import "@goauthentik/admin/applications/wizard/ak-wizard-title";
|
|||||||
import "@goauthentik/admin/common/ak-core-group-search";
|
import "@goauthentik/admin/common/ak-core-group-search";
|
||||||
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
||||||
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-number-input";
|
import "@goauthentik/components/ak-number-input";
|
||||||
import "@goauthentik/components/ak-radio-input";
|
import "@goauthentik/components/ak-radio-input";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
|
@ -11,8 +11,8 @@ import {
|
|||||||
makeOAuth2PropertyMappingsSelector,
|
makeOAuth2PropertyMappingsSelector,
|
||||||
oauth2PropertyMappingsProvider,
|
oauth2PropertyMappingsProvider,
|
||||||
} from "@goauthentik/admin/providers/oauth2/Oauth2PropertyMappings.js";
|
} from "@goauthentik/admin/providers/oauth2/Oauth2PropertyMappings.js";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils";
|
import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-number-input";
|
import "@goauthentik/components/ak-number-input";
|
||||||
import "@goauthentik/components/ak-radio-input";
|
import "@goauthentik/components/ak-radio-input";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
|
@ -3,8 +3,8 @@ import {
|
|||||||
makeProxyPropertyMappingsSelector,
|
makeProxyPropertyMappingsSelector,
|
||||||
proxyPropertyMappingsProvider,
|
proxyPropertyMappingsProvider,
|
||||||
} from "@goauthentik/admin/providers/proxy/ProxyProviderPropertyMappings.js";
|
} from "@goauthentik/admin/providers/proxy/ProxyProviderPropertyMappings.js";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
import "@goauthentik/components/ak-text-input";
|
import "@goauthentik/components/ak-text-input";
|
||||||
import "@goauthentik/components/ak-textarea-input";
|
import "@goauthentik/components/ak-textarea-input";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
import "@goauthentik/components/ak-text-input";
|
import "@goauthentik/components/ak-text-input";
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "@goauthentik/admin/applications/wizard/ak-wizard-title";
|
import "@goauthentik/admin/applications/wizard/ak-wizard-title";
|
||||||
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
||||||
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
||||||
import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils";
|
import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-text-input";
|
import "@goauthentik/components/ak-text-input";
|
||||||
import { WithBrandConfig } from "@goauthentik/elements/Interface/brandProvider";
|
import { WithBrandConfig } from "@goauthentik/elements/Interface/brandProvider";
|
||||||
import "@goauthentik/elements/forms/FormGroup";
|
import "@goauthentik/elements/forms/FormGroup";
|
||||||
|
@ -3,7 +3,7 @@ import "@goauthentik/admin/applications/wizard/ak-wizard-title";
|
|||||||
import "@goauthentik/admin/common/ak-core-group-search";
|
import "@goauthentik/admin/common/ak-core-group-search";
|
||||||
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
||||||
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/components/ak-multi-select";
|
import "@goauthentik/components/ak-multi-select";
|
||||||
import "@goauthentik/components/ak-number-input";
|
import "@goauthentik/components/ak-number-input";
|
||||||
import "@goauthentik/components/ak-radio-input";
|
import "@goauthentik/components/ak-radio-input";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
||||||
import { CustomListenerElement } from "@goauthentik/elements/utils/eventEmitter";
|
import { CustomListenerElement } from "@goauthentik/elements/utils/eventEmitter";
|
||||||
|
@ -2,8 +2,8 @@ import "@goauthentik/admin/applications/wizard/ak-wizard-title";
|
|||||||
import "@goauthentik/admin/common/ak-core-group-search";
|
import "@goauthentik/admin/common/ak-core-group-search";
|
||||||
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
||||||
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-multi-select";
|
import "@goauthentik/components/ak-multi-select";
|
||||||
import "@goauthentik/components/ak-switch-input";
|
import "@goauthentik/components/ak-switch-input";
|
||||||
import "@goauthentik/components/ak-text-input";
|
import "@goauthentik/components/ak-text-input";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { docLink } from "@goauthentik/common/global";
|
import { docLink } from "@goauthentik/common/global.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-toggle-group";
|
import "@goauthentik/components/ak-toggle-group";
|
||||||
import "@goauthentik/elements/CodeMirror";
|
import "@goauthentik/elements/CodeMirror";
|
||||||
import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
|
import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import "@goauthentik/admin/blueprints/BlueprintForm";
|
import "@goauthentik/admin/blueprints/BlueprintForm";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EVENT_REFRESH } from "@goauthentik/common/constants";
|
import { EVENT_REFRESH } from "@goauthentik/common/constants.js";
|
||||||
import { getRelativeTime } from "@goauthentik/common/utils";
|
import { getRelativeTime } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-status-label";
|
import "@goauthentik/components/ak-status-label";
|
||||||
import "@goauthentik/elements/buttons/ActionButton";
|
import "@goauthentik/elements/buttons/ActionButton";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
import "@goauthentik/admin/common/ak-crypto-certificate-search";
|
||||||
import "@goauthentik/admin/common/ak-flow-search/ak-flow-search";
|
import "@goauthentik/admin/common/ak-flow-search/ak-flow-search";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/elements/CodeMirror";
|
import "@goauthentik/elements/CodeMirror";
|
||||||
import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
|
import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
|
||||||
import "@goauthentik/elements/forms/FormGroup";
|
import "@goauthentik/elements/forms/FormGroup";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import "@goauthentik/admin/brands/BrandForm";
|
import "@goauthentik/admin/brands/BrandForm";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/components/ak-status-label";
|
import "@goauthentik/components/ak-status-label";
|
||||||
import "@goauthentik/components/ak-status-label";
|
import "@goauthentik/components/ak-status-label";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
||||||
import { CustomListenerElement } from "@goauthentik/elements/utils/eventEmitter";
|
import { CustomListenerElement } from "@goauthentik/elements/utils/eventEmitter";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
||||||
import "@goauthentik/elements/forms/SearchSelect";
|
import "@goauthentik/elements/forms/SearchSelect";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { RenderFlowOption } from "@goauthentik/admin/flows/utils";
|
import { RenderFlowOption } from "@goauthentik/admin/flows/utils";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
import { SearchSelect } from "@goauthentik/elements/forms/SearchSelect";
|
||||||
import "@goauthentik/elements/forms/SearchSelect";
|
import "@goauthentik/elements/forms/SearchSelect";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { Form } from "@goauthentik/elements/forms/Form";
|
import { Form } from "@goauthentik/elements/forms/Form";
|
||||||
import "@goauthentik/elements/forms/HorizontalFormElement";
|
import "@goauthentik/elements/forms/HorizontalFormElement";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/elements/CodeMirror";
|
import "@goauthentik/elements/CodeMirror";
|
||||||
import "@goauthentik/elements/forms/HorizontalFormElement";
|
import "@goauthentik/elements/forms/HorizontalFormElement";
|
||||||
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "@goauthentik/admin/crypto/CertificateGenerateForm";
|
import "@goauthentik/admin/crypto/CertificateGenerateForm";
|
||||||
import "@goauthentik/admin/crypto/CertificateKeyPairForm";
|
import "@goauthentik/admin/crypto/CertificateKeyPairForm";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/components/ak-status-label";
|
import "@goauthentik/components/ak-status-label";
|
||||||
import { PFColor } from "@goauthentik/elements/Label";
|
import { PFColor } from "@goauthentik/elements/Label";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/common/constants";
|
import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/common/constants.js";
|
||||||
import "@goauthentik/elements/CodeMirror";
|
import "@goauthentik/elements/CodeMirror";
|
||||||
import "@goauthentik/elements/forms/HorizontalFormElement";
|
import "@goauthentik/elements/forms/HorizontalFormElement";
|
||||||
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "@goauthentik/admin/enterprise/EnterpriseLicenseForm";
|
import "@goauthentik/admin/enterprise/EnterpriseLicenseForm";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { getRelativeTime } from "@goauthentik/common/utils";
|
import { getRelativeTime } from "@goauthentik/common/utils.js";
|
||||||
import { PFColor } from "@goauthentik/elements/Label";
|
import { PFColor } from "@goauthentik/elements/Label";
|
||||||
import "@goauthentik/elements/Spinner";
|
import "@goauthentik/elements/Spinner";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import "@goauthentik/admin/events/EventVolumeChart";
|
import "@goauthentik/admin/events/EventVolumeChart";
|
||||||
import { EventGeo, EventUser } from "@goauthentik/admin/events/utils";
|
import { EventGeo, EventUser } from "@goauthentik/admin/events/utils";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EventWithContext } from "@goauthentik/common/events";
|
import { EventWithContext } from "@goauthentik/common/events.js";
|
||||||
import { actionToLabel } from "@goauthentik/common/labels";
|
import { actionToLabel } from "@goauthentik/common/labels.js";
|
||||||
import { getRelativeTime } from "@goauthentik/common/utils";
|
import { getRelativeTime } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-event-info";
|
import "@goauthentik/components/ak-event-info";
|
||||||
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
|
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
|
||||||
import { TableColumn } from "@goauthentik/elements/table/Table";
|
import { TableColumn } from "@goauthentik/elements/table/Table";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { EventGeo, EventUser } from "@goauthentik/admin/events/utils";
|
import { EventGeo, EventUser } from "@goauthentik/admin/events/utils";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { EventWithContext } from "@goauthentik/common/events";
|
import { EventWithContext } from "@goauthentik/common/events.js";
|
||||||
import { actionToLabel } from "@goauthentik/common/labels";
|
import { actionToLabel } from "@goauthentik/common/labels.js";
|
||||||
import { getRelativeTime } from "@goauthentik/common/utils";
|
import { getRelativeTime } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/components/ak-event-info";
|
import "@goauthentik/components/ak-event-info";
|
||||||
import { AKElement } from "@goauthentik/elements/Base";
|
import { AKElement } from "@goauthentik/elements/Base";
|
||||||
import "@goauthentik/elements/PageHeader";
|
import "@goauthentik/elements/PageHeader";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
import { AKChart } from "@goauthentik/elements/charts/Chart";
|
||||||
import { ChartData } from "chart.js";
|
import { ChartData } from "chart.js";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { severityToLabel } from "@goauthentik/common/labels";
|
import { severityToLabel } from "@goauthentik/common/labels.js";
|
||||||
import "@goauthentik/elements/forms/HorizontalFormElement";
|
import "@goauthentik/elements/forms/HorizontalFormElement";
|
||||||
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
||||||
import "@goauthentik/elements/forms/Radio";
|
import "@goauthentik/elements/forms/Radio";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import "@goauthentik/admin/events/RuleForm";
|
import "@goauthentik/admin/events/RuleForm";
|
||||||
import "@goauthentik/admin/policies/BoundPoliciesList";
|
import "@goauthentik/admin/policies/BoundPoliciesList";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { severityToLabel } from "@goauthentik/common/labels";
|
import { severityToLabel } from "@goauthentik/common/labels.js";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
import "@goauthentik/elements/forms/DeleteBulkForm";
|
import "@goauthentik/elements/forms/DeleteBulkForm";
|
||||||
import "@goauthentik/elements/forms/ModalForm";
|
import "@goauthentik/elements/forms/ModalForm";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/elements/forms/HorizontalFormElement";
|
import "@goauthentik/elements/forms/HorizontalFormElement";
|
||||||
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
|
||||||
import "@goauthentik/elements/forms/Radio";
|
import "@goauthentik/elements/forms/Radio";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import "@goauthentik/admin/events/TransportForm";
|
import "@goauthentik/admin/events/TransportForm";
|
||||||
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
import "@goauthentik/admin/rbac/ObjectPermissionModal";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/elements/buttons/ActionButton";
|
import "@goauthentik/elements/buttons/ActionButton";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
import "@goauthentik/elements/forms/DeleteBulkForm";
|
import "@goauthentik/elements/forms/DeleteBulkForm";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { EventWithContext } from "@goauthentik/common/events";
|
import { EventWithContext } from "@goauthentik/common/events.js";
|
||||||
import { truncate } from "@goauthentik/common/utils";
|
import { truncate } from "@goauthentik/common/utils.js";
|
||||||
import { KeyUnknown } from "@goauthentik/elements/forms/Form";
|
import { KeyUnknown } from "@goauthentik/elements/forms/Form";
|
||||||
|
|
||||||
import { msg, str } from "@lit/localize";
|
import { msg, str } from "@lit/localize";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "@goauthentik/admin/flows/StageBindingForm";
|
import "@goauthentik/admin/flows/StageBindingForm";
|
||||||
import "@goauthentik/admin/policies/BoundPoliciesList";
|
import "@goauthentik/admin/policies/BoundPoliciesList";
|
||||||
import "@goauthentik/admin/stages/StageWizard";
|
import "@goauthentik/admin/stages/StageWizard";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import "@goauthentik/elements/Tabs";
|
import "@goauthentik/elements/Tabs";
|
||||||
import "@goauthentik/elements/forms/DeleteBulkForm";
|
import "@goauthentik/elements/forms/DeleteBulkForm";
|
||||||
import "@goauthentik/elements/forms/ModalForm";
|
import "@goauthentik/elements/forms/ModalForm";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { Diagram } from "@goauthentik/elements/Diagram";
|
import { Diagram } from "@goauthentik/elements/Diagram";
|
||||||
import "@goauthentik/elements/EmptyState";
|
import "@goauthentik/elements/EmptyState";
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { DesignationToLabel, LayoutToLabel } from "@goauthentik/admin/flows/utils";
|
import { DesignationToLabel, LayoutToLabel } from "@goauthentik/admin/flows/utils";
|
||||||
import { AuthenticationEnum } from "@goauthentik/api/dist/models/AuthenticationEnum";
|
import { AuthenticationEnum } from "@goauthentik/api/dist/models/AuthenticationEnum";
|
||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { first } from "@goauthentik/common/utils";
|
import { first } from "@goauthentik/common/utils.js";
|
||||||
import {
|
import {
|
||||||
CapabilitiesEnum,
|
CapabilitiesEnum,
|
||||||
WithCapabilitiesConfig,
|
WithCapabilitiesConfig,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { SentryIgnoredError } from "@goauthentik/common/errors";
|
import { SentryIgnoredError } from "@goauthentik/common/errors.js";
|
||||||
import "@goauthentik/components/ak-status-label";
|
import "@goauthentik/components/ak-status-label";
|
||||||
import "@goauthentik/elements/events/LogViewer";
|
import "@goauthentik/elements/events/LogViewer";
|
||||||
import { Form } from "@goauthentik/elements/forms/Form";
|
import { Form } from "@goauthentik/elements/forms/Form";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import "@goauthentik/admin/flows/FlowForm";
|
import "@goauthentik/admin/flows/FlowForm";
|
||||||
import "@goauthentik/admin/flows/FlowImportForm";
|
import "@goauthentik/admin/flows/FlowImportForm";
|
||||||
import { DesignationToLabel } from "@goauthentik/admin/flows/utils";
|
import { DesignationToLabel } from "@goauthentik/admin/flows/utils";
|
||||||
import { AndNext, DEFAULT_CONFIG } from "@goauthentik/common/api/config";
|
import { AndNext, DEFAULT_CONFIG } from "@goauthentik/common/api/config.js";
|
||||||
import { groupBy } from "@goauthentik/common/utils";
|
import { groupBy } from "@goauthentik/common/utils.js";
|
||||||
import "@goauthentik/elements/buttons/SpinnerButton";
|
import "@goauthentik/elements/buttons/SpinnerButton";
|
||||||
import "@goauthentik/elements/forms/ConfirmationForm";
|
import "@goauthentik/elements/forms/ConfirmationForm";
|
||||||
import "@goauthentik/elements/forms/DeleteBulkForm";
|
import "@goauthentik/elements/forms/DeleteBulkForm";
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user