Compare commits
	
		
			17 Commits
		
	
	
		
			providers/
			...
			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
	