{"nodes": [{"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "label": "auth_service.py", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L1"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "label": "_hash_token()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L22", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "label": "AuthService", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L28", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_init", "label": ".__init__()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L29", "_callable": true}, {"id": "userrepository", "label": "UserRepository", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "refreshtokenrepository", "label": "RefreshTokenRepository", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "passwordhasher", "label": "PasswordHasher", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "tokenservice", "label": "TokenService", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "label": ".login()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L42", "_callable": true}, {"id": "tokenpair", "label": "TokenPair", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "label": ".refresh()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L59", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_logout", "label": ".logout()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L74", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "label": ".authenticate_access()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L83", "_callable": true}, {"id": "user", "label": "User", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "label": "._issue_pair()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L92", "_callable": true}, {"id": "uuid", "label": "UUID", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "label": "._persist_refresh()", "file_type": "code", "source_file": "app/application/auth_service.py", "source_location": "L98", "_callable": true}, {"id": "issuedtoken", "label": "IssuedToken", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/application/auth_service.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_rationale_1", "label": "Authentication use cases: login, token refresh (rotation), logout, and access-to", "file_type": "rationale", "source_file": "app/application/auth_service.py", "source_location": "L1"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_rationale_23", "label": "At-rest hash of a refresh token. A signed JWT is high-entropy, so a fast SHA", "file_type": "rationale", "source_file": "app/application/auth_service.py", "source_location": "L23"}], "edges": [{"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "hashlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L8", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L9", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "app_domain_entities", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L11", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "app_domain_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L12", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "app_domain_ports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L13", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "app_domain_tokens", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L19", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L22", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L28", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L29", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_init", "target": "userrepository", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L29", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_init", "target": "refreshtokenrepository", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L29", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_init", "target": "passwordhasher", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L29", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_init", "target": "tokenservice", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L29", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L42", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "target": "tokenpair", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L42", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L59", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "target": "tokenpair", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L59", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_logout", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L74", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L83", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "target": "user", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L83", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L92", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "target": "uuid", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L92", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "target": "tokenpair", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L92", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L98", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "target": "uuid", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L98", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "target": "issuedtoken", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L98", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L57", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L72", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L95", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "target": "tokenpair", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L96", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L102", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_rationale_1", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L1", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_rationale_23", "target": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/application/auth_service.py", "source_location": "L23", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "callee": "hexdigest", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L25", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "callee": "sha256", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L25", "receiver": "hashlib"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_hash_token", "callee": "encode", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L25", "receiver": "encoded"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "callee": "get_credentials_by_username", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L43", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L47", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "callee": "verify_and_update", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L49", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L51", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L53", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_login", "callee": "set_password_hash", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L55", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "decode", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L60", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L62", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "is_valid", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L63", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L64", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "get_by_id", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L66", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L68", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_refresh", "callee": "revoke", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L71", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_logout", "callee": "decode", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L77", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_logout", "callee": "revoke", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L81", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "callee": "decode", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L84", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L86", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "callee": "get_by_id", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L87", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_authenticate_access", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/application/auth_service.py", "source_location": "L89", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "callee": "issue", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L93", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_issue_pair", "callee": "issue", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L94", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_application_auth_service_authservice_persist_refresh", "callee": "add", "is_member_call": true, "source_file": "app/application/auth_service.py", "source_location": "L99", "receiver": null}]}