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