Compare commits
	
		
			17 Commits
		
	
	
		
			website/do
			...
			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/assets/**", ".", "node_modules/@patternfly/patternfly/"], | ||||
|     ["src/custom.css", "."], | ||||
|     ["src/common/styles/**", "."], | ||||
|     ["packages/common/src/styles/**", "."], | ||||
|     ["src/assets/images/**", "./assets/images"], | ||||
|     ["./icons/*", "./assets/icons"], | ||||
| ]; | ||||
|  | ||||
| @ -12,6 +12,8 @@ export default [ | ||||
|     { | ||||
|         ignores: [ | ||||
|             "dist/", | ||||
|             ".wireit/", | ||||
|             "packages/", | ||||
|             // don't ever lint node_modules | ||||
|             "node_modules/", | ||||
|             ".storybook/*", | ||||
|  | ||||
							
								
								
									
										761
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										761
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -11,7 +11,8 @@ | ||||
|             "license": "MIT", | ||||
|             "workspaces": [ | ||||
|                 ".", | ||||
|                 "./packages/*" | ||||
|                 "./packages/sfe", | ||||
|                 "./packages/common" | ||||
|             ], | ||||
|             "dependencies": { | ||||
|                 "@codemirror/lang-html": "^6.4.9", | ||||
| @ -3376,6 +3377,10 @@ | ||||
|             "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.6.3-1723109801.tgz", | ||||
|             "integrity": "sha512-liqFlqaAqmcCQyfrfkmJC3W+6tgzglf5hpONNpyV6qCxY81xVKzL4qhW9gk1CMbViVCrnKCeFBdYEyLHus7izg==" | ||||
|         }, | ||||
|         "node_modules/@goauthentik/common": { | ||||
|             "resolved": "packages/common", | ||||
|             "link": true | ||||
|         }, | ||||
|         "node_modules/@goauthentik/web": { | ||||
|             "resolved": "", | ||||
|             "link": true | ||||
| @ -4085,6 +4090,61 @@ | ||||
|                 "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": { | ||||
|             "version": "0.7.0", | ||||
|             "license": "MIT", | ||||
| @ -8756,6 +8816,11 @@ | ||||
|             "dev": true, | ||||
|             "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": { | ||||
|             "version": "2.0.2", | ||||
|             "dev": true, | ||||
| @ -10135,6 +10200,19 @@ | ||||
|                 "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": { | ||||
|             "version": "6.12.6", | ||||
|             "dev": true, | ||||
| @ -10556,6 +10634,19 @@ | ||||
|                 "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": { | ||||
|             "version": "1.7.3", | ||||
|             "license": "MIT", | ||||
| @ -11201,6 +11292,113 @@ | ||||
|                 "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": { | ||||
|             "version": "7.0.0", | ||||
|             "dev": true, | ||||
| @ -11273,6 +11471,16 @@ | ||||
|                 "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": { | ||||
|             "version": "5.3.1", | ||||
|             "dev": true, | ||||
| @ -11434,6 +11642,15 @@ | ||||
|                 "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": { | ||||
|             "version": "3.1.0", | ||||
|             "dev": true, | ||||
| @ -12936,7 +13153,6 @@ | ||||
|             "dev": true, | ||||
|             "license": "MIT", | ||||
|             "optional": true, | ||||
|             "peer": true, | ||||
|             "dependencies": { | ||||
|                 "iconv-lite": "^0.6.2" | ||||
|             } | ||||
| @ -12946,7 +13162,6 @@ | ||||
|             "dev": true, | ||||
|             "license": "MIT", | ||||
|             "optional": true, | ||||
|             "peer": true, | ||||
|             "dependencies": { | ||||
|                 "safer-buffer": ">= 2.1.2 < 3.0.0" | ||||
|             }, | ||||
| @ -13015,6 +13230,12 @@ | ||||
|                 "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": { | ||||
|             "version": "1.3.2", | ||||
|             "dev": true, | ||||
| @ -13959,6 +14180,24 @@ | ||||
|                 "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": { | ||||
|             "version": "1.14.0", | ||||
|             "dev": true, | ||||
| @ -15914,6 +16153,15 @@ | ||||
|                 "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": { | ||||
|             "version": "1.0.6", | ||||
|             "dev": true, | ||||
| @ -16255,6 +16503,12 @@ | ||||
|                 "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": { | ||||
|             "version": "1.0.0", | ||||
|             "dev": true, | ||||
| @ -17148,6 +17402,15 @@ | ||||
|                 "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": { | ||||
|             "version": "1.4.1", | ||||
|             "dev": true, | ||||
| @ -17733,6 +17996,15 @@ | ||||
|                 "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": { | ||||
|             "version": "3.0.0", | ||||
|             "dev": true, | ||||
| @ -17779,6 +18051,29 @@ | ||||
|             "dev": true, | ||||
|             "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": { | ||||
|             "version": "1.5.0", | ||||
|             "dev": true, | ||||
| @ -18457,6 +18752,125 @@ | ||||
|                 "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": { | ||||
|             "version": "2.1.2", | ||||
|             "dev": true, | ||||
| @ -18957,6 +19371,16 @@ | ||||
|             "dev": true, | ||||
|             "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": { | ||||
|             "version": "3.65.0", | ||||
|             "license": "MIT", | ||||
| @ -19182,6 +19606,25 @@ | ||||
|                 "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": { | ||||
|             "version": "4.1.5", | ||||
|             "dev": true, | ||||
| @ -19342,6 +19785,15 @@ | ||||
|                 "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": { | ||||
|             "version": "3.0.0", | ||||
|             "dev": true, | ||||
| @ -19801,6 +20253,16 @@ | ||||
|                 "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": { | ||||
|             "version": "4.0.0", | ||||
|             "dev": true, | ||||
| @ -20245,6 +20707,19 @@ | ||||
|                 "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": { | ||||
|             "version": "2.4.2", | ||||
|             "dev": true, | ||||
| @ -21402,6 +21877,25 @@ | ||||
|             "dev": true, | ||||
|             "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": { | ||||
|             "version": "3.0.2", | ||||
|             "license": "Unlicense" | ||||
| @ -22243,6 +22737,18 @@ | ||||
|             "dev": true, | ||||
|             "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": { | ||||
|             "version": "2.0.6", | ||||
|             "dev": true, | ||||
| @ -23760,6 +24266,7 @@ | ||||
|         }, | ||||
|         "node_modules/tree-sitter-json": { | ||||
|             "version": "0.20.2", | ||||
|             "hasInstallScript": true, | ||||
|             "license": "MIT", | ||||
|             "optional": true, | ||||
|             "dependencies": { | ||||
| @ -23768,6 +24275,7 @@ | ||||
|         }, | ||||
|         "node_modules/tree-sitter-yaml": { | ||||
|             "version": "0.5.0", | ||||
|             "hasInstallScript": true, | ||||
|             "license": "MIT", | ||||
|             "optional": true, | ||||
|             "dependencies": { | ||||
| @ -24089,6 +24597,194 @@ | ||||
|             "dev": true, | ||||
|             "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": { | ||||
|             "version": "4.0.0", | ||||
|             "dev": true, | ||||
| @ -24177,6 +24873,30 @@ | ||||
|                 "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": { | ||||
|             "version": "3.0.0", | ||||
|             "dev": true, | ||||
| @ -25429,6 +26149,41 @@ | ||||
|                 "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": { | ||||
|             "name": "@goauthentik/web-sfe", | ||||
|             "version": "0.0.0", | ||||
|  | ||||
| @ -138,6 +138,8 @@ | ||||
|         "lint": "wireit", | ||||
|         "lint:lockfile": "wireit", | ||||
|         "lint:package": "wireit", | ||||
|         "lint:precommit": "wireit", | ||||
|         "lint:nightmare": "wireit", | ||||
|         "lit-analyse": "wireit", | ||||
|         "postinstall": "bash scripts/patch-spotlight.sh", | ||||
|         "precommit": "wireit", | ||||
| @ -186,6 +188,7 @@ | ||||
|             ], | ||||
|             "dependencies": [ | ||||
|                 "build-locales", | ||||
|                 "./packages/common:build", | ||||
|                 "./packages/sfe:build" | ||||
|             ], | ||||
|             "env": { | ||||
| @ -241,6 +244,10 @@ | ||||
|         }, | ||||
|         "lint": { | ||||
|             "command": "eslint --max-warnings 0 --fix", | ||||
|             "dependencies": [ | ||||
|                 "./packages/common:lint", | ||||
|                 "./packages/common:build:types" | ||||
|             ], | ||||
|             "env": { | ||||
|                 "NODE_OPTIONS": "--max_old_space_size=65536" | ||||
|             } | ||||
| @ -251,6 +258,7 @@ | ||||
|         "lint:types": { | ||||
|             "command": "tsc --noEmit -p .", | ||||
|             "dependencies": [ | ||||
|                 "./packages/common:build:types", | ||||
|                 "build-locales" | ||||
|             ] | ||||
|         }, | ||||
| @ -322,13 +330,19 @@ | ||||
|             "command": "node scripts/build-storybook-import-maps.mjs" | ||||
|         }, | ||||
|         "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": { | ||||
|                 "CI": "true" | ||||
|             } | ||||
|         }, | ||||
|         "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": { | ||||
|             "dependencies": [ | ||||
| @ -338,6 +352,7 @@ | ||||
|     }, | ||||
|     "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, | ||||
|     EventMiddleware, | ||||
|     LoggingMiddleware, | ||||
| } from "@goauthentik/common/api/middleware"; | ||||
| import { EVENT_LOCALE_REQUEST, VERSION } from "@goauthentik/common/constants"; | ||||
| import { globalAK } from "@goauthentik/common/global"; | ||||
| } from "@goauthentik/common/api/middleware.js"; | ||||
| import { EVENT_LOCALE_REQUEST, VERSION } from "@goauthentik/common/constants.js"; | ||||
| import { globalAK } from "@goauthentik/common/global.js"; | ||||
| 
 | ||||
| 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); | ||||
| export function config(): Promise<Config> { | ||||
|     if (!globalConfigPromise) { | ||||
| @ -61,24 +81,6 @@ export function brand(): Promise<CurrentBrand> { | ||||
|     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
 | ||||
| // missing-whitespace-between-attributes or
 | ||||
| // unexpected-character-in-attribute-name
 | ||||
| @ -1,5 +1,5 @@ | ||||
| import { EVENT_REQUEST_POST } from "@goauthentik/common/constants"; | ||||
| import { getCookie } from "@goauthentik/common/utils"; | ||||
| import { EVENT_REQUEST_POST } from "@goauthentik/common/constants.js"; | ||||
| import { getCookie } from "@goauthentik/common/utils.js"; | ||||
| 
 | ||||
| import { | ||||
|     CurrentBrand, | ||||
| @ -17,6 +17,8 @@ export interface RequestInfo { | ||||
|     status: number; | ||||
| } | ||||
| 
 | ||||
| const HTTP_BAD_REQUEST = 400; | ||||
| 
 | ||||
| export class LoggingMiddleware implements Middleware { | ||||
|     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
 | ||||
|         msg += `%c${context.response.status}%c ${context.init.method} ${context.url}`; | ||||
|         let style = ""; | ||||
|         if (context.response.status >= 400) { | ||||
|         if (context.response.status >= HTTP_BAD_REQUEST) { | ||||
|             style = "color: red; font-weight: bold;"; | ||||
|         } | ||||
|         console.debug(msg, style, ""); | ||||
| @ -38,7 +40,7 @@ export class LoggingMiddleware implements Middleware { | ||||
| 
 | ||||
| export class CSRFMiddleware implements Middleware { | ||||
|     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"); | ||||
|         return Promise.resolve(context); | ||||
|     } | ||||
| @ -12,18 +12,25 @@ export class RequestError extends Error {} | ||||
| 
 | ||||
| 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> { | ||||
|     if (!(error instanceof ResponseError)) { | ||||
|         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; | ||||
|     } | ||||
|     const body = await error.response.json(); | ||||
|     if (error.response.status === 400) { | ||||
|     if (error.response.status === HTTP_BAD_REQUEST) { | ||||
|         return ValidationErrorFromJSON(body); | ||||
|     } | ||||
|     if (error.response.status === 403) { | ||||
|     if (error.response.status === HTTP_FORBIDDEN) { | ||||
|         return GenericErrorFromJSON(body); | ||||
|     } | ||||
|     return body; | ||||
| @ -8,6 +8,13 @@ export interface EventUser { | ||||
|     is_anonymous?: boolean; | ||||
| } | ||||
| 
 | ||||
| export interface EventModel { | ||||
|     pk: string; | ||||
|     name: string; | ||||
|     app: string; | ||||
|     model_name: string; | ||||
| } | ||||
| 
 | ||||
| export interface EventContext { | ||||
|     [key: string]: EventContext | EventModel | string | number | string[]; | ||||
| } | ||||
| @ -17,13 +24,6 @@ export interface EventWithContext extends Event { | ||||
|     context: EventContext; | ||||
| } | ||||
| 
 | ||||
| export interface EventModel { | ||||
|     pk: string; | ||||
|     name: string; | ||||
|     app: string; | ||||
|     model_name: string; | ||||
| } | ||||
| 
 | ||||
| export interface EventRequest { | ||||
|     path: string; | ||||
|     method: string; | ||||
| @ -1,5 +1,5 @@ | ||||
| import { VERSION } from "@goauthentik/common/constants"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors"; | ||||
| import { VERSION } from "@goauthentik/common/constants.js"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors.js"; | ||||
| 
 | ||||
| export interface PlexPinResponse { | ||||
|     // Only has the fields we care about
 | ||||
| @ -23,14 +23,16 @@ export const DEFAULT_HEADERS = { | ||||
|     "X-Plex-Device-Vendor": "goauthentik.io", | ||||
| }; | ||||
| 
 | ||||
| const HTTP_OK = 200; | ||||
| const POLL_TIMEOUT = 500; // milliseconds
 | ||||
| 
 | ||||
| export async function popupCenterScreen( | ||||
|     url: string, | ||||
|     title: string, | ||||
|     w: number, | ||||
|     h: number, | ||||
| ): Promise<Window | null> { | ||||
|     const top = (screen.height - h) / 4, | ||||
|         left = (screen.width - w) / 2; | ||||
|     const [top, left] = [(screen.height - h) / 4, (screen.width - w) / 2]; | ||||
|     return new Promise((resolve) => { | ||||
|         setTimeout(() => { | ||||
|             const popup = window.open( | ||||
| @ -78,7 +80,7 @@ export class PlexAPIClient { | ||||
|         const pinResponse = await fetch(`https://plex.tv/api/v2/pins/${id}`, { | ||||
|             headers: headers, | ||||
|         }); | ||||
|         if (pinResponse.status > 200) { | ||||
|         if (pinResponse.status > HTTP_OK) { | ||||
|             throw new SentryIgnoredError("Invalid response code"); | ||||
|         } | ||||
|         const pin: PlexPinResponse = await pinResponse.json(); | ||||
| @ -97,7 +99,7 @@ export class PlexAPIClient { | ||||
|                 if (response) { | ||||
|                     resolve(response); | ||||
|                 } else { | ||||
|                     setTimeout(executePoll, 500, resolve, reject); | ||||
|                     setTimeout(executePoll, POLL_TIMEOUT, resolve, reject); | ||||
|                 } | ||||
|             } catch (e) { | ||||
|                 reject(e as Error); | ||||
| @ -3,7 +3,7 @@ import * as base64js from "base64-js"; | ||||
| import { msg } from "@lit/localize"; | ||||
| 
 | ||||
| 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 { | ||||
| @ -1,7 +1,7 @@ | ||||
| import { config } from "@goauthentik/common/api/config"; | ||||
| import { VERSION } from "@goauthentik/common/constants"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors"; | ||||
| import { me } from "@goauthentik/common/users"; | ||||
| import { config } from "@goauthentik/common/api/config.js"; | ||||
| import { VERSION } from "@goauthentik/common/constants.js"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors.js"; | ||||
| import { me } from "@goauthentik/common/users.js"; | ||||
| import { | ||||
|     ErrorEvent, | ||||
|     EventHint, | ||||
| @ -15,6 +15,17 @@ import { CapabilitiesEnum, Config, ResponseError } from "@goauthentik/api"; | ||||
| 
 | ||||
| export const TAG_SENTRY_COMPONENT = "authentik.component"; | ||||
| 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> { | ||||
|     const cfg = await config(); | ||||
| @ -81,13 +92,3 @@ export async function configureSentry(canDoPpi = false): Promise<Config> { | ||||
|     } | ||||
|     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 { me } from "@goauthentik/common/users"; | ||||
| import { currentInterface } from "@goauthentik/common/sentry.js"; | ||||
| import { me } from "@goauthentik/common/users.js"; | ||||
| 
 | ||||
| import { UiThemeEnum, UserSelf } from "@goauthentik/api"; | ||||
| 
 | ||||
| @ -1,14 +1,12 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EVENT_LOCALE_REQUEST } from "@goauthentik/common/constants"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EVENT_LOCALE_REQUEST } from "@goauthentik/common/constants.js"; | ||||
| 
 | ||||
| import { CoreApi, ResponseError, SessionUser } from "@goauthentik/api"; | ||||
| 
 | ||||
| let globalMePromise: Promise<SessionUser> | undefined; | ||||
| 
 | ||||
| export function refreshMe(): Promise<SessionUser> { | ||||
|     globalMePromise = undefined; | ||||
|     return me(); | ||||
| } | ||||
| const HTTP_FORBIDDEN = 403; | ||||
| const HTTP_UNAUTHORIZED = 401; | ||||
| 
 | ||||
| export function me(): Promise<SessionUser> { | ||||
|     if (!globalMePromise) { | ||||
| @ -48,7 +46,10 @@ export function me(): Promise<SessionUser> { | ||||
|                         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 | ||||
|                         .toString() | ||||
|                         .substring(window.location.origin.length); | ||||
| @ -61,3 +62,8 @@ export function me(): Promise<SessionUser> { | ||||
|     } | ||||
|     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"; | ||||
| 
 | ||||
| @ -9,7 +9,7 @@ export function getCookie(name: string): string { | ||||
|         for (let i = 0; i < cookies.length; i++) { | ||||
|             const cookie = cookies[i].trim(); | ||||
|             // 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)); | ||||
|                 break; | ||||
|             } | ||||
| @ -25,21 +25,21 @@ export function convertToSlug(text: string): string { | ||||
|         .replace(/[^\w-]+/g, ""); | ||||
| } | ||||
| 
 | ||||
| const WORD_COUNT_TRUNCATION_DEFAULT = 10; | ||||
| /** | ||||
|  * Truncate a string based on maximum word count | ||||
|  */ | ||||
| export function truncateWords(string: string, length = 10): string { | ||||
|     string = string || ""; | ||||
|     const array = string.trim().split(" "); | ||||
|     const ellipsis = array.length > length ? "..." : ""; | ||||
| 
 | ||||
|     return array.slice(0, length).join(" ") + ellipsis; | ||||
| export function truncateWords(input: string, length = WORD_COUNT_TRUNCATION_DEFAULT): string { | ||||
|     const words = (input ?? "").trim().split(" "); | ||||
|     const ellipsis = words.length > length ? "..." : ""; | ||||
|     return words.slice(0, length).join(" ") + ellipsis; | ||||
| } | ||||
| 
 | ||||
| const CHAR_COUNT_TRUNCATION_DEFAULT = 10; | ||||
| /** | ||||
|  * 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; | ||||
| } | ||||
| 
 | ||||
| @ -83,20 +83,24 @@ export const ascii_lowercase = "abcdefghijklmnopqrstuvwxyz"; | ||||
| export const ascii_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; | ||||
| export const ascii_letters = ascii_lowercase + ascii_uppercase; | ||||
| export const digits = "0123456789"; | ||||
| export const hexdigits = digits + "abcdef" + "ABCDEF"; | ||||
| export const hexdigits = `${digits}abcdefABCDEF}`; | ||||
| export const octdigits = "01234567"; | ||||
| export const punctuation = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; | ||||
| 
 | ||||
| const BYTE_SIZE = 256; | ||||
| 
 | ||||
| export function randomString(len: number, charset: string): string { | ||||
|     const chars = []; | ||||
|     const array = new Uint8Array(len); | ||||
|     self.crypto.getRandomValues(array); | ||||
|     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(""); | ||||
| } | ||||
| 
 | ||||
| const TIMEZONE_OFFSET = 60000; // milliseconds
 | ||||
| 
 | ||||
| export function dateTimeLocal(date: Date): string { | ||||
|     // 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
 | ||||
| @ -105,7 +109,7 @@ export function dateTimeLocal(date: Date): string { | ||||
|     // figure.
 | ||||
|     // Additionally, toISOString always returns the date without timezone, which we would like
 | ||||
|     // 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 parts = localISOTime.split(":"); | ||||
|     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)
 | ||||
|     // but it still "thinks" it's in local TZ
 | ||||
|     const timestamp = date.getTime(); | ||||
|     const offset = -1 * (new Date().getTimezoneOffset() * 60000); | ||||
|     const offset = -1 * (new Date().getTimezoneOffset() * TIMEZONE_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); | ||||
| } | ||||
| 
 | ||||
| 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>([ | ||||
|     ["year", 24 * 60 * 60 * 1000 * 365], | ||||
|     ["month", (24 * 60 * 60 * 1000 * 365) / 12], | ||||
|     ["day", 24 * 60 * 60 * 1000], | ||||
|     ["hour", 60 * 60 * 1000], | ||||
|     ["minute", 60 * 1000], | ||||
|     ["second", 1000], | ||||
|     ["year", MILLISECONDS_IN_A_YEAR], | ||||
|     ["month", MILLISECONDS_IN_A_MONTH], | ||||
|     ["day", MILLISECONDS_IN_A_DAY], | ||||
|     ["hour", MILLISECONDS_IN_AN_HOUR], | ||||
|     ["minute", MILLISECONDS_IN_A_MINUTE], | ||||
|     ["second", MILLISECONDS_IN_A_SECOND], | ||||
| ]); | ||||
| 
 | ||||
| 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
 | ||||
|     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 / 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 { MessageLevel } from "@goauthentik/common/messages"; | ||||
| import { EVENT_MESSAGE, EVENT_WS_MESSAGE } from "@goauthentik/common/constants.js"; | ||||
| import { MessageLevel } from "@goauthentik/common/messages.js"; | ||||
| 
 | ||||
| import { msg } from "@lit/localize"; | ||||
| 
 | ||||
| @ -7,9 +7,14 @@ export interface WSMessage { | ||||
|     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 { | ||||
|     messageSocket?: WebSocket; | ||||
|     retryDelay = 200; | ||||
|     retryDelay = MESSAGE_RETRY_DELAY; | ||||
| 
 | ||||
|     constructor() { | ||||
|         try { | ||||
| @ -20,18 +25,20 @@ export class WebsocketClient { | ||||
|     } | ||||
| 
 | ||||
|     connect(): void { | ||||
|         if (navigator.webdriver) return; | ||||
|         if (navigator.webdriver) { | ||||
|             return; | ||||
|         } | ||||
|         const wsUrl = `${window.location.protocol.replace("http", "ws")}//${ | ||||
|             window.location.host | ||||
|         }/ws/client/`;
 | ||||
|         this.messageSocket = new WebSocket(wsUrl); | ||||
|         this.messageSocket.addEventListener("open", () => { | ||||
|             console.debug(`authentik/ws: connected to ${wsUrl}`); | ||||
|             this.retryDelay = 200; | ||||
|             this.retryDelay = OPEN_RETRY_DELAY; | ||||
|         }); | ||||
|         this.messageSocket.addEventListener("close", (e) => { | ||||
|             console.debug("authentik/ws: closed ws connection", e); | ||||
|             if (this.retryDelay > 6000) { | ||||
|             if (this.retryDelay > CLOSE_RETRY_DELAY) { | ||||
|                 window.dispatchEvent( | ||||
|                     new CustomEvent(EVENT_MESSAGE, { | ||||
|                         bubbles: true, | ||||
| @ -47,7 +54,7 @@ export class WebsocketClient { | ||||
|                 console.debug(`authentik/ws: reconnecting ws in ${this.retryDelay}ms`); | ||||
|                 this.connect(); | ||||
|             }, this.retryDelay); | ||||
|             this.retryDelay = this.retryDelay * 2; | ||||
|             this.retryDelay = this.retryDelay * RETRY_BACKOFF; | ||||
|         }); | ||||
|         this.messageSocket.addEventListener("message", (e) => { | ||||
|             const data = JSON.parse(e.data); | ||||
| @ -60,7 +67,7 @@ export class WebsocketClient { | ||||
|             ); | ||||
|         }); | ||||
|         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, | ||||
| }); | ||||
|  | ||||
| if (files.length < 1) { | ||||
|     console.log("eslint: change set contains no lintable files"); | ||||
|     process.exit(0); | ||||
| } | ||||
|  | ||||
| const results = await eslint.lintFiles(files); | ||||
| const formatter = await eslint.loadFormatter("stylish"); | ||||
| const resultText = formatter.format(results); | ||||
|  | ||||
| @ -13,6 +13,8 @@ export default [ | ||||
|     { | ||||
|         ignores: [ | ||||
|             "dist/", | ||||
|             ".wireit/", | ||||
|             "packages/", | ||||
|             // don't ever lint node_modules | ||||
|             "node_modules/", | ||||
|             ".storybook/*", | ||||
|  | ||||
| @ -13,6 +13,8 @@ export default [ | ||||
|     { | ||||
|         ignores: [ | ||||
|             "dist/", | ||||
|             ".wireit/", | ||||
|             "packages/", | ||||
|             // don't ever lint node_modules | ||||
|             "node_modules/", | ||||
|             ".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 { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { | ||||
|     EVENT_API_DRAWER_TOGGLE, | ||||
|     EVENT_NOTIFICATION_DRAWER_TOGGLE, | ||||
| } from "@goauthentik/common/constants"; | ||||
| import { configureSentry } from "@goauthentik/common/sentry"; | ||||
| import { me } from "@goauthentik/common/users"; | ||||
| import { WebsocketClient } from "@goauthentik/common/ws"; | ||||
| } from "@goauthentik/common/constants.js"; | ||||
| import { configureSentry } from "@goauthentik/common/sentry.js"; | ||||
| import { me } from "@goauthentik/common/users.js"; | ||||
| import { WebsocketClient } from "@goauthentik/common/ws.js"; | ||||
| import { EnterpriseAwareInterface } from "@goauthentik/elements/Interface"; | ||||
| import "@goauthentik/elements/ak-locale-context"; | ||||
| import "@goauthentik/elements/enterprise/EnterpriseStatusBanner"; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EVENT_SIDEBAR_TOGGLE, VERSION } from "@goauthentik/common/constants"; | ||||
| import { me } from "@goauthentik/common/users"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EVENT_SIDEBAR_TOGGLE, VERSION } from "@goauthentik/common/constants.js"; | ||||
| import { me } from "@goauthentik/common/users.js"; | ||||
| import { AKElement } from "@goauthentik/elements/Base"; | ||||
| import { | ||||
|     CapabilitiesEnum, | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { MessageLevel } from "@goauthentik/common/messages"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { MessageLevel } from "@goauthentik/common/messages.js"; | ||||
| import { AKElement } from "@goauthentik/elements/Base"; | ||||
| import "@goauthentik/elements/PageHeader"; | ||||
| 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/OutpostStatusChart"; | ||||
| import "@goauthentik/admin/admin-overview/charts/SyncStatusChart"; | ||||
| import { VERSION } from "@goauthentik/common/constants"; | ||||
| import { me } from "@goauthentik/common/users"; | ||||
| import { VERSION } from "@goauthentik/common/constants.js"; | ||||
| import { me } from "@goauthentik/common/users.js"; | ||||
| import { AKElement } from "@goauthentik/elements/Base"; | ||||
| import { WithLicenseSummary } from "@goauthentik/elements/Interface/licenseSummaryProvider.js"; | ||||
| 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 "@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 { AggregateCard } from "@goauthentik/elements/cards/AggregateCard"; | ||||
|  | ||||
|  | ||||
| @ -2,7 +2,7 @@ import { | ||||
|     AdminStatus, | ||||
|     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 { TemplateResult, html } from "lit"; | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import { EventGeo, EventUser } from "@goauthentik/admin/events/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EventWithContext } from "@goauthentik/common/events"; | ||||
| import { actionToLabel } from "@goauthentik/common/labels"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EventWithContext } from "@goauthentik/common/events.js"; | ||||
| import { actionToLabel } from "@goauthentik/common/labels.js"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-event-info"; | ||||
| import "@goauthentik/elements/Tabs"; | ||||
| import "@goauthentik/elements/buttons/Dropdown"; | ||||
|  | ||||
| @ -2,7 +2,7 @@ import { | ||||
|     AdminStatus, | ||||
|     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 { TemplateResult, html } from "lit"; | ||||
|  | ||||
| @ -2,7 +2,7 @@ import { | ||||
|     AdminStatus, | ||||
|     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 { TemplateResult, html } from "lit"; | ||||
|  | ||||
| @ -2,7 +2,7 @@ import { | ||||
|     AdminStatus, | ||||
|     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 { 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 { 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 { ChartData, Tick } from "chart.js"; | ||||
|  | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 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 "@goauthentik/elements/forms/ConfirmationForm"; | ||||
| 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 "@goauthentik/elements/forms/ConfirmationForm"; | ||||
| import { PaginatedResponse } from "@goauthentik/elements/table/Table"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-number-input"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
| import "@goauthentik/components/ak-text-input"; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| import "@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 { AKElement } from "@goauthentik/elements/Base"; | ||||
| 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 { 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/elements/events/LogViewer"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import "@goauthentik/admin/applications/ProviderSelectModal"; | ||||
| import { iconHelperText } from "@goauthentik/admin/helperText"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-file-input"; | ||||
| import "@goauthentik/components/ak-radio-input"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 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 "@goauthentik/components/ak-app-icon"; | ||||
| 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/policies/BoundPoliciesList"; | ||||
| 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 "@goauthentik/components/ak-app-icon"; | ||||
| 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 { PaginatedResponse } 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 { groupBy } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { groupBy } from "@goauthentik/common/utils.js"; | ||||
| import { AKElement } from "@goauthentik/elements/Base"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 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-slug-input"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EVENT_REFRESH } from "@goauthentik/common/constants"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EVENT_REFRESH } from "@goauthentik/common/constants.js"; | ||||
| import "@goauthentik/components/ak-radio-input"; | ||||
| import "@goauthentik/components/ak-switch-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-crypto-certificate-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-radio-input"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
|  | ||||
| @ -11,8 +11,8 @@ import { | ||||
|     makeOAuth2PropertyMappingsSelector, | ||||
|     oauth2PropertyMappingsProvider, | ||||
| } from "@goauthentik/admin/providers/oauth2/Oauth2PropertyMappings.js"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-number-input"; | ||||
| import "@goauthentik/components/ak-radio-input"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
|  | ||||
| @ -3,8 +3,8 @@ import { | ||||
|     makeProxyPropertyMappingsSelector, | ||||
|     proxyPropertyMappingsProvider, | ||||
| } from "@goauthentik/admin/providers/proxy/ProxyProviderPropertyMappings.js"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
| import "@goauthentik/components/ak-text-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-text-input"; | ||||
|  | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import "@goauthentik/admin/applications/wizard/ak-wizard-title"; | ||||
| import "@goauthentik/admin/common/ak-crypto-certificate-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 { WithBrandConfig } from "@goauthentik/elements/Interface/brandProvider"; | ||||
| 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-crypto-certificate-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-number-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 { SearchSelect } from "@goauthentik/elements/forms/SearchSelect"; | ||||
| 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-crypto-certificate-search"; | ||||
| import "@goauthentik/admin/common/ak-flow-search/ak-branded-flow-search"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-multi-select"; | ||||
| import "@goauthentik/components/ak-switch-input"; | ||||
| import "@goauthentik/components/ak-text-input"; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { docLink } from "@goauthentik/common/global"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { docLink } from "@goauthentik/common/global.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-toggle-group"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror"; | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import "@goauthentik/admin/blueprints/BlueprintForm"; | ||||
| import "@goauthentik/admin/rbac/ObjectPermissionModal"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EVENT_REFRESH } from "@goauthentik/common/constants"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EVENT_REFRESH } from "@goauthentik/common/constants.js"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-status-label"; | ||||
| import "@goauthentik/elements/buttons/ActionButton"; | ||||
| import "@goauthentik/elements/buttons/SpinnerButton"; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import "@goauthentik/admin/common/ak-crypto-certificate-search"; | ||||
| import "@goauthentik/admin/common/ak-flow-search/ak-flow-search"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| import "@goauthentik/admin/brands/BrandForm"; | ||||
| 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/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 { SearchSelect } from "@goauthentik/elements/forms/SearchSelect"; | ||||
| 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 { SearchSelect } from "@goauthentik/elements/forms/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 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 { SearchSelect } from "@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 "@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/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import "@goauthentik/admin/crypto/CertificateGenerateForm"; | ||||
| import "@goauthentik/admin/crypto/CertificateKeyPairForm"; | ||||
| 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 { PFColor } from "@goauthentik/elements/Label"; | ||||
| import "@goauthentik/elements/buttons/SpinnerButton"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/common/constants"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/common/constants.js"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import "@goauthentik/admin/enterprise/EnterpriseLicenseForm"; | ||||
| import "@goauthentik/admin/rbac/ObjectPermissionModal"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils.js"; | ||||
| import { PFColor } from "@goauthentik/elements/Label"; | ||||
| import "@goauthentik/elements/Spinner"; | ||||
| import "@goauthentik/elements/buttons/SpinnerButton"; | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| import "@goauthentik/admin/events/EventVolumeChart"; | ||||
| import { EventGeo, EventUser } from "@goauthentik/admin/events/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EventWithContext } from "@goauthentik/common/events"; | ||||
| import { actionToLabel } from "@goauthentik/common/labels"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EventWithContext } from "@goauthentik/common/events.js"; | ||||
| import { actionToLabel } from "@goauthentik/common/labels.js"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-event-info"; | ||||
| import { PaginatedResponse } 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 { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { EventWithContext } from "@goauthentik/common/events"; | ||||
| import { actionToLabel } from "@goauthentik/common/labels"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { EventWithContext } from "@goauthentik/common/events.js"; | ||||
| import { actionToLabel } from "@goauthentik/common/labels.js"; | ||||
| import { getRelativeTime } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/components/ak-event-info"; | ||||
| import { AKElement } from "@goauthentik/elements/Base"; | ||||
| 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 { ChartData } from "chart.js"; | ||||
|  | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { severityToLabel } from "@goauthentik/common/labels"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { severityToLabel } from "@goauthentik/common/labels.js"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import "@goauthentik/admin/events/RuleForm"; | ||||
| import "@goauthentik/admin/policies/BoundPoliciesList"; | ||||
| import "@goauthentik/admin/rbac/ObjectPermissionModal"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { severityToLabel } from "@goauthentik/common/labels"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { severityToLabel } from "@goauthentik/common/labels.js"; | ||||
| import "@goauthentik/elements/buttons/SpinnerButton"; | ||||
| import "@goauthentik/elements/forms/DeleteBulkForm"; | ||||
| import "@goauthentik/elements/forms/ModalForm"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| import "@goauthentik/admin/events/TransportForm"; | ||||
| 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/SpinnerButton"; | ||||
| import "@goauthentik/elements/forms/DeleteBulkForm"; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { EventWithContext } from "@goauthentik/common/events"; | ||||
| import { truncate } from "@goauthentik/common/utils"; | ||||
| import { EventWithContext } from "@goauthentik/common/events.js"; | ||||
| import { truncate } from "@goauthentik/common/utils.js"; | ||||
| import { KeyUnknown } from "@goauthentik/elements/forms/Form"; | ||||
|  | ||||
| import { msg, str } from "@lit/localize"; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import "@goauthentik/admin/flows/StageBindingForm"; | ||||
| import "@goauthentik/admin/policies/BoundPoliciesList"; | ||||
| 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/forms/DeleteBulkForm"; | ||||
| 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 "@goauthentik/elements/EmptyState"; | ||||
|  | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import { DesignationToLabel, LayoutToLabel } from "@goauthentik/admin/flows/utils"; | ||||
| import { AuthenticationEnum } from "@goauthentik/api/dist/models/AuthenticationEnum"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { first } from "@goauthentik/common/utils.js"; | ||||
| import { | ||||
|     CapabilitiesEnum, | ||||
|     WithCapabilitiesConfig, | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors.js"; | ||||
| import "@goauthentik/components/ak-status-label"; | ||||
| import "@goauthentik/elements/events/LogViewer"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import "@goauthentik/admin/flows/FlowForm"; | ||||
| import "@goauthentik/admin/flows/FlowImportForm"; | ||||
| import { DesignationToLabel } from "@goauthentik/admin/flows/utils"; | ||||
| import { AndNext, DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { groupBy } from "@goauthentik/common/utils"; | ||||
| import { AndNext, DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; | ||||
| import { groupBy } from "@goauthentik/common/utils.js"; | ||||
| import "@goauthentik/elements/buttons/SpinnerButton"; | ||||
| import "@goauthentik/elements/forms/ConfirmationForm"; | ||||
| 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
	