88
99from pygls import uris
1010
11+ from codeflash .api .cfapi import get_user_id
12+ from codeflash .code_utils .shell_utils import save_api_key_to_rc
1113from codeflash .either import is_successful
1214from codeflash .lsp .server import CodeflashLanguageServer , CodeflashLanguageServerProtocol
1315
@@ -28,6 +30,11 @@ class FunctionOptimizationParams:
2830 functionName : str # noqa: N815
2931
3032
33+ @dataclass
34+ class ProvideApiKeyParams :
35+ api_key : str
36+
37+
3138server = CodeflashLanguageServer ("codeflash-language-server" , "v1.0" , protocol_cls = CodeflashLanguageServerProtocol )
3239
3340
@@ -118,6 +125,40 @@ def discover_function_tests(server: CodeflashLanguageServer, params: FunctionOpt
118125 return {"functionName" : params .functionName , "status" : "success" , "discovered_tests" : num_discovered_tests }
119126
120127
128+ @server .feature ("apiKeyExistsAndValid" )
129+ def check_api_key (_server : CodeflashLanguageServer , _params : any ) -> dict [str , str ]:
130+ try :
131+ user_id = get_user_id ()
132+ if user_id is None :
133+ return {"status" : "error" , "message" : "api key not found or invalid" }
134+
135+ from codeflash .optimization .optimizer import Optimizer
136+
137+ server .optimizer = Optimizer (server .args )
138+ return {"status" : "success" , "user_id" : user_id } # noqa
139+ except Exception :
140+ return {"status" : "error" , "message" : "something went wrong while validating the api key" }
141+
142+
143+ @server .feature ("provideApiKey" )
144+ def provide_api_key (server : CodeflashLanguageServer , params : ProvideApiKeyParams ) -> dict [str , str ]:
145+ try :
146+ api_key = params .api_key
147+ result = save_api_key_to_rc (api_key )
148+ if not is_successful (result ):
149+ return {"status" : "error" , "message" : result .failure ()}
150+ user_id = get_user_id ()
151+ if user_id is None :
152+ return {"status" : "error" , "message" : "api key is not valid" }
153+
154+ from codeflash .optimization .optimizer import Optimizer
155+
156+ server .optimizer = Optimizer (server .args )
157+ return {"status" : "success" , "message" : "Api key saved successfully" , "user_id" : user_id } # noqa: TRY300
158+ except Exception :
159+ return {"status" : "error" , "message" : "something went wrong while saving the api key" }
160+
161+
121162@server .feature ("prepareOptimization" )
122163def prepare_optimization (server : CodeflashLanguageServer , params : FunctionOptimizationParams ) -> dict [str , str ]:
123164 current_function = server .optimizer .current_function_being_optimized
0 commit comments