extends Node const CHARACTER_API_URL := "https://pcharacter.ranaze.com/api/Characters" func list_characters() -> Dictionary: return await _request(HTTPClient.METHOD_GET, CHARACTER_API_URL) func create_character(character_name: String) -> Dictionary: var payload := JSON.stringify({ "name": character_name }) return await _request(HTTPClient.METHOD_POST, CHARACTER_API_URL, payload) func delete_character(character_id: String) -> Dictionary: var url := "%s/%s" % [CHARACTER_API_URL, character_id] return await _request(HTTPClient.METHOD_DELETE, url) func _request(method: int, url: String, body: String = "") -> Dictionary: var request := HTTPRequest.new() add_child(request) var headers := PackedStringArray() if not AuthState.access_token.is_empty(): headers.append("Authorization: Bearer %s" % AuthState.access_token) if method == HTTPClient.METHOD_POST or method == HTTPClient.METHOD_PUT: headers.append("Content-Type: application/json") var err := request.request(url, headers, method, body) if err != OK: request.queue_free() return { "ok": false, "status": 0, "error": "Failed to send request (%s)." % err, "body": "" } var result: Array = await request.request_completed request.queue_free() var result_code: int = result[0] var response_code: int = result[1] var response_body: String = result[3].get_string_from_utf8() if result_code != HTTPRequest.RESULT_SUCCESS: return { "ok": false, "status": response_code, "error": "Network error (%s)." % result_code, "body": response_body } return { "ok": response_code >= 200 and response_code < 300, "status": response_code, "error": "", "body": response_body }