package Ġcom . nim bus framework . nim bus aws . cloudformation . model . resource . websocket Ċ Ċ import Ġcom . nim bus framework . nim bus aws . cloudformation . model . resource . Resource Ċ import Ġcom . nim bus framework . nim bus aws . cloudformation . model . resource . function . Function Trigger Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . nim bus framework . nim bus core . pers isted . Nim bus State Ċ Ċ class ĠWebSocket Api ( ĊĠĠĠĠĠĠĠ Ġn im bus State : ĠNim bus State , ĊĠĠĠĠĠĠĠ Ġstage : ĠString Ċ ): ĠResource ( nim bus State , Ġstage ), ĠFunction Trigger Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Trigger Type (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" apigateway ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Trigger Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" WebSocket " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Trigger Arn (): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJsonObject () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Websocket Api " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġto Cloud Formation (): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweb Socket Api Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġweb Socket Api . addProperty (" Type ", Ġ" AWS :: Api Gateway V 2 :: Api ") ĊĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= Ġget Properties () ĊĠĠĠĠĠĠĠ Ġproperties . addProperty (" Name ", Ġn im bus State . projectName Ġ+ Ġ"-" Ġ+ Ġstage Ġ+ Ġ"-" Ġ+ Ġ" WebSocket ") ĊĠĠĠĠĠĠĠ Ġproperties . addProperty (" Protocol Type ", Ġ" WEB SOCKET ") ĊĠĠĠĠĠĠĠ Ġproperties . addProperty (" Route Selection Expression ", Ġ"\ $ request . body . topic ") ĊĊĠĠĠĠĠĠĠ Ġweb Socket Api . add (" Properties ", Ġproperties ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġweb Socket Api ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Endpoint (): ĠJsonObject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġjoin Values Ġ= ĠJson Array () ĊĠĠĠĠĠĠĠ Ġjoin Values . add (" https :// ") ĊĠĠĠĠĠĠĠ Ġjoin Values . add ( get Ref ()) ĊĠĠĠĠĠĠĠ Ġjoin Values . add (". execute - api .") ĊĠĠĠĠĠĠĠ Ġjoin Values . add ( get Region ()) ĊĠĠĠĠĠĠĠ Ġjoin Values . add (". amazonaws . com /$ stage ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjoin Json ("", Ġjoin Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Arn ( suffix : ĠString ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Arn Ġ= Ġ" arn : aws : execute - api :\ ${ AWS :: Region } :\ ${ AWS :: AccountId } :\ ${ ${ getName ()}} $ suffix " ĊĠĠĠĠĠĠĠ Ġreturn Ġsub Func ( str Arn ) ĊĠĠĠ Ġ} Ċ } Ċ