---
title: modules/aiServices/service | proxy | file
---
stateDiagram
state if_IsNotAllowedIP <<choice>>
state if_NotExistApiKey <<choice>>
state if_NotExistServiceName <<choice>>
state if_NotExistValidApiService <<choice>>
state if_NotExistValidApiApiKey <<choice>>
state if_ApiKey_MaxCount <<choice>>
state if_ApiKey_ExpireDate <<choice>>
state if_ApiKey_IsValid <<choice>>
state if_ApiKey_IsValid <<choice>>
state if_ApiKey_IsValid <<choice>>
state if_Result_IsValid_APIs <<choice>>
state if_accessAiService_maxCount <<choice>>
state if_accessAiService_TPM <<choice>>
state if_saveFile <<choice>>
state if_base64 <<choice>>
state if_link <<choice>>
[*] --> request
request --> Request: HandleRequestOfFile
state ErrorBox {
exceptions --> if_IsNotAllowedIP: IsNotAllowedIP
if_IsNotAllowedIP --> API_KEY_REQUIRED
if_IsNotAllowedIP --> if_NotExistApiKey: IsNotAllowedIP
if_NotExistApiKey --> API_KEY_REQUIRED
exceptions --> if_NotExistServiceName: NotExistServiceName
if_NotExistServiceName --> SERVICE_NOT_FOUND
}
state Handlers {
handleFileRequest
handleNonFileRequest
handleSRTProxyRequest
grpcHandler
websocketHandler
}
Handlers --> Request
state Request {
checkApi --> adjustServiceAndBaseName : 1
adjustServiceAndBaseName --> ErrorBox: CheckUp
checkApi --> getAccessAiService : 2
getAccessAiService --> validateAccessAiService : 2-1
validateAccessAiService --> validateApiMethods : 2-2
validateApiMethods --> checkValidApis
checkValidApis --> ResultOfCheckValidApis : EQ Result With isValidApi
if_NotExistValidApiService --> NOT_FOUND_ROUTE_ERROR : NotExistValidApiService
ResultOfCheckValidApis --> if_NotExistValidApiService : 2-3
if_NotExistValidApiApiKey --> NOT_ALLOW_API : NotExistValidApiApiKey
ResultOfCheckValidApis --> if_NotExistValidApiApiKey : 2-4
checkValidApis --> validateAccessAiService : 2-5
validateAccessAiService --> ApiKey
ApiKey --> if_ApiKey_MaxCount
if_ApiKey_MaxCount --> COUNT_API_KEY_ZERO : maxCount< 1
ApiKey --> if_ApiKey_ExpireDate
if_ApiKey_ExpireDate --> API_KEY_EXPIRE : expireDate < dateNow
ApiKey --> if_ApiKey_IsValid
if_ApiKey_IsValid --> API_KEY_INVALID : IsNotValid
checkValidApis --> validateApiMethods
checkValidApis --> checkValidApis : for(api of apis) && isValidApi
checkApi --> getServiceInfo : 3
getServiceInfo --> checkValidServices : only POSTs
checkValidServices --> Files: accessAiService.files = Result of checking
checkApi --> isFileRequest : 4
checkApi --> validateMaxCountTpm : 5
validateMaxCountTpm --> if_accessAiService_maxCount: 5-1
validateMaxCountTpm --> if_accessAiService_TPM : 5-2
if_accessAiService_maxCount --> COUNT_API_MAX_COUNT_ZERO : accessAiService.maxCount == 0
validateMaxCountTpm --> getCountTmp
getCountTmp --> redis : Filter count 10 of '{accessAiService.id} *' Else 0
getCountTmp --> if_accessAiService_TPM : countTpm
if_accessAiService_TPM --> MAX_COUNT_TPM_INVALID : countTpm >= accessAiService.TPM
checkApi --> saveFile : 6
saveFile --> if_saveFile : for (file of files)
if_saveFile --> next : req.requestType == 'proxy'
next --> [*]
if_saveFile --> saveFile : req.requestType == 'file'
if_saveFile --> if_base64
if_base64 --> saveBase64: howGet == base64
if_saveFile --> if_link
if_link --> saveLink: howGet == link
saveLink --> save : axios.sendRequest
saveBase64 --> save : Buffer.from(req.body[name], 'base64')
save --> assets/uploads : Write To path of assets/uploads
assets/uploads --> next
}
handleSRTProxyRequest --> proxyRequest : axios.sendRequest(config)
handleSRTProxyRequest --> Response
handleNonFileRequest --> Response
handleFileRequest --> Response
proxyRequest --> buildRequestOptions
handleNonFileRequest --> buildRequestOptions
handleFileRequest --> buildRequestOptions
grpcHandler --> RemoteService
RemoteService --> sendFileSpeech
grpcHandler --> RemoteService
RemoteService --> checkServerHealth
websocketHandler --> createMessage
Request --> Response
state Response {
aiTimeProcessing --> SaveToGatewayLogData: 1 aiTimeProcessing=res-req
updateCounts
}
state redis{
generateRedisKey --> setRedisKey : key of ApiIdPluseRandom of val New Data
}
Response --> redis
Response --> [*]