@analog-tools/auth
Version:
Authentication module for AnalogJS applications
1 lines • 83.8 kB
Source Map (JSON)
{"version":3,"file":"analog-tools-auth-angular.mjs","sources":["../tmp-esm2022/functions/user-transformer/fromKeycloak.js","../tmp-esm2022/functions/user-transformer/fromAuth0.js","../tmp-esm2022/functions/user-transformer/detectProvider.js","../tmp-esm2022/functions/utils/get-request-headers.js","../tmp-esm2022/auth.service.js","../tmp-esm2022/auth.provider.js","../tmp-esm2022/auth.guard.js","../tmp-esm2022/functions/login.js","../tmp-esm2022/functions/utils/merge-request.js","../tmp-esm2022/auth.interceptor.js","../tmp-esm2022/trpc/functions/createProxy.js","../tmp-esm2022/trpc/functions/createDefaultConfirmation.js","../tmp-esm2022/trpc/functions/wrapTrpcClientWithErrorHandling.js","../tmp-esm2022/trpc/trpc.injector.js","../tmp-esm2022/analog-tools-auth-angular.js"],"sourcesContent":["export function fromKeycloak(keycloakUser) {\n return {\n username: keycloakUser.preferred_username,\n fullName: keycloakUser.name,\n givenName: keycloakUser.given_name,\n familyName: keycloakUser.family_name,\n picture: undefined,\n email: keycloakUser.email,\n emailVerified: keycloakUser.email_verified,\n locale: undefined, // Locale is not provided in Keycloak user info\n lastLogin: new Date().toISOString(), // Assuming last login is now\n updatedAt: undefined, // Assuming updated at is now\n createdAt: undefined, // Assuming created at is now\n auth_id: keycloakUser.sub, // Using sub as auth_id\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUtleWNsb2FrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC1hbmd1bGFyL3NyYy9mdW5jdGlvbnMvdXNlci10cmFuc2Zvcm1lci9mcm9tS2V5Y2xvYWsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUNBLE1BQU0sVUFBVSxZQUFZLENBQUUsWUFBOEI7SUFDMUQsT0FBTztRQUNMLFFBQVEsRUFBRSxZQUFZLENBQUMsa0JBQWtCO1FBQ3pDLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSTtRQUMzQixTQUFTLEVBQUUsWUFBWSxDQUFDLFVBQVU7UUFDbEMsVUFBVSxFQUFFLFlBQVksQ0FBQyxXQUFXO1FBQ3BDLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztRQUN6QixhQUFhLEVBQUUsWUFBWSxDQUFDLGNBQWM7UUFDMUMsTUFBTSxFQUFFLFNBQVMsRUFBRSwrQ0FBK0M7UUFDbEUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsNkJBQTZCO1FBQ2xFLFNBQVMsRUFBRSxTQUFTLEVBQUUsNkJBQTZCO1FBQ25ELFNBQVMsRUFBRSxTQUFTLEVBQUUsNkJBQTZCO1FBQ25ELE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLHVCQUF1QjtLQUNuRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSBcIi4uLy4uL2F1dGguc2VydmljZVwiO1xuXG5leHBvcnQgdHlwZSBLZXljbG9ha1VzZXJJbmZvID0ge1xuICAvLyBDb3JlIElkZW50aXR5IFByb3BlcnRpZXNcbiAgc3ViOiBzdHJpbmc7ICAgICAgICAgICAgICAvLyBTdWJqZWN0IGlkZW50aWZpZXIgKHVuaXF1ZSB1c2VyIElEKVxuICBwcmVmZXJyZWRfdXNlcm5hbWU6IHN0cmluZzsgIC8vIFVzZXJuYW1lXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gRnVsbCBuYW1lXG4gIGdpdmVuX25hbWU6IHN0cmluZzsgICAgICAgLy8gRmlyc3QgbmFtZVxuICBmYW1pbHlfbmFtZTogc3RyaW5nOyAgICAgIC8vIExhc3QgbmFtZVxuICBlbWFpbDogc3RyaW5nOyAgICAgICAgICAgIC8vIEVtYWlsIGFkZHJlc3NcbiAgZW1haWxfdmVyaWZpZWQ6IGJvb2xlYW47ICAvLyBXaGV0aGVyIGVtYWlsIGhhcyBiZWVuIHZlcmlmaWVkXG4gIFxuICAvLyBBY2Nlc3MgQ29udHJvbCBQcm9wZXJ0aWVzXG4gIHJlYWxtX2FjY2Vzczoge1xuICAgIHJvbGVzOiBzdHJpbmdbXSAgICAgICAgIC8vIFJlYWxtLWxldmVsIHJvbGVzIGFzc2lnbmVkIHRvIHVzZXJcbiAgfTtcbiAgcmVzb3VyY2VfYWNjZXNzOiB7ICAgICAgICAvLyBDbGllbnQtc3BlY2lmaWMgcm9sZXNcbiAgICBbY2xpZW50SWQ6IHN0cmluZ106IHtcbiAgICAgIHJvbGVzOiBzdHJpbmdbXVxuICAgIH1cbiAgfTtcbiAgXG4gIC8vIEFkZGl0aW9uYWwgTWV0YWRhdGFcbiAgZ3JvdXBzOiBzdHJpbmdbXTsgICAgICAgICAvLyBHcm91cHMgdGhlIHVzZXIgYmVsb25ncyB0b1xuICBzY29wZTogc3RyaW5nOyAgICAgICAgICAgIC8vIE9BdXRoIHNjb3BlcyBncmFudGVkXG4gIHNpZDogc3RyaW5nOyAgICAgICAgICAgICAgLy8gU2Vzc2lvbiBJRFxuICBhY3I6IHN0cmluZzsgICAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIGNvbnRleHQgY2xhc3MgcmVmZXJlbmNlXG4gIGlhdDogbnVtYmVyOyAgICAgICAgICAgICAgLy8gSXNzdWVkIGF0IHRpbWVzdGFtcFxuICBleHA6IG51bWJlcjsgICAgICAgICAgICAgIC8vIEV4cGlyYXRpb24gdGltZXN0YW1wXG4gIGF1dGhfdGltZTogbnVtYmVyOyAgICAgICAgLy8gVGltZSB3aGVuIGF1dGhlbnRpY2F0aW9uIG9jY3VycmVkXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21LZXljbG9hayAoa2V5Y2xvYWtVc2VyOiBLZXljbG9ha1VzZXJJbmZvKTogQXV0aFVzZXIge1xuICByZXR1cm4ge1xuICAgIHVzZXJuYW1lOiBrZXljbG9ha1VzZXIucHJlZmVycmVkX3VzZXJuYW1lLFxuICAgIGZ1bGxOYW1lOiBrZXljbG9ha1VzZXIubmFtZSxcbiAgICBnaXZlbk5hbWU6IGtleWNsb2FrVXNlci5naXZlbl9uYW1lLFxuICAgIGZhbWlseU5hbWU6IGtleWNsb2FrVXNlci5mYW1pbHlfbmFtZSxcbiAgICBwaWN0dXJlOiB1bmRlZmluZWQsXG4gICAgZW1haWw6IGtleWNsb2FrVXNlci5lbWFpbCxcbiAgICBlbWFpbFZlcmlmaWVkOiBrZXljbG9ha1VzZXIuZW1haWxfdmVyaWZpZWQsXG4gICAgbG9jYWxlOiB1bmRlZmluZWQsIC8vIExvY2FsZSBpcyBub3QgcHJvdmlkZWQgaW4gS2V5Y2xvYWsgdXNlciBpbmZvXG4gICAgbGFzdExvZ2luOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIC8vIEFzc3VtaW5nIGxhc3QgbG9naW4gaXMgbm93XG4gICAgdXBkYXRlZEF0OiB1bmRlZmluZWQsIC8vIEFzc3VtaW5nIHVwZGF0ZWQgYXQgaXMgbm93XG4gICAgY3JlYXRlZEF0OiB1bmRlZmluZWQsIC8vIEFzc3VtaW5nIGNyZWF0ZWQgYXQgaXMgbm93XG4gICAgYXV0aF9pZDoga2V5Y2xvYWtVc2VyLnN1YiwgLy8gVXNpbmcgc3ViIGFzIGF1dGhfaWRcbiAgfTtcbn0iXX0=","/**\n * Transforms an Auth0 user object into the application's AuthUser format\n * @param auth0User - The user object from Auth0\n * @returns A standardized AuthUser object\n */\nexport function fromAuth0(auth0User) {\n return {\n username: auth0User.nickname || auth0User.email || '',\n fullName: auth0User.name || '',\n givenName: auth0User.given_name || '',\n familyName: auth0User.family_name || '',\n picture: auth0User.picture,\n email: auth0User.email,\n emailVerified: auth0User.email_verified,\n locale: auth0User.locale,\n lastLogin: auth0User.last_login,\n updatedAt: auth0User.updated_at,\n createdAt: auth0User.created_at,\n auth_id: auth0User.sub,\n // If roles are stored directly or in app_metadata\n roles: auth0User.roles || auth0User.app_metadata?.[\"roles\"],\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUF1dGgwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC1hbmd1bGFyL3NyYy9mdW5jdGlvbnMvdXNlci10cmFuc2Zvcm1lci9mcm9tQXV0aDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0NBOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLFNBQXdCO0lBQ2hELE9BQU87UUFDTCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDckQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUM5QixTQUFTLEVBQUUsU0FBUyxDQUFDLFVBQVUsSUFBSSxFQUFFO1FBQ3JDLFVBQVUsRUFBRSxTQUFTLENBQUMsV0FBVyxJQUFJLEVBQUU7UUFDdkMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1FBQzFCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztRQUN0QixhQUFhLEVBQUUsU0FBUyxDQUFDLGNBQWM7UUFDdkMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3hCLFNBQVMsRUFBRSxTQUFTLENBQUMsVUFBVTtRQUMvQixTQUFTLEVBQUUsU0FBUyxDQUFDLFVBQVU7UUFDL0IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVO1FBQy9CLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRztRQUN0QixrREFBa0Q7UUFDbEQsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQztLQUM1RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSBcIi4uLy4uL2F1dGguc2VydmljZVwiO1xuXG5leHBvcnQgdHlwZSBBdXRoMFVzZXJJbmZvID0ge1xuICAvLyBDb3JlIElkZW50aXR5IFByb3BlcnRpZXNcbiAgc3ViOiBzdHJpbmc7ICAgICAgICAgICAgICAvLyBTdWJqZWN0IGlkZW50aWZpZXIgKHVuaXF1ZSB1c2VyIElEKVxuICBuaWNrbmFtZTogc3RyaW5nOyAgICAgICAgIC8vIFVzZXIgbmlja25hbWVcbiAgbmFtZTogc3RyaW5nOyAgICAgICAgICAgICAvLyBGdWxsIG5hbWVcbiAgZ2l2ZW5fbmFtZT86IHN0cmluZzsgICAgICAvLyBGaXJzdCBuYW1lXG4gIGZhbWlseV9uYW1lPzogc3RyaW5nOyAgICAgLy8gTGFzdCBuYW1lXG4gIGVtYWlsPzogc3RyaW5nOyAgICAgICAgICAgLy8gRW1haWwgYWRkcmVzc1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW47IC8vIFdoZXRoZXIgZW1haWwgaGFzIGJlZW4gdmVyaWZpZWRcbiAgcGljdHVyZT86IHN0cmluZzsgICAgICAgICAvLyBVUkwgdG8gdXNlcidzIHByb2ZpbGUgcGljdHVyZVxuICBsb2NhbGU/OiBzdHJpbmc7ICAgICAgICAgIC8vIFVzZXIncyBsb2NhbGVcbiAgXG4gIC8vIEF1dGgwIFNwZWNpZmljIFByb3BlcnRpZXNcbiAgdXBkYXRlZF9hdD86IHN0cmluZzsgICAgICAvLyBMYXN0IHVwZGF0ZSB0aW1lc3RhbXBcbiAgY3JlYXRlZF9hdD86IHN0cmluZzsgICAgICAvLyBDcmVhdGlvbiB0aW1lc3RhbXBcbiAgbGFzdF9sb2dpbj86IHN0cmluZzsgICAgICAvLyBMYXN0IGxvZ2luIHRpbWVzdGFtcFxuICBcbiAgLy8gQWNjZXNzIENvbnRyb2wgUHJvcGVydGllc1xuICByb2xlcz86IHN0cmluZ1tdOyAgICAgICAgIC8vIFVzZXIgcm9sZXMgKGlmIHVzaW5nIEF1dGgwIFJCQUMpXG4gIHBlcm1pc3Npb25zPzogc3RyaW5nW107ICAgLy8gVXNlciBwZXJtaXNzaW9ucyAoaWYgdXNpbmcgQXV0aDAgUkJBQylcbiAgXG4gIC8vIEFkZGl0aW9uYWwgTWV0YWRhdGFcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdXNlcl9tZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47ICAvLyBVc2VyIGVkaXRhYmxlIG1ldGFkYXRhXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGFwcF9tZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47ICAgLy8gQXBwbGljYXRpb24gbWV0YWRhdGEgKGNvbnRyb2xsZWQgYnkgYXBwcy9BUElzKVxuICBcbiAgLy8gU3RhbmRhcmQgT0lEQyBwcm9wZXJ0aWVzXG4gIGlzcz86IHN0cmluZzsgICAgICAgICAgICAgLy8gSXNzdWVyXG4gIGF1ZD86IHN0cmluZzsgICAgICAgICAgICAgLy8gQXVkaWVuY2VcbiAgaWF0PzogbnVtYmVyOyAgICAgICAgICAgICAvLyBJc3N1ZWQgYXQgdGltZXN0YW1wXG4gIGV4cD86IG51bWJlcjsgICAgICAgICAgICAgLy8gRXhwaXJhdGlvbiB0aW1lc3RhbXBcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFuIEF1dGgwIHVzZXIgb2JqZWN0IGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgQXV0aFVzZXIgZm9ybWF0XG4gKiBAcGFyYW0gYXV0aDBVc2VyIC0gVGhlIHVzZXIgb2JqZWN0IGZyb20gQXV0aDBcbiAqIEByZXR1cm5zIEEgc3RhbmRhcmRpemVkIEF1dGhVc2VyIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUF1dGgwKGF1dGgwVXNlcjogQXV0aDBVc2VySW5mbyk6IEF1dGhVc2VyIHtcbiAgcmV0dXJuIHtcbiAgICB1c2VybmFtZTogYXV0aDBVc2VyLm5pY2tuYW1lIHx8IGF1dGgwVXNlci5lbWFpbCB8fCAnJyxcbiAgICBmdWxsTmFtZTogYXV0aDBVc2VyLm5hbWUgfHwgJycsXG4gICAgZ2l2ZW5OYW1lOiBhdXRoMFVzZXIuZ2l2ZW5fbmFtZSB8fCAnJyxcbiAgICBmYW1pbHlOYW1lOiBhdXRoMFVzZXIuZmFtaWx5X25hbWUgfHwgJycsXG4gICAgcGljdHVyZTogYXV0aDBVc2VyLnBpY3R1cmUsXG4gICAgZW1haWw6IGF1dGgwVXNlci5lbWFpbCxcbiAgICBlbWFpbFZlcmlmaWVkOiBhdXRoMFVzZXIuZW1haWxfdmVyaWZpZWQsXG4gICAgbG9jYWxlOiBhdXRoMFVzZXIubG9jYWxlLFxuICAgIGxhc3RMb2dpbjogYXV0aDBVc2VyLmxhc3RfbG9naW4sXG4gICAgdXBkYXRlZEF0OiBhdXRoMFVzZXIudXBkYXRlZF9hdCxcbiAgICBjcmVhdGVkQXQ6IGF1dGgwVXNlci5jcmVhdGVkX2F0LFxuICAgIGF1dGhfaWQ6IGF1dGgwVXNlci5zdWIsXG4gICAgLy8gSWYgcm9sZXMgYXJlIHN0b3JlZCBkaXJlY3RseSBvciBpbiBhcHBfbWV0YWRhdGFcbiAgICByb2xlczogYXV0aDBVc2VyLnJvbGVzIHx8IGF1dGgwVXNlci5hcHBfbWV0YWRhdGE/LltcInJvbGVzXCJdLFxuICB9O1xufVxuIl19","import { fromAuth0 } from './fromAuth0';\nimport { fromKeycloak } from './fromKeycloak';\n/**\n * Detects the identity provider based on user data structure\n * @param userInfo - User information object from the provider\n * @returns The detected identity provider type\n */\nexport function detectProvider(userInfo) {\n if (!userInfo) {\n return 'unknown';\n }\n // Check for Keycloak-specific properties\n if (userInfo['realm_access'] || userInfo['resource_access']) {\n return 'keycloak';\n }\n // Check for Auth0-specific properties\n if (userInfo['nickname'] !== undefined ||\n userInfo['user_metadata'] !== undefined ||\n userInfo['app_metadata'] !== undefined) {\n return 'auth0';\n }\n // If we can't determine the provider, check for common patterns\n // Auth0 typically includes an issuer URL with \"auth0.com\"\n if (userInfo['iss'] &&\n typeof userInfo['iss'] === 'string' &&\n userInfo['iss'].includes('auth0.com')) {\n return 'auth0';\n }\n // Keycloak typically includes an issuer URL with \"auth/realms\"\n if (userInfo['iss'] &&\n typeof userInfo['iss'] === 'string' &&\n userInfo['iss'].includes('/auth/realms')) {\n return 'keycloak';\n }\n // If we still can't determine, return unknown\n return 'unknown';\n}\n/**\n * Transforms user data from any supported identity provider into the application's AuthUser format\n * @param userInfo - User information object from the provider\n * @returns A standardized AuthUser object\n */\nexport function transformUserFromProvider(userInfo) {\n const provider = detectProvider(userInfo);\n switch (provider) {\n case 'keycloak':\n return fromKeycloak(userInfo);\n case 'auth0':\n return fromAuth0(userInfo);\n case 'unknown':\n default:\n // Fallback transformation for unknown providers\n // This provides a basic mapping that should work with most standard OIDC providers\n return {\n username: userInfo['preferred_username'] ||\n userInfo['nickname'] ||\n userInfo['email'] ||\n userInfo['sub'] ||\n '',\n fullName: userInfo['name'] || '',\n givenName: userInfo['given_name'] || '',\n familyName: userInfo['family_name'] || '',\n picture: userInfo['picture'],\n email: userInfo['email'],\n emailVerified: userInfo['email_verified'],\n locale: userInfo['locale'],\n lastLogin: userInfo['last_login'] || new Date().toISOString(),\n updatedAt: userInfo['updated_at'],\n createdAt: userInfo['created_at'],\n auth_id: userInfo['sub'],\n roles: userInfo['roles'] || [],\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0UHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoLWFuZ3VsYXIvc3JjL2Z1bmN0aW9ucy91c2VyLXRyYW5zZm9ybWVyL2RldGVjdFByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFhaEU7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBeUI7SUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsSUFDRSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUztRQUNsQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssU0FBUztRQUN2QyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxFQUN0QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSwwREFBMEQ7SUFDMUQsSUFDRSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2YsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUTtRQUNuQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUNyQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxJQUNFLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDZixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRO1FBQ25DLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQ3hDLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsOENBQThDO0lBQzlDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFFBQXlCO0lBQ2pFLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUxQyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssVUFBVTtZQUNiLE9BQU8sWUFBWSxDQUFDLFFBQTRCLENBQUMsQ0FBQztRQUNwRCxLQUFLLE9BQU87WUFDVixPQUFPLFNBQVMsQ0FBQyxRQUF5QixDQUFDLENBQUM7UUFDOUMsS0FBSyxTQUFTLENBQUM7UUFDZjtZQUNFLGdEQUFnRDtZQUNoRCxtRkFBbUY7WUFDbkYsT0FBTztnQkFDTCxRQUFRLEVBQ04sUUFBUSxDQUFDLG9CQUFvQixDQUFDO29CQUM5QixRQUFRLENBQUMsVUFBVSxDQUFDO29CQUNwQixRQUFRLENBQUMsT0FBTyxDQUFDO29CQUNqQixRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNmLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtnQkFDekMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQzVCLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUN4QixhQUFhLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDO2dCQUN6QyxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDN0QsU0FBUyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pDLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2FBQy9CLENBQUM7SUFDTixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vLi4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGgwVXNlckluZm8sIGZyb21BdXRoMCB9IGZyb20gJy4vZnJvbUF1dGgwJztcbmltcG9ydCB7IGZyb21LZXljbG9haywgS2V5Y2xvYWtVc2VySW5mbyB9IGZyb20gJy4vZnJvbUtleWNsb2FrJztcblxuLyoqXG4gKiBQcm92aWRlciB0eXBlIGZvciBpZGVudGl0eSBwcm92aWRlcnNcbiAqL1xuZXhwb3J0IHR5cGUgSWRlbnRpdHlQcm92aWRlciA9ICdrZXljbG9haycgfCAnYXV0aDAnIHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIEdlbmVyaWMgdXNlciBpbmZvIHR5cGUgdGhhdCBjYW4gcmVwcmVzZW50IGRhdGEgZnJvbSBhbnkgcHJvdmlkZXJcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEdlbmVyaWNVc2VySW5mbyA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbi8qKlxuICogRGV0ZWN0cyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgYmFzZWQgb24gdXNlciBkYXRhIHN0cnVjdHVyZVxuICogQHBhcmFtIHVzZXJJbmZvIC0gVXNlciBpbmZvcm1hdGlvbiBvYmplY3QgZnJvbSB0aGUgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkZXRlY3RlZCBpZGVudGl0eSBwcm92aWRlciB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQcm92aWRlcih1c2VySW5mbzogR2VuZXJpY1VzZXJJbmZvKTogSWRlbnRpdHlQcm92aWRlciB7XG4gIGlmICghdXNlckluZm8pIHtcbiAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIEtleWNsb2FrLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgaWYgKHVzZXJJbmZvWydyZWFsbV9hY2Nlc3MnXSB8fCB1c2VySW5mb1sncmVzb3VyY2VfYWNjZXNzJ10pIHtcbiAgICByZXR1cm4gJ2tleWNsb2FrJztcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBBdXRoMC1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIGlmIChcbiAgICB1c2VySW5mb1snbmlja25hbWUnXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdXNlckluZm9bJ3VzZXJfbWV0YWRhdGEnXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdXNlckluZm9bJ2FwcF9tZXRhZGF0YSddICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuICdhdXRoMCc7XG4gIH1cblxuICAvLyBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIHByb3ZpZGVyLCBjaGVjayBmb3IgY29tbW9uIHBhdHRlcm5zXG4gIC8vIEF1dGgwIHR5cGljYWxseSBpbmNsdWRlcyBhbiBpc3N1ZXIgVVJMIHdpdGggXCJhdXRoMC5jb21cIlxuICBpZiAoXG4gICAgdXNlckluZm9bJ2lzcyddICYmXG4gICAgdHlwZW9mIHVzZXJJbmZvWydpc3MnXSA9PT0gJ3N0cmluZycgJiZcbiAgICB1c2VySW5mb1snaXNzJ10uaW5jbHVkZXMoJ2F1dGgwLmNvbScpXG4gICkge1xuICAgIHJldHVybiAnYXV0aDAnO1xuICB9XG5cbiAgLy8gS2V5Y2xvYWsgdHlwaWNhbGx5IGluY2x1ZGVzIGFuIGlzc3VlciBVUkwgd2l0aCBcImF1dGgvcmVhbG1zXCJcbiAgaWYgKFxuICAgIHVzZXJJbmZvWydpc3MnXSAmJlxuICAgIHR5cGVvZiB1c2VySW5mb1snaXNzJ10gPT09ICdzdHJpbmcnICYmXG4gICAgdXNlckluZm9bJ2lzcyddLmluY2x1ZGVzKCcvYXV0aC9yZWFsbXMnKVxuICApIHtcbiAgICByZXR1cm4gJ2tleWNsb2FrJztcbiAgfVxuXG4gIC8vIElmIHdlIHN0aWxsIGNhbid0IGRldGVybWluZSwgcmV0dXJuIHVua25vd25cbiAgcmV0dXJuICd1bmtub3duJztcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHVzZXIgZGF0YSBmcm9tIGFueSBzdXBwb3J0ZWQgaWRlbnRpdHkgcHJvdmlkZXIgaW50byB0aGUgYXBwbGljYXRpb24ncyBBdXRoVXNlciBmb3JtYXRcbiAqIEBwYXJhbSB1c2VySW5mbyAtIFVzZXIgaW5mb3JtYXRpb24gb2JqZWN0IGZyb20gdGhlIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBBIHN0YW5kYXJkaXplZCBBdXRoVXNlciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVzZXJGcm9tUHJvdmlkZXIodXNlckluZm86IEdlbmVyaWNVc2VySW5mbyk6IEF1dGhVc2VyIHtcbiAgY29uc3QgcHJvdmlkZXIgPSBkZXRlY3RQcm92aWRlcih1c2VySW5mbyk7XG5cbiAgc3dpdGNoIChwcm92aWRlcikge1xuICAgIGNhc2UgJ2tleWNsb2FrJzpcbiAgICAgIHJldHVybiBmcm9tS2V5Y2xvYWsodXNlckluZm8gYXMgS2V5Y2xvYWtVc2VySW5mbyk7XG4gICAgY2FzZSAnYXV0aDAnOlxuICAgICAgcmV0dXJuIGZyb21BdXRoMCh1c2VySW5mbyBhcyBBdXRoMFVzZXJJbmZvKTtcbiAgICBjYXNlICd1bmtub3duJzpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRmFsbGJhY2sgdHJhbnNmb3JtYXRpb24gZm9yIHVua25vd24gcHJvdmlkZXJzXG4gICAgICAvLyBUaGlzIHByb3ZpZGVzIGEgYmFzaWMgbWFwcGluZyB0aGF0IHNob3VsZCB3b3JrIHdpdGggbW9zdCBzdGFuZGFyZCBPSURDIHByb3ZpZGVyc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXNlcm5hbWU6XG4gICAgICAgICAgdXNlckluZm9bJ3ByZWZlcnJlZF91c2VybmFtZSddIHx8XG4gICAgICAgICAgdXNlckluZm9bJ25pY2tuYW1lJ10gfHxcbiAgICAgICAgICB1c2VySW5mb1snZW1haWwnXSB8fFxuICAgICAgICAgIHVzZXJJbmZvWydzdWInXSB8fFxuICAgICAgICAgICcnLFxuICAgICAgICBmdWxsTmFtZTogdXNlckluZm9bJ25hbWUnXSB8fCAnJyxcbiAgICAgICAgZ2l2ZW5OYW1lOiB1c2VySW5mb1snZ2l2ZW5fbmFtZSddIHx8ICcnLFxuICAgICAgICBmYW1pbHlOYW1lOiB1c2VySW5mb1snZmFtaWx5X25hbWUnXSB8fCAnJyxcbiAgICAgICAgcGljdHVyZTogdXNlckluZm9bJ3BpY3R1cmUnXSxcbiAgICAgICAgZW1haWw6IHVzZXJJbmZvWydlbWFpbCddLFxuICAgICAgICBlbWFpbFZlcmlmaWVkOiB1c2VySW5mb1snZW1haWxfdmVyaWZpZWQnXSxcbiAgICAgICAgbG9jYWxlOiB1c2VySW5mb1snbG9jYWxlJ10sXG4gICAgICAgIGxhc3RMb2dpbjogdXNlckluZm9bJ2xhc3RfbG9naW4nXSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHVwZGF0ZWRBdDogdXNlckluZm9bJ3VwZGF0ZWRfYXQnXSxcbiAgICAgICAgY3JlYXRlZEF0OiB1c2VySW5mb1snY3JlYXRlZF9hdCddLFxuICAgICAgICBhdXRoX2lkOiB1c2VySW5mb1snc3ViJ10sXG4gICAgICAgIHJvbGVzOiB1c2VySW5mb1sncm9sZXMnXSB8fCBbXSxcbiAgICAgIH07XG4gIH1cbn1cbiJdfQ==","import { HttpHeaders } from '@angular/common/http';\nexport function getRequestHeaders(serverRequest, originalHeaderValues) {\n let headers = new HttpHeaders();\n headers = headers.set('fetch', 'true');\n if (originalHeaderValues) {\n Object.entries(originalHeaderValues).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n headers = headers.set(key, value);\n }\n });\n }\n if (serverRequest) {\n Object.entries(serverRequest.headers).forEach(([key, value]) => {\n if (value !== null && value !== undefined && typeof value === 'string') {\n headers = headers.set(key, value);\n }\n });\n }\n return headers;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXJlcXVlc3QtaGVhZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgtYW5ndWxhci9zcmMvZnVuY3Rpb25zL3V0aWxzL2dldC1yZXF1ZXN0LWhlYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR25ELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsYUFBbUMsRUFDbkMsb0JBQW1FO0lBRW5FLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM1RCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1ZXN0IH0gZnJvbSAnQGFuYWxvZ2pzL3JvdXRlci90b2tlbnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEhlYWRlcnMoXG4gIHNlcnZlclJlcXVlc3Q6IFNlcnZlclJlcXVlc3QgfCBudWxsLFxuICBvcmlnaW5hbEhlYWRlclZhbHVlcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB9XG4pIHtcbiAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdmZXRjaCcsICd0cnVlJyk7XG5cbiAgaWYgKG9yaWdpbmFsSGVhZGVyVmFsdWVzKSB7XG4gICAgT2JqZWN0LmVudHJpZXMob3JpZ2luYWxIZWFkZXJWYWx1ZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlcnZlclJlcXVlc3QpIHtcbiAgICBPYmplY3QuZW50cmllcyhzZXJ2ZXJSZXF1ZXN0LmhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG4iXX0=","import { DOCUMENT, effect, inject, Injectable, PLATFORM_ID, } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { isPlatformBrowser } from '@angular/common';\nimport { httpResource } from '@angular/common/http';\nimport { transformUserFromProvider, } from './functions/user-transformer';\nimport { getRequestHeaders } from './functions/utils/get-request-headers';\nimport { injectRequest } from '@analogjs/router/tokens';\nimport * as i0 from \"@angular/core\";\n/**\n * Auth service for BFF (Backend for Frontend) authentication pattern\n * Uses server-side sessions with Auth0 instead of client-side tokens\n */\nexport class AuthService {\n router = inject(Router);\n platformId = inject(PLATFORM_ID);\n document = inject(DOCUMENT);\n httpRequest = injectRequest();\n checkAuthInterval = null;\n // Auth state - order matters: isAuthenticatedResource and isAuthenticated must be defined first\n isAuthenticatedResource = httpResource(() => ({\n url: '/api/auth/authenticated',\n method: 'GET',\n headers: getRequestHeaders(this.httpRequest, {\n accept: 'application/json',\n }),\n withCredentials: true,\n }), {\n defaultValue: false,\n parse: (value) => {\n return value.authenticated;\n },\n });\n isAuthenticated = this.isAuthenticatedResource.asReadonly().value;\n userResource = httpResource(() => {\n if (this.isAuthenticated()) {\n console.log('userResource called');\n return {\n url: '/api/auth/user',\n method: 'GET',\n headers: getRequestHeaders(this.httpRequest, {\n accept: 'application/json',\n }),\n withCredentials: true,\n };\n }\n return;\n }, {\n defaultValue: null,\n parse: (raw) => {\n return transformUserFromProvider(raw);\n },\n });\n user = this.userResource.asReadonly().value;\n constructor() {\n // Check authentication status on startup\n this.isAuthenticatedResource.reload();\n if (isPlatformBrowser(this.platformId)) {\n // Set up periodic check for authentication status\n this.checkAuthInterval = setInterval(() => {\n this.isAuthenticatedResource.reload();\n }, 5 * 60 * 1000); // Check every 5 minutes\n }\n effect(() => {\n // Automatically fetch user profile when authenticated\n if (this.isAuthenticated()) {\n this.userResource.reload();\n }\n });\n }\n ngOnDestroy() {\n if (this.checkAuthInterval) {\n clearInterval(this.checkAuthInterval);\n }\n }\n /**\n * Login the user by redirecting to the login endpoint\n * @param targetUrl Optional URL to redirect to after login\n */\n login(targetUrl) {\n if (isPlatformBrowser(this.platformId)) {\n const redirectUri = targetUrl || this.router.url;\n const url = this.document.location.origin + redirectUri;\n this.document.location.href = `/api/auth/login?redirect_uri=${encodeURIComponent(url)}`;\n }\n }\n /**\n * Logout the user by redirecting to the logout endpoint\n */\n logout() {\n if (isPlatformBrowser(this.platformId)) {\n try {\n const logoutUrl = `/api/auth/logout?redirect_uri=${encodeURIComponent('/')}`;\n // Clear local state before redirect\n this.userResource.set(null);\n if (this.checkAuthInterval) {\n clearInterval(this.checkAuthInterval);\n }\n this.document.location.href = logoutUrl;\n }\n catch (error) {\n console.error('Logout failed:', error);\n // Implement fallback logout mechanism\n }\n }\n }\n /**\n * Check if user has the required roles\n * @param roles Array of roles to check\n */\n hasRoles(roles) {\n const user = this.userResource.value();\n if (!user || !user.roles)\n return false;\n return roles.some((role) => user.roles?.lastIndexOf(role) !== -1);\n }\n static ɵfac = function AuthService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AuthService)(); };\n static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AuthService, factory: AuthService.ɵfac });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AuthService, [{\n type: Injectable\n }], () => [], null); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC1hbmd1bGFyL3NyYy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFFVixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBRUwseUJBQXlCLEdBQzFCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWtCeEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFDZCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixXQUFXLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDOUIsaUJBQWlCLEdBQTBDLElBQUksQ0FBQztJQUV4RSxnR0FBZ0c7SUFDdkYsdUJBQXVCLEdBQUcsWUFBWSxDQUM3QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ0wsR0FBRyxFQUFFLHlCQUF5QjtRQUM5QixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzNDLE1BQU0sRUFBRSxrQkFBa0I7U0FDM0IsQ0FBQztRQUNGLGVB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QyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDM0IsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDMUMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdkMsc0NBQXNDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUFlO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFdkMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7cUdBM0hVLFdBQVc7Z0VBQVgsV0FBVyxXQUFYLFdBQVc7O2lGQUFYLFdBQVc7Y0FEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERPQ1VNRU5ULFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaHR0cFJlc291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgR2VuZXJpY1VzZXJJbmZvLFxuICB0cmFuc2Zvcm1Vc2VyRnJvbVByb3ZpZGVyLFxufSBmcm9tICcuL2Z1bmN0aW9ucy91c2VyLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi9mdW5jdGlvbnMvdXRpbHMvZ2V0LXJlcXVlc3QtaGVhZGVycyc7XG5pbXBvcnQgeyBpbmplY3RSZXF1ZXN0IH0gZnJvbSAnQGFuYWxvZ2pzL3JvdXRlci90b2tlbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhVc2VyIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgZnVsbE5hbWU6IHN0cmluZztcbiAgZ2l2ZW5OYW1lOiBzdHJpbmc7XG4gIGZhbWlseU5hbWU6IHN0cmluZztcbiAgcGljdHVyZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpZWQ/OiBib29sZWFuO1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIGxhc3RMb2dpbj86IHN0cmluZztcbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIGF1dGhfaWQ/OiBzdHJpbmc7XG4gIHJvbGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQXV0aCBzZXJ2aWNlIGZvciBCRkYgKEJhY2tlbmQgZm9yIEZyb250ZW5kKSBhdXRoZW50aWNhdGlvbiBwYXR0ZXJuXG4gKiBVc2VzIHNlcnZlci1zaWRlIHNlc3Npb25zIHdpdGggQXV0aDAgaW5zdGVhZCBvZiBjbGllbnQtc2lkZSB0b2tlbnNcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgaHR0cFJlcXVlc3QgPSBpbmplY3RSZXF1ZXN0KCk7XG4gIHByaXZhdGUgY2hlY2tBdXRoSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEF1dGggc3RhdGUgLSBvcmRlciBtYXR0ZXJzOiBpc0F1dGhlbnRpY2F0ZWRSZXNvdXJjZSBhbmQgaXNBdXRoZW50aWNhdGVkIG11c3QgYmUgZGVmaW5lZCBmaXJzdFxuICByZWFkb25seSBpc0F1dGhlbnRpY2F0ZWRSZXNvdXJjZSA9IGh0dHBSZXNvdXJjZTxib29sZWFuPihcbiAgICAoKSA9PiAoe1xuICAgICAgdXJsOiAnL2FwaS9hdXRoL2F1dGhlbnRpY2F0ZWQnLFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IGdldFJlcXVlc3RIZWFkZXJzKHRoaXMuaHR0cFJlcXVlc3QsIHtcbiAgICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KSxcbiAgICB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgcGFyc2U6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIHsgYXV0aGVudGljYXRlZDogYm9vbGVhbiB9KS5hdXRoZW50aWNhdGVkO1xuICAgICAgfSxcbiAgICB9XG4gICk7XG5cbiAgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWRSZXNvdXJjZS5hc1JlYWRvbmx5KCkudmFsdWU7XG5cbiAgcmVhZG9ubHkgdXNlclJlc291cmNlID0gaHR0cFJlc291cmNlPEF1dGhVc2VyIHwgbnVsbD4oXG4gICAgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3VzZXJSZXNvdXJjZSBjYWxsZWQnKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVybDogJy9hcGkvYXV0aC91c2VyJyxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgIGhlYWRlcnM6IGdldFJlcXVlc3RIZWFkZXJzKHRoaXMuaHR0cFJlcXVlc3QsIHtcbiAgICAgICAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIHBhcnNlOiAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Vc2VyRnJvbVByb3ZpZGVyKHJhdyBhcyBHZW5lcmljVXNlckluZm8pO1xuICAgICAgfSxcbiAgICB9XG4gICk7XG5cbiAgcmVhZG9ubHkgdXNlciA9IHRoaXMudXNlclJlc291cmNlLmFzUmVhZG9ubHkoKS52YWx1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvbiBzdGF0dXMgb24gc3RhcnR1cFxuICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkUmVzb3VyY2UucmVsb2FkKCk7XG5cbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgLy8gU2V0IHVwIHBlcmlvZGljIGNoZWNrIGZvciBhdXRoZW50aWNhdGlvbiBzdGF0dXNcbiAgICAgIHRoaXMuY2hlY2tBdXRoSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkUmVzb3VyY2UucmVsb2FkKCk7XG4gICAgICB9LCA1ICogNjAgKiAxMDAwKTsgLy8gQ2hlY2sgZXZlcnkgNSBtaW51dGVzXG4gICAgfVxuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgZmV0Y2ggdXNlciBwcm9maWxlIHdoZW4gYXV0aGVudGljYXRlZFxuICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgdGhpcy51c2VyUmVzb3VyY2UucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja0F1dGhJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQXV0aEludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9naW4gdGhlIHVzZXIgYnkgcmVkaXJlY3RpbmcgdG8gdGhlIGxvZ2luIGVuZHBvaW50XG4gICAqIEBwYXJhbSB0YXJnZXRVcmwgT3B0aW9uYWwgVVJMIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ2luXG4gICAqL1xuICBsb2dpbih0YXJnZXRVcmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSB0YXJnZXRVcmwgfHwgdGhpcy5yb3V0ZXIudXJsO1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4gKyByZWRpcmVjdFVyaTtcbiAgICAgIHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGAvYXBpL2F1dGgvbG9naW4/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICB1cmxcbiAgICAgICl9YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9nb3V0IHRoZSB1c2VyIGJ5IHJlZGlyZWN0aW5nIHRvIHRoZSBsb2dvdXQgZW5kcG9pbnRcbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbG9nb3V0VXJsID0gYC9hcGkvYXV0aC9sb2dvdXQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgICcvJ1xuICAgICAgICApfWA7XG4gICAgICAgIC8vIENsZWFyIGxvY2FsIHN0YXRlIGJlZm9yZSByZWRpcmVjdFxuICAgICAgICB0aGlzLnVzZXJSZXNvdXJjZS5zZXQobnVsbCk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQXV0aEludGVydmFsKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQXV0aEludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsb2dvdXRVcmw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdMb2dvdXQgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgLy8gSW1wbGVtZW50IGZhbGxiYWNrIGxvZ291dCBtZWNoYW5pc21cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBoYXMgdGhlIHJlcXVpcmVkIHJvbGVzXG4gICAqIEBwYXJhbSByb2xlcyBBcnJheSBvZiByb2xlcyB0byBjaGVja1xuICAgKi9cbiAgaGFzUm9sZXMocm9sZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlclJlc291cmNlLnZhbHVlKCk7XG4gICAgaWYgKCF1c2VyIHx8ICF1c2VyLnJvbGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gcm9sZXMuc29tZSgocm9sZSkgPT4gdXNlci5yb2xlcz8ubGFzdEluZGV4T2Yocm9sZSkgIT09IC0xKTtcbiAgfVxufVxuIl19","import { makeEnvironmentProviders } from '@angular/core';\nimport { AuthService } from './auth.service';\nexport function provideAuthClient() {\n return makeEnvironmentProviders([AuthService]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgtYW5ndWxhci9zcmMvYXV0aC5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU8sd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRoQ2xpZW50KCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbQXV0aFNlcnZpY2VdKTtcbn1cbiJdfQ==","import { Router } from '@angular/router';\nimport { inject } from '@angular/core';\nimport { AuthService } from './auth.service';\n/**\n * Auth guard that checks if the user is authenticated\n */\nexport const authGuard = (route, state) => {\n const authService = inject(AuthService);\n if (authService.isAuthenticated()) {\n // User is authenticated, allow access\n return true;\n }\n else {\n // User is not authenticated, redirect to login\n authService.login(state.url);\n return false;\n }\n};\n/**\n * Role-based guard that checks if the user has the required roles\n */\nexport const roleGuard = (route, state) => {\n const authService = inject(AuthService);\n const router = inject(Router);\n // Get required roles from route data\n const requiredRoles = route.data?.['roles'];\n if (!requiredRoles || requiredRoles.length === 0) {\n // No specific roles required\n return true;\n }\n if (!authService.isAuthenticated()) {\n authService.login(state.url);\n return false;\n }\n // Check if user has any of the required roles\n if (authService.hasRoles(requiredRoles)) {\n return true;\n }\n // User doesn't have required roles, redirect to access denied\n router.navigate(['/access-denied']);\n return false;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgtYW5ndWxhci9zcmMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUNsQyxzQ0FBc0M7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLCtDQUErQztRQUMvQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDdkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixxQ0FBcUM7SUFDckMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBeUIsQ0FBQztJQUVwRSxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUNuQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsOERBQThEO0lBQzlELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuLyoqXG4gKiBBdXRoIGd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChyb3V0ZSwgc3RhdGUpID0+IHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXG4gIGlmIChhdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgIC8vIFVzZXIgaXMgYXV0aGVudGljYXRlZCwgYWxsb3cgYWNjZXNzXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlciBpcyBub3QgYXV0aGVudGljYXRlZCwgcmVkaXJlY3QgdG8gbG9naW5cbiAgICBhdXRoU2VydmljZS5sb2dpbihzdGF0ZS51cmwpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBSb2xlLWJhc2VkIGd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSB1c2VyIGhhcyB0aGUgcmVxdWlyZWQgcm9sZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHJvbGVHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChyb3V0ZSwgc3RhdGUpID0+IHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAvLyBHZXQgcmVxdWlyZWQgcm9sZXMgZnJvbSByb3V0ZSBkYXRhXG4gIGNvbnN0IHJlcXVpcmVkUm9sZXMgPSByb3V0ZS5kYXRhPy5bJ3JvbGVzJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKCFyZXF1aXJlZFJvbGVzIHx8IHJlcXVpcmVkUm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gTm8gc3BlY2lmaWMgcm9sZXMgcmVxdWlyZWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICBhdXRoU2VydmljZS5sb2dpbihzdGF0ZS51cmwpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHVzZXIgaGFzIGFueSBvZiB0aGUgcmVxdWlyZWQgcm9sZXNcbiAgaWYgKGF1dGhTZXJ2aWNlLmhhc1JvbGVzKHJlcXVpcmVkUm9sZXMpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBVc2VyIGRvZXNuJ3QgaGF2ZSByZXF1aXJlZCByb2xlcywgcmVkaXJlY3QgdG8gYWNjZXNzIGRlbmllZFxuICByb3V0ZXIubmF2aWdhdGUoWycvYWNjZXNzLWRlbmllZCddKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==","export function redirect(uri) {\n document.location.href = uri;\n}\nexport function login(redirectUri) {\n const url = document.location.origin + (redirectUri || '');\n redirect(`/api/auth/login?redirect_uri=${encodeURIComponent(url)}`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoLWFuZ3VsYXIvc3JjL2Z1bmN0aW9ucy9sb2dpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVc7SUFDbEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFDLFdBQW9CO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELFFBQVEsQ0FBQyxnQ0FBZ0Msa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmVkaXJlY3QodXJpOiBzdHJpbmcpIHtcbiAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHVyaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luKHJlZGlyZWN0VXJpPzogc3RyaW5nKSB7XG4gIGNvbnN0IHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbiArIChyZWRpcmVjdFVyaSB8fCAnJyk7XG4gIHJlZGlyZWN0KGAvYXBpL2F1dGgvbG9naW4/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCk7XG59XG4iXX0=","import { HttpHeaders } from '@angular/common/http';\nexport function mergeRequest(originalRequest, serverRequest) {\n let modifiedReq;\n if (serverRequest) {\n let headers = new HttpHeaders();\n Object.entries(serverRequest.headers).forEach(([key, value]) => {\n if (value !== null && value !== undefined && typeof value === 'string') {\n headers = headers.set(key, value);\n }\n });\n headers = headers.set('fetch', 'true');\n modifiedReq = originalRequest.clone({\n headers: headers,\n withCredentials: true,\n });\n }\n else {\n modifiedReq = originalRequest.clone({\n headers: originalRequest.headers.set('fetch', 'true'),\n withCredentials: true,\n });\n }\n return modifiedReq;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtcmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgtYW5ndWxhci9zcmMvZnVuY3Rpb25zL3V0aWxzL21lcmdlLXJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBR2hFLE1BQU0sVUFBVSxZQUFZLENBQzFCLGVBQXFDLEVBQ3JDLGFBQW1DO0lBRW5DLElBQUksV0FBVyxDQUFDO0lBRWhCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzdELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN2RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZDLFdBQVcsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ04sV0FBVyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDbEMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDckQsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1ZXN0IH0gZnJvbSAnQGFuYWxvZ2pzL3JvdXRlci90b2tlbnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZXF1ZXN0KFxuICBvcmlnaW5hbFJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICBzZXJ2ZXJSZXF1ZXN0OiBTZXJ2ZXJSZXF1ZXN0IHwgbnVsbFxuKSB7XG4gIGxldCBtb2RpZmllZFJlcTtcblxuICBpZiAoc2VydmVyUmVxdWVzdCkge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgT2JqZWN0LmVudHJpZXMoc2VydmVyUmVxdWVzdC5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnZmV0Y2gnLCAndHJ1ZScpO1xuXG4gICAgbW9kaWZpZWRSZXEgPSBvcmlnaW5hbFJlcXVlc3QuY2xvbmUoe1xuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBtb2RpZmllZFJlcSA9IG9yaWdpbmFsUmVxdWVzdC5jbG9uZSh7XG4gICAgICBoZWFkZXJzOiBvcmlnaW5hbFJlcXVlc3QuaGVhZGVycy5zZXQoJ2ZldGNoJywgJ3RydWUnKSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtb2RpZmllZFJlcTtcbn1cbiJdfQ==","import { HttpErrorResponse } from '@angular/common/http';\nimport { catchError, EMPTY } from 'rxjs';\nimport { login } from './functions/login';\nimport { injectRequest } from '@analogjs/router/tokens';\nimport { mergeRequest } from './functions/utils/merge-request';\n/**\n * HTTP interceptor that:\n * 1. Adds a fetch=true header to indicate fresh data requests\n * 2. Redirects to login page when an API returns a 401 Unauthorized response\n *\n * This handles cases where a session has expired on the server-side.\n */\nexport const authInterceptor = (req, next) => {\n // Skip interception for auth endpoints to avoid circular issues\n i